diff options
Diffstat (limited to '')
108 files changed, 9369 insertions, 0 deletions
diff --git a/2025/info/authoring-after.md b/2025/info/authoring-after.md new file mode 100644 index 00000000..25e66b40 --- /dev/null +++ b/2025/info/authoring-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%20authoring%3A%20How%20Emacs%20became%20my%20authoring%20playground%E2%80%94no%20Lisp%20required) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/authoring-before.md b/2025/info/authoring-before.md new file mode 100644 index 00000000..98b88670 --- /dev/null +++ b/2025/info/authoring-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 2025-12-06. 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="authoring"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(11,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-babel</text></g></a><a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:50 Emacs as a fully-fledged reference manager</title><rect x="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reference</text></g></a><a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:10-10:30 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="96" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(121,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gmail</text></g></a><a href="/2025/talks/languages" title="Studying foreign languages with Emacs, Org Mode and gptel" data-slug="languages"><title>10:40-10:50 Studying foreign languages with Emacs, Org Mode and gptel</title><rect x="137" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(148,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">languages</text></g></a><a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:10-11:30 LaTeX export in org-mode: the overhaul</title><rect x="178" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(203,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">latex</text></g></a><a href="/2025/talks/bibliography" title="An enhanced bibliography in org-mode for scientific research and self-directed learning" data-slug="bibliography"><title> 1:00- 1:20 An enhanced bibliography in org-mode for scientific research and self-directed learning</title><rect x="329" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(354,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">bibliography</text></g></a><a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:40- 1:50 Basic Calc functionality for engineering or electronics</title><rect x="384" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(395,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">calc</text></g></a><a href="/2025/talks/authoring" title="How Emacs became my authoring playground—no Lisp required" data-slug="authoring"><title> 2:00- 2:10 How Emacs became my authoring playground—no Lisp required</title><rect stroke-width="3" x="411" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(422,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">authoring</text></g></a><a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 2:30- 2:50 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="452" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(477,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee-lcnt</text></g></a><a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 3:10- 3:20 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="507" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(518,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">greader</text></g></a><a href="/2025/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 3:30- 3:40 Saturday closing remarks</title><rect x="535" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(546,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:45 One year progress update Schemacs (formerly Gypsum)</title><rect x="41" y="75" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(59,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">schemacs</text></g></a><a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:05-10:25 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="89" y="75" opacity="0.5" width="27" 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)">juicemacs</text></g></a><a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:35-10:55 Swanky Python: Interactive development for Python</title><rect x="130" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(155,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">swanky</text></g></a><a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:05-11:25 Interactive Python programming in Emacs</title><rect x="171" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(196,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">python</text></g></a><a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:20 Emacs, editors, and LLM driven workflows</title><rect x="329" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(354,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:40- 2:00 Emacs and private AI: a great match</title><rect x="384" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(409,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">private-ai</text></g></a><a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:20- 2:40 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="439" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(464,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">commonlisp</text></g></a><a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 2:50- 3:10 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="480" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(505,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">graphics</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(82,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(164,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(247,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(329,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(411,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(494,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(576,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" 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/2025/current/bbb-authoring.html> +Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf) +Status: Waiting for video from speaker +<div>Times in different time zones:</div><div class="times" start="2025-12-06T19:00:00Z" end="2025-12-06T19:10:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~2:00 PM - 2:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~1:00 PM - 1:10 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~12:00 PM - 12:10 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~11:00 AM - 11:10 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~7:00 PM - 7:10 PM UTC <br />Saturday, Dec 6 2025, ~8:00 PM - 8:10 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~9:00 PM - 9:10 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~12:30 AM - 12:40 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~3:00 AM - 3:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~4:00 AM - 4:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/authoring-nav.md b/2025/info/authoring-nav.md new file mode 100644 index 00000000..f547b494 --- /dev/null +++ b/2025/info/authoring-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a> +Next by time: <a href="/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/bibliography-after.md b/2025/info/bibliography-after.md new file mode 100644 index 00000000..4254a9da --- /dev/null +++ b/2025/info/bibliography-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [blaine-mooers@ouhsc.edu](mailto:blaine-mooers@ouhsc.edu?subject=Comment%20for%20EmacsConf%202023%20bibliography%3A%20An%20enhanced%20bibliography%20in%20org-mode%20for%20scientific%20research%20and%20self-directed%20learning) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/bibliography-before.md b/2025/info/bibliography-before.md new file mode 100644 index 00000000..7bb2a78d --- /dev/null +++ b/2025/info/bibliography-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 2025-12-06. 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="bibliography"> +<svg width="700" 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="700" 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/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(11,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="https://emacsconf.org/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-babel</text></g></a><a href="https://emacsconf.org/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title><rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(73,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reference</text></g></a><a href="https://emacsconf.org/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(134,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gmail</text></g></a><a href="https://emacsconf.org/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"><title>10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title><rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(182,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gnus</text></g></a><a href="https://emacsconf.org/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:25-11:45 LaTeX export in org-mode: the overhaul</title><rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(224,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">latex</text></g></a><a href="https://emacsconf.org/2025/talks/bibliography" title="An enhanced bibliography in org-mode for scientific research and self-directed learning" data-slug="bibliography"><title> 1:00- 1:20 An enhanced bibliography in org-mode for scientific research and self-directed learning</title><rect stroke-width="3" x="329" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(354,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">bibliography</text></g></a><a href="https://emacsconf.org/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:40- 2:05 Basic Calc functionality for engineering or electronics</title><rect x="384" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(416,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">calc</text></g></a><a href="https://emacsconf.org/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 2:15- 2:55 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="432" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(484,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee-lcnt</text></g></a><a href="https://emacsconf.org/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 3:15- 3:25 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="514" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(525,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">greader</text></g></a><a href="https://emacsconf.org/2025/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 3:30- 3:40 Saturday closing remarks</title><rect x="535" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(546,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="https://emacsconf.org/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title><rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(73,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">schemacs</text></g></a><a href="https://emacsconf.org/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(127,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">juicemacs</text></g></a><a href="https://emacsconf.org/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:45-11:10 Swanky Python: Interactive development for Python</title><rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(176,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">swanky</text></g></a><a href="https://emacsconf.org/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:20-11:40 Interactive Python programming in Emacs</title><rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(217,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">python</text></g></a><a href="https://emacsconf.org/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title><rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(361,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="https://emacsconf.org/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:45- 2:05 Emacs and private AI: a great match</title><rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(416,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">private-ai</text></g></a><a href="https://emacsconf.org/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:25- 2:45 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="446" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(471,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">commonlisp</text></g></a><a href="https://emacsconf.org/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 2:55- 3:20 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="487" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(519,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">graphics</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(82,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(164,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(247,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(329,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(411,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(494,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(576,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-bibliography.html> +Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf) +Status: Waiting for video from speaker +<div>Times in different time zones:</div><div class="times" start="2025-12-06T18:00:00Z" end="2025-12-06T18:20:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~1:00 PM - 1:20 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~12:00 PM - 12:20 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~11:00 AM - 11:20 AM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~10:00 AM - 10:20 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~6:00 PM - 6:20 PM UTC <br />Saturday, Dec 6 2025, ~7:00 PM - 7:20 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~8:00 PM - 8:20 PM EET (Europe/Athens)<br />Saturday, Dec 6 2025, ~11:30 PM - 11:50 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~2:00 AM - 2:20 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~3:00 AM - 3:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/bibliography-nav.md b/2025/info/bibliography-nav.md new file mode 100644 index 00000000..ae626eb8 --- /dev/null +++ b/2025/info/bibliography-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a> +Next by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/blee-lcnt-after.md b/2025/info/blee-lcnt-after.md new file mode 100644 index 00000000..8983bcf5 --- /dev/null +++ b/2025/info/blee-lcnt-after.md @@ -0,0 +1,708 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="blee-lcnt-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:05.760" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Greetings. Salaam.""" start="00:00:05.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is Mohsen Banan.""" start="00:00:08.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am a software and internet engineer.""" start="00:00:10.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The title of this presentation""" start="00:00:12.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is "Blee-LCNT: An Emacs Centered""" start="00:00:14.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Content Production and Self-Publication Framework".""" start="00:00:18.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Blee stands for""" start="00:00:23.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ByStar Libre-Halaal Emacs Environment.""" start="00:00:25.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In last year's EmacsConf,""" start="00:00:29.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I introduced Blee, BISOS and ByStar""" start="00:00:31.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as concepts and as foundations.""" start="00:00:36.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This year I want to focus""" start="00:00:39.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on one concrete capability.""" start="00:00:41.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Content Production and Self-Publication""" start="00:00:43.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is a foundational Blee and BISOS Capability Bundle.""" start="00:00:47.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Both this presentation""" start="00:00:54.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the Nature of Polyexistentials book""" start="00:00:55.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""were developed with Blee-LCNT.""" start="00:00:59.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this presentation I want to look at Emacs""" start="00:01:02.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a central ingredient""" start="00:01:06.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for a usage environment""" start="00:01:08.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we can use to orchestrate production of""" start="00:01:10.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""quite fancy multi-media presentations.""" start="00:01:14.920" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Scope: A complete multi-media content processing framework""" start="00:01:20.080" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's consider two different scopes.""" start="00:01:20.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""First, the scope of Blee-LCNT Capabilities Bundle,""" start="00:01:23.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is that of a complete""" start="00:01:27.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""multi-media content authorship,""" start="00:01:29.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""generation, publication""" start="00:01:32.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and distribution framework.""" start="00:01:34.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""That complete scope is presented in this slide""" start="00:01:37.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it spans both black ink""" start="00:01:41.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and violet ink.""" start="00:01:44.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Second, the scope of this presentation,""" start="00:01:46.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is more limited.""" start="00:01:49.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this presentation I confine myself""" start="00:01:52.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to the bullets is violet ink.""" start="00:01:54.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Here, I focus on presentation""" start="00:01:58.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and video as content types""" start="00:02:01.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and their authorship and generation""" start="00:02:03.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and their federated re-publication.""" start="00:02:06.000" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Prior art and similar art""" start="00:02:10.320" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""This is a common topic.""" start="00:02:10.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It makes good sense for us to start with""" start="00:02:12.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a review of prior art and similar art.""" start="00:02:14.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I went through the past EmacsConf talks""" start="00:02:19.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and found a good number of them""" start="00:02:21.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that also deal with the topic""" start="00:02:23.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of content generation.""" start="00:02:26.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A few of these are included""" start="00:02:28.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in black ink in this slide.""" start="00:02:30.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Many of these have chosen the Babel,""" start="00:02:33.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in other words Org-Mode+LaTeX as primary input.""" start="00:02:35.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I prefer the inverse of that.""" start="00:02:40.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I also looked for past talks""" start="00:02:43.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which have used Reveal.js and LaTeX-Beamer.""" start="00:02:45.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For example, Sacha's use of Reveal.js""" start="00:02:50.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is shown in violet inK.""" start="00:02:53.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And Ihor's use of Beamer is in teal ink.""" start="00:02:56.960" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""LaTeX-Beamer + Reveal.js with Blee and BISOS""" start="00:03:02.420" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""This presentation is about a combination""" start="00:03:02.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Reveal.js and LaTeX-Beamer.""" start="00:03:05.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For those who may not be familiar""" start="00:03:08.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with Beamer and Reveal,""" start="00:03:10.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""here is a quick intro.""" start="00:03:12.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Among academics, LaTeX-Beamer is the go-to tool""" start="00:03:14.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for producing presentations.""" start="00:03:19.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Reveal.js is recognized""" start="00:03:22.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as the best of breed""" start="00:03:24.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for dispensing HTML slide decks.""" start="00:03:25.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For many, Reveal and Beamer""" start="00:03:29.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""live in different universes.""" start="00:03:32.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Beamer is pdf oriented""" start="00:03:35.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Reveal is html oriented.""" start="00:03:38.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Combining two powerful tools""" start="00:03:42.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""makes for an even more powerful tool.""" start="00:03:44.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This Blee-LCNT Presentations combines""" start="00:03:48.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the best of LaTeX-Beamer with Reveal.js.""" start="00:03:51.880" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Blee-LCNT novel concepts""" start="00:03:57.160" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Beamer primarily functions as producer""" start="00:03:57.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Reveal functions as dispenser""" start="00:04:00.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and multi-media enhancer.""" start="00:04:03.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Here is how the combination works.""" start="00:04:05.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""LaTeX Beamer pdf result""" start="00:04:08.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is dissected into named frame images""" start="00:04:10.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which can then be inserted in Reveal.js.""" start="00:04:13.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""LaTeX Beamer frames can also be""" start="00:04:18.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""translated into html with HeVeA""" start="00:04:21.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which can also be inserted in Reveal.js.""" start="00:04:24.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Voice-overs for Beamer frames""" start="00:04:29.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can be correlated to frame names""" start="00:04:31.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and applied to image or html frames.""" start="00:04:34.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Screen captures and image narrations as videos""" start="00:04:37.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can be directly dispensed""" start="00:04:42.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""through Reveal.""" start="00:04:44.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""There are various additional novel concepts""" start="00:04:46.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with regard to the way""" start="00:04:49.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we have integrated all of this together.""" start="00:04:50.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Instead of Org-Mode+LaTeX,""" start="00:04:54.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we do LaTeX+Org-Mode.""" start="00:04:57.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Instead of Babel, we do COMEEGA,""" start="00:05:01.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""instead of the Literate model""" start="00:05:04.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we introduce the Surrounded model.""" start="00:05:06.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You shall see various examples""" start="00:05:08.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of these shortly.""" start="00:05:10.840" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Part of a bigger picture - part of a series""" start="00:05:12.520" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""All of this is part of a bigger picture.""" start="00:05:12.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A much bigger picture.""" start="00:05:15.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My talks at EmacsConf 2021, 2022""" start="00:05:17.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and 2024 are related.""" start="00:05:23.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This 2025 talk builds on those.""" start="00:05:26.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Last year's talk "About Blee:""" start="00:05:31.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""enveloping our own autonomy""" start="00:05:34.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""directed digital ecosystem""" start="00:05:36.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with Emacs" in particular,""" start="00:05:39.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""lays the foundations for this talk.""" start="00:05:42.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you have not seen that,""" start="00:05:44.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""it would make good sense to review it.""" start="00:05:47.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In my previous talks I have been criticized""" start="00:05:51.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of having a "prophetic" style.""" start="00:05:54.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The scope of ByStar is lofty and immense.""" start="00:05:58.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In many ways it is unbelievable.""" start="00:06:02.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And EmacsConf talks are meant to be short.""" start="00:06:04.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, as a result, sometimes""" start="00:06:09.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I end up being cryptic.""" start="00:06:11.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Having accepted the "prophetic" criticism""" start="00:06:13.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as legitimate,""" start="00:06:17.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I now need to put a book on the table.""" start="00:06:19.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With that book in place, moving forward,""" start="00:06:23.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""when needing to be cryptic,""" start="00:06:26.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I shall cite Chapter and Verse.""" start="00:06:29.340" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Nature of polyexistentials""" start="00:06:32.560" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""I am delighted to announce""" start="00:06:32.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the availability of my recent book,""" start="00:06:34.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text=""""Nature of Polyexistentials".""" start="00:06:37.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The full title of my book is:""" start="00:06:40.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Nature Of Polyexistentials---""" start="00:06:42.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Basis For Abolishment Of The Western""" start="00:06:45.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Intellectual Property Rights Regime---""" start="00:06:48.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And Introduction Of The Libre-Halaal""" start="00:06:51.220" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ByStar Digital Ecosystem.""" start="00:06:53.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Knowledge, know-how, uses of know-how,""" start="00:06:57.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ideas, formulas, software and information""" start="00:06:59.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are inherently non-scarce.""" start="00:07:02.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""They are \*polyexistentials\*.""" start="00:07:05.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Unlike monoexistentials""" start="00:07:08.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which exist in singular,""" start="00:07:10.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""polyexistentials naturally exist in multiples.""" start="00:07:12.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""What is abundant in nature""" start="00:07:17.540" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is being made artificially scarce""" start="00:07:19.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""through man-made ownership rules""" start="00:07:22.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""called copyright and patents.""" start="00:07:25.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These mistaken ownership rules,""" start="00:07:28.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the so called Western IPR regime,""" start="00:07:31.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""has immense ramifications""" start="00:07:34.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on the shape and the direction""" start="00:07:37.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the American Digital Ecosystem.""" start="00:07:38.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It would be an understatement to say""" start="00:07:42.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that the American Digital Ecosystem""" start="00:07:45.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""has put humanity in danger.""" start="00:07:47.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Two parts of the book, in particular""" start="00:07:50.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are of immediate relevance.""" start="00:07:53.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Part III, the ethics layer,""" start="00:07:55.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""focuses on contours of cures.""" start="00:07:58.220" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Having dismissed the Western""" start="00:08:01.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""intellectual property rights (IPR) regime""" start="00:08:02.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as an erroneous governance model for polyexistentials,""" start="00:08:06.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I propose the Libre-Halaal model""" start="00:08:11.740" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of governance of polyexistentials""" start="00:08:14.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards facilitating conviviality of tools.""" start="00:08:17.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Part IV, the engineering layer,""" start="00:08:22.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""introduces the Libre-Halaal ByStar Digital Ecosystem.""" start="00:08:25.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as an ethical alternative""" start="00:08:29.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to the prevailing proprietary""" start="00:08:32.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""American digital ecosystem.""" start="00:08:34.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The book also provides additional details""" start="00:08:37.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""about the content generation""" start="00:08:40.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and publication facilities""" start="00:08:42.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am presenting here.""" start="00:08:44.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And the book itself, as content,""" start="00:08:46.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""was generated and published""" start="00:08:50.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""using the facilities""" start="00:08:53.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am presenting here.""" start="00:08:55.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can think of this book""" start="00:08:57.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as being in two volumes.""" start="00:08:59.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Our focus are Blee and BISOS in Volume II.""" start="00:09:01.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Volume I deals with the general concept""" start="00:09:05.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of polyexistence and invalidity""" start="00:09:10.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of IPR and our terminoloy of Libre-Halaal---""" start="00:09:13.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""instead of the common but ill directed vocabulary""" start="00:09:18.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Free Software and Open-Source and FOSS.""" start="00:09:23.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In Chapter 11, I introduce""" start="00:09:28.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the very sensitive and potent vocabulary""" start="00:09:31.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Halaal and Libre-Halaal.""" start="00:09:34.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The contents of this book""" start="00:09:37.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""belong to all of humanity""" start="00:09:39.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and verbatim copying of it is unrestricted.""" start="00:09:41.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you want to read it, this book is yours.""" start="00:09:45.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The "Nature of Polyexistentials" book""" start="00:09:49.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is available both online and in print.""" start="00:09:51.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This book is available as two editions.""" start="00:09:56.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The US Edition and the International edition.""" start="00:09:59.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The US Edition is written""" start="00:10:03.820" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with a slightly milder Western unfriendly tone,""" start="00:10:05.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""while the International Edition""" start="00:10:10.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""includes additional original content in Farsi.""" start="00:10:12.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I consider the International Edition""" start="00:10:17.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to be the authoritative version.""" start="00:10:20.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""However, many readers in""" start="00:10:22.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the US and Western countries""" start="00:10:25.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""may prefer the US Edition.""" start="00:10:27.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I maintain separate Git repositories""" start="00:10:31.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for each edition on GitHub:""" start="00:10:34.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""US Edition is at bxplpc/120033""" start="00:10:36.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and International Edition: bxplpc/120074""" start="00:10:42.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Cloning these repositories""" start="00:10:51.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""will give you access to the book""" start="00:10:53.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in PDF format (suitable for both""" start="00:10:56.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A4 and US Letter printing)""" start="00:11:00.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and in EPUB format.""" start="00:11:04.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Alternatively, the content""" start="00:11:06.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can be downloaded directly from your browser""" start="00:11:08.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""without needing to clone the repositories.""" start="00:11:12.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""To ensure broader online""" start="00:11:17.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""availability and stability,""" start="00:11:19.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I have also published the book on Zenodo,""" start="00:11:21.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""complete with a DOI (Digital Object Identifier).""" start="00:11:26.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can download both the A4""" start="00:11:31.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and 8.5 x 11 PDFs from there as well.""" start="00:11:34.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The book is also available in print on Amazon""" start="00:11:39.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and at most major bookstores""" start="00:11:44.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in the US and Western regions.""" start="00:11:46.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The ISBNs for both editions""" start="00:11:49.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are included in this slide.""" start="00:11:51.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Additionally, I have published""" start="00:11:54.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""this book in Iran through Jangal Publishers.""" start="00:11:56.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I did not write this book for profit.""" start="00:12:00.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My aim is to share my thoughts""" start="00:12:03.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and encourage readers to engage with my views and ideas.""" start="00:12:05.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Your feedback is welcome,""" start="00:12:10.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and I am genuinely interested""" start="00:12:12.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in hearing your perspectives.""" start="00:12:14.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In Western markets, I have priced the print edition""" start="00:12:17.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""somewhat above production costs.""" start="00:12:20.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you find value in the book""" start="00:12:24.340" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the ByStar project,""" start="00:12:26.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""purchasing a copy will help support my work.""" start="00:12:28.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Thanks in advance for your support.""" start="00:12:32.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And here are the same links""" start="00:12:37.460" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a native Reveal slide.""" start="00:12:39.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If instead of a video,""" start="00:12:42.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you are viewing this presentation as a Reveal web page,""" start="00:12:43.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you can just click on the pointers and URLs.""" start="00:12:47.760" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)""" start="00:12:52.640" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Instead of the traditional model""" start="00:12:52.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of giving you recipes in a DIY context""" start="00:12:55.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards the goal of creating""" start="00:12:59.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""content processing capabilities""" start="00:13:01.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on top of what you may already have,""" start="00:13:04.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am doing the opposite.""" start="00:13:07.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am saying: take this whole BISOS and Blee thing,""" start="00:13:09.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and in there you will also have""" start="00:13:15.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the content processing capabilities""" start="00:13:17.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am speaking of here.""" start="00:13:20.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, at the top level we have""" start="00:13:22.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""our own autonomy and privacy""" start="00:13:24.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""directed digital ecosystem,""" start="00:13:27.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which in contrast to the center oriented""" start="00:13:30.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""American digital ecosystem,""" start="00:13:32.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is edge oriented.""" start="00:13:35.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""We call it: "The Libre-Halaal""" start="00:13:38.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ByStar Digital Ecosystem".""" start="00:13:40.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""All the systems in ByStar,""" start="00:13:43.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""run BISOS (By\* Internet Services OS),""" start="00:13:45.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is a layer on top of Debian.""" start="00:13:50.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The usage environment of ByStar and BISOS is Blee""" start="00:13:53.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is a layer on top of Emacs.""" start="00:13:58.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With those in place, we then create""" start="00:14:01.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a capability bundle called Blee-LCNT.""" start="00:14:04.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, when you buy into Blee and BISOS,""" start="00:14:10.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you will naturally also get""" start="00:14:13.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""these content processing capabilities---""" start="00:14:15.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""without a need for any recipies or DIY effort.""" start="00:14:18.720" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""ByStar containment hierarchy and ByStar capability bundles""" start="00:14:23.120" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""If you were to look at the model""" start="00:14:23.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I introduced as containment hierarchies,""" start="00:14:24.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""it would look like this.""" start="00:14:29.120" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Aggregated conviviality of ByStar capabilities""" start="00:14:31.280" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""We love Emacs and we love Unix""" start="00:14:31.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""because their design is convivial.""" start="00:14:33.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""By convivial, I am referring""" start="00:14:36.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to Ivan Illich's concept""" start="00:14:39.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and terminology of "Tools for Conviviality".""" start="00:14:40.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It was first published in 1973.""" start="00:14:45.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It's a must read.""" start="00:14:48.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A goal of the design""" start="00:14:50.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the ByStar Digital Ecosystem""" start="00:14:52.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is to enlarge the aggregated""" start="00:14:54.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""conviviality of its capabilities.""" start="00:14:57.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""What distinguishes Blee-LCNT""" start="00:15:01.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from other content processing tools and frameworks,""" start="00:15:04.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is our emphasis on enhancing""" start="00:15:08.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the aggregated conviviality.""" start="00:15:12.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These tools let you express yourself.""" start="00:15:15.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""They let you be in charge.""" start="00:15:19.260" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Parts list: integrated components""" start="00:15:22.000" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Here is our parts list.""" start="00:15:22.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These are the components""" start="00:15:24.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we have chosen to bring together""" start="00:15:25.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards our goal of creating convivial tools.""" start="00:15:27.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this slide, we are using black ink""" start="00:15:32.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to denote exisiting tools""" start="00:15:36.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and we use violet ink""" start="00:15:38.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to denote pieces that we have developed""" start="00:15:41.340" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards cohesive integration.""" start="00:15:44.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""[This] video,""" start="00:15:46.560" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Resulting contents - output forms and formats""" start="00:15:47.868" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""the video is just one of the outputs.""" start="00:15:47.868" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""There are other outputs as well.""" start="00:15:51.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this figure, the outputs""" start="00:15:54.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are shown in the top layer.""" start="00:15:56.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Using this video as an example,""" start="00:15:58.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""this presentation's output also include""" start="00:16:02.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the "Presentation Form"""" start="00:16:05.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the "Article-Presentation Form".""" start="00:16:07.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's look at these more closely.""" start="00:16:11.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For Presentations, there are 3 different forms.""" start="00:16:13.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The Video Form, the Presentation From""" start="00:16:17.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the Article-Presentation Form.""" start="00:16:19.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The Presentation Form produces both a pdf output""" start="00:16:22.820" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Reveal output.""" start="00:16:27.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Next we will walkthrough some of the benefits""" start="00:16:29.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that availability of these forms""" start="00:16:32.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and formats provide.""" start="00:16:35.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The video presentation that you are watching""" start="00:16:38.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is just one of the outputs""" start="00:16:41.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the Blee-LCNT machinery.""" start="00:16:44.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""There are two PDF format outputs""" start="00:16:48.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and two HTML outputs""" start="00:16:52.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that are also quite useful.""" start="00:16:56.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The primary output of Beamer""" start="00:16:58.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is a set of slides""" start="00:17:02.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that people use to give their talks with.""" start="00:17:04.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Typically that's done live.""" start="00:17:10.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In my case I dissect the images of each frame""" start="00:17:12.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and do a voiceover on it""" start="00:17:19.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and then dispense it through reveal.""" start="00:17:21.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In a second, you will see that as well.""" start="00:17:28.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This PDF output is very useful.""" start="00:17:33.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You get the table of contents, of course,""" start="00:17:36.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and in addition to that,""" start="00:17:39.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Beamer generates navigations for you""" start="00:17:42.208" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""where on any part you get""" start="00:17:46.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a small table of content as well.""" start="00:17:49.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is heavily used amongst academics,""" start="00:17:51.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it's a good output on its own,""" start="00:17:57.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and I'm augmenting it""" start="00:18:00.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in a variety of ways.""" start="00:18:03.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In addition to the presentation PDF format,""" start="00:18:05.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""there is also an article-presentation PDF format""" start="00:18:09.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which gives you the same content,""" start="00:18:15.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but it gives it to you in a textual form""" start="00:18:18.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with the table of content and the rest.""" start="00:18:25.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is a good form to use""" start="00:18:30.940" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""when you are giving, for example, class lectures,""" start="00:18:34.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the students often prefer this format.""" start="00:18:39.920" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""reveal.js""" start="00:18:45.720" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now for the HTML format output, the most relevant,""" start="00:18:45.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of course, is the reveal itself.""" start="00:18:51.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you have not used reveal before,""" start="00:18:55.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in my view, it's a HTML slide dispenser.""" start="00:19:05.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I don't look at it as a presentation framework.""" start="00:19:10.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I use, as you are seeing, we use Beamer to feed into it""" start="00:19:15.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and we use it to dispense the information.""" start="00:19:22.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It has all the typical navigation""" start="00:19:25.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""capabilities that you would expect,""" start="00:19:33.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and most of what I have as slides are images,""" start="00:19:39.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but occasionally, particularly when there is a need""" start="00:19:44.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to provide pointers, HTML pointers,""" start="00:19:48.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I then also include a textual output.""" start="00:19:53.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is also produced""" start="00:20:01.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from the Beamer LaTeX source,""" start="00:20:05.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but it's HTML through textual HTML,""" start="00:20:09.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""through HeVeA, not the image.""" start="00:20:14.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can... you get a table of contents.""" start="00:20:19.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can navigate""" start="00:20:22.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and there are a whole lot of other features""" start="00:20:24.575" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that reveal also provides.""" start="00:20:28.080" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Generating the video""" start="00:20:31.980" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""So to generate the video,""" start="00:20:31.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""what I do is I come to""" start="00:20:35.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the very beginning of the presentation.""" start="00:20:40.981" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I turn on the screen capture recorder,""" start="00:20:49.460" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and then I start playing""" start="00:20:51.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the voiceover for each slide""" start="00:20:54.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and at the very end, you get a video,""" start="00:20:58.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but what you just did is you dispensed every frame,""" start="00:21:02.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""one at a time, through reveal.""" start="00:21:08.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In addition to this HTML form,""" start="00:21:11.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you also get an article presentation form of it,""" start="00:21:15.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with a full table of contents""" start="00:21:22.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the videos are there, and the notes are there,""" start="00:21:24.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and this is also quite useful.""" start="00:21:27.760" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""A unified single input -- a sequencef of frames""" start="00:21:33.480" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now, let's look at the one single input file""" start="00:21:33.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that produced all of the outputs""" start="00:21:36.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we just saw.""" start="00:21:38.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I have put both the input file""" start="00:21:39.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and some of the output files""" start="00:21:43.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for this presentation on Github.""" start="00:21:45.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Here are some links""" start="00:21:48.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to these repos and files.""" start="00:21:49.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And here are the same links""" start="00:21:51.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a native Reveal slide.""" start="00:21:54.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This figure gives us an overview""" start="00:21:57.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of how one set of inputs""" start="00:21:59.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""encapsulted in a single file""" start="00:22:02.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can produce all of the outputs that we saw.""" start="00:22:04.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The main TeX file shown at the bottom""" start="00:22:08.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is processed by both XeLaTeX and by HeVeA.""" start="00:22:11.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""That main TeX file, in addition""" start="00:22:15.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to LaTeX syntax,""" start="00:22:18.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""also include org-mode constructs""" start="00:22:19.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that facilitate addition of audio and video files.""" start="00:22:23.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Later, I'll walkthrough the bodyPresArtEnFa.tex file""" start="00:22:27.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that generated this very presentation with you.""" start="00:22:34.880" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Abstractions to keep in mind""" start="00:22:39.180" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""When you construct that primary TeX file,""" start="00:22:39.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""there are several abstractions""" start="00:22:42.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that you need to keep in mind.""" start="00:22:44.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Is my presentation going to go""" start="00:22:46.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from Left-To-Right or from Right-To-Left?""" start="00:22:49.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Perso-Arabic presentations go from Right-To-Left.""" start="00:22:52.740" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Another consideration is the types""" start="00:22:57.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of forms of results that you want.""" start="00:22:59.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Just the presentation""" start="00:23:03.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""or Article-Presentation as well?""" start="00:23:05.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With those choices in place""" start="00:23:09.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you can produce condition based text""" start="00:23:10.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for each of your desired outputs.""" start="00:23:13.400" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Frame control types""" start="00:23:16.200" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Think of this video presentation""" start="00:23:16.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a sequence of frames.""" start="00:23:18.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Each frame is controlled by an org-mode dynamic block.""" start="00:23:20.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This table lists available dblocks""" start="00:23:26.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from which you can choose.""" start="00:23:29.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For example, this particular frame""" start="00:23:31.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we are watching""" start="00:23:34.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is controlled by b:lcnt:pres:frame/derivedImage.""" start="00:23:34.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Beamer creates a pdf file""" start="00:23:41.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that includes the image of this slide.""" start="00:23:44.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""That image is then injected into Reveal.""" start="00:23:47.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And in the end, a video of that image is produced""" start="00:23:51.460" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with the narrations""" start="00:23:55.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am uttering right now.""" start="00:23:57.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""All of this has similarly been applied""" start="00:23:59.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to each and every frame""" start="00:24:02.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that you have been watching.""" start="00:24:03.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Similar to Frame Controls,""" start="00:24:05.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""there are org-mode dynamic blocks""" start="00:24:08.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for "Frame Body Types".""" start="00:24:10.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can easily insert an image""" start="00:24:13.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is typically created by OpenOffice Draw""" start="00:24:15.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""into a frame.""" start="00:24:19.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Same with say a screen capture video.""" start="00:24:21.620" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""How outputs are generate from the inputs""" start="00:24:24.360" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now that we have looked at the "Outputs" and the "Inputs",""" start="00:24:24.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""let's look at how the Outputs""" start="00:24:29.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are generated from the Inputs.""" start="00:24:31.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's bootstrap Raw-BISOS and Raw-Blee.""" start="00:24:35.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Starting from scratch,""" start="00:24:39.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""get yourself a fresh copy of Debian 12.""" start="00:24:41.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Then go to https://github.com/bxGenesis/start .""" start="00:24:45.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The README.org file""" start="00:24:52.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of that github repo""" start="00:24:55.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is same as Chapter 18,""" start="00:24:57.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text=""""Engineering Adoption of BISOS and ByStar" of the book.""" start="00:24:58.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""We will next run "raw-bisos.sh",""" start="00:25:01.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but prior to that, let's take a quick look.""" start="00:25:05.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This bootstrap scripts will do a lot as root""" start="00:25:09.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on your Fresh-Debian.""" start="00:25:14.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It is best to first try it""" start="00:25:16.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on a disposable VM.""" start="00:25:18.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""raw-bisos.sh adds the current debian user to sudoers.""" start="00:25:21.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Then it installs pipx.""" start="00:25:27.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And then with pipx it installs""" start="00:25:30.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from PyPI bisos.provision.""" start="00:25:34.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""bisos.provision includes additional bash scripts""" start="00:25:38.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that are then executed.""" start="00:25:43.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Full installation involves""" start="00:25:45.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""setting up various accounts, groups,""" start="00:25:48.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""various directory hierarchies,""" start="00:25:51.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""lots of apt packages""" start="00:25:53.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and lots of python packages""" start="00:25:55.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from the bisos namespace.""" start="00:25:57.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you are ready, copy and paste""" start="00:26:01.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""this line and run it.""" start="00:26:03.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You will be prompted""" start="00:26:06.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for the root password.""" start="00:26:08.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Then be patient.""" start="00:26:09.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Full installation""" start="00:26:11.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can take 15 minutes or so.""" start="00:26:12.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The logs of this script""" start="00:26:14.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are also captured""" start="00:26:17.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in ~/raw-bisos-${dateTag}-log.org""" start="00:26:18.520" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Context for unified source walkthrough""" start="00:26:25.200" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now that we have Raw-BISOS and Raw-Blee installed,""" start="00:26:25.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we are ready to walk through""" start="00:26:28.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the unified source""" start="00:26:31.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the very presentation""" start="00:26:32.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that you are watching.""" start="00:26:34.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The "bodyPresArtEnFa.tex" file""" start="00:26:36.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we will visit""" start="00:26:40.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is in COMEEGA-LaTeX syntax""" start="00:26:42.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with lots of org-mode dblocks""" start="00:26:45.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which generate Beamer-LaTeX frames""" start="00:26:47.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and conditioned LaTeX bodies.""" start="00:26:50.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""After the walkthrough,""" start="00:26:54.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I'll describe dblocks and COMEEGA in more detail.""" start="00:26:55.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""At the tail end of the walkthrough,""" start="00:27:00.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we will also go through the generation process""" start="00:27:02.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which runs XeLaTeX and HeVeA and a lot more.""" start="00:27:05.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's look at our input file.""" start="00:27:10.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It's a LaTeX file in LaTeX mode,""" start="00:27:13.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it has org syntax org-mode included in it,""" start="00:27:17.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and I can toggle between LaTeX and org-mode.""" start="00:27:24.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, now I'm gonna be in org-mode,""" start="00:27:29.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and org-mode gives me everything""" start="00:27:33.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that org has to offer,""" start="00:27:37.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""including a very convenient navigation framework.""" start="00:27:39.400" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""One slide""" start="00:27:46.480" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's take one slide and take a look at how it was done.""" start="00:27:46.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So I would come to this scope slide""" start="00:27:54.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and while I am there, I'm going to click on N.""" start="00:27:58.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""N takes me to the native LaTeX form back,""" start="00:28:04.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""so that I'll be looking at it not in org, but in LaTeX.""" start="00:28:09.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So we're back in LaTeX, and as you can see""" start="00:28:16.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""it uses a dynamic block""" start="00:28:22.907" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""starting with the comments and the BEGIN,""" start="00:28:26.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it uses a dynamic block""" start="00:28:30.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""named a framedDrive image,""" start="00:28:34.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which means the content of this frame""" start="00:28:38.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""will be dispensed as an image, not as text,""" start="00:28:45.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it also automatically creates for me""" start="00:28:50.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a name, a label, that can be used""" start="00:28:56.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for voiceover augmentation.""" start="00:29:00.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So a file in the audio directory""" start="00:29:05.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""called ScopeOfBleeLcnt.mp3""" start="00:29:08.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is this audio that will come on top of this slide""" start="00:29:13.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and then the rest is the LaTeX itself.""" start="00:29:19.320" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Dynamic blocks""" start="00:29:24.080" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""The concept of "Org Dynamic Blocks"""" start="00:29:24.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is very powerful.""" start="00:29:29.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I think of them as universal""" start="00:29:31.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""visible macros.""" start="00:29:33.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""But, why should they be primarily used in just Org-Mode?""" start="00:29:35.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I say, let's generalize them""" start="00:29:41.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to "Emacs Dynamic Blocks".""" start="00:29:43.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Have defaults for org-dblock-start-re""" start="00:29:46.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in every relevant mode""" start="00:29:49.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and use them everywhere.""" start="00:29:52.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Blee does that.""" start="00:29:55.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In COMEEGA-LaTeX, Dynamic Blocks create Frame Controls""" start="00:29:56.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and insert Image and Video contents.""" start="00:30:01.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Much of Blee and BISOS""" start="00:30:05.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are implemented in COMEEGA.""" start="00:30:07.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Almost all of our Elisp, Python, Bash""" start="00:30:09.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and LaTeX work uses COMEEGA.""" start="00:30:13.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""COMEEGA stands for Collaborative""" start="00:30:17.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Org-Mode""" start="00:30:19.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Enhanced Emacs Generalized Authorship.""" start="00:30:21.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It is the inverse of org-babel.""" start="00:30:24.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""COMEEGA adds org-mode""" start="00:30:27.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to your programming mode.""" start="00:30:30.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Full and proper use of COMEEGA,""" start="00:30:33.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""requires Polymode.""" start="00:30:35.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's call that Poly-COMEEGA.""" start="00:30:38.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""But Emacs's Polymode""" start="00:30:41.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is work-in-progress,""" start="00:30:43.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""particularly now with the new tree-sitter.""" start="00:30:45.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, in the interim, my usage of COMEEGA""" start="00:30:49.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""has been in the form of Toggle-COMEEGA.""" start="00:30:53.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Where I manually switch between""" start="00:30:55.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the programming-mode and org-mode.""" start="00:30:59.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For me this has proved to be""" start="00:31:02.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a fine interim solution.""" start="00:31:04.200" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Internationalization - a non-Americanist perspective""" start="00:31:05.800" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Naturally, content processing""" start="00:31:05.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""should be multi-lingual""" start="00:31:09.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and internationalized.""" start="00:31:11.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's look at that dimension.""" start="00:31:14.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am Iranian and much of what I write is in Farsi.""" start="00:31:15.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Getting Perso-Arabic text right""" start="00:31:21.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is often a challenge,""" start="00:31:23.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as it involves Bi-Directional text (BIDI)""" start="00:31:25.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and shaping of characters.""" start="00:31:30.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In the context of our content generation""" start="00:31:33.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""these need to span all relevant tools,""" start="00:31:36.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""not just emacs.""" start="00:31:39.820" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For emacs, I have created""" start="00:31:41.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""my own input method""" start="00:31:43.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""called farsi-transliterate-banan.""" start="00:31:46.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My EmacsConf 2021 talk was about that.""" start="00:31:49.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Now let's look at some examples""" start="00:31:54.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and spice it up a bit with semantics.""" start="00:31:57.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""As an example of proper BIDI text,""" start="00:32:01.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""here is the orignal Farsi text""" start="00:32:05.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""along with English translation""" start="00:32:07.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Imam Khomeini's text""" start="00:32:10.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with respect to invalidity""" start="00:32:12.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Western Intellectual Proprty Rights regime.""" start="00:32:15.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And as another example""" start="00:32:20.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of proper BIDI text,""" start="00:32:23.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""here is Ayatollah Mothari's take on Western IPR""" start="00:32:24.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""not being private property. Note that these predate""" start="00:32:29.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""by more than half a century""" start="00:32:35.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Jack Dorsey and Elon Musk's tweets of April 11, 2025""" start="00:32:36.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""saying "Delete all IP law".""" start="00:32:43.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This topic is too important""" start="00:32:47.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and too sensitive""" start="00:32:49.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to be left to American billionaires""" start="00:32:50.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and their tweets.""" start="00:32:53.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let me again refer you to the logic""" start="00:32:55.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of polyexistentials in my book.""" start="00:32:58.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Chapter 14 of the book is dedicated to""" start="00:33:00.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Ethics and ownership in Religions.""" start="00:33:06.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With respect to my preference""" start="00:33:08.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for Ethics over Freedom,""" start="00:33:10.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""let me refer you to Section 12.4""" start="00:33:12.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text=""""A Cynical Perspective""" start="00:33:16.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on Freedom Orientation of Americans"""" start="00:33:19.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in which I describe where the FOSS labels""" start="00:33:22.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the likes of Stallman, Raymond,""" start="00:33:26.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Moglen and Lessig have gone wrong.""" start="00:33:29.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you are one of their followers,""" start="00:33:31.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""perhaps Chapter 12 is for you.""" start="00:33:34.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My emphasis thus far has been on content generation.""" start="00:33:36.600" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Autonomous self-publication and federated re-publications""" start="00:33:42.280" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's very briefly also look at""" start="00:33:42.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Autonomous Self-Publication""" start="00:33:45.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Federated Re-Publications of our content.""" start="00:33:47.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""From the very beginning the Debian folks""" start="00:33:52.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""understood the importance of "Universality"""" start="00:33:55.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and coined the "Universal Debian" label.""" start="00:33:59.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This means that we can base""" start="00:34:03.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""our entire digital ecosystem""" start="00:34:05.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on just the Libre-Halaal Debian distro.""" start="00:34:08.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And that is what we have done with ByStar.""" start="00:34:13.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In ByStar, everything is based on""" start="00:34:17.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""just the Universal Debian everywhere.""" start="00:34:20.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This has made our Usage Environment""" start="00:34:24.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""totally harmonious with our Service Environment""" start="00:34:27.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""allowing for very powerful software-service continuums.""" start="00:34:31.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Of course, all of this is immediately applicable""" start="00:34:38.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to our ByStar Content Bundle as well.""" start="00:34:41.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Some have asked, why don't you also include Ubuntu?""" start="00:34:46.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I think the opposite makes more sense.""" start="00:34:50.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Ubuntu should converge with Debian.""" start="00:34:53.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I tried to explain this to Mark Shuttleworth""" start="00:34:56.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in an email a while back.""" start="00:34:59.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I have included that email""" start="00:35:02.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in Section 12.1.5.""" start="00:35:04.120" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Ingredients of BISOS platforms and their progression""" start="00:35:07.720" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""In this presentation, we have stopped""" start="00:35:07.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""at the "Raw-BISOS" stage.""" start="00:35:10.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""We can further evolve Raw-BISOS""" start="00:35:13.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and make it be "Sited"""" start="00:35:15.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and provide autonomous publication services.""" start="00:35:17.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""But here by going through EmacsConf and youtube""" start="00:35:22.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we are using the "Federated Re-Publications" model.""" start="00:35:25.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Something this large,""" start="00:35:30.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""should be well documented.""" start="00:35:32.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In Emacs, the way that""" start="00:35:35.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we have been dealing with documentation""" start="00:35:37.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and information retrieval is archaic.""" start="00:35:39.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Man-pages, TeXInfo, Helpful-Mode""" start="00:35:43.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and convention based Doc-Strings are old and limited.""" start="00:35:46.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In BISOS and Blee, we use Blee-Panels""" start="00:35:51.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for all kinds of documentation.""" start="00:35:55.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let me show you some examples.""" start="00:35:57.740" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Moving forward""" start="00:36:02.560" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""So, what next?""" start="00:36:02.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If Blee, BISOS, ByStar, Libre-Halaal, Polyexistentials""" start="00:36:05.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and these Content Processing capabilities""" start="00:36:10.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""have piqued your interest,""" start="00:36:14.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""please feel welcome to contact me.""" start="00:36:16.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These Emacs Conferences have proven""" start="00:36:19.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to be very useful and productive.""" start="00:36:22.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I look forward to your thoughts,""" start="00:36:25.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""feedback and questions.""" start="00:36:27.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I want to thank all the EmacsConf 2025 Organizers""" start="00:36:29.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for their great work,""" start="00:36:35.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Sacha in particular.""" start="00:36:37.200" video="mainVideo-blee-lcnt" id="subtitle"]] + +</div> + +Captioner: mohsen + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20blee-lcnt%3A%20Blee-LCNT%3A%20An%20Emacs-centered%20content%20production%20and%20self-publication%20framework) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/blee-lcnt-before.md b/2025/info/blee-lcnt-before.md new file mode 100644 index 00000000..ef6b39b5 --- /dev/null +++ b/2025/info/blee-lcnt-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 Sat 2025-12-06. 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="blee-lcnt"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect stroke-width="3" x="377" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 37-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html> Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt> +Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt> +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 mainVideo"><video controls preload="none" id="mainVideo-blee-lcnt"><source src="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--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="mainVideo-blee-lcnt" data=""" +00:05.760 Introduction +01:20.080 Scope: A complete multi-media content processing framework +02:10.320 Prior art and similar art +03:02.420 LaTeX-Beamer + Reveal.js with Blee and BISOS +03:57.160 Blee-LCNT novel concepts +05:12.520 Part of a bigger picture - part of a series +06:32.560 Nature of polyexistentials +12:52.640 Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB) +14:23.120 ByStar containment hierarchy and ByStar capability bundles +14:31.280 Aggregated conviviality of ByStar capabilities +15:22.000 Parts list: integrated components +15:47.868 Resulting contents - output forms and formats +18:45.720 reveal.js +20:31.980 Generating the video +21:33.480 A unified single input -- a sequencef of frames +22:39.180 Abstractions to keep in mind +23:16.200 Frame control types +24:24.360 How outputs are generate from the inputs +26:25.200 Context for unified source walkthrough +27:46.480 One slide +29:24.080 Dynamic blocks +31:05.800 Internationalization - a non-Americanist perspective +33:42.280 Autonomous self-publication and federated re-publications +35:07.720 Ingredients of BISOS platforms and their progression +36:02.560 Moving forward + +"""]]<div></div>Duration: 36:41 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-blee-lcnt">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.opus">Download --main.opus (32MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.webm">Download --main.webm (97MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--split.vtt">Download --split.vtt</a></li><li><a href="https://youtu.be/49e0ES-nk0k">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/blee-lcnt-nav.md b/2025/info/blee-lcnt-nav.md new file mode 100644 index 00000000..fcf1d9fe --- /dev/null +++ b/2025/info/blee-lcnt-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a> +Next by time: <a href="/2025/talks/private-ai">Emacs and private AI: a great match</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/bookclub-tapas-after.md b/2025/info/bookclub-tapas-after.md new file mode 100644 index 00000000..c4b08e7c --- /dev/null +++ b/2025/info/bookclub-tapas-after.md @@ -0,0 +1,821 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="bookclub-tapas-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.620" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Alright! Hi everyone! Happy EmacsConf!""" start="00:00:00.620" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I´m so excited to be here.""" start="00:00:04.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's surreal to be part""" start="00:00:07.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of the conference itself,""" start="00:00:07.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in addition to being a viewer.""" start="00:00:09.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""EmacsConf is like Christmas to me,""" start="00:00:11.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and I'm so excited when it comes around every year.""" start="00:00:13.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Today, my talk is on a programming methodology""" start="00:00:18.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that I've created, discovered, stumbled upon.""" start="00:00:21.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I call it "Bookclub Tapas."""" start="00:00:24.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Before we get into that,""" start="00:00:26.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""let me introduce myself.""" start="00:00:27.760" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Hi, I'm Maddie!""" start="00:00:29.680" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""My name is Maddie Sullivan,""" start="00:00:29.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and my pronouns are she/her.""" start="00:00:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I go by the handle ElephantErgonomics,""" start="00:00:34.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""which is shortened down to ElephantErgo in the IRC.""" start="00:00:36.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""You can reach out to me after the talk""" start="00:00:41.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for questions, comments,""" start="00:00:43.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""or just to say hello by reaching out""" start="00:00:44.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to hello@ElephantErgonomics.com.""" start="00:00:47.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So this software development strategy I found,""" start="00:00:56.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""it's inspired by literate programming and Agile.""" start="00:01:00.040" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Bookclub Tapas""" start="00:01:03.840" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So what exactly is Bookclub Tapas?""" start="00:01:03.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub Tapas is a conversation""" start="00:01:07.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that you have with yourself.""" start="00:01:09.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's a log and a ledger,""" start="00:01:11.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of your intentions, hopes, dreams,""" start="00:01:13.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and what you've learned""" start="00:01:16.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""over the course of development.""" start="00:01:17.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub Tapas is an oracle""" start="00:01:19.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""you can consult""" start="00:01:22.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""about the state of, and the strategies behind,""" start="00:01:24.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""your development process.""" start="00:01:26.934" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub Tapas is also a peer programming partner""" start="00:01:29.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that helps you decide how to best put forward your efforts""" start="00:01:33.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and how to best pull together""" start="00:01:37.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what you're working on.""" start="00:01:38.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub Tapas will also help you to understand""" start="00:01:40.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how to tailor scope to your needs,""" start="00:01:42.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and how to have the best parts""" start="00:01:45.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of your program shine through clearly.""" start="00:01:46.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub Tapas consists of two parts:""" start="00:01:49.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub and Tapas,""" start="00:01:52.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but what does that mean exactly, though?""" start="00:01:54.160" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Bookclub""" start="00:02:00.520" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Bookclub is a reverse literate development strategy.""" start="00:02:00.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub is a time for you to write,""" start="00:02:04.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then read and reflect.""" start="00:02:07.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's like a Bookclub,""" start="00:02:08.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but it's for your program.""" start="00:02:10.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Instead of inserting narration into your code""" start="00:02:12.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to narrativize what you are accomplishing,""" start="00:02:15.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""you are instead inserting snippets of code""" start="00:02:17.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""into your narrative to make it come alive.""" start="00:02:20.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So, what are we narrativizing, exactly?""" start="00:02:23.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""What sort of story are we telling?""" start="00:02:28.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub is the story of you, your program,""" start="00:02:30.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and how your efforts are allowing your program""" start="00:02:34.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to come into the world.""" start="00:02:36.560" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Too many hats, too many roles""" start="00:02:40.300" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Software developers naturally have to wear""" start="00:02:40.300" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a lot of different hats,""" start="00:02:42.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and take on a lot of different roles.""" start="00:02:43.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We apply ourselves into a lot""" start="00:02:46.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of different contexts.""" start="00:02:48.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We do research, interface architecture design,""" start="00:02:50.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""mathematics, philosophy.""" start="00:02:53.068" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We take in the world around us""" start="00:02:55.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then build abstractions to model it.""" start="00:02:57.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We translate the abstract""" start="00:03:00.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""into the concrete,""" start="00:03:01.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then when we're trying to teach software""" start="00:03:03.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how to be "smart,"""" start="00:03:04.668" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we translate the concrete""" start="00:03:06.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""back into the abstract.""" start="00:03:07.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I can't help but feel like so much of""" start="00:03:09.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what makes software development difficult""" start="00:03:11.501" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is just trying to remember""" start="00:03:13.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and keep track of everything.""" start="00:03:14.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have to try and remember""" start="00:03:16.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""so many different implementation details.""" start="00:03:17.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have to remember how our own code works,""" start="00:03:21.260" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how the API of our dependencies work,""" start="00:03:24.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how relevant real-world constraints behave,""" start="00:03:26.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what the standards lay out,""" start="00:03:29.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and how our data structures are laid out.""" start="00:03:31.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""When we're debugging,""" start="00:03:34.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we simultaneously have to remember""" start="00:03:35.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how our program is currently behaving,""" start="00:03:37.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as well as how the program ought to behave""" start="00:03:40.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in order to get a chance""" start="00:03:42.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to reconcile that gap.""" start="00:03:43.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's honestly all way too much.""" start="00:03:46.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We need a ledger of what we're actually doing""" start="00:03:48.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in order to stay sane.""" start="00:03:50.240" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Narrativiation""" start="00:03:55.800" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""I think a really effective way to""" start="00:03:55.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""make sense of things that are complex and important""" start="00:03:57.334" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is to narrativize them,""" start="00:03:59.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to turn them into stories.""" start="00:04:01.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""This is a strategy that humans have been using for a long time.""" start="00:04:02.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Mnemonic devices, metaphors,""" start="00:04:06.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and drawing parallels""" start="00:04:08.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""are all different ways of doing just this.""" start="00:04:09.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Telling stories helps us to understand""" start="00:04:12.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""things that are big and complex""" start="00:04:14.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""by grounding them in our own experience""" start="00:04:16.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and making it fit into our scale.""" start="00:04:19.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So because the way that everyone""" start="00:04:23.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""naturally tells stories""" start="00:04:25.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is going to be a little different,""" start="00:04:26.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""because the details that strike us""" start="00:04:28.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as important and worth focusing on""" start="00:04:30.068" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""are going to be different for different people,""" start="00:04:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'm not going to say""" start="00:04:34.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that there are hard and fast rules""" start="00:04:35.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""about how Bookclub "should work,"""" start="00:04:36.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""because how it "should work"""" start="00:04:39.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is however it best fits your needs.""" start="00:04:41.134" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Different people and different projects""" start="00:04:43.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""have different backgrounds and mindsets.""" start="00:04:45.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And I don't think it's my place to say""" start="00:04:47.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what strategy is correct as a universal law.""" start="00:04:49.634" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""You know, because Bookclub Tapas is, after all,""" start="00:04:51.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""just something I've sort of stumbled into.""" start="00:04:54.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub is intrinsically ad-hoc.""" start="00:04:57.100" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""My providing a prescription of strategy""" start="00:05:00.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is basically going to begin and end with the idea""" start="00:05:02.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that you write a reverse-literate document""" start="00:05:04.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that illustrates how you've gone""" start="00:05:07.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""about writing your program.""" start="00:05:08.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""All of that being said,""" start="00:05:11.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'm going to talk about""" start="00:05:14.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how I've laid out my book club files""" start="00:05:16.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and why I think this is a solid place""" start="00:05:18.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""from which to get started.""" start="00:05:20.400" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""My starter kit - My stock, off the shelf suggestions""" start="00:05:24.780" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So my stock off-the-shelf suggestions""" start="00:05:24.780" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for just getting started""" start="00:05:27.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is to have sections for: our overarching goal,""" start="00:05:29.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""our development goals,""" start="00:05:32.961" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a place for scratch work, a test suite, research,""" start="00:05:35.060" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then finally sections for variables,""" start="00:05:40.700" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""functions, and macros.""" start="00:05:42.468" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Now what?""" start="00:05:47.660" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So we have our starter kit sections.""" start="00:05:47.660" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""How do we go about using them?""" start="00:05:50.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""How do we get started?""" start="00:05:51.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Well, we write them, you know,""" start="00:05:53.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""out in our org document,""" start="00:05:55.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but then what do we do?""" start="00:05:56.440" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Our overarching goal""" start="00:05:58.980" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""We start by writing what we know.""" start="00:05:58.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have a spark, a vision.""" start="00:06:01.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We had the beginning of an idea""" start="00:06:04.220" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of what we wanted our program to do.""" start="00:06:05.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Alternatively, maybe we had""" start="00:06:08.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a client lay our goals out.""" start="00:06:09.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Either way, we have some idea""" start="00:06:10.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of how we want our program to be shaped.""" start="00:06:13.300" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Let's start by writing that down.""" start="00:06:15.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""What are we trying to do?""" start="00:06:18.340" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""What is our goal?""" start="00:06:19.440" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Our development focuses""" start="00:06:23.460" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""After that, we're probably wondering to ourselves,""" start="00:06:23.460" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text=""""Okay, we have our goal,""" start="00:06:26.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but how do we get there?"""" start="00:06:27.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""That's when we start writing""" start="00:06:30.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""our development focuses.""" start="00:06:31.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we have bursts of intuition""" start="00:06:33.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""about what functions to write,""" start="00:06:35.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""questions that we want to answer through research,""" start="00:06:36.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we start enumerating those every time they hit us.""" start="00:06:39.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Our goal is to write them""" start="00:06:43.340" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""all down in a checklist""" start="00:06:44.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in order to turn them from daydreams""" start="00:06:46.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""into courses of action.""" start="00:06:48.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we aren't having development focuses""" start="00:06:50.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""hit us right away, that's okay.""" start="00:06:52.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we just stare at the goal for long enough,""" start="00:06:54.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think it's inevitable""" start="00:06:57.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that the muse will speak,""" start="00:06:58.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and we'll get a clear lead""" start="00:06:59.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""on a path forward.""" start="00:07:00.880" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The rest of the headings""" start="00:07:05.120" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So now what?""" start="00:07:05.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Now that we have our development focuses,""" start="00:07:07.220" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we want to go ahead and create""" start="00:07:09.900" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""the rest of the headings for ourselves""" start="00:07:11.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""so we can act upon them.""" start="00:07:13.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We go ahead and write the rest""" start="00:07:15.540" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of the file's structure ad-hoc""" start="00:07:17.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in a way that will serve our needs for now.""" start="00:07:19.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If it's not fitting us well later on,""" start="00:07:22.340" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we can just go ahead and change it.""" start="00:07:24.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""There's no pressure.""" start="00:07:25.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""That's the beauty of having this""" start="00:07:26.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""all be in a plain Org document.""" start="00:07:27.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we're doing something consistently,""" start="00:07:30.100" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we probably want to have a heading for it.""" start="00:07:32.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We'll go ahead and create homes""" start="00:07:35.060" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for our variables, our functions, our macros.""" start="00:07:36.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We'll want to create a spot for scratch work""" start="00:07:38.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to sort of like stretch our legs""" start="00:07:41.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and lament in a stream-of-consciousness""" start="00:07:43.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""sort of format about how""" start="00:07:45.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a particular piece of design ought to work.""" start="00:07:47.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Basically, any time we wear a different "hat"""" start="00:07:50.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""or we take on a different "role" as a developer,""" start="00:07:52.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""it's worth considering creating a category for it.""" start="00:07:55.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The best way for us to figure out""" start="00:07:58.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what headings to fill in,""" start="00:08:00.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and how to fill them in,""" start="00:08:01.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is to just go ahead and act upon our development goals.""" start="00:08:03.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we have a question we want to answer,""" start="00:08:07.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we'll want to create a Research heading""" start="00:08:09.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""so we can go ahead and have a spot""" start="00:08:12.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for scratch-work for reasoning things out.""" start="00:08:14.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we want to write the first draft""" start="00:08:17.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of a function we want,""" start="00:08:18.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We'll want to create a heading for functions""" start="00:08:20.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then a sub-heading for that function in particular.""" start="00:08:22.800" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Conversationality""" start="00:08:37.980" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So now that we've filled in our sections,""" start="00:08:37.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what do we do now?""" start="00:08:40.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Our idea for a program""" start="00:08:42.380" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""has been turned into a story,""" start="00:08:43.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but what does that actually get us?""" start="00:08:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""To me, a lot of what's exciting about Bookclub""" start="00:08:47.620" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that novelization goes in""" start="00:08:50.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and a peer programming partner comes out.""" start="00:08:52.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""As we loop through reviewing our document,""" start="00:08:56.060" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as we scan it up and down,""" start="00:08:58.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we're able to engage in conversationality""" start="00:08:59.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""with our past self because of how verbose""" start="00:09:02.001" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we've been in our notes.""" start="00:09:05.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can ask our past self questions,""" start="00:09:06.500" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and get back answers.""" start="00:09:08.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We've turned our past self""" start="00:09:09.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""into a peer programming partner.""" start="00:09:11.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we're wondering what to do next,""" start="00:09:14.580" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we can check our Development Focuses.""" start="00:09:16.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we're wondering how something works,""" start="00:09:18.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we can read documentation""" start="00:09:20.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""embedded in our function drafts,""" start="00:09:22.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""or we can read the outcomes of tests""" start="00:09:24.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that we've performed in our research.""" start="00:09:26.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can ask ourselves questions and get answers.""" start="00:09:28.660" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Some of what's most exciting""" start="00:09:33.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""about peer programming to me""" start="00:09:34.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is having fresh perspective""" start="00:09:35.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and alternate context.""" start="00:09:38.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have a fresh set of eyes""" start="00:09:41.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""on the program that aren't our own,""" start="00:09:42.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and with that set of eyes""" start="00:09:44.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""comes someone else to share the burden""" start="00:09:47.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of trying to remember everything.""" start="00:09:50.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""With Bookclub, instead of having""" start="00:09:52.540" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a peer programmer that exists in physical space,""" start="00:09:54.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we have one that's, to get all sci-fi for a moment,""" start="00:09:57.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""reaching forward towards us""" start="00:10:00.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""from backward in time.""" start="00:10:03.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We're asynchronously working""" start="00:10:05.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""with our past selves""" start="00:10:06.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as an equal-role collaborative""" start="00:10:08.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""partner in development.""" start="00:10:10.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have their perspective,""" start="00:10:12.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""their fresh memories of the code as it was written,""" start="00:10:15.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and their focus on what was worth worrying about""" start="00:10:17.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""at a different point in time.""" start="00:10:20.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can ask them questions and get answers.""" start="00:10:22.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can ask them questions like,""" start="00:10:24.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""well, "What do I do now?"""" start="00:10:26.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text=""""How does this data structure work?"""" start="00:10:28.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text=""""What types does this third-party library take?"""" start="00:10:30.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""By asking these questions,""" start="00:10:33.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I can even stay fresh""" start="00:10:35.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""on development progress""" start="00:10:36.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that I last touched months ago.""" start="00:10:37.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's really easy to duplicate work,""" start="00:10:40.100" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""forget how things work,""" start="00:10:42.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""lose track of priorities.""" start="00:10:44.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bookclub helps keep us focused,""" start="00:10:46.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""it keeps us accountable,""" start="00:10:48.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""it even keeps us company.""" start="00:10:49.840" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Ad-hoc means lesricsf tion""" start="00:10:55.480" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""One of the most immediately useful things about Bookclub,""" start="00:10:55.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in my opinion, is that we immediately have""" start="00:10:58.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a list of actionable items.""" start="00:11:00.868" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Every time I have a little pain point,""" start="00:11:02.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I go ahead and write it down,""" start="00:11:04.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and I write down all of the things""" start="00:11:06.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that would be nice to have done someday.""" start="00:11:09.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So you might be wondering,""" start="00:11:11.580" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and it's fair to wonder this,""" start="00:11:13.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""isn't this effectively just the GitHub issue model?""" start="00:11:14.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We're listing out bug requests,""" start="00:11:17.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""issue requests, feature requests.""" start="00:11:19.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's not exactly a new idea,""" start="00:11:21.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and it's pretty intuitive.""" start="00:11:22.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think the important consideration here""" start="00:11:24.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that having really formalized apparatus""" start="00:11:26.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for entering in our thoughts""" start="00:11:30.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""can be an unnecessary source of friction.""" start="00:11:31.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bug listings don't tend to be""" start="00:11:34.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a great fit for daydreaming""" start="00:11:36.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""or verbose considerations of philosophy.""" start="00:11:37.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Bug listings tend to be reserved""" start="00:11:40.940" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for catastrophes.""" start="00:11:42.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I feel like a lot of the tooling""" start="00:11:45.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that we currently use""" start="00:11:47.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""really struggles with creating ergonomics""" start="00:11:48.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that make taking frictionless notes difficult.""" start="00:11:51.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have systems where all the disparate""" start="00:11:54.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""parts of what we're working on""" start="00:11:57.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""feel really far away from each other.""" start="00:11:59.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We're pushed away from engaging""" start="00:12:02.500" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in conversations with ourselves""" start="00:12:04.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as a result of how disparate""" start="00:12:05.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""all of our tooling feels,""" start="00:12:07.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how the process of working with it""" start="00:12:09.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is incongruent.""" start="00:12:10.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""My hope is that we can instead""" start="00:12:12.900" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""engage with a process""" start="00:12:15.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that makes it really trivial""" start="00:12:17.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to write impulsive journaling""" start="00:12:18.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""about what we're doing.""" start="00:12:20.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So much of design is ultimately""" start="00:12:21.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""just daydreaming.""" start="00:12:23.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Good ideas tend to strike us hard,""" start="00:12:25.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in a momentary flash of inspiration,""" start="00:12:27.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then they fade just as quickly.""" start="00:12:29.780" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Anyone who's had an idea all at once""" start="00:12:32.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in the middle of the night""" start="00:12:35.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""knows that they're going to have to choose""" start="00:12:36.580" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""between either committing to writing it down""" start="00:12:38.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""or accept that by morning""" start="00:12:40.620" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""they'll have lost it.""" start="00:12:41.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If we're not writing""" start="00:12:44.260" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what strikes us as important""" start="00:12:45.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""at the same moment that it's happening,""" start="00:12:46.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we're going to lose it.""" start="00:12:48.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's not realistic to expect ourselves""" start="00:12:50.380" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to hold onto our ideas forever""" start="00:12:52.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""with the same precision""" start="00:12:54.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as when we were first inspired.""" start="00:12:56.360" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Gratis documentation""" start="00:13:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Okay. I'm gonna call you out real quick.""" start="00:13:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If I ask all of you "Who wants to read""" start="00:13:11.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""really excellent documentation?"""" start="00:13:13.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I imagine that everyone here""" start="00:13:15.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is raising their hand.""" start="00:13:17.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We want code to make sense""" start="00:13:18.380" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and we want to know what""" start="00:13:20.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""the original developer had in mind.""" start="00:13:21.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Even the original developer themselves""" start="00:13:24.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""would want this just for their own sake.""" start="00:13:26.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I know that for me, I can even feel""" start="00:13:28.580" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""things becoming less fresh""" start="00:13:31.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""just after a couple months away""" start="00:13:32.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""from my codebase.""" start="00:13:33.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And that was me from a couple months ago.""" start="00:13:35.540" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""They're not around anymore.""" start="00:13:38.620" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Now, here's the rough part.""" start="00:13:42.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Here's what I'm really gonna call you all out.""" start="00:13:45.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text=""""Who wants to write really excellent documentation?"""" start="00:13:48.580" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Now, I don't know what's happening on your end,""" start="00:13:51.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I'm imagining crickets,""" start="00:13:53.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""silence, tumbleweeds""" start="00:13:55.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""blowing through to the horizon.""" start="00:13:57.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's a tough ask.""" start="00:13:59.140" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's not generally all that rewarding.""" start="00:14:01.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If you're writing docs from scratch,""" start="00:14:03.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a lot of it involves relearning""" start="00:14:06.300" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""the intentions behind crusty old code.""" start="00:14:08.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""For me, it hurts to not spend that same time""" start="00:14:10.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""implementing bug fixes and new features.""" start="00:14:13.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It just doesn't feel like""" start="00:14:16.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a great use of my time.""" start="00:14:17.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Even if it's strictly for my own codebase""" start="00:14:19.620" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for my own use, it's hard to sit down and do it""" start="00:14:22.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""even when I know how much I would benefit from it.""" start="00:14:25.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""My thinking is that when you write rough,""" start="00:14:28.780" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""piecewise daydreaming as you go,""" start="00:14:31.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""it's so much easier to not only""" start="00:14:34.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""begin writing documentation early in your process,""" start="00:14:36.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but also to stay consistent about not slouching into""" start="00:14:38.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""an accumulation of a backlog.""" start="00:14:42.840" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Keeping the thread of your intention""" start="00:14:48.440" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So not only does writing documentation early""" start="00:14:48.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""make us more likely to keep that habit going,""" start="00:14:51.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but it also makes the documentation""" start="00:14:54.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we do write way more robust.""" start="00:14:56.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""When fiction meets reality""" start="00:14:59.500" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and we start writing out code""" start="00:15:01.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that is constrained by the real world""" start="00:15:04.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and not just our imagination,""" start="00:15:06.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we learn that things we assumed about our design""" start="00:15:08.860" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""aren't going to work out in practice.""" start="00:15:11.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Because of this, we can enter""" start="00:15:14.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""into a sort of situation""" start="00:15:16.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""akin to boiling a frog in a pot of water.""" start="00:15:18.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Frogs don't notice that they're being boiled""" start="00:15:21.140" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""if the water is only heated gradually enough.""" start="00:15:23.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We decide to adjust our design only a little bit""" start="00:15:26.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""without changing the documentation right away.""" start="00:15:31.100" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Doing that once is fine,""" start="00:15:33.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I don't believe for a second""" start="00:15:35.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that we're only going to do it once.""" start="00:15:36.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can find ourselves surprised""" start="00:15:38.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that as time goes on,""" start="00:15:39.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""our code looks nothing like our spec,""" start="00:15:41.660" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and we lose the thread of what our code""" start="00:15:43.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""was supposed to do in the first place.""" start="00:15:45.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""When we stake our intentions clearly and early,""" start="00:15:48.700" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""you ground yourself in them.""" start="00:15:52.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""You reduce the risk of straying from them.""" start="00:15:54.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""You have clear reference""" start="00:15:58.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for what you want your code to do,""" start="00:15:59.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and you reduce the risk""" start="00:16:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of having its purpose shift over time.""" start="00:16:03.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""When we take turns alternating""" start="00:16:05.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""between writing code and documentation""" start="00:16:07.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""rather than acting, you know,""" start="00:16:09.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as having it all as one step,""" start="00:16:11.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we risk taking turns just moving""" start="00:16:14.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""our goalpost back and forth.""" start="00:16:16.480" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Bookclub is becoming too much""" start="00:16:21.500" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So we've seen how our Bookclub files get us""" start="00:16:21.500" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""all sorts of amazing features""" start="00:16:24.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and practical benefits.""" start="00:16:25.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""But we might be starting to notice a pattern""" start="00:16:27.620" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as we continue to engage in conversation""" start="00:16:29.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and work with our document""" start="00:16:31.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and watch it grow in size.""" start="00:16:33.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We originally created our Bookclub file""" start="00:16:35.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""with the hope to reduce""" start="00:16:38.820" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what we would need to keep track of""" start="00:16:40.701" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and to reduce our level of overwhelm.""" start="00:16:42.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We might find that as our Bookclub file grows,""" start="00:16:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we're encountering more detail""" start="00:16:48.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""than we can practically parse, manage,""" start="00:16:51.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and decipher intention from.""" start="00:16:53.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It can be easy to enter into a situation""" start="00:16:55.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""where we're drowning in the breadth of our notes,""" start="00:16:57.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and in doing so we've recreated the same problem""" start="00:16:59.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we originally set out to solve.""" start="00:17:03.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Writing out every single detail helps us a lot""" start="00:17:05.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to make sense of things at first,""" start="00:17:08.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but then after a while, we can encounter""" start="00:17:11.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a signal-to-noise problem""" start="00:17:13.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""when we try to make meaning from too many details.""" start="00:17:15.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""This is where tapas come in.""" start="00:17:19.400" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Introducing Tapas""" start="00:17:25.240" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So tapas in Spanish cuisine are appetizers.""" start="00:17:25.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""What's notable about tapas""" start="00:17:29.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that you can bring a bunch of them together""" start="00:17:31.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to make a full meal.""" start="00:17:33.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""In the context of Bookclub Tapas,""" start="00:17:35.300" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""they serve a similar role.""" start="00:17:38.380" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The idea is that we write flavorful libraries""" start="00:17:40.340" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that together form a full program.""" start="00:17:42.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have a full program,""" start="00:17:45.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but it's made from discrete modules.""" start="00:17:47.060" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The idea behind tapas is that instead of creating""" start="00:17:49.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""one perfect, "solves everything" codebase,""" start="00:17:52.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we want to create a whole bunch""" start="00:17:55.860" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of separate libraries""" start="00:17:57.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that themselves nail a specific subdomain.""" start="00:17:59.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And once these libraries""" start="00:18:02.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""are all brought together,""" start="00:18:04.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""they form the whole that we're seeking.""" start="00:18:05.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Once our Bookclub file becomes big enough""" start="00:18:08.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""such that we feel like our scope can be split""" start="00:18:10.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""into multiple libraries,""" start="00:18:12.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that's when we want to take the opportunity""" start="00:18:14.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to split our program up into parts, into Tapas.""" start="00:18:16.080" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What are Tapas, what are Tapas not?""" start="00:18:22.840" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So, maybe one of the best ways""" start="00:18:22.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to understand what makes a good Tapa""" start="00:18:25.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is to first examine what does not make a good Tapa.""" start="00:18:27.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The single most important thing""" start="00:18:30.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to understand about Tapas""" start="00:18:32.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that they themselves are substantial.""" start="00:18:33.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""There's a lot of back and forth""" start="00:18:37.140" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""on the idea of micro-libraries,""" start="00:18:38.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""their merits, their dangers,""" start="00:18:40.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and when and where they kind of work best.""" start="00:18:42.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think the distinction""" start="00:18:45.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that I would like to draw""" start="00:18:46.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that I think that tapas belong in the larger end""" start="00:18:47.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of scale and complexity for microlibraries""" start="00:18:50.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""rather than the smaller end.""" start="00:18:53.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think particularly small helpers""" start="00:18:56.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""like NPM's is-odd""" start="00:18:58.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""are a good example of something""" start="00:19:00.300" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think does not constitute a good Tapa.""" start="00:19:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Meanwhile, I think Python's Requests library""" start="00:19:05.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is a really good example of a Tapa.""" start="00:19:08.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I believe Requests only does HTTP connections,""" start="00:19:11.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I feel like that's not so simple and straightforward""" start="00:19:15.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that you can just go ahead and implement it""" start="00:19:18.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""on your own real quick.""" start="00:19:20.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""A real danger of creating""" start="00:19:23.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""helper libraries that are too small""" start="00:19:24.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that we don't remove abstraction""" start="00:19:27.220" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""nearly as much as we postpone it.""" start="00:19:31.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If our libraries are small,""" start="00:19:33.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but the glue code that binds them is large,""" start="00:19:35.820" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we haven't done anything""" start="00:19:38.900" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to reduce complexity""" start="00:19:40.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""or employ abstraction in a meaningful way.""" start="00:19:41.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If all of the complexity exists in our glue code,""" start="00:19:44.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we've simply replaced our functions""" start="00:19:47.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""with libraries of the same size and purpose.""" start="00:19:49.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Our codebase is still monolithic""" start="00:19:52.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""instead of having meaningfully divided scope.""" start="00:19:54.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think that a good Tapa""" start="00:19:58.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""ought to feel like augmentations""" start="00:19:59.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""or extensions to the standard library.""" start="00:20:01.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""You know, maybe something kind of""" start="00:20:03.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""akin to Scheme's SRFI system.""" start="00:20:05.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think that the goal of good Tapas""" start="00:20:08.380" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is not to solve a particular problem,""" start="00:20:10.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but instead to solve a particular class of problem.""" start="00:20:13.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The goal of a well-written Tapa""" start="00:20:18.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is to solve needing to do hard work in general""" start="00:20:20.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""rather than solving what can only really be""" start="00:20:23.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""an individual need""" start="00:20:25.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of an individual program.""" start="00:20:26.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I feel like Tapas are most helpful""" start="00:20:28.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""when we instead seek to solve""" start="00:20:30.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a larger overarching problem""" start="00:20:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that intersects with the problem space of our code base.""" start="00:20:35.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""When we have a handful of Tapas""" start="00:20:39.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that are roughly the same size and scale,""" start="00:20:42.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""the glue code that marries them""" start="00:20:46.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is also roughly the same size and scale.""" start="00:20:48.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""As a heuristic, I try to aim for any function""" start="00:20:52.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""being approximately 3 calls in length,""" start="00:20:55.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then any Tapa being between 6""" start="00:20:57.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and 12 functions in length.""" start="00:21:00.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The number of Tapas themselves""" start="00:21:06.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""can be as many or as few as you need,""" start="00:21:08.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but then your Tapas can split into""" start="00:21:09.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""their own separate Tapas as needed.""" start="00:21:12.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""My hope is that the collection of our Tapas,""" start="00:21:16.460" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""especially as we create""" start="00:21:18.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""dependency chains among them,""" start="00:21:20.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that each next Tapa is a trivial case""" start="00:21:22.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of the one prerequisite to it.""" start="00:21:25.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Every Tapa is a meaningful,""" start="00:21:27.100" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""human-readable abstraction""" start="00:21:28.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that enables us to feel confident about our tooling""" start="00:21:31.060" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""without drowning in detail.""" start="00:21:33.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The whole stack can be understood by humans,""" start="00:21:35.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but we only have to focus on""" start="00:21:38.500" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""any one piece of it at a time,""" start="00:21:40.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""rather than focusing on the entire stack all at once.""" start="00:21:41.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can practically achieve""" start="00:21:47.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a huge final product,""" start="00:21:48.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but each individual step""" start="00:21:51.260" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in working towards that goal""" start="00:21:52.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is still at a human scale.""" start="00:21:54.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""One thing I want to make sure to point out,""" start="00:21:56.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""one thing I want to make sure""" start="00:22:02.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to point out explicitly, real quick,""" start="00:22:03.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that having access""" start="00:22:05.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to a hygienic macro system,""" start="00:22:06.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""like the ones that we have in Lisps,""" start="00:22:07.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""makes for an amazing experience""" start="00:22:10.260" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for creating Tapas.""" start="00:22:12.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The types of abstractions that we can do""" start="00:22:13.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""by modifying syntax at compile time""" start="00:22:15.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""makes for incredibly intuitive""" start="00:22:17.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and ergonomic tooling.""" start="00:22:18.440" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Tapas are maybe best illustrated by example""" start="00:22:25.180" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So we've talked quite a bit about""" start="00:22:25.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what I think makes a Tapa good,""" start="00:22:27.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I think maybe the best way""" start="00:22:28.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to understand the concept""" start="00:22:30.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is to have a look at the whole workflow in practice.""" start="00:22:32.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I've been working on this, currently""" start="00:22:35.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""unnamed, Elisp program recently.""" start="00:22:37.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's a validator for the filetags lines""" start="00:22:40.220" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of my Org Mode files.""" start="00:22:42.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So I have Org Mode files""" start="00:22:45.820" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""under my Documents directory,""" start="00:22:49.300" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""organized in this hierarchical way,""" start="00:22:51.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and the nested directories have meaningful names.""" start="00:22:53.634" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I want the headers of my Org files to be tagged""" start="00:22:57.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in accordance with the sequence""" start="00:23:00.301" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of the names of the directories.""" start="00:23:01.801" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I do this by having the file-tags line""" start="00:23:04.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""at the top of the file""" start="00:23:06.168" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""just list the path segments in order.""" start="00:23:07.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If I have an Org file in the directory""" start="00:23:09.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text=""""~/Documents/foo/bar",""" start="00:23:12.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""the file-tags line has the tags "foo" and "bar".""" start="00:23:16.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""This is totally fine to do by hand,""" start="00:23:20.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I want a program""" start="00:23:23.140" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that recursively searches through my directories""" start="00:23:24.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to validate that the tags are correct""" start="00:23:27.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""because it's easy to drop something.""" start="00:23:29.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""This scale of problem is actually kind of perfect""" start="00:23:33.460" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for demonstrating how Bookclub Tapas work in action.""" start="00:23:36.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We have a problem""" start="00:23:39.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that's mostly rather simple,""" start="00:23:40.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but it has a lot of moving pieces.""" start="00:23:42.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We want to iterate over directories recursively,""" start="00:23:44.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we want to do string manipulation,""" start="00:23:47.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""we want to parse buffers,""" start="00:23:49.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and we want to edit buffers.""" start="00:23:50.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""All of these tasks are simple enough on their own,""" start="00:23:52.900" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but it's deceptively easy""" start="00:23:55.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to start tripping over ourselves""" start="00:23:56.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""when we feel like it's necessary""" start="00:23:58.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to do all of these different things in one step.""" start="00:23:59.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So there are a ton of great string""" start="00:24:03.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""manipulation tools for Emacs,""" start="00:24:05.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""so that's checked off,""" start="00:24:06.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that's done, taken care of.""" start="00:24:08.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'm still kind of daydreaming""" start="00:24:10.940" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""about writing a wrapper around""" start="00:24:12.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""some of the Emacs standard libraries""" start="00:24:14.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for directory traversal,""" start="00:24:16.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""just to make it a little bit nicer to work with.""" start="00:24:17.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""But the big thing""" start="00:24:20.180" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that really struck me as odd""" start="00:24:20.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that there doesn't seem to be a great tooling""" start="00:24:22.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for destructuring Emacs buffers""" start="00:24:25.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""beyond just chaining together""" start="00:24:28.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a bunch of editor commands.""" start="00:24:29.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Emacs is so buffer-oriented,""" start="00:24:31.380" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I feel like it really deserves a good library""" start="00:24:33.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for programmatic buffer destructuring.""" start="00:24:36.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I looked around for a bit,""" start="00:24:38.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I couldn't really find anything.""" start="00:24:40.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So at the end of the day,""" start="00:24:42.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I could definitely just grit my teeth""" start="00:24:44.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and put my head down and just use tools""" start="00:24:47.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that feel cumbersome to work with if I wanted to.""" start="00:24:50.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I could write something""" start="00:24:54.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that's "good enough"""" start="00:24:55.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""just for the purpose of my package""" start="00:24:56.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and then hide it deep inside the code base.""" start="00:24:57.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I could absolutely do that.""" start="00:25:00.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""But I can't help but think about how""" start="00:25:03.820" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""after I properly write the tooling I'm missing,""" start="00:25:07.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'm really going to be thanking myself""" start="00:25:11.100" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in terms of reduced implementational complexity,""" start="00:25:13.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""reduced bug hunting, real reusability,""" start="00:25:15.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and ultimately really just a deep sense of pride""" start="00:25:19.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in knowing that I took the time""" start="00:25:22.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to do something in a way that feels "right."""" start="00:25:23.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""This right here is the perfect time""" start="00:25:27.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to split off Tapas.""" start="00:25:28.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Any time that we find ourselves""" start="00:25:30.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""reaching for a fictional dependency,""" start="00:25:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""wishing that someone had written""" start="00:25:34.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a library like this...""" start="00:25:35.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can take that opportunity""" start="00:25:37.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to remember that we are "someone."""" start="00:25:39.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We can write that library ourselves,""" start="00:25:42.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and we deserve to write that library""" start="00:25:44.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""because we deserve to get to use it.""" start="00:25:46.680" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Introducing Squint""" start="00:25:52.340" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So I'm going to briefly show""" start="00:25:52.340" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a Bookclub buffer""" start="00:25:55.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for a program called Squint.""" start="00:25:56.900" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's the buffer destructure""" start="00:25:59.260" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that I've been talking about, and it's real.""" start="00:26:00.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's a wrapper around""" start="00:26:03.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Emacs's narrowing functionality""" start="00:26:04.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and regular expression search.""" start="00:26:06.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It's not totally done,""" start="00:26:08.740" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and will likely see some breaking changes,""" start="00:26:11.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I really like where it is.""" start="00:26:15.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'll be posting it in its current state""" start="00:26:16.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""on some of the big source repository sites""" start="00:26:18.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""relatively soon.""" start="00:26:22.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think it has a good feature,""" start="00:26:23.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""which is really quite exciting.""" start="00:26:24.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And it'll likely probably get split off""" start="00:26:26.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""into its own Tapas.""" start="00:26:29.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""We'll see. No matter what,""" start="00:26:29.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I do recommend being on the lookout for it,""" start="00:26:32.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""because I think it'll be""" start="00:26:34.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a really excellent demonstration""" start="00:26:35.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of some of the solid ideas""" start="00:26:37.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""behind how to get rolling with Bookclub Tapas.""" start="00:26:39.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So I have my background section""" start="00:26:43.900" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""where I'm basically just sort of laying out,""" start="00:26:46.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""you know, what the objective is for the program.""" start="00:26:49.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I have my vision where I'm doing""" start="00:26:53.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""some daydreaming about, you know,""" start="00:26:55.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""how this all ought to work.""" start="00:26:58.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I date stamped this.""" start="00:26:59.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""As you can see, it's from a while ago,""" start="00:27:00.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I still have the full context of, you know,""" start="00:27:02.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""all the things that I've done working on this.""" start="00:27:05.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I listed out a bunch of ideas""" start="00:27:08.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for different forms for functions macros.""" start="00:27:12.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I did different pieces of research.""" start="00:27:15.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Yeah, I was trying to figure out""" start="00:27:21.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for the width restriction macro,""" start="00:27:23.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""what types does it take?""" start="00:27:24.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And I did a whole bunch of tests""" start="00:27:26.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to try and ultimately figure it out.""" start="00:27:28.480" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Because it claims in the documentation,""" start="00:27:31.280" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I believe, that it will just take""" start="00:27:35.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""any type for labels.""" start="00:27:37.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""But in my testing, that's not""" start="00:27:39.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""ultimately what I found.""" start="00:27:43.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""The results of my tests""" start="00:27:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is that symbols, numbers, they work.""" start="00:27:46.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Strings do not.""" start="00:27:50.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'm not sure why that is.""" start="00:27:51.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""But for my purposes,""" start="00:27:52.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""this is what I need to know.""" start="00:27:54.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I have my development focuses here.""" start="00:27:58.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""So I have my assorted goals""" start="00:28:00.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for different directions""" start="00:28:03.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I want to take the program.""" start="00:28:05.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And then lastly, I have my functions, my macros.""" start="00:28:08.060" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And this right here""" start="00:28:13.340" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""is the titular macro.""" start="00:28:14.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""This is ultimately the big meat""" start="00:28:18.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of the program.""" start="00:28:20.500" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And it's all contained happily organized""" start="00:28:24.860" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""inside my Bookclub file.""" start="00:28:28.220" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'm quite happy with it.""" start="00:28:30.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I think it looks really nice.""" start="00:28:31.200" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What else does Bookclub Tapas do?""" start="00:28:36.100" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So what else does Bookclub tapas do?""" start="00:28:36.100" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I don't know. It probably does a lot of stuff.""" start="00:28:40.760" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""It does all sorts of stuff""" start="00:28:44.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that I don't know about yet,""" start="00:28:46.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but this is where you come in.""" start="00:28:47.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'm really excited to see what people do""" start="00:28:48.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""when they take these ideas""" start="00:28:51.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and run with them.""" start="00:28:52.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""And if you have something really cool you're doing with it,""" start="00:28:54.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""please email me and come talk to me about it.""" start="00:28:56.820" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'd love to hear about it.""" start="00:28:59.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Again, my email is hello@ElephantErgonomics.com.""" start="00:29:00.600" video="mainVideo-bookclub-tapas" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Let's work together""" start="00:29:08.160" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So last, before we wrap up,""" start="00:29:08.160" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I want to go ahead and give""" start="00:29:10.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a quick plug for my services.""" start="00:29:12.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I am an independent software engineer""" start="00:29:14.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that has an emphasis in backend design""" start="00:29:17.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and general automation.""" start="00:29:20.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""In particular, I have an emphasis""" start="00:29:21.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""in that really cool new generative AI thing""" start="00:29:23.920" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that everyone's been talking about recently.""" start="00:29:26.840" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If you have a headache,""" start="00:29:28.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""you have some sort of pain point""" start="00:29:30.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for your small or large business,""" start="00:29:33.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""you wish you could just wiggle your nose""" start="00:29:34.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and have disappear, come talk to me.""" start="00:29:36.768" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'll make it disappear. I love doing that.""" start="00:29:39.000" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Reach out to me at hello@ElephantErgonomics.com.""" start="00:29:41.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If you think that Bookclub Tapas""" start="00:29:46.980" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""would be a great fit for your team and your project,""" start="00:29:48.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'd love to hop on and help you""" start="00:29:51.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""get the ball rolling quickly.""" start="00:29:53.040" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Go ahead and email me at hello@ElephantErgonomics.com.""" start="00:29:55.120" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Lastly, if you're a member""" start="00:29:59.820" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""of the larger Lisp community""" start="00:30:01.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and you want to fund independent software development""" start="00:30:03.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for things that really excite you,""" start="00:30:06.860" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for passion projects""" start="00:30:08.320" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that make our ecosystem richer,""" start="00:30:09.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I'd love to look into accepting independent funding""" start="00:30:11.440" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""so I can commit more hours""" start="00:30:17.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""toward making that happen.""" start="00:30:20.420" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Some of the projects that I want to work on""" start="00:30:22.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""are a Python Foreign Function Interface for Guile Scheme,""" start="00:30:24.600" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a framework for rapidly creating simulation games""" start="00:30:28.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""that feels just as simple""" start="00:30:31.960" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as writing Emacs configurations,""" start="00:30:33.879" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I want to work on getting""" start="00:30:36.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a full graphical web browser inside of Emacs,""" start="00:30:37.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and I want to finish programs like Squint.""" start="00:30:41.460" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""These are just some of the projects""" start="00:30:43.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I want to work on,""" start="00:30:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""but I need funding to do so.""" start="00:30:46.020" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""If you want to see these things happen,""" start="00:30:48.240" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""send me an email at hello@ElephantErgonomics.com""" start="00:30:49.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""with both your intention""" start="00:30:53.800" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""to pledge a monthly contribution""" start="00:30:55.560" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""as well as clarification,""" start="00:30:57.360" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""a sort of vote on which project""" start="00:30:59.400" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""you would like to see me prioritize.""" start="00:31:02.080" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I would love to have folks reach out""" start="00:31:03.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""for any of these reasons.""" start="00:31:06.680" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I would just love to talk to you.""" start="00:31:07.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Thank you so much for watching!""" start="00:31:12.200" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""I really hope that the talk was interesting,""" start="00:31:14.620" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""and I'm really excited to see""" start="00:31:16.520" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""your thoughts and questions""" start="00:31:18.640" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""right now in the Q&A!""" start="00:31:19.720" video="mainVideo-bookclub-tapas" id="subtitle"]] +[[!template text="""Thank you so much for watching. Bye!""" start="00:31:21.960" video="mainVideo-bookclub-tapas" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [hello@ElephantErgonomics.com](mailto:hello@ElephantErgonomics.com?subject=Comment%20for%20EmacsConf%202023%20bookclub-tapas%3A%20Bookclub%20tapas) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/bookclub-tapas-before.md b/2025/info/bookclub-tapas-before.md new file mode 100644 index 00000000..c58ce85f --- /dev/null +++ b/2025/info/bookclub-tapas-before.md @@ -0,0 +1,43 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="bookclub-tapas"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect stroke-width="3" x="473" y="15" opacity="0.8" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 32-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html> Etherpad: <https://pad.emacsconf.org/2025-bookclub-tapas> +Etherpad: <https://pad.emacsconf.org/2025-bookclub-tapas> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T19:45:00Z" end="2025-12-07T20:20:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~2:45 PM - 3:20 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~1:45 PM - 2:20 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~12:45 PM - 1:20 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~11:45 AM - 12:20 PM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~7:45 PM - 8:20 PM UTC <br />Sunday, Dec 7 2025, ~8:45 PM - 9:20 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~9:45 PM - 10:20 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~1:15 AM - 1:50 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~3:45 AM - 4:20 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~4:45 AM - 5:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-bookclub-tapas"><source src="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--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="mainVideo-bookclub-tapas" data=""" +00:00:00.620 Introduction +00:29.680 Hi, I'm Maddie! +01:03.840 Bookclub Tapas +02:00.520 Bookclub +02:40.300 Too many hats, too many roles +03:55.800 Narrativiation +05:24.780 My starter kit - My stock, off the shelf suggestions +05:47.660 Now what? +05:58.980 Our overarching goal +06:23.460 Our development focuses +07:05.120 The rest of the headings +08:37.980 Conversationality +10:55.480 Ad-hoc means lesricsf tion +13:01.920 Gratis documentation +14:48.440 Keeping the thread of your intention +16:21.500 Bookclub is becoming too much +17:25.240 Introducing Tapas +18:22.840 What are Tapas, what are Tapas not? +22:25.180 Tapas are maybe best illustrated by example +25:52.340 Introducing Squint +28:36.100 What else does Bookclub Tapas do? +29:08.160 Let's work together + +"""]]<div></div>Duration: 31:25 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-bookclub-tapas">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.opus">Download --main.opus (27MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.webm">Download --main.webm (74MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--script.org">Download --script.org</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--split.txt">Download --split.txt</a></li><li><a href="https://youtu.be/GAOZzrm6ecA">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/bookclub-tapas-nav.md b/2025/info/bookclub-tapas-nav.md new file mode 100644 index 00000000..cd9e1a88 --- /dev/null +++ b/2025/info/bookclub-tapas-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/gardening">Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</a> +Next by time: <a href="/2025/talks/sun-close">Sunday closing remarks</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/calc-after.md b/2025/info/calc-after.md new file mode 100644 index 00000000..7c0f6ebf --- /dev/null +++ b/2025/info/calc-after.md @@ -0,0 +1,314 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="calc-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:03.620" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Hello, my name is Christopher Howard and welcome to my talk.""" start="00:00:03.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This is basically an introduction""" start="00:00:08.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to the built-in Emacs calculator,""" start="00:00:11.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""properly known as Emacs Calc,""" start="00:00:15.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""particularly from the perspective of someone""" start="00:00:18.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with a technical background such as engineering or electronics.""" start="00:00:21.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I will say, though, my personal interest is not really""" start="00:00:27.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in digital computing or digital calculators,""" start="00:00:32.880" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but lately has been focused more on analog computing.""" start="00:00:37.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I have, for example, been working to master""" start="00:00:42.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the venerable slide rule, a mechanical computer""" start="00:00:46.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that calculates multiplication powers and logarithms.""" start="00:00:50.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Here's a picture of one.""" start="00:00:57.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""It's a physical tool that was used for hundreds of years""" start="00:01:02.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for this sort of thing""" start="00:01:06.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""before the handheld calculator was made popular.""" start="00:01:09.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And I also had a project that I did""" start="00:01:16.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for a while to several months""" start="00:01:18.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to build an electronic analog computer.""" start="00:01:21.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""A rudimentary attempt of mine, but it's functional,""" start="00:01:33.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and it's basically a 1960s or 1970s style""" start="00:01:38.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""electronic analog computer built very much on a budget,""" start="00:01:43.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but the box in the middle is the computer proper""" start="00:01:48.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which has most of the components inside of it""" start="00:01:52.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""as well as the potentiometers for setting values,""" start="00:01:55.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and an operation switch.""" start="00:02:00.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""There's a patch panel on the left""" start="00:02:02.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for connecting the different integrators,""" start="00:02:04.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""amplifiers, multipliers, and so forth together.""" start="00:02:07.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then the output of the simulation is displayed""" start="00:02:11.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""on the oscilloscope on the right side,""" start="00:02:16.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which is a digital oscilloscope.""" start="00:02:19.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""To be honest, I think that a talk about analog computing""" start="00:02:25.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""would be much more interesting""" start="00:02:28.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""than the talk that I'm about to give,""" start="00:02:30.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but unfortunately that would be out of scope for EmacsConf.""" start="00:02:32.040" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What is Calc?""" start="00:02:36.640" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""So instead I will talk about Emacs Calc,""" start="00:02:36.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the digital calculator built into Emacs.""" start="00:02:39.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Emacs Calc, while not being a replacement for software""" start="00:02:43.360" video="mainVideo-calc" id="subtitle"]] +[[!template text="""like GNU Octave, does have advanced calculator functionality""" start="00:02:47.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that can be useful in engineering, electronics,""" start="00:02:51.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""or other technical applications. So I don't want to oversell it,""" start="00:02:55.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but I think functionality-wise, Calc is somewhere in between""" start="00:03:00.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what you'd expect of a decent scientific calculator""" start="00:03:06.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and an advanced graphics calculator.""" start="00:03:12.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So this talk I'll mention is not intended to be a tutorial""" start="00:03:23.940" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but only a brief introduction to Calc.""" start="00:03:28.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Please refer to the built-in Calc info manual""" start="00:03:33.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for detailed instructions on how to complete operations.""" start="00:03:37.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Turn off my volume here.""" start="00:03:46.740" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The documentation for Emacs Calc is built-in,""" start="00:04:01.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""although on some distributions you may have to install""" start="00:04:05.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the Emacs documentation separately for licensing reasons.""" start="00:04:10.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Calc presents itself as a stack-based calculator""" start="00:04:24.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""where entries are dropped onto a stack""" start="00:04:28.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then an operation is performed on the stack entries.""" start="00:04:31.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, I can drop 1.23 onto the stack,""" start="00:04:36.740" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then 8.56, and then multiply them together.""" start="00:04:42.900" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""calc-algebraic-entry""" start="00:04:54.280" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""It may present itself as a stack-based calculator,""" start="00:04:54.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but indeed, Calc is also capable of accepting input""" start="00:05:01.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in the more well-known algebraic format""" start="00:05:05.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""by using the calc-algebraic-entry command,""" start="00:05:07.740" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which by default is bound to the apostrophe (') key.""" start="00:05:10.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So you type the apostrophe key, enter the algebraic input,""" start="00:05:15.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""including parentheses as needed.""" start="00:05:19.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, here's a calculation of the resonance frequency""" start="00:05:22.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""of a coil which has an inductance of 250 microhenries""" start="00:05:28.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and 160 picofarads, taken from one of my electronics handbooks.""" start="00:05:35.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The formula for that is 1 over 2 pi""" start="00:05:41.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then the square root of our inductance""" start="00:05:50.020" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which is in this case 250 microfarads - excuse me, microhenries""" start="00:05:57.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then the capacitance is 160 picofarads.""" start="00:06:06.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Small typo here.""" start="00:06:19.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Now I need to evaluate that one more time,""" start="00:06:24.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because pi is a symbol.""" start="00:06:26.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I get about 800 kHz resonant frequency.""" start="00:06:30.920" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""calc-roll-down""" start="00:06:37.399" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""The command calc-roll-down,""" start="00:06:37.399" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which by default is bound to the TAB key,""" start="00:06:41.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""will swap the top two stack entries,""" start="00:06:44.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which is sometimes useful if you need to manipulate something""" start="00:06:47.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that's further down the stack.""" start="00:06:51.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So I can swap this around and say multiply by two""" start="00:06:57.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then put it back where it was.""" start="00:07:02.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This command is also capable of rolling the entire stack.""" start="00:07:05.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Say I want to shift them all around.""" start="00:07:14.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This can be done by passing extra arguments""" start="00:07:18.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to the calc-roll-down function.""" start="00:07:21.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That's a little bit inconvenient to do manually,""" start="00:07:23.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so in my init file, I defined here a key definition""" start="00:07:28.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that passes in those arguments correctly.""" start="00:07:40.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I attached this to shift-tab,""" start="00:07:45.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so this way, I can roll the entire stack.""" start="00:07:49.180" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then I could change one entry here""" start="00:07:52.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then put it back where it was.""" start="00:07:56.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So Calc does algebraic input.""" start="00:08:03.460" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Advanced functions""" start="00:08:07.760" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""It also does advanced functions""" start="00:08:07.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that you would expect any handheld scientific calculator,""" start="00:08:10.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""including trigonometric functions.""" start="00:08:15.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, we can get the sine of a number.""" start="00:08:19.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Now I'll mention here that Calc has multiple modes.""" start="00:08:25.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Right now it's in degree mode.""" start="00:08:30.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""You can switch over to radian mode if you want.""" start="00:08:32.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'm going to put it back in degrees.""" start="00:08:38.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Drop 12 degrees on the stack, and then get the sine of that.""" start="00:08:42.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then with the inverse sine function, I can put it back.""" start="00:08:49.800" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Solving equations with calc-solve-for""" start="00:08:58.180" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc also has the nifty ability to solve equations for you""" start="00:08:58.180" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so long as the equation is not too complicated.""" start="00:09:07.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This is using the calc-solve-for function.""" start="00:09:13.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, we could enter in an equation algebraically,""" start="00:09:19.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""then run calc-solve-for, and we just have to tell it""" start="00:09:31.700" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what variable we want to solve for. And there we go.""" start="00:09:36.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""We can do this manually as well""" start="00:09:41.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""just so you can see that we get the same result.""" start="00:09:43.200" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Systems of equations""" start="00:09:54.720" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc is also able to solve systems of equations.""" start="00:09:54.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""We can put more than one equation on the stack,""" start="00:09:57.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then solve for several variables.""" start="00:10:03.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""To give a technical example for this,""" start="00:10:08.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll show you a resistor network scribble that I did recently.""" start="00:10:13.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Hopefully you can see that. Basically,""" start="00:10:30.660" video="mainVideo-calc" id="subtitle"]] +[[!template text="""it's fairly simple, a pretty simple resistor network""" start="00:10:32.820" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with 1 kilo ohm and 10 kilo ohm resistors,""" start="00:10:38.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and using the loop methods, we are calculating the currents,""" start="00:10:42.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the current in each loop, and then that current can be used""" start="00:10:48.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to solve for the voltage of each individual resistor""" start="00:10:52.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""if we want to. So at the bottom there we have the equations""" start="00:10:58.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that we come up with as we work through each loop.""" start="00:11:06.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And I'm going to paste that into Calc.""" start="00:11:11.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""To save some time, I'm going to copy and paste that""" start="00:11:19.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""from my notes instead of typing it out.""" start="00:11:22.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So we have two equations there on the stack""" start="00:11:34.260" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in one stack entry. We run that calc-solve-for function again,""" start="00:11:38.260" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and we tell it which variables we want to solve for.""" start="00:11:44.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And voila! Those are our currents,""" start="00:11:49.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which we can then use to get the voltages""" start="00:11:51.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for the individual resistors.""" start="00:11:55.720" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""calc-find-root""" start="00:12:00.080" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I'll just briefly mention""" start="00:12:00.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that if Calc is not able to solve an equation""" start="00:12:02.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with calc-solve-for,""" start="00:12:05.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""then you might be helped by another calc function""" start="00:12:07.780" video="mainVideo-calc" id="subtitle"]] +[[!template text="""called calc-find-root.""" start="00:12:10.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This function basically does a manual search""" start="00:12:11.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for a numerical solution to the equation.""" start="00:12:14.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And there's the documentation page on that.""" start="00:12:30.200" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Derivatives and integrals""" start="00:12:39.960" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc can also solve or find derivatives of functions,""" start="00:12:39.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""at least the more straightforward functions.""" start="00:12:44.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For a simple example,""" start="00:12:47.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""we can get the derivative of that""" start="00:12:49.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with the derivative function.""" start="00:13:00.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""On the other hand, Calc is also capable of figuring out""" start="00:13:11.980" video="mainVideo-calc" id="subtitle"]] +[[!template text="""indefinite integrals.""" start="00:13:17.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Say we put that function back on the stack,""" start="00:13:22.100" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and this time, we call the integral function.""" start="00:13:26.860" video="mainVideo-calc" id="subtitle"]] +[[!template text="""There you go. Of course, you have to add""" start="00:13:32.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""your own constant of integration.""" start="00:13:35.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For integrals that Calc cannot figure out symbolically,""" start="00:13:39.820" video="mainVideo-calc" id="subtitle"]] +[[!template text="""a numerical integration method is available""" start="00:13:43.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""through the calc-num-integral command, which is documented...""" start="00:13:46.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The function documentation is available here, more or less.""" start="00:13:59.999" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Programmable functions""" start="00:14:17.540" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I definitely need to mention""" start="00:14:17.540" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that Calc is capable of doing programmable functions.""" start="00:14:20.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That is to say, you can program your own functions into Calc.""" start="00:14:24.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""There are three separate ways to do this.""" start="00:14:29.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""One is through a macro method""" start="00:14:32.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""similar to Emacs's usual keyboard macros.""" start="00:14:36.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The second method is to transform an algebraic function""" start="00:14:41.540" video="mainVideo-calc" id="subtitle"]] +[[!template text="""into a stored function definition.""" start="00:14:46.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And the third is to use Elisp directly.""" start="00:14:50.860" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Personally, I find that the second method""" start="00:14:54.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""is the most practical, the most convenient and practical""" start="00:14:56.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in my opinion. So I'll give a quick example of that.""" start="00:15:01.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So I could... Let's say I wanted to have a function""" start="00:15:08.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for calculating capacitive reactance.""" start="00:15:14.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll define that in algebraic mode first.""" start="00:15:20.700" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The function for that is 1 over 2 pi""" start="00:15:28.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the frequency and the capacitance.""" start="00:15:33.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Drop that on the stack. You see, it does automatically""" start="00:15:41.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""get simplified a little bit, but it's the same function.""" start="00:15:44.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then I press letters Z and F. Do that again.""" start="00:15:52.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Z and F to start transforming that into a stored function.""" start="00:15:58.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""It asks me to select a user key, a single key press.""" start="00:16:06.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll use the letter c.""" start="00:16:11.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then it's going to ask for a longer command name.""" start="00:16:15.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I've actually defined this once before, so it prefilled in""" start="00:16:19.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that command name.""" start="00:16:24.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then I need to enter which variables in the formula""" start="00:16:38.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""are actual arguments, rather than just symbols""" start="00:16:43.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to be evaluated later. I prefer to put this in with frequency""" start="00:16:46.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and the capacitance after that,""" start="00:16:52.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but actually in this particular case,""" start="00:16:54.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""it doesn't matter at all to the mathematics.""" start="00:16:57.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So, now all I have to do, that this is defined,""" start="00:17:07.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""is I can drop the frequency on the stack,""" start="00:17:11.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which we'll say, for this example, will be 4.5 MHz,""" start="00:17:15.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then drop on the capacitance, which in this example""" start="00:17:24.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""will be 22 pF.""" start="00:17:32.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then I'll call the function that I just defined.""" start="00:17:40.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I don't really like having to try to remember""" start="00:17:42.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the short letters that I've come up with,""" start="00:17:45.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so I'll just use the longer name.""" start="00:17:48.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I need to evaluate one more time""" start="00:17:57.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because the symbol pi is in there and not yet evaluated.""" start="00:17:59.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And so if I've done that right,""" start="00:18:05.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""we have a capacitive reactance of about 1600 ohms.""" start="00:18:07.540" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Plotting""" start="00:18:12.160" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""As the last feature that I'll mention here,""" start="00:18:12.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Emacs Calc does have an interface with gnuplot,""" start="00:18:16.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""if you want to have Calc work as your graphing calculator.""" start="00:18:24.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I do need to be honest and mention""" start="00:18:30.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I don't generally use it myself""" start="00:18:33.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because there's another program in GNOME""" start="00:18:35.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I've found to be generally more convenient""" start="00:18:39.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for the things that I want to graph quickly.""" start="00:18:43.500" video="mainVideo-calc" id="subtitle"]] +[[!template text="""But I think I can give you a simple example.""" start="00:18:47.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So first, we need to drop a range on the stack.""" start="00:18:53.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Let's say 0 to 10.""" start="00:19:00.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then we need to drop the function on the stack.""" start="00:19:06.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then I believe it's the letters g and f that graph this.""" start="00:19:11.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Let's see. Yep, there we go.""" start="00:19:17.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So there's our function and it looks nice.""" start="00:19:22.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That was pretty easy.""" start="00:19:25.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That's the fast way to do it.""" start="00:19:26.660" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I will, as a disclaimer, mention that""" start="00:19:29.020" video="mainVideo-calc" id="subtitle"]] +[[!template text="""using this quick approach,""" start="00:19:32.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that sometimes more complicated graphs""" start="00:19:34.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""will not turn out nicely,""" start="00:19:38.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because by default, the resolution will be pretty low.""" start="00:19:40.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That is to say it's... gnuplot is going to be""" start="00:19:44.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""skipping a lot of points""" start="00:19:48.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and so you'll have to learn a bit more""" start="00:19:49.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""about how to use the interface,""" start="00:19:52.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what parameters to pass if you want all your graphs""" start="00:19:55.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to come out looking nice.""" start="00:19:59.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So that covers all the features that I wanted to cover.""" start="00:20:03.700" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wish list""" start="00:20:08.800" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I wanted to briefly mention a wish list of items""" start="00:20:08.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I'd like to see in Calc.""" start="00:20:13.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""One of them would be improper integrals.""" start="00:20:16.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So that's like our definite integrals""" start="00:20:23.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""except for where a limit of integration is infinity.""" start="00:20:25.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That's something that can be useful in a few applications.""" start="00:20:32.860" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Something else that would be neat to have would be""" start="00:20:38.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""annotations for row entries. So for example""" start="00:20:41.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""if I was putting together a sum of numbers""" start="00:20:45.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for, say, my monthly budget,""" start="00:20:48.820" video="mainVideo-calc" id="subtitle"]] +[[!template text="""let's say I was paying $2,000 for my rent""" start="00:20:53.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and let's say $800 a month for my groceries,""" start="00:20:57.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""(a lot of kids to feed there)""" start="00:21:03.832" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then say another $60 for dining out, and so on,""" start="00:21:07.932" video="mainVideo-calc" id="subtitle"]] +[[!template text="""it would be nice if there was some way""" start="00:21:14.566" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to put a little annotation next to each number""" start="00:21:18.260" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so that you could remember""" start="00:21:21.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what the meaning of that number was more easily.""" start="00:21:23.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I actually looked into programming this into Calc myself,""" start="00:21:27.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but discovered that it would require reprogramming""" start="00:21:31.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""quite a bit of Calc to make that work well""" start="00:21:35.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""across all calc functionality,""" start="00:21:41.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and so, eventually, I gave up.""" start="00:21:43.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""But I'd still really like to have that feature.""" start="00:21:46.940" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The final thing, though""" start="00:21:51.140" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I think this would not necessarily belong in Calc,""" start="00:21:52.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I think it would be cool if Emacs had some way""" start="00:21:54.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to run numerical solutions""" start="00:21:57.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for systems of differential equations,""" start="00:22:00.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""also known as a differential analyzer.""" start="00:22:02.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So this would allow you to be able to set up simulation models""" start="00:22:06.020" video="mainVideo-calc" id="subtitle"]] +[[!template text="""involving systems of differential equations,""" start="00:22:09.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for example, a spring mass system, or pressure temperature,""" start="00:22:11.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""or what have you, and then run the simulation""" start="00:22:14.880" video="mainVideo-calc" id="subtitle"]] +[[!template text="""using numerical approximation.""" start="00:22:18.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Maybe it would be silly""" start="00:22:22.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to actually put that in Calc itself,""" start="00:22:24.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but a nice interface maybe to some other software,""" start="00:22:26.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""simple software that did that,""" start="00:22:30.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""an easy to use interface for that""" start="00:22:33.300" video="mainVideo-calc" id="subtitle"]] +[[!template text="""would be really great.""" start="00:22:35.780" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:22:38.600" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""So that's my entire talk.""" start="00:22:38.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll just mention some information.""" start="00:22:41.801" video="mainVideo-calc" id="subtitle"]] +[[!template text="""If you want to learn more about me""" start="00:22:44.535" video="mainVideo-calc" id="subtitle"]] +[[!template text="""or things that I'm interested in,""" start="00:22:48.366" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I do not any longer have a web presence.""" start="00:22:50.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I don't have a website anymore,""" start="00:22:57.780" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but I do have a Gemini capsule""" start="00:22:59.660" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I post to all the time.""" start="00:23:03.360" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And if you can install, if you're willing to install the...""" start="00:23:07.140" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Gemini browser known as Elpher""" start="00:23:13.880" video="mainVideo-calc" id="subtitle"]] +[[!template text="""into Emacs, which is available from ELPA,""" start="00:23:19.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""then you can browse directly to it""" start="00:23:23.699" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and look around my Gemini capsule.""" start="00:23:27.360" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Thank you very much.""" start="00:23:31.440" video="mainVideo-calc" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20calc%3A%20Basic%20Calc%20functionality%20for%20engineering%20or%20electronics) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/calc-before.md b/2025/info/calc-before.md new file mode 100644 index 00000000..8e5c5bd5 --- /dev/null +++ b/2025/info/calc-before.md @@ -0,0 +1,34 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="calc"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect stroke-width="3" x="329" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 24-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-calc> +Etherpad: <https://pad.emacsconf.org/2025-calc> +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 mainVideo"><video controls preload="none" id="mainVideo-calc"><source src="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--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="mainVideo-calc" data=""" +00:03.620 Introduction +02:36.640 What is Calc? +04:54.280 calc-algebraic-entry +06:37.399 calc-roll-down +08:07.760 Advanced functions +08:58.180 Solving equations with calc-solve-for +09:54.720 Systems of equations +12:00.080 calc-find-root +12:39.960 Derivatives and integrals +14:17.540 Programmable functions +18:12.160 Plotting +20:08.800 Wish list +22:38.600 Wrapping up + +"""]]<div></div>Duration: 23:35 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-calc">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/MAc6gCUHjOw">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/calc-nav.md b/2025/info/calc-nav.md new file mode 100644 index 00000000..85146398 --- /dev/null +++ b/2025/info/calc-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/latex">LaTeX export in org-mode: the overhaul</a> +Next by time: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/claude-code-after.md b/2025/info/claude-code-after.md new file mode 100644 index 00000000..e4a29e32 --- /dev/null +++ b/2025/info/claude-code-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [ywata1989@gmail.com](mailto:ywata1989@gmail.com?subject=Comment%20for%20EmacsConf%202023%20claude-code%3A%20emacs-claude-code%3A%20Intelligent%20Claude%20Integration%20for%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/claude-code-before.md b/2025/info/claude-code-before.md new file mode 100644 index 00000000..d9c35617 --- /dev/null +++ b/2025/info/claude-code-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 20-min talk cancelled +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/2025/info/claude-code-nav.md b/2025/info/claude-code-nav.md new file mode 100644 index 00000000..35ed938a --- /dev/null +++ b/2025/info/claude-code-nav.md @@ -0,0 +1,4 @@ + +<div class="talk-nav"> +Back to the [[talks]] +</div>
\ No newline at end of file diff --git a/2025/info/commonlisp-after.md b/2025/info/commonlisp-after.md new file mode 100644 index 00000000..0b866149 --- /dev/null +++ b/2025/info/commonlisp-after.md @@ -0,0 +1,437 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="commonlisp-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Hey, everyone. This talk is on this tradition,""" start="00:00:00.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""intelligent agents in Emacs""" start="00:00:07.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using my Leonardo software individuals,""" start="00:00:10.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I've mistyped as I just wrote here, I see.""" start="00:00:13.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Thank you to Sacha and everyone""" start="00:00:16.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""at EmacsConf and Emacs, I guess.""" start="00:00:20.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sorry that I was running late.""" start="00:00:25.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm screwlisp.small-web.org.""" start="00:00:26.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I run those one or two weekly shows for a long time,""" start="00:00:29.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the Lispy Gopher Climate.""" start="00:00:34.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm active on the Mastodon at @screwlisp@gamerplus.org.""" start="00:00:35.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm screwtape on lambda.moo.mud.org.""" start="00:00:42.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And I ported, over the last kind of year,""" start="00:00:46.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""years, to some extent, I ported Eric Sandewall's system""" start="00:00:50.475" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""for developing intelligent software agents,""" start="00:00:58.500" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which he finished working on in 2014.""" start="00:01:01.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I got it working again around 2025.""" start="00:01:04.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""First, we're going to take a long arc.""" start="00:01:10.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We're going to motivate... This is the idea.""" start="00:01:14.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can see I'm using Org Mode,""" start="00:01:16.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I hope provides a good example""" start="00:01:18.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""for all the Org-Mode-oriented talks this conference.""" start="00:01:19.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But you can also see""" start="00:01:25.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that I'm using Eduardo Ochs's eev minor mode with Org.""" start="00:01:26.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But we can see a little bit of the difference""" start="00:01:33.108" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""between these two, and that will kind of evolve into""" start="00:01:35.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""my style with the agent communication in Emacs.""" start="00:01:39.208" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So you can see I used eev anchors as my Emacs headings.""" start="00:01:45.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""In eev, you just evaluate Elisp expressions""" start="00:01:53.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""as links to places.""" start="00:01:56.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""An anchor will link you somewhere else in the document.""" start="00:01:58.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So my table of contents links to my talk, I guess.""" start="00:02:01.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Anchors come in two halves,""" start="00:02:04.808" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so that's why I built that unique table of contents""" start="00:02:07.508" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""experience there. What else am I going to say?""" start="00:02:12.941" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Totally normal computing""" start="00:02:21.480" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""So first, let's just do some totally normal computing""" start="00:02:21.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because intelligence is going to be difficult to describe.""" start="00:02:24.175" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Let's just try and compute normally in Emacs in Org Mode""" start="00:02:27.141" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and then segue more so into eev,""" start="00:02:31.101" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and then maybe I would like if an agent was intelligent,""" start="00:02:34.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I would think that an intelligent agent""" start="00:02:38.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""would do something like what I'm doing.""" start="00:02:40.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It should be recognizably similar to what I do myself.""" start="00:02:43.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't think the word intelligence is relevant""" start="00:02:47.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if it's not related to something I'm not familiar with.""" start="00:02:52.400" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Using Emacs as a human""" start="00:02:55.680" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Using Emacs as a human, reading headings from my article,""" start="00:02:55.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using Common Lisp. Right, my friend jeremy_list""" start="00:03:01.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""wrote actually a big project,""" start="00:03:03.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but part of it was base64 encoding,""" start="00:03:06.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and I just yoinked his C code for base64 encoding, I think.""" start="00:03:09.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""This is just clearly some C-based 64 encoding.""" start="00:03:17.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""If you go to my blog, his project is actually a C++ project""" start="00:03:20.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and you can see me doing this with C++ rather than C.""" start="00:03:24.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But basically, you can go to my blog articles""" start="00:03:29.580" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if you want more detail to read something instead.""" start="00:03:33.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then here's some embeddable Common Lisp,""" start="00:03:40.300" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Jack Daniel's ECL ANSI Common Lisp compiler I guess.""" start="00:03:42.434" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""This is just what it looks like.""" start="00:03:48.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can see I'm using Org Mode trickily,""" start="00:03:49.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using noweb to put the lines of the C source block""" start="00:03:52.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in this one. We're tangling it to this file""" start="00:03:56.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""rather than evaluating it.""" start="00:04:00.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So, you know, literate programming, tangle and weave.""" start="00:04:01.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We're just using Org Mode""" start="00:04:05.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""like the other Org Mode people""" start="00:04:07.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""are all showing us this conference, I guess.""" start="00:04:09.198" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then we have to compile it.""" start="00:04:12.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's always hard to remember these invocations for me.""" start="00:04:13.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Results file. The file is my .fas file,""" start="00:04:16.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because the way ECL's C and C++ integration works""" start="00:04:20.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is that it just has to be seen by compile-file in Lisp.""" start="00:04:24.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I cached this earlier.""" start="00:04:30.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, I should actually start Lisp, actually, shouldn't I?""" start="00:04:32.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""How are we going to do this?""" start="00:04:36.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""(setq inferior-lisp-program "ecl"). We could M-x slime.""" start="00:04:39.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Because... we better actually load this.""" start="00:04:47.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I did a dry run before.""" start="00:04:48.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think we can just load this, because I already did it.""" start="00:04:54.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But I cached it. Let's nuke the cache.""" start="00:04:58.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Okay, I'm going to say that that probably worked.""" start="00:05:04.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Now, as you saw, that base64 encoding""" start="00:05:06.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""was just, I guess, number to character code""" start="00:05:09.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to other character code. So I wrote this higher-level Lisp one,""" start="00:05:13.620" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but that's not really the point.""" start="00:05:19.141" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Obviously, Emacs also has Base64 encoding.""" start="00:05:20.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's just a point that we might have""" start="00:05:26.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""C++ and C external programs""" start="00:05:27.980" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that we'd like to be integrating""" start="00:05:29.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""into our Emacs agents capabilities.""" start="00:05:31.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Here we can see a normal named Org Mode source block.""" start="00:05:37.140" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that calls that function, then an Org Mode source block""" start="00:05:46.475" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that calls Emacs's base64-decode-string as a way of""" start="00:05:50.475" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""validating it, I guess.""" start="00:05:56.300" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We go to Org, so we can see...""" start="00:05:57.941" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I have a named call to that function calling the Lisp function""" start="00:06:00.141" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Org is just kind of like this.""" start="00:06:04.408" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's cached but I don't seem to have run it before.""" start="00:06:07.041" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I do the Emacs decode.""" start="00:06:11.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if we just run this using C-c C-c,""" start="00:06:13.575" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and we can kind of see""" start="00:06:15.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""what Org Mode is like a little bit here.""" start="00:06:17.241" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""All right, yes, so as we can see,""" start="00:06:22.180" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""oh hang on, let's run this as well actually.""" start="00:06:24.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So the C embeddable Common Lisp""" start="00:06:27.660" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""base64 encoding gets us this.""" start="00:06:32.194" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then Emacs is decoding and gets us back,""" start="00:06:35.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""kind of validates it. I think I'm missing some things.""" start="00:06:38.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't pad characters out to the correct byte lengths,""" start="00:06:40.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that kind of thing, but it's fine.""" start="00:06:43.080" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""using this via eev as a human""" start="00:06:45.400" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""And then I kind of contrast that to,""" start="00:06:45.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I really like what my friend mdhughes.tech,""" start="00:06:48.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""game dev of the ages, calls REPL-driven development,""" start="00:06:53.180" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which he says is kind of the opposite of literate coding.""" start="00:06:57.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think eev, at least for me,""" start="00:07:06.140" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is kind of like REPL-driven development.""" start="00:07:08.941" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So in eev, if you just press F8, the thing happens.""" start="00:07:11.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And if it's a red star line,""" start="00:07:16.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the thing is an Emacs Lisp thing,""" start="00:07:17.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and otherwise it goes to the eepitch target.""" start="00:07:19.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if I do this, great, now I'm pitching to that slime""" start="00:07:23.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""REPL ECL I made. And then I pressed F8. Press F8 again.""" start="00:07:26.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""The string got coerced to a list.""" start="00:07:32.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""F8. Now it's car codified.""" start="00:07:34.481" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I quite like this, because this looks like something I can do""" start="00:07:38.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and understand doing and reason about doing.""" start="00:07:41.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I form a command to send from Lisp to Emacs.""" start="00:07:44.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I do it and I recover the string from the beginning.""" start="00:07:49.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess I had one of these here. Oh, by the way, look at""" start="00:07:52.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What Org Mode did with an eev source block.""" start="00:07:56.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then when I close the source block""" start="00:07:59.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using C-c ',""" start="00:08:01.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""it brings me back to the Org doc,""" start="00:08:02.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which was a cool synergy between the eev minor mode""" start="00:08:05.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and eev source blocks in Org Mode that I noticed.""" start="00:08:09.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so I kind of want my agents to be like this eev usage.""" start="00:08:16.020" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Clearly, Org is super powerful,""" start="00:08:22.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but I don't even like writing calls like this,""" start="00:08:25.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""where you write the function that will happen last first,""" start="00:08:28.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so you're kind of writing right to left, first to last.""" start="00:08:32.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Whereas in REPL-driven development,""" start="00:08:39.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess I'm writing top to bottom,""" start="00:08:41.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and eev, I guess, executable logs""" start="00:08:43.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""are logs that are like that.""" start="00:08:46.980" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I kind of like eev's view for reasoning""" start="00:08:48.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""more than Org's Tangle.""" start="00:08:52.379" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Obviously, Tangle is trying to do tricky things,""" start="00:08:54.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but maybe they have different specializations,""" start="00:08:57.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and eev's one is more close""" start="00:09:01.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to my own version of intelligence, maybe.""" start="00:09:04.880" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Software individuals using eev in Emacs like a human""" start="00:09:07.800" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Software individuals using eev in Emacs like a human.""" start="00:09:07.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Yeah, you can always visit my blog post for more detail.""" start="00:09:13.540" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Right, I made a CLOS object""" start="00:09:17.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in Common Lisp to wrap doing this.""" start="00:09:20.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's not really the topic.""" start="00:09:22.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's in the appendix somewhere if you need it.""" start="00:09:23.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I've just executed that.""" start="00:09:27.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can look at the appendix in your own time.""" start="00:09:29.560" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Sandewall's leonardo system""" start="00:09:32.080" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Jumping over to actually starting""" start="00:09:32.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""our hypothetical intelligent agent.""" start="00:09:33.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess we're doing eev here.""" start="00:09:36.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if we open this, press F8 a bunch of times.""" start="00:09:38.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, and if you were cloning it yourself,""" start="00:09:46.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess that's what you would do. setq eepitch-buffer-name.""" start="00:09:49.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh yeah, if you went to an eepitch shell and then came back.""" start="00:09:56.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You would have had to do that, but I didn't.""" start="00:10:00.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I didn't, so I didn't need to.""" start="00:10:01.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sandewall's style is to use relative paths""" start="00:10:04.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to tell which agent is acting inside a software individual.""" start="00:10:07.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Remembering a software individual""" start="00:10:11.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is potentially a bunch of agents.""" start="00:10:13.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And we load... So one individual,""" start="00:10:15.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""all the agents in each individual share a kernel.""" start="00:10:18.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So only one agent in one software individual""" start="00:10:21.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is active at any given time, but the agents are separate.""" start="00:10:25.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""They just all have to share the kernel resource,""" start="00:10:28.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which is the Remus agent. Oh, I got rid of this.""" start="00:10:31.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And start the CLE is the thing.""" start="00:10:38.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, I did need to have an EmacsConf knowledge base.""" start="00:10:43.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, let's just keep eepitching for a little bit.""" start="00:10:46.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I think I made... I'm going to call it emacsconf-kb.""" start="00:10:48.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Right, that looks likely. And I think that the agent...""" start="00:10:55.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I can check this. I could have checked that.""" start="00:10:59.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I could have done something like (get emacsconf-kb contents).""" start="00:11:03.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Yeah, and you can see""" start="00:11:12.700" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""there's a location inside it which is agent1,""" start="00:11:13.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I assume is an entity file""" start="00:11:15.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that I was working with before.""" start="00:11:17.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then what were we going to do?""" start="00:11:20.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh yeah, back to the embeddable Common Lisp image.""" start="00:11:21.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if I just press our button back to there...""" start="00:11:28.280" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Start a loop for one leonardo software individual""" start="00:11:36.100" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""And so my idea is that for an Emacs agent,""" start="00:11:36.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""basically, I'd like to have an Emacs Lisp list.""" start="00:11:41.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And just when stuff gets into that list,""" start="00:11:47.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the agent which is always running, but running slowly,""" start="00:11:49.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""will incrementally just do the stuff it finds in that list.""" start="00:11:53.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Populating that list probably gets into stuff""" start="00:11:58.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""like your Beliefs, Desires, Intents framework""" start="00:12:00.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and those kind of well-known and well-studied algorithms.""" start="00:12:03.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""That's not the point here.""" start="00:12:06.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I just want to have a list in Emacs that my ECL...""" start="00:12:07.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm just going to run a loop in ECL,""" start="00:12:14.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and the ECL is going to keep sending""" start="00:12:16.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""anything it finds in that Emacs Lisp list""" start="00:12:18.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to the software agent. The agent is also in Emacs,""" start="00:12:22.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so it would be able to populate its own list itself""" start="00:12:25.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if it had an idea of evaluating desires and chances to improve""" start="00:12:28.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""whatever it wants to improve""" start="00:12:36.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and chances to avoid whatever it wants to avoid.""" start="00:12:37.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We talked a little bit too much. Let's just start this.""" start="00:12:40.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sorry that I'm manually setting up my screen.""" start="00:12:47.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then let's put CLisp over here.""" start="00:12:51.540" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Right, we could work with this, right?""" start="00:12:55.500" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""This loop isn't very important.""" start="00:12:58.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's just a Common Lisp loop. I copy my friend jmbr's style""" start="00:13:00.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""of using Lisp machine-style keyword arguments""" start="00:13:04.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""instead of symbols like cl-loop,""" start="00:13:08.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the compatibility thing in Emacs Lisp does.""" start="00:13:12.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'd never initialized that. Well, let's do that.""" start="00:13:16.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Okay, now we have the list.""" start="00:13:28.140" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And just every 30, let's turn it down to every 20 seconds.""" start="00:13:30.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hypothetically, it's going to put""" start="00:13:35.020" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""whatever it finds in there, into there.""" start="00:13:37.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so, I think, yeah, and now... Great.""" start="00:13:40.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So here I'm just going to fill it with stuff.""" start="00:13:46.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And this is quite interesting, I think.""" start="00:13:50.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It just shows I can put a whole bunch of stuff into that list.""" start="00:13:54.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Ideally, the agent would populate it itself""" start="00:13:58.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""with a BDI algorithm or something.""" start="00:14:01.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But if we just put some stuff in there,""" start="00:14:03.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""we'll see that it will all get sent""" start="00:14:04.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""basically using Eduardo's eepitch internal machinery, at least.""" start="00:14:07.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And hence, it meets my requirement""" start="00:14:14.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that it works exactly like I work.""" start="00:14:17.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then in eev, I just have to press M-e.""" start="00:14:20.780" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, it works via Emacs server, and I didn't start that,""" start="00:14:25.860" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so if we server-start, hopefully...""" start="00:14:31.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then, ideally, things will just begin happening""" start="00:14:39.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in this slime-repl C/Lisp agent.""" start="00:14:42.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, if this was still running.""" start="00:14:53.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Okay, well we got at least one,""" start="00:15:05.420" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but hypothetically lots of these will happen.""" start="00:15:07.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So, show agent, I guess,""" start="00:15:09.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""happened over here. I put a whole bunch of "sleep-for"s in,""" start="00:15:13.700" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because I thought that going slowly""" start="00:15:17.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""would make it seem more human.""" start="00:15:19.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Like I saw in Eduardo's talk last year""" start="00:15:21.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which is where I learned about eev.""" start="00:15:24.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""The system is a little fragile.""" start="00:15:29.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hypothetically, we have a whole bunch of agents.""" start="00:15:32.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess every time it gets sent,""" start="00:15:41.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""it checks that we're in the right agent.""" start="00:15:43.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And it's not actually just sending a string,""" start="00:15:45.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""it's sending a sequence of string actions over there.""" start="00:15:47.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so we see Emacs Lisp hypothetically put,""" start="00:15:52.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess it put this "foo bar baz!" into an entity, message-1,""" start="00:15:57.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which should be of type message, I guess, conceivably.""" start="00:16:06.860" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I forget if I set that up earlier.""" start="00:16:11.900" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's in the appendix somewhere.""" start="00:16:13.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then it just called, it did a sequence of actions""" start="00:16:14.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which was really just one action of showing that.""" start="00:16:18.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then I called b64-encode on message1,""" start="00:16:21.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I believe will have set message-1 encoded.""" start="00:16:26.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Can I check that manually while it's happening?""" start="00:16:30.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Disaster. Well that's what it should have been.""" start="00:16:37.243" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, I did mention it was a little bit fragile.""" start="00:16:51.500" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What if we put... Can we kind of rescue this?""" start="00:16:54.941" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't want to try redoing this. It's slightly fragile.""" start="00:17:03.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What it would do, we can see the actions are kind of getting there,""" start="00:17:07.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but somehow my message didn't end up getting encoded""" start="00:17:12.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""by that sequence of actions.""" start="00:17:16.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So this decode will have also made the decoded one be null.""" start="00:17:18.120" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Let's do it manually""" start="00:17:23.280" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Let's just do it manually. Should have worked.""" start="00:17:23.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""b64-encode, which calls out to Emacs""" start="00:17:26.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to get everything actually done.""" start="00:17:30.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, I got interrupted by the agent.""" start="00:17:37.300" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, if I do it manually, it worked.""" start="00:17:41.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hypothetically, the queue thing should have worked. Great.""" start="00:17:43.321" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, you can see it's kind of working.""" start="00:17:53.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Could be more robust.""" start="00:17:56.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""The reason is that I think what I did is a bit fragile,""" start="00:17:57.441" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but the intent is that FIPA,""" start="00:18:03.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Foundation for Intelligent Physical Agents's""" start="00:18:07.108" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""SL standard has tools for reliability""" start="00:18:09.308" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""through repetition and checking outcomes and that kind of thing.""" start="00:18:15.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I would use those. I'm not putting too much work""" start="00:18:19.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""into being ultra-reliable right now, but it kind of worked.""" start="00:18:22.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We saw, I guess, at least Embeddable Common Lisp""" start="00:18:26.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""believed it used emacsclient externally, asynchronously,""" start="00:18:29.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to send these to Emacs within Emacs.""" start="00:18:35.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I put a whole bunch of sleeps into its thing""" start="00:18:38.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to make it look slow and human-like, kind of happened""" start="00:18:41.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because Emacs' model is that it's kind of single-threaded.""" start="00:18:45.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Can I just... I bet if we run this again""" start="00:18:52.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It'll at least look like it's succeeding""" start="00:18:59.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because I fixed the base64 encoding""" start="00:19:02.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and so forth in the background. I wonder if it will.""" start="00:19:05.040" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:11.400" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""In the meantime, let's wrap up this talk to some extent.""" start="00:19:11.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I'm just kind of saying what I'm expecting to happen.""" start="00:19:15.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I took out next action.""" start="00:19:18.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Originally, I was keeping the list inside of the agent.""" start="00:19:20.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I decided to keep the list inside Emacs""" start="00:19:25.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because I have kind of first class Emacs is my IDE,""" start="00:19:27.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so I have better access to what's going on in my IDE.""" start="00:19:31.680" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Intelligence""" start="00:19:37.608" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Then I wanted to talk about intelligence a little bit""" start="00:19:37.608" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in whatever my remaining time is.""" start="00:19:39.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I just have these great bullet points""" start="00:19:41.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""of Nosredna yduJ and Eric Sandewall.""" start="00:19:43.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So Nosredna yduJ, when she was on the show quite a long time ago,""" start="00:19:45.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""she... I keep describing things as expert systems""" start="00:19:50.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and she wanted to know what I meant""" start="00:19:55.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""when I said expert systems,""" start="00:19:57.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and I gave her a Lisp software example""" start="00:19:58.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and she said she personally wrote""" start="00:20:00.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that software in the 80s that I was referring to""" start="00:20:02.619" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and she wanted to know how it was an expert system.""" start="00:20:06.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What I mean when I say expert system""" start="00:20:08.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is a system that works kind of like I do and eev's eepitch does.""" start="00:20:10.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's where we can really reason""" start="00:20:19.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in a very human-relatable way""" start="00:20:22.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""about what the inputs to the program is.""" start="00:20:24.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And also a program should be exposed to other programs""" start="00:20:26.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in terms of like a well-structured transfer of knowledge as inputs,""" start="00:20:31.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and it should have a well-structured""" start="00:20:36.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""transfer of knowledge kind of outputs.""" start="00:20:38.011" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't know why this b64-encode message wasn't working.""" start="00:20:41.940" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then we kind of faked it into working.""" start="00:20:47.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's going to be embarrassing for me""" start="00:20:50.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if anybody watches this. But yeah, so yduJ's thing...""" start="00:20:52.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then I was going to also build""" start="00:20:58.740" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that into Eric Sandewall's one.""" start="00:20:59.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So this is my vision of expert systems""" start="00:21:02.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""as kind of maybe this is an important""" start="00:21:05.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""general style loosely associated with Lisp.""" start="00:21:07.780" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Same as the Lisp editor Emacs.""" start="00:21:11.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So Eric Sandewall's description of intelligence""" start="00:21:14.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""was that his grandchildren were intelligent.""" start="00:21:17.666" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if we had software agents that were intelligent,""" start="00:21:21.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""this would be true if and maybe only if they were similar""" start="00:21:26.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to his grandchildren""" start="00:21:32.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""who were a good reference for intelligence.""" start="00:21:33.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And grandchildren live for a really long time.""" start="00:21:36.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""They kind of learn gradually.""" start="00:21:39.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""They don't run on GPUs for a few minutes""" start="00:21:42.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and then get thrown out forever, something like that.""" start="00:21:46.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so this is the kind of vision of, I guess,""" start="00:21:51.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the Leonardo system software individual stuff.""" start="00:21:54.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can see we kind of faked it into...""" start="00:21:57.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""at least the show get message one decoded bits were working.""" start="00:22:03.947" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm not sure what was happening""" start="00:22:06.321" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""with the Elisp ones that worked interactively,""" start="00:22:07.301" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but then they didn't work in my loopy thing.""" start="00:22:12.675" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh yeah, and then so I mentioned""" start="00:22:18.608" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""thank you to Sacha at the start of this talk.""" start="00:22:21.308" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so Eric Sandewall's emphasis""" start="00:22:24.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that you'd really like intelligent software agents,""" start="00:22:26.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Leonardo system agents, to be like your grandchildren.""" start="00:22:31.341" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And I was talking to somebody, maybe to Ramin Honary""" start="00:22:34.175" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""who's doing the schemacs talk this year""" start="00:22:40.660" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""about Sacha's writing.""" start="00:22:44.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""A lot of Sacha's writing is about""" start="00:22:46.875" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""her experiences of life and technology,""" start="00:22:48.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and especially raising A\*""" start="00:22:51.775" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and her observations of her progeny A\*'s""" start="00:22:54.375" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""experiences of life and technology,""" start="00:22:59.741" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I would say as well as being""" start="00:23:05.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the Emacs News and Emacs conf doer that she is.""" start="00:23:07.875" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Yeah, and so I think a lot of what Sacha is seen doing""" start="00:23:18.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and concerned with are specifically what Eric Sandewall""" start="00:23:22.741" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""identifies as the study of intelligence as such,""" start="00:23:25.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""as should apply to computing as well. That was my thought""" start="00:23:31.208" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""on Sacha, Eric Sandewall, intelligence, and yduJ.""" start="00:23:36.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I have this note from pizzapal...""" start="00:23:42.980" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I didn't realize that Microsoft had announced""" start="00:23:44.241" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that 2025 was going to be the year of the software agent.""" start="00:23:46.275" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I only found this out in hindsight""" start="00:23:49.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""when I saw people crowing on the Mastodon""" start="00:23:51.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""about how Microsoft had basically declared""" start="00:23:54.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that their Year of the Agent marketing campaign""" start="00:23:58.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""was a failure""" start="00:24:00.780" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""where basically people didn't like the same old web services""" start="00:24:04.460" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but now while you're accessing,""" start="00:24:09.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""while you're formally kind of accessing a web service,""" start="00:24:11.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the kind of web service that used to be called""" start="00:24:15.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""serverless web services, this kind of thing,""" start="00:24:16.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but you're just being gibbered at by Microsoft Copilot""" start="00:24:19.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""while you're trying to use regular services.""" start="00:24:23.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And people turned out not to like this.""" start="00:24:27.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think that, as we can see in this agent,""" start="00:24:29.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the agent really needs to be running on its own clock""" start="00:24:32.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and independently of you.""" start="00:24:36.375" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Like if you imagine your body is getting""" start="00:24:37.908" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""novel, slightly speculative instructions from your brain""" start="00:24:42.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""constantly throughout your entire waking day, quite slowly,""" start="00:24:46.075" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""this is what an agent should be like.""" start="00:24:50.681" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And it should be... Sandewall wrote about this.""" start="00:24:54.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Basically, computer programs""" start="00:24:59.541" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""aren't going to want to use human natural language with each other.""" start="00:25:01.541" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""There's nothing desirable about that,""" start="00:25:04.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so you wouldn't have two hypothetical Microsoft agents,""" start="00:25:06.675" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which are just regular web services with""" start="00:25:10.675" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""a GPT model gibbering at you""" start="00:25:13.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""while you're trying to use the web service.""" start="00:25:16.341" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think we can see...""" start="00:25:19.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Microsoft did the wrong thing with the word agent,""" start="00:25:22.540" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""allowing that agent is an overloaded term like static.""" start="00:25:26.741" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm going to stop this. I'm not going to try and fix this.""" start="00:25:30.708" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sorry, everybody. Thank you. Talk to you on the Mastodon.""" start="00:25:34.257" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hopefully, see you on the show.""" start="00:25:36.314" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""See you at your conference talks.""" start="00:25:37.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""My blog has writing and examples of this with multi-agents,""" start="00:25:40.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""more C and C++ stuff, Lisp things.""" start="00:25:45.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You're welcome to come on my show to be interviewed,""" start="00:25:50.820" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""however formally we do that. See everybody next time.""" start="00:25:53.440" video="mainVideo-commonlisp" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20commonlisp%3A%20Common%20Lisp%20images%20communicating%20like-a-human%20through%20shared%20Emacs%20slime%20and%20eev) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/commonlisp-before.md b/2025/info/commonlisp-before.md new file mode 100644 index 00000000..dd88acf3 --- /dev/null +++ b/2025/info/commonlisp-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="commonlisp"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect stroke-width="3" x="446" y="75" opacity="0.8" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 26-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev> Etherpad: <https://pad.emacsconf.org/2025-commonlisp> +Etherpad: <https://pad.emacsconf.org/2025-commonlisp> +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 mainVideo"><video controls preload="none" id="mainVideo-commonlisp"><source src="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--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:56 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-commonlisp">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--debugged.png">Download --debugged.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://youtu.be/hy5i6Qb6fYE">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/commonlisp-nav.md b/2025/info/commonlisp-nav.md new file mode 100644 index 00000000..a35d90af --- /dev/null +++ b/2025/info/commonlisp-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/private-ai">Emacs and private AI: a great match</a> +Next by time: <a href="/2025/talks/greader">GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/completion-after.md b/2025/info/completion-after.md new file mode 100644 index 00000000..14e33ea5 --- /dev/null +++ b/2025/info/completion-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [paaguti@gmail.com](mailto:paaguti@gmail.com?subject=Comment%20for%20EmacsConf%202023%20completion%3A%20corfu%2Byasnippet%3A%20Easier%20than%20I%20thought) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/completion-before.md b/2025/info/completion-before.md new file mode 100644 index 00000000..a4733e81 --- /dev/null +++ b/2025/info/completion-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="completion"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect stroke-width="3" x="171" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 23-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-completion.html> Etherpad: <https://pad.emacsconf.org/2025-completion> +Etherpad: <https://pad.emacsconf.org/2025-completion> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T16:05:00Z" end="2025-12-07T16:25:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~11:05 AM - 11:25 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~10:05 AM - 10:25 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~9:05 AM - 9:25 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~8:05 AM - 8:25 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~4:05 PM - 4:25 PM UTC <br />Sunday, Dec 7 2025, ~5:05 PM - 5:25 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~6:05 PM - 6:25 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~9:35 PM - 9:55 PM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~12:05 AM - 12:25 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~1:05 AM - 1:25 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-completion"><source src="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--backup.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:42 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-completion">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-completion.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--backup.webm">Download --backup.webm (30MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--handout.pdf">Download --handout.pdf</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.webm">Download --intro.webm</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/completion-nav.md b/2025/info/completion-nav.md new file mode 100644 index 00000000..6e648706 --- /dev/null +++ b/2025/info/completion-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/weights">Weightlifting tracking with Emacs on Android</a> +Next by time: <a href="/2025/talks/zettelkasten">Zettelkasten for regular Emacs hackers</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/gardening-after.md b/2025/info/gardening-after.md new file mode 100644 index 00000000..9a7aa15e --- /dev/null +++ b/2025/info/gardening-after.md @@ -0,0 +1,387 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="gardening-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:05.980" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Hello, everyone. My name is Marco""" start="00:00:05.980" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and today I'll talk about gardening with Emacs.""" start="00:00:08.960" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Gardening? Yes, but digital gardening, obviously.""" start="00:00:13.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""But first, one thing: I'm sorry, yes,""" start="00:00:17.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I'm a Microsoft Windows user.""" start="00:00:20.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I know, I know. I said I'm sorry.""" start="00:00:22.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Please stick with me.""" start="00:00:24.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Do not skip this talk!""" start="00:00:26.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Promise, I'll show you only free software!""" start="00:00:27.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And speaking about free software,""" start="00:00:31.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""yes, this presentation is not made with Emacs,""" start="00:00:33.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but I made it with LibreOffice.""" start="00:00:35.920" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What is a digital garden?""" start="00:00:39.040" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""So what is a digital garden?""" start="00:00:39.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""A digital garden is""" start="00:00:42.000" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""your personal corner of the internet""" start="00:00:43.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to cultivate ideas.""" start="00:00:45.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Think of it like a real garden""" start="00:00:47.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""where you plant seeds (your new thoughts),""" start="00:00:50.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""you water them (you add the details),""" start="00:00:54.395" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and watch them grow.""" start="00:00:57.380" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Unlike a fixed-date blog,""" start="00:00:59.960" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""which shows only polished results,""" start="00:01:03.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""a garden includes works-in-progress--""" start="00:01:06.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""like seedlings in a greenhouse.""" start="00:01:09.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It's a network of notes""" start="00:01:12.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""connected by links and tags,""" start="00:01:14.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""helping you see patterns in your thinking.""" start="00:01:17.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Here, the ideas are not static;""" start="00:01:21.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""they evolve as you learn,""" start="00:01:24.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""creating a living archive of your mind,""" start="00:01:26.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""just like the plants in a garden grow.""" start="00:01:29.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Also here, instead of the blog platform,""" start="00:01:37.740" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""you decide the tools, the look, and your pace.""" start="00:01:41.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I'll show you how I run my garden""" start="00:01:46.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""with plain Org Mode files""" start="00:01:50.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and our favorite Emacs.""" start="00:01:53.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""In short: a digital garden""" start="00:01:55.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is a flexible, pressure-free space""" start="00:01:57.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to explore, learn in public""" start="00:02:01.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and connect the knowledge--""" start="00:02:04.213" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""your own digital ecosystem.""" start="00:02:07.160" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Why a digital garden?""" start="00:02:11.520" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Why a digital garden?""" start="00:02:11.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, a digital garden keeps knowledge alive:""" start="00:02:13.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""instead of freezing content after "publish,"""" start="00:02:17.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""you revisit and refine it,""" start="00:02:21.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""so ideas stay accurate and useful.""" start="00:02:22.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""By sharing half-formed thoughts early,""" start="00:02:26.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""you lower the barrier to writing""" start="00:02:29.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and let concepts evolve gradually--""" start="00:02:31.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""no need to wait for one "perfect" essay.""" start="00:02:34.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Links and tags weave ideas together,""" start="00:02:37.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""revealing unexpected patterns""" start="00:02:41.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that isolated posts would hide.""" start="00:02:43.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""This approach sheds perfectionism,""" start="00:02:46.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""encouraging small, regular updates""" start="00:02:49.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that build momentum and invite collaboration.""" start="00:02:52.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, actually, even not regular updates are fine.""" start="00:02:55.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Early readers can offer feedback, share resources,""" start="00:03:00.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or identify blind spots,""" start="00:03:04.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""accelerating your and their improvement.""" start="00:03:07.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Over time, your garden can become""" start="00:03:12.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""a searchable showcase of your thinking,""" start="00:03:14.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""a living résumé for collaborators, peers,""" start="00:03:18.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or anyone curious about how you learn.""" start="00:03:21.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And what about me?""" start="00:03:25.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Why a digital garden?""" start="00:03:27.800" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, I actually have started a digital garden""" start="00:03:29.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to learn Emacs and Org Mode.""" start="00:03:33.140" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""How to digital garden?""" start="00:03:39.200" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""How to digital garden?""" start="00:03:39.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, start simple.""" start="00:03:41.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Pick one place for your notes""" start="00:03:43.000" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and put them online.""" start="00:03:45.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Even the worst Github ever out there is fine.""" start="00:03:46.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Then, well, maybe you can move out of GitHub,""" start="00:03:50.420" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but that's another story.""" start="00:03:53.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Capture your ideas quickly.""" start="00:03:55.020" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Publish them, even rough,""" start="00:03:57.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and maybe, if you want, tag them as seeds""" start="00:04:00.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to let the other people know they are rough.""" start="00:04:02.940" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Learning in public is useful""" start="00:04:06.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""because link-related pages""" start="00:04:09.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""so that readers can work through your thinking,""" start="00:04:11.580" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""helping them see your connections.""" start="00:04:16.860" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Once a week or whenever you want,""" start="00:04:19.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""prune outdated pieces if you want""" start="00:04:22.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or keep them there""" start="00:04:24.960" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and add fresh insights if you have any.""" start="00:04:26.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Share your updates openly.""" start="00:04:30.460" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Invite comments because steady small steps""" start="00:04:33.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""will keep the garden thriving.""" start="00:04:38.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And what about me?""" start="00:04:41.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""How I do digital garden work with Emacs?""" start="00:04:43.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""With Org Mode and its publishing to HTML file,""" start="00:04:46.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and we will see it in a moment.""" start="00:04:51.140" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""How to make Emacs portable, on Windows""" start="00:04:57.440" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""How to make Emacs portable on Windows""" start="00:04:57.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is the first topic.""" start="00:05:01.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, being in Windows,""" start="00:05:03.700" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I have the advantage and the possibility""" start="00:05:06.000" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to bring and use my data""" start="00:05:08.740" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and software basically everywhere:""" start="00:05:10.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""home, office, my sister-in-law's PC""" start="00:05:14.300" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""when she needs technical help,""" start="00:05:18.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""friends and the like.""" start="00:05:19.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""So for these reasons,""" start="00:05:21.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""it's been many, many years""" start="00:05:23.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I'm using exclusively portable applications""" start="00:05:25.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that do not need an installation""" start="00:05:28.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and bring their own data""" start="00:05:31.540" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and configuration bundled together.""" start="00:05:33.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And now also Emacs is portable,""" start="00:05:37.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""inside my tiny, really tiny, USB key.""" start="00:05:38.800" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""How?""" start="00:05:43.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I mean: not being sure""" start="00:05:44.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""if my USB key drive letter""" start="00:05:46.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""will be D:, E:, K:,""" start="00:05:48.800" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or whatever other drive letter""" start="00:05:52.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""will be assigned to it""" start="00:05:53.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""by the system I'm plugging it into,""" start="00:05:54.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""how can I specify, to Emacs,""" start="00:05:57.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that its home folder is on my USB?""" start="00:06:00.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, I could maybe have used relative paths,""" start="00:06:04.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but then, where's the fun of hacking things?""" start="00:06:07.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""The trick here is""" start="00:06:10.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the not-so-well-known ~dp0 system variable""" start="00:06:12.700" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that contains the execution directory""" start="00:06:17.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""full path of the executable file.""" start="00:06:20.700" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And yes, it ends with a backslash,""" start="00:06:25.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""so composing it with other literal paths is ugly as well.""" start="00:06:29.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""The ~dp0 variable is only available""" start="00:06:33.340" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""inside a batch file during its execution,""" start="00:06:37.540" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and expands to the drive (d) and the path (p),""" start="00:06:40.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""in which that batch file (0th)""" start="00:06:46.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""command line parameter is located""" start="00:06:50.701" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""(that obviously cannot change""" start="00:06:55.500" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""because it's executing).""" start="00:06:58.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""The data are obtained""" start="00:07:02.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""from the %0 system variable""" start="00:07:04.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that contains the batch file name.""" start="00:07:08.734" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I actually have never tried,""" start="00:07:10.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but it should even allow to let the batch run""" start="00:07:12.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""from a UNC network location""" start="00:07:16.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""with no mapped drive letter at all!""" start="00:07:19.820" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And that's the batch file""" start="00:07:22.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I'm using to run Emacs with an automatically selected""" start="00:07:24.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and fixed Emacs folder,""" start="00:07:28.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""emacshome folder,""" start="00:07:31.140" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""sibling of the unzipped Emacs one,""" start="00:07:33.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""regardless the computer I'm in""" start="00:07:35.900" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and the assigned drive letter.""" start="00:07:37.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""If you need a portable Emacs,""" start="00:07:40.220" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""this is probably the simplest way to go!""" start="00:07:42.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Just put the runemacs.bat file""" start="00:07:45.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""in your unzipped Emacs""" start="00:07:48.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""(well, 30.2 actually now) bin folder,""" start="00:07:50.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and your Emacs and its configuration""" start="00:07:54.380" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""will always be there with you.""" start="00:07:56.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""With this, I'm basically""" start="00:07:58.620" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""creating the possibility""" start="00:08:00.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to bring my own digital garden with me,""" start="00:08:01.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""just like a little desk Zen garden,""" start="00:08:05.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and together with it, also,""" start="00:08:09.467" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""all the tools that I need to work on it,""" start="00:08:11.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""always with me, in my USB key.""" start="00:08:13.860" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""My Emacs customization""" start="00:08:18.820" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Speaking about configuration,""" start="00:08:18.820" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""here comes the second topic:""" start="00:08:20.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""my Emacs customization.""" start="00:08:22.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Having a portable Emacs allows to""" start="00:08:25.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""always have the configuration with me.""" start="00:08:28.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Yes, okay, but which configuration?""" start="00:08:31.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, obviously, I'm speaking of the init.el file""" start="00:08:33.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that lives inside of the emacs.d folder""" start="00:08:38.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""in my emacshome portable configuration folder""" start="00:08:42.000" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that we just saw.""" start="00:08:45.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I'm not an Emacs expert,""" start="00:08:46.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but I want to highlight a point here""" start="00:08:48.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that has to be clear to every one of us:""" start="00:08:51.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the set of basic considerations I had""" start="00:08:55.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""for text width, tabs versus spaces,""" start="00:08:59.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""trailing spaces, and so on.""" start="00:09:02.020" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""As you can see here,""" start="00:09:05.140" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I'm pretty opinionated,""" start="00:09:07.300" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but this is the important part:""" start="00:09:08.960" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""we are lucky enough to be able to use Emacs,""" start="00:09:10.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that is presumably""" start="00:09:15.340" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the most highly configurable tool ever,""" start="00:09:16.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""so let's use it!""" start="00:09:20.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Remember that it's your Emacs,""" start="00:09:21.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and you can and must configure it""" start="00:09:24.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""for your needs,""" start="00:09:27.860" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""even if it might seem ridiculous to others.""" start="00:09:28.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Here, the configuration you see""" start="00:09:33.140" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is not the important part.""" start="00:09:35.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""The important part is how you feel""" start="00:09:37.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""with your configuration.""" start="00:09:39.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""For example: I have a fill-column-indicator""" start="00:09:42.420" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""at 72 characters,""" start="00:09:45.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I prefer spaces instead of tabs,""" start="00:09:47.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""no trailing spaces, truncate lines, and so on.""" start="00:09:49.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It might seem weird to some of you""" start="00:09:53.020" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and to most of my colleagues""" start="00:09:55.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""(and friends as well,""" start="00:09:57.960" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but that's another story!)""" start="00:09:58.960" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and it might even be.""" start="00:10:00.620" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""But I'm comfortable with my configuration,""" start="00:10:02.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and you should be with yours too.""" start="00:10:05.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""That is: as an owner and worker""" start="00:10:07.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""of my own digital garden,""" start="00:10:11.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""it's obviously easier for me""" start="00:10:13.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to choose my own tools""" start="00:10:15.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and adapt those to my needs,""" start="00:10:18.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""instead of the opposite!""" start="00:10:21.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""If I want to put the roses""" start="00:10:23.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""in a circle instead of a row""" start="00:10:25.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that is maybe the best practice, who cares?""" start="00:10:27.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It's my garden, and I use it as I want.""" start="00:10:30.400" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""PlantUML and Japanese""" start="00:10:36.120" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Continuing on the configuration party,""" start="00:10:36.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the third topic is PlantUML and Japanese.""" start="00:10:38.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Why those two are listed together?""" start="00:10:44.860" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Well, they are weird enough""" start="00:10:47.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to be both part of my configuration.""" start="00:10:48.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""First, I think PlantUML""" start="00:10:50.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is a very nice and powerful tool,""" start="00:10:52.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""so integrating it in Emacs""" start="00:10:55.020" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is pretty useful,""" start="00:10:57.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""even if I'm currently using it""" start="00:10:58.900" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""only to generate SVG images""" start="00:11:01.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""when publishing my digital garden to HTML.""" start="00:11:04.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""There are some pain points""" start="00:11:08.960" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that I still have to solve,""" start="00:11:10.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and I know that it's also possible to use it""" start="00:11:11.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""for (pre)viewing diagrams""" start="00:11:14.740" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""directly in Emacs, without publishing,""" start="00:11:16.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but maybe I don't need this feature at the moment.""" start="00:11:19.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And I have to thank our favorite Sacha Chua here,""" start="00:11:22.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""because she taught me (through Mastodon)""" start="00:11:27.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""how to automatically answer y,""" start="00:11:29.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""when publishing in HTML,""" start="00:11:32.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""every time that PlantUML has to (re)generate an SVG.""" start="00:11:33.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""So, thank you Sacha.""" start="00:11:36.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Moving to Japanese, let me go back to""" start="00:11:39.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the previous slide for a moment""" start="00:11:41.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to show you a bit more in detail""" start="00:11:43.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the coding system I've configured.""" start="00:11:46.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""If this PC is helping me in moving""" start="00:11:49.800" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""back to the previous slide.""" start="00:11:54.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Okay, so let me... No, it's not working.""" start="00:11:56.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It's not... Okay.""" start="00:12:02.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""So, speaking about Japanese,""" start="00:12:05.820" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I have studied Japanese.""" start="00:12:09.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""My wife is Japanese,""" start="00:12:12.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but that's a detail.""" start="00:12:13.800" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""So I frequently write in Japanese,""" start="00:12:15.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and I wanted to write in Japanese""" start="00:12:18.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""also inside Emacs.""" start="00:12:19.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I learned, as you can see,""" start="00:12:21.220" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that UTF-8 DOS""" start="00:12:23.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is a more than enough coding system""" start="00:12:25.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to allow me writing in the same file,""" start="00:12:28.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""both Italian with all our accented letters""" start="00:12:31.140" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and Japanese through Windows IME system.""" start="00:12:35.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""This allows me to properly write, save, read files,""" start="00:12:40.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but it was not enough for copying""" start="00:12:44.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and pasting Japanese text.""" start="00:12:48.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""If I copied some Japanese text from the browser""" start="00:12:51.180" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or even from another text editor,""" start="00:12:55.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""it didn't work.""" start="00:12:56.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It only pasted the rubbish in Emacs""" start="00:12:57.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""until I found out that for whatever reason,""" start="00:13:00.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I had to use, as you can see in bold,""" start="00:13:04.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""UTF-16LE DOS for the selection coding system.""" start="00:13:07.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""And this basically allows me""" start="00:13:13.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to copy Japanese from another file,""" start="00:13:14.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""text editor, browser, whatever,""" start="00:13:17.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and paste it in Emacs and vice versa.""" start="00:13:19.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""So the lesson here is,""" start="00:13:22.700" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""if you need European languages""" start="00:13:24.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and Japanese inside your Emacs,""" start="00:13:26.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""well, this coding system works.""" start="00:13:29.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Let me go back to PlantUML and Japanese.""" start="00:13:32.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Another interesting thing about Japanese""" start="00:13:37.000" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is this nice macro I found""" start="00:13:40.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""in the Emacs mailing list""" start="00:13:44.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to add furigana to Japanese kanjis""" start="00:13:46.980" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""when exporting or publishing to HTML.""" start="00:13:49.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It's actually even possible to do the same""" start="00:13:53.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""with LaTeX export/publish""" start="00:13:55.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and I'll give you some references later.""" start="00:13:57.680" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It's very useful because I can show,""" start="00:14:00.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""as you can see on the example at the bottom,""" start="00:14:03.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I can show the easier-to-read pronunciation""" start="00:14:06.860" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""even for readers with really basic knowledge of Japanese.""" start="00:14:10.220" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""(And it's also useful to myself, actually,""" start="00:14:14.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to remember how to pronounce those kanji!)""" start="00:14:17.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""For those of you that have no idea""" start="00:14:20.260" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""on how to read or write Japanese, well, sorry.""" start="00:14:22.560" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""As you can see, the garden evolved from the beginning""" start="00:14:27.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""on how to use Emacs and Org Mode,""" start="00:14:31.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and it's evolving further,""" start="00:14:33.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and here it's becoming open to""" start="00:14:35.200" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""different plants (or PlantUML…)""" start="00:14:37.400" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and also be able to adapt""" start="00:14:40.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to different foreign visitors' needs.""" start="00:14:43.840" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""My Org Mode publishing configuration""" start="00:14:50.660" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Third topic: my Org Mode publishing configuration,""" start="00:14:50.660" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or where the digital garden is born.""" start="00:14:54.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""The latest (but not least!) part of""" start="00:14:58.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the creation and tending of my digital garden""" start="00:15:00.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is the publishing file that is needed to export""" start="00:15:03.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the whole Org Mode project into HTML.""" start="00:15:07.120" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Here I do not have many fancy configurations,""" start="00:15:11.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""even though I'm copying the publishing.el file itself""" start="00:15:14.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""in the output folder,""" start="00:15:19.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to make it available in the published version of the garden.""" start="00:15:21.460" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Also I have added the mentioned configuration""" start="00:15:24.860" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to manage SVG (or PNG) exports from PlantUML""" start="00:15:28.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""(thank you again, Sacha),""" start="00:15:32.980" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and I'm also forcing HTML5""" start="00:15:34.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""without scripts as the result format.""" start="00:15:37.000" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Together with this,""" start="00:15:40.060" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I also have a fancy CSS addition""" start="00:15:41.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to the default one""" start="00:15:43.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""that uses the System Font Stack concept""" start="00:15:44.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to harmonize fonts""" start="00:15:48.240" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""with readers' local systems,""" start="00:15:49.760" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""without downloading or injecting""" start="00:15:51.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""external fonts.""" start="00:15:54.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I've customized links and tags a bit,""" start="00:15:55.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""with the CSS, together with tables""" start="00:15:57.800" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and some other pieces here and there,""" start="00:15:59.840" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""but nothing too much fancy.""" start="00:16:01.160" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The final result""" start="00:16:04.520" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""So, this is one (not-so-)random page""" start="00:16:04.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""of my digital garden,""" start="00:16:08.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or my knowledge 枯山水,""" start="00:16:10.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""my knowledge Zen garden, as I prefer to call it.""" start="00:16:12.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""This is, specifically, the page related""" start="00:16:17.620" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""to write about the Digital Garden concept itself,""" start="00:16:20.520" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""as a sort of meta-writing.""" start="00:16:23.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""You can see the different""" start="00:16:26.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""rendering of the links,""" start="00:16:27.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""depending if they are internal, in blue,""" start="00:16:28.880" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""or external to the garden in gray-ish.""" start="00:16:31.640" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""You can see the Japanese furigana""" start="00:16:37.660" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""on top of the kanjis,""" start="00:16:39.440" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""and you also can see the automatic table of contents,""" start="00:16:40.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the custom aside component that highlights""" start="00:16:44.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""the latest modification date, and so on.""" start="00:16:47.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Everything I've spoke about here""" start="00:16:50.820" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""is available in my digital garden""" start="00:16:53.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""in my knowledge kare-san-sui, again,""" start="00:16:55.920" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""as a sort of self-description""" start="00:16:57.600" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""of the digital garden itself.""" start="00:17:00.600" video="mainVideo-gardening" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Thank you for listening""" start="00:17:03.280" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Thank you, everyone,""" start="00:17:03.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""for being with me till the end.""" start="00:17:04.280" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""So as I said, if you want more details""" start="00:17:06.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""about these topics,""" start="00:17:08.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""take a look at my knowledge kare-san-sui.""" start="00:17:10.040" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""The link is here, and feel free to contact me""" start="00:17:13.160" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""through Delta Chat""" start="00:17:16.360" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""at this email address.""" start="00:17:17.480" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Yes, I know.""" start="00:17:20.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It's a Microsoft email address.""" start="00:17:21.320" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""It's an old one.""" start="00:17:23.720" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""I recycled it. I know. It's my fault.""" start="00:17:25.080" video="mainVideo-gardening" id="subtitle"]] +[[!template text="""Thank you again, and happy Emacs everyone!""" start="00:17:29.020" video="mainVideo-gardening" id="subtitle"]] + +</div> + +Captioner: rodion + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20gardening%3A%20Gardening%20in%20Emacs%3A%20A%20Windows%20user%27s%20tale%20of%20tending%2C%20tweaking%2C%20and%20triumph) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/gardening-before.md b/2025/info/gardening-before.md new file mode 100644 index 00000000..d94f7b4e --- /dev/null +++ b/2025/info/gardening-before.md @@ -0,0 +1,31 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="gardening"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect stroke-width="3" x="432" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 18-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 Etherpad: <https://pad.emacsconf.org/2025-gardening> +Etherpad: <https://pad.emacsconf.org/2025-gardening> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T19:15:00Z" end="2025-12-07T19:35:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~2:15 PM - 2:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~1:15 PM - 1:35 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~12:15 PM - 12:35 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~11:15 AM - 11:35 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~7:15 PM - 7:35 PM UTC <br />Sunday, Dec 7 2025, ~8:15 PM - 8:35 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~9:15 PM - 9:35 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~12:45 AM - 1:05 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~3:15 AM - 3:35 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~4:15 AM - 4:35 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-gardening"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--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="mainVideo-gardening" data=""" +00:05.980 Introduction +00:39.040 What is a digital garden? +02:11.520 Why a digital garden? +03:39.200 How to digital garden? +04:57.440 How to make Emacs portable, on Windows +08:18.820 My Emacs customization +10:36.120 PlantUML and Japanese +14:50.660 My Org Mode publishing configuration +16:04.520 The final result +17:03.280 Thank you for listening + +"""]]<div></div>Duration: 17:36 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-gardening">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.webm">Download --main.webm (48MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--split.vtt">Download --split.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani.odp">Download .odp (3.6MB)</a></li><li><a href="https://youtu.be/lNIc8-_C9kQ">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/gardening-nav.md b/2025/info/gardening-nav.md new file mode 100644 index 00000000..da717ec7 --- /dev/null +++ b/2025/info/gardening-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/hyperboleqa">Questions and answers to help you fly with Hyperbole</a> +Next by time: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/gmail-after.md b/2025/info/gmail-after.md new file mode 100644 index 00000000..d0b0ca1a --- /dev/null +++ b/2025/info/gmail-after.md @@ -0,0 +1,606 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="gmail-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Before we begin""" start="00:00:00.000" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Hello everyone.""" start="00:00:00.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""My name is Bala Ramadurai.""" start="00:00:01.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Today I'm going to be talking about org-gmail.""" start="00:00:03.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's something that I put together.""" start="00:00:07.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""This is what I call gmail meets org mode.""" start="00:00:10.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And they get along too.""" start="00:00:12.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's talk about email""" start="00:00:15.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and how to manage email via org mode.""" start="00:00:16.520" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The 4-year overnight success""" start="00:00:19.840" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""This project is a four year overnight success.""" start="00:00:19.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It was in 2021.""" start="00:00:23.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I said, Hey, wait a second.""" start="00:00:26.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It'll be so cool if we can integrate Gmail with org.""" start="00:00:27.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So I started trying out new things.""" start="00:00:30.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And immediately I realized""" start="00:00:32.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""this is a much larger project than I thought.""" start="00:00:34.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So it lived in someday maybe.org""" start="00:00:36.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""for about three years.""" start="00:00:40.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Enter 2024 AI arrives and in 2025 I had a working""" start="00:00:42.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""prototype in 24 hours flat.""" start="00:00:48.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So three years and 364 days, nothing much happened""" start="00:00:50.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and one day it actually got it working.""" start="00:00:55.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Sometimes procrastination is just waiting for the""" start="00:00:58.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""right tools.""" start="00:01:00.920" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The real title""" start="00:01:02.800" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The real title should have been org mail for""" start="00:01:02.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""people who like org mode more than email.""" start="00:01:05.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""The Gmail monster that has always been attacking us.""" start="00:01:08.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay, but we still have to deal with email.""" start="00:01:12.800" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Why not gnus/mu4e/notmuch?""" start="00:01:15.600" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""One of the most common questions that I've got so far.""" start="00:01:15.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Why not gnus or mu4e or notmuch, or other tools.""" start="00:01:18.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""They are amazing.""" start="00:01:24.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Use them if it works for you, absolutely.""" start="00:01:26.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Just go right ahead.""" start="00:01:29.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If it works for you, don't change anything""" start="00:01:30.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""because this looks cool.""" start="00:01:32.240" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The honest answer""" start="00:01:34.280" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Well, the honest answer for me is that""" start="00:01:34.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""they want to be your email client.""" start="00:01:36.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's not what I am after.""" start="00:01:39.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I don't want an email client.""" start="00:01:40.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I have enough email clients already.""" start="00:01:42.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I don't want one more.""" start="00:01:45.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And they require 500 lines of config.""" start="00:01:46.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I've tried it.""" start="00:01:49.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's a lot of maintenance for myself,""" start="00:01:50.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I still have those somewhere.""" start="00:01:53.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""The mu4e config or the gnus config.""" start="00:01:54.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""They struggle with Gmail's labels,""" start="00:01:57.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""threading, messages and deletion.""" start="00:01:59.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I find it tough, and it's either""" start="00:02:01.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""all in emacs or nothing.""" start="00:02:05.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It cannot be a combinatorial approach,""" start="00:02:07.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""is what I realized.""" start="00:02:10.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So I said, why can't we have both?""" start="00:02:11.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I want the org mode's focus""" start="00:02:13.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and Gmail's flexibility.""" start="00:02:15.960" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The org-gmail philosophy""" start="00:02:17.920" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Org-gmail philosophy is very simple.""" start="00:02:17.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You triage in Gmail.""" start="00:02:20.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Use the fast web UI for the easy stuff""" start="00:02:22.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and process in org mode.""" start="00:02:26.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Pull important threads where you do real work.""" start="00:02:27.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And of course, a two way sync is possible.""" start="00:02:30.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Changes flow both directions.""" start="00:02:33.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Big inspiration has been org-gcal.""" start="00:02:36.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I named it org-gmail because I saw org-gcal.""" start="00:02:39.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It was so cool.""" start="00:02:42.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I really wanted it.""" start="00:02:43.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Think of it like an org capture for email, but""" start="00:02:44.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""just bidirectional.""" start="00:02:47.720" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Architecture (the boring but important slide)""" start="00:02:49.440" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Alright, the architecture (boring, but important""" start="00:02:49.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""slide) is that Gmail interacts with Python via an""" start="00:02:53.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""API and interacts with Emacs Lisp.""" start="00:02:56.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""User commands, org formatting, all that magic is""" start="00:02:59.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""done on the Emacs side with Lisp.""" start="00:03:02.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Python side handles the Gmail API, OAuth,""" start="00:03:04.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""json wrangling and Gmail API handles""" start="00:03:09.141" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""the actual email data.""" start="00:03:12.408" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can do pip install, add to the load path, and""" start="00:03:13.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""10 minute OAuth setup, you are all set.""" start="00:03:17.680" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Demo 1: From gmail to org""" start="00:03:21.200" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""We'll switch over to demo from gmail to org.""" start="00:03:21.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""How do you go about doing that?""" start="00:03:27.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I will start off with a demo folder that I have.""" start="00:03:29.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It has this tree structure.""" start="00:03:32.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Ignore the tilde files.""" start="00:03:35.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So this is what it contains.""" start="00:03:36.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""An org folder with all the working directory, the""" start="00:03:37.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""actual where the life of org mode is.""" start="00:03:41.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And I have a credentials.json, this is for logging""" start="00:03:44.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""into Gmail.""" start="00:03:48.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""This is a file that you can download.""" start="00:03:49.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""The instructions are in my README in the""" start="00:03:50.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""repository.""" start="00:03:53.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can find out how to get yourself a""" start="00:03:54.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""credentials.json.""" start="00:03:56.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's not very difficult.""" start="00:03:57.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Once you have these, you're all set.""" start="00:03:59.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""All you need to do is if you have straight or any""" start="00:04:01.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""of the other VC packages ready, that you can take""" start="00:04:05.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""a Git repository and have that in your folder, you""" start="00:04:08.540" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""can do that, or you can do it like this.""" start="00:04:11.501" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Have a Git clone.""" start="00:04:13.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Like I'm doing it right now.""" start="00:04:15.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Just clone it, keep it in.""" start="00:04:16.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And now you'll see""" start="00:04:19.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""that the Gmail is already there.""" start="00:04:20.875" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""There are two files that are really ultra""" start="00:04:23.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""important, which is, gmail_label_manager.py and""" start="00:04:25.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""org-gmail.el.""" start="00:04:28.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""These are the two files that do the email""" start="00:04:30.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""processing.""" start="00:04:31.900" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I have a plain vanilla Emacs""" start="00:04:33.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""that I'm going to use for the demo.""" start="00:04:35.200" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Settings""" start="00:04:37.480" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""These are a few settings""" start="00:04:37.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""that you will need in order to get going.""" start="00:04:39.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So one is the Gmail itself, the elisp, and the""" start="00:04:42.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Python script.""" start="00:04:45.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You'll need to require the package.""" start="00:04:47.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""The org agenda files need to be set.""" start="00:04:49.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If they're already there, then yes, it needs to""" start="00:04:52.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""include the org files.""" start="00:04:54.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Main settings are, you need an org file in order""" start="00:04:55.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""to download all the emails from Gmail.""" start="00:04:59.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You need the credentials path.""" start="00:05:02.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You need the Python script,""" start="00:05:03.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""wherever it is pointed to that.""" start="00:05:05.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""The date drawer, you can customize it""" start="00:05:07.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""to whatever you want.""" start="00:05:10.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I call it org-gmail.""" start="00:05:11.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can set it to ignore certain labels,""" start="00:05:12.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""not to download it.""" start="00:05:14.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You're not interested in certain labels""" start="00:05:15.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""being downloaded.""" start="00:05:17.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can set that""" start="00:05:18.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and process time out of 300 seconds.""" start="00:05:19.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""These are some things to keep life sane in this""" start="00:05:21.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""plain vanilla emacs.""" start="00:05:25.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So I have this refile targets and stuff.""" start="00:05:27.820" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's the main org-gmail settings are all here.""" start="00:05:30.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm going to eval this buffer so that we have all""" start="00:05:33.580" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""of it and we are all set.""" start="00:05:37.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So we have org-gmail ready to work right now.""" start="00:05:40.040" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Downloading""" start="00:05:43.040" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The first thing I'm going to show you is""" start="00:05:43.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""org-gmail-download-by-label.""" start="00:05:44.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""This is the demo Gmail that I have.""" start="00:05:48.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""They all have some kind of test emails and I'm""" start="00:05:50.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""going to label them.""" start="00:05:53.620" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I've created this hierarchy of labels here based""" start="00:05:56.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""on Tiago Forte's PARA - Project, Area, Resources,""" start="00:06:00.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Archives structure.""" start="00:06:04.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""1Projects, DemoProject1, 2Areas, DemoArea,""" start="00:06:06.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""4Archives, 2025, OldProject.""" start="00:06:09.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I've labeled them inside my Gmail.""" start="00:06:12.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay, now let's go to Emacs and we will now""" start="00:06:14.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""download these things, but before downloading""" start="00:06:20.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""them, you will need to authenticate.""" start="00:06:23.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So for that, you can start""" start="00:06:26.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""with any org-gmail command.""" start="00:06:28.801" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So I'm going to take org-gmail-download-by-label.""" start="00:06:30.901" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""When I press that, it immediately opens a session""" start="00:06:35.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""in my browser.""" start="00:06:38.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay?""" start="00:06:40.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""What you can't see is a list of my Gmail accounts""" start="00:06:40.660" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""that I'm going to select.""" start="00:06:45.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm going to select my one Gmail account, and I'm""" start="00:06:46.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""going to show you the next screen.""" start="00:06:50.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So in this screen, you'll have to continue and""" start="00:06:53.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""select, and the authentication is completed.""" start="00:06:57.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So once it's, this is done, you can close this.""" start="00:06:59.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Come back to Emacs and you will have Select Gmail.""" start="00:07:02.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So it has tab support.""" start="00:07:09.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If you click tab, it will tell you""" start="00:07:10.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""what all labels are available.""" start="00:07:11.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I can pick anyone.""" start="00:07:13.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""1Projects/DemoProject1, and let's see what happens.""" start="00:07:16.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It starts downloading and it downloads.""" start="00:07:21.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And all three messages, four messages,""" start="00:07:26.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""five messages.""" start="00:07:28.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Six, seven.""" start="00:07:29.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""There are 11 messages in total,""" start="00:07:30.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and it's downloading all of them.""" start="00:07:33.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""~/demo/org/0Inbox.""" start="00:07:36.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's where I have it.""" start="00:07:40.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And here are the emails.""" start="00:07:42.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""They're all in org mode, format.""" start="00:07:44.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""All the emails are in here.""" start="00:07:46.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Since it's org mode,""" start="00:07:48.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""it can fold them all and you will see those emails.""" start="00:07:49.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So these are five emails""" start="00:07:52.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""that are present for the DemoProject1.""" start="00:07:54.280" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Replying""" start="00:07:56.880" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The next one I wanted to show you was""" start="00:07:56.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""reply without leaving emacs.""" start="00:07:59.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's go back to emacs.""" start="00:08:01.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""How am I going to reply?""" start="00:08:04.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""org-gmail-reply-at-point.""" start="00:08:06.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's how I'm going to reply.""" start="00:08:09.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Reply all or reply.""" start="00:08:11.380" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay.""" start="00:08:13.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's first find out what is the email all about.""" start="00:08:13.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay.""" start="00:08:16.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""There's just one sender with just one recipient.""" start="00:08:16.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So the reply all or reply""" start="00:08:19.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""doesn't make a difference.""" start="00:08:21.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay?""" start="00:08:23.021" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So we will reply at point and if it's Reply All,""" start="00:08:23.701" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""it includes my own email as well.""" start="00:08:28.340" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""In this, my email is .mx.""" start="00:08:31.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay.""" start="00:08:34.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Cc, I can cc anybody I want and I won't do that.""" start="00:08:35.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I have a Gmail reply window.""" start="00:08:39.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Split window here.""" start="00:08:42.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""C-c C-c is what will send the reply.""" start="00:08:43.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""C-c C-k is what will cancel the reply.""" start="00:08:47.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I want to reply.""" start="00:08:50.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So let's say test reply from within emacs""" start="00:08:51.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and bala@balaramadurai.net""" start="00:08:57.780" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""should receive this email.""" start="00:09:00.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay.""" start="00:09:01.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Initial successfully reply sent for this email id.""" start="00:09:03.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay.""" start="00:09:07.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""A feature request I can already imagine is""" start="00:09:08.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""the reply also appearing at the bottom of this.""" start="00:09:11.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's not yet there.""" start="00:09:15.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""In the next version I will have that.""" start="00:09:16.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's check if I've have sent that email.""" start="00:09:18.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's check in the sent box.""" start="00:09:22.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I just checked in the sent and yes,""" start="00:09:25.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""a test reply from within emacs, does show up.""" start="00:09:29.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay, great.""" start="00:09:31.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That works.""" start="00:09:33.040" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Label management""" start="00:09:33.680" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The third demo is going to be on label management.""" start="00:09:33.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""How do I manage labels?""" start="00:09:36.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's see.""" start="00:09:38.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's go back to emacs.""" start="00:09:39.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Suppose, I am not keen on this DemoProject1 for this.""" start="00:09:40.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It should belong to DemoArea, okay?""" start="00:09:46.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""For this thread itself doesn't belong to this.""" start="00:09:50.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's do org-gmail-edit-label-at-point.""" start="00:09:52.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Well, I don't want one project at all.""" start="00:09:57.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It should be under 2Areas/DemoArea.""" start="00:10:00.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I don't think it, it's not tab supported.""" start="00:10:05.900" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You should know this.""" start="00:10:08.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I will.""" start="00:10:09.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's another feature request.""" start="00:10:10.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""2Areas/DemoArea.""" start="00:10:11.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And when I say this, it should update it.""" start="00:10:14.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Yes, it has updated it.""" start="00:10:17.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So you can see that it has updated""" start="00:10:19.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""the label here as well.""" start="00:10:21.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""We can go check if it has indeed changed it""" start="00:10:22.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""in our... what is the name of the email?""" start="00:10:26.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's a test mail for one project demo""" start="00:10:29.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and the date is at 3 12.""" start="00:10:31.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's check if DemoArea has it.""" start="00:10:33.460" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's not refreshed, but there are two,""" start="00:10:36.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""two emails now under DemoArea.""" start="00:10:39.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's obviously done the job well.""" start="00:10:42.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's happening as expected.""" start="00:10:43.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I just turned this back from DemoArea to""" start="00:10:46.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""DemoProject1.""" start="00:10:49.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If you decide that I want to move all of""" start="00:10:50.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""DemoProject1 to archive, I'm done with the""" start="00:10:53.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""project.""" start="00:10:56.560" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Refiling""" start="00:10:57.160" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Oh, by the way, you could...""" start="00:10:57.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""that's the whole point""" start="00:10:58.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""of this is to have""" start="00:10:59.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""all of this refiled into your project,""" start="00:11:00.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""you can do that.""" start="00:11:05.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I don't know if I have that.""" start="00:11:06.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Yes, I have demo project one""" start="00:11:08.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and I could have emails and I created a node""" start="00:11:11.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and I moved everything there to that folder""" start="00:11:17.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""so that when I want to look at the demo project.""" start="00:11:20.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let me look at this.""" start="00:11:24.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""In that context, in the project context and email,""" start="00:11:25.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I have notes, let's say, and one of the emails is""" start="00:11:29.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""a note.""" start="00:11:33.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And I want to be able to keep it that way.""" start="00:11:34.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I could refile it and put it under notes as well,""" start="00:11:38.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""saying that this has some password, it has some""" start="00:11:41.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""reference that I need to have it there.""" start="00:11:44.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I can have it under notes as well.""" start="00:11:46.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So that's the advantage.""" start="00:11:48.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Once it's inside the org mode system, you can do""" start="00:11:49.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""many things that are usually org-modesy.""" start="00:11:52.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So you can do all of that within your org mode""" start="00:11:55.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""with emails, manipulate them, see it under a""" start="00:11:57.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""context, reply to that.""" start="00:12:00.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""All of that can happen""" start="00:12:01.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""right within your project context.""" start="00:12:02.575" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Archiving""" start="00:12:04.120" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""You're done with this project.""" start="00:12:04.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You want to move to archive.""" start="00:12:05.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So what you need to do is you don't have to be""" start="00:12:07.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""here, you can do it this from anywhere.""" start="00:12:09.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Bulk movement of labels, you can do it.""" start="00:12:11.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If you had consult, embark, ivy, or helm, this will""" start="00:12:15.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""show up as a dropdown and it looks neater.""" start="00:12:19.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""This, I'm using a vanilla emacs, so this is what""" start="00:12:22.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""you would see, but it has tab support.""" start="00:12:24.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can use that.""" start="00:12:26.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So I want to transfer 1Projects/DemoArea1, I want""" start="00:12:27.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""to move it to archive.""" start="00:12:32.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So let's say 4Archives is the folder.""" start="00:12:33.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So 4Archives/2025 already set this up.""" start="00:12:36.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I have not created this label in Gmail.""" start="00:12:41.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So do I need to go back to Gmail and create that?""" start="00:12:46.740" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""No, not at all.""" start="00:12:48.681" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can do this from the comfort of your org mode.""" start="00:12:49.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Go in here and enter this.""" start="00:12:52.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's see what happens.""" start="00:12:54.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So it found that it is not there.""" start="00:12:55.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So it created a new label and it's now moving all""" start="00:12:57.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""of the emails, all of those threads into archives""" start="00:13:01.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""without deleting 1Projects/DemoProject1.""" start="00:13:04.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So it still has 1Projects/DemoProject1 and it also""" start="00:13:07.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""updated the labels here.""" start="00:13:09.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So the project has been moved.""" start="00:13:10.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If you want to move it to archive this entire...""" start="00:13:12.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can do that too.""" start="00:13:15.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's see if it has archives.""" start="00:13:16.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Yes, it has archives and I have it...""" start="00:13:19.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""have a heading called 2025.""" start="00:13:21.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""My demo project can be moved there""" start="00:13:24.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and I'm done here.""" start="00:13:26.275" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""My project was done.""" start="00:13:27.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""All the emails are moved to archive.""" start="00:13:28.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So is this project from my project folder.""" start="00:13:30.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can integrate it into your workflow, your org""" start="00:13:32.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""mode workflow.""" start="00:13:34.920" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Action commands""" start="00:13:37.140" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Next, we have action commands.""" start="00:13:37.140" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""What all can you do with singular emails?""" start="00:13:39.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can do four things with single emails.""" start="00:13:41.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Delegate, defer, act on it or trash at point.""" start="00:13:45.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Defer.""" start="00:13:49.660" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Doesn't seem to work yet.""" start="00:13:50.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That is a snooze part.""" start="00:13:52.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Doesn't seem to work yet.""" start="00:13:53.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's another bug.""" start="00:13:54.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's the second bug I have in my package.""" start="00:13:55.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""But the rest of them work.""" start="00:13:58.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Delegate is to move it to somebody so they can do""" start="00:13:59.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""the job.""" start="00:14:02.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Act is you will do it with a context with a to-do""" start="00:14:03.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""which will show up in your agenda.""" start="00:14:06.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Trash the email from your Gmail, and you are done.""" start="00:14:08.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay, let's do that.""" start="00:14:10.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's go back to emacs.""" start="00:14:12.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I just moved everything back to DemoProject1.""" start="00:14:13.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I moved everything back so that I can demonstrate""" start="00:14:18.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""the four actions that I'm showing.""" start="00:14:20.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""At least three actions.""" start="00:14:22.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""One of them doesn't work yet.""" start="00:14:23.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So if I want to delegate it to somebody in this""" start="00:14:25.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""case myself, but I can delegate it""" start="00:14:30.180" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""to anybody I want.""" start="00:14:31.608" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So how do I do that so I can delegate this, or""" start="00:14:32.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""delegate is org-gmail-delegate-at-point.""" start="00:14:36.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Move the cursor to the email, delegate it to this""" start="00:14:38.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""guy balaramadurai.net.""" start="00:14:42.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can add a note saying,""" start="00:14:44.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Hey, act on task quickly.""" start="00:14:46.608" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Boss is watching.""" start="00:14:50.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay?""" start="00:14:53.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So you can say yes, and this thread gets forwarded""" start="00:14:54.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""to your colleague""" start="00:14:59.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and so that they can take this up.""" start="00:15:01.441" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It has indeed arrived here.""" start="00:15:03.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can see.""" start="00:15:05.820" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Boss is watching.""" start="00:15:07.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""The test reply was also arrived here.""" start="00:15:08.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can also see that email.""" start="00:15:11.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So that was delegate.""" start="00:15:13.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So how do we set up actions?""" start="00:15:15.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So let's not mess this email.""" start="00:15:18.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""This is the second email.""" start="00:15:21.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""How do you act""" start="00:15:22.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""on it?""" start="00:15:23.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's an action you set for yourself is add""" start="00:15:24.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""action at point, and you do that.""" start="00:15:27.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""What action can you set for yourself?""" start="00:15:31.001" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Write a long report using an LLM.""" start="00:15:32.941" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay, so it's changed the status to a to-do task.""" start="00:15:38.620" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And the to-do is right here.""" start="00:15:42.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Now, here you can schedule it""" start="00:15:44.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""to say tomorrow 9:00 AM.""" start="00:15:47.834" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So there you go.""" start="00:15:50.701" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""At 9:00 AM I'll be looking at this.""" start="00:15:51.801" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Org Agenda""" start="00:15:53.680" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Now here's the cool part.""" start="00:15:53.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can actually find the whole thing""" start="00:15:55.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""in org agenda.""" start="00:15:58.934" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So my entire email threads""" start="00:16:00.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""are all in the org agenda.""" start="00:16:03.268" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""They're all present here and my task associated is""" start="00:16:05.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""also here in the agenda.""" start="00:16:09.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""This is marked TODO,""" start="00:16:11.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""means I haven't acted on that email.""" start="00:16:12.768" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's still pending.""" start="00:16:14.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And what do I have to do is right here within""" start="00:16:16.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""here, which is the action that I have to carry on""" start="00:16:19.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""in the DemoProject1.""" start="00:16:21.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can see that demo project one""" start="00:16:22.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""is showing up in the bottom.""" start="00:16:24.534" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay. It's cool way you can also see it in the agenda.""" start="00:16:25.740" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Trash""" start="00:16:28.280" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""I am not interested in this email at all.""" start="00:16:28.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's say I, I want to delete it.""" start="00:16:31.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's see.""" start="00:16:33.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Yes, I finished the task.""" start="00:16:33.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Now the task is finished.""" start="00:16:35.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I really don't want to see this email, this""" start="00:16:37.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""message alone.""" start="00:16:40.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Alright.""" start="00:16:40.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Easy peasy.""" start="00:16:42.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's do Gmail Trash at point.""" start="00:16:42.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And you say, message,""" start="00:16:46.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I don't want to delete the entire thread.""" start="00:16:48.021" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Yes.""" start="00:16:49.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Delete it.""" start="00:16:50.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Delete the message alone.""" start="00:16:51.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And it's gone.""" start="00:16:53.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""But it's not gone.""" start="00:16:54.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's gone to the trash.""" start="00:16:56.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""The entire subtree was deleted""" start="00:16:57.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and we have a clean flow here.""" start="00:16:59.734" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I have archived, it is still in the archive, but""" start="00:17:01.881" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""it's still active according to my Gmail folder.""" start="00:17:04.480" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Real workflow: GTD""" start="00:17:07.440" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Next I'm going to show you is""" start="00:17:07.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""real workflow capture.""" start="00:17:09.575" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can use label in email with ToProcess""" start="00:17:12.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""downloaded to the inbox.org, and do one of these""" start="00:17:15.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""you've already seen.""" start="00:17:19.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Later still doesn't work.""" start="00:17:20.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I will get it to work, but hopefully by the time""" start="00:17:22.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""the conference is up, you will have the feature up""" start="00:17:25.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and ready.""" start="00:17:28.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Rest of the stuff works, delegate works, trash""" start="00:17:29.400" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""works, and add action works.""" start="00:17:32.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""We are in weekly review can have an email context,""" start="00:17:34.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""not just links to an external URL.""" start="00:17:37.480" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Real Workflow: P.A.R.A.""" start="00:17:40.560" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""In the P.A.R.A Our Project, Areas, Resources and""" start="00:17:40.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Archives structure, you can have Gmail labels""" start="00:17:46.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""mirror your PARA structure.""" start="00:17:50.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can have that within your org mode structure,""" start="00:17:51.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and you can mimic that very well.""" start="00:17:53.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""All the emails embedded in your own structure and""" start="00:17:56.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""you can download it by label""" start="00:17:59.420" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""in the place you want.""" start="00:18:02.068" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm still working on that feature where you can""" start="00:18:03.521" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""have it inside the project structure itself rather""" start="00:18:05.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""than an index.org.""" start="00:18:08.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It'll take some time, but I will do it.""" start="00:18:09.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""But right now you can refile it once it's in the""" start="00:18:11.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""index.org or any other file you choose, and then""" start="00:18:14.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""you can bulk move labels to archive and move that""" start="00:18:17.460" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""entire project repository to""" start="00:18:21.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""your archive also. That works very well.""" start="00:18:23.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And your org files and Gmail stay in sync""" start="00:18:26.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""effortlessly, and the whole email part of it""" start="00:18:29.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""becomes part of your knowledge management system.""" start="00:18:33.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Okay.""" start="00:18:35.240" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What this is NOT""" start="00:18:35.960" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""We have reached the end of the demo.""" start="00:18:35.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Hopefully you understood""" start="00:18:37.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""what org-gmail was all about.""" start="00:18:39.668" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If you have any questions, let me know, but some""" start="00:18:41.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""bits of warning, I wanted to give you what this""" start="00:18:44.640" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""package is not, it's not a full fledged email""" start="00:18:47.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""client.""" start="00:18:50.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's meant for label management and importing some""" start="00:18:50.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""emails that you wanted or you're interested in to""" start="00:18:55.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""the context of your projects or areas or your GTD""" start="00:18:58.740" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""context.""" start="00:19:02.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It is not a replacement for gnus, mu4e or notmuch.""" start="00:19:02.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It is not a way to read all your emails in emacs.""" start="00:19:07.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It cannot handle a large server load for sure.""" start="00:19:10.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It is not offline capable.""" start="00:19:13.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It needs API access.""" start="00:19:15.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So bear that in mind.""" start="00:19:17.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""What it is, is a bridge between""" start="00:19:19.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""gmail and org mode.""" start="00:19:22.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's a way to manage important email threads.""" start="00:19:23.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So you can keep updating threads.""" start="00:19:27.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Whenever there's a reply, you keep downloading it""" start="00:19:29.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""to that thread.""" start="00:19:32.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If you want to keep track of what's going on, what""" start="00:19:32.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""is the logical way you can all see it.""" start="00:19:35.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can even use ellama or one of those to make""" start="00:19:37.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""sense of the conversation.""" start="00:19:40.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""If it's a long longish thread, it's a power tool""" start="00:19:42.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""for the getting things done or Tiago Forte's PARA""" start="00:19:45.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""method.""" start="00:19:49.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I've used PARA for a long time now.""" start="00:19:49.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm a power user of PARA, so to speak, so I find""" start="00:19:52.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""this extremely useful myself.""" start="00:19:54.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's about 800 lines of Python""" start="00:19:56.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and about 300 to 500 lines of elisp.""" start="00:19:59.068" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It's usable in 10 minutes, but can remain powerful""" start="00:20:02.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""for years.""" start="00:20:07.000" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Technical decisions""" start="00:20:07.680" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""So some technical decisions that I took.""" start="00:20:07.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Why Python plus Gmail, API.""" start="00:20:10.600" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Gmail API is better at handling than an imap with""" start="00:20:13.420" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""all the other metadata.""" start="00:20:17.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I found it easier.""" start="00:20:19.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Python has excellent Google API libraries.""" start="00:20:20.200" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Email calls Python via the call-process.""" start="00:20:22.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""json is the interchange format.""" start="00:20:25.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Why not pure elisp?""" start="00:20:27.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""For one, OAuth 2.0 flow is a bit complex.""" start="00:20:29.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I found it a bit complex to meander on.""" start="00:20:33.800" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's probably why it took me three years, 364""" start="00:20:35.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""days to get over it.""" start="00:20:38.140" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Gmail API Client libraries are mature, easier to""" start="00:20:40.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""test/debug separately and lets emacs do what it""" start="00:20:43.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""does best, which is text editing.""" start="00:20:48.460" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Pragmatism over purity, the emacs way since 1976.""" start="00:20:50.160" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Roadmap""" start="00:20:54.760" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Okay, some roadmap here.""" start="00:20:54.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""But near term I want better error messages.""" start="00:20:57.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It still gives me python error messages.""" start="00:21:00.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""There are some asynchronous operations there's no""" start="00:21:02.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""blocking going on.""" start="00:21:05.040" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It needs a search integration soon.""" start="00:21:06.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Attachment I have not yet touched.""" start="00:21:08.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""That's a big big if, I don't know how to integrate""" start="00:21:11.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""with org-attach, I'm still wondering how to do""" start="00:21:13.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""that.""" start="00:21:15.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Perhaps I should be able to interact with Outlook""" start="00:21:16.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""also, fast mail, proton mail.""" start="00:21:19.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I don't know AI summaries of thread.""" start="00:21:21.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm thinking ellama could do it, but I'm not very""" start="00:21:24.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""sure.""" start="00:21:27.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Calendar integration is a nice idea, but org-gcal""" start="00:21:28.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""and org gmail...""" start="00:21:32.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""How will they interact?""" start="00:21:33.320" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""How will that work?""" start="00:21:34.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm still not sure. I use them separately.""" start="00:21:35.840" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And any other feature requests that you may have,""" start="00:21:37.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""just let me know.""" start="00:21:40.600" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Contributing""" start="00:21:41.440" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""What I may need help with if you have the time and""" start="00:21:41.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""you're interested in this project, is to test it""" start="00:21:44.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""on macOS and Windows.""" start="00:21:47.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I use Linux.""" start="00:21:49.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I use it on Debian.""" start="00:21:50.160" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It works fine.""" start="00:21:51.760" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""OAuth edge cases.""" start="00:21:52.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm not sure how it works.""" start="00:21:54.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""It shows me some error or the other""" start="00:21:55.720" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""here and there.""" start="00:21:57.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Definitely documentation needs improvements.""" start="00:21:58.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Other email provider expertise will be welcome.""" start="00:22:00.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""What's ready is, GitHub repo with issues.""" start="00:22:04.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""You can start with that could be great if you can""" start="00:22:07.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""tell me some issues with that.""" start="00:22:10.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Some kind of development guide.""" start="00:22:11.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I am not a programmer.""" start="00:22:13.880" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I vibe-coded most of it.""" start="00:22:15.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""So a development guide, a true blood developer,""" start="00:22:18.080" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""if they can come and tell me,""" start="00:22:20.920" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""here is what you should be doing,""" start="00:22:22.480" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm more than happy to listen to that.""" start="00:22:24.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""And probably a test suite.""" start="00:22:26.240" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I do that manually.""" start="00:22:27.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""All of this, some kind of help with that""" start="00:22:28.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""will also work.""" start="00:22:31.240" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The big picture""" start="00:22:32.940" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The big picture is org-mode and Gmail""" start="00:22:32.940" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""can be friends.""" start="00:22:36.560" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""They can bond over a cup of coffee.""" start="00:22:37.680" video="mainVideo-gmail" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Let's connect""" start="00:22:41.120" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Let's connect.""" start="00:22:41.120" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Here are my details and I am all game to listen to""" start="00:22:41.960" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""your question and answers.""" start="00:22:47.660" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I'm happy to give you any answer or responses that""" start="00:22:48.680" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""I find.""" start="00:22:51.280" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Please do connect with me on LinkedIn. I have my""" start="00:22:52.000" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""website here, and please do fork or install""" start="00:22:54.440" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""org-gmail and let me know what you think.""" start="00:22:58.360" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Let's talk about taming email.""" start="00:23:00.520" video="mainVideo-gmail" id="subtitle"]] +[[!template text="""Thank you very much.""" start="00:23:02.760" video="mainVideo-gmail" id="subtitle"]] + +</div>Questions or comments? Please e-mail [bala@balaramadurai.net](mailto:bala@balaramadurai.net?subject=Comment%20for%20EmacsConf%202023%20gmail%3A%20org-gmail%3A%20A%20deep%20integration%20of%20Gmail%20into%20your%20Org%20Mode) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/gmail-before.md b/2025/info/gmail-before.md new file mode 100644 index 00000000..556e898b --- /dev/null +++ b/2025/info/gmail-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 Sat 2025-12-06. 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="gmail"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect stroke-width="3" x="102" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 24-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-gmail.html> Etherpad: <https://pad.emacsconf.org/2025-gmail> +Etherpad: <https://pad.emacsconf.org/2025-gmail> +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 mainVideo"><video controls preload="none" id="mainVideo-gmail"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--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="mainVideo-gmail" data=""" +00:00.000 Before we begin +00:19.840 The 4-year overnight success +01:02.800 The real title +01:15.600 Why not gnus/mu4e/notmuch? +01:34.280 The honest answer +02:17.920 The org-gmail philosophy +02:49.440 Architecture (the boring but important slide) +03:21.200 Demo 1: From gmail to org +04:37.480 Settings +05:43.040 Downloading +07:56.880 Replying +09:33.680 Label management +10:57.160 Refiling +12:04.120 Archiving +13:37.140 Action commands +15:53.680 Org Agenda +16:28.280 Trash +17:07.440 Real workflow: GTD +17:40.560 Real Workflow: P.A.R.A. +18:35.960 What this is NOT +20:07.680 Technical decisions +20:54.760 Roadmap +21:41.440 Contributing +22:32.940 The big picture +22:41.120 Let's connect + +"""]]<div></div>Duration: 23:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-gmail">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-gmail.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--script.txt">Download --script.txt</a></li><li><a href="https://youtu.be/8P93UBYrUB8">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/gmail-nav.md b/2025/info/gmail-nav.md new file mode 100644 index 00000000..7120d450 --- /dev/null +++ b/2025/info/gmail-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/reference">Emacs as a fully-fledged reference manager</a> +Next by time: <a href="/2025/talks/juicemacs">Juicemacs: exploring speculative JIT compilation for ELisp in Java</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/gnus-after.md b/2025/info/gnus-after.md new file mode 100644 index 00000000..bb76010d --- /dev/null +++ b/2025/info/gnus-after.md @@ -0,0 +1,463 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="gnus-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:02.620" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Hello, my name is Amin Bandali,""" start="00:00:02.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and today I'd like to talk about""" start="00:00:04.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""reading and writing emails in GNU Emacs""" start="00:00:06.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""using Gnus specifically.""" start="00:00:08.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Gnus has had this sort of reputation""" start="00:00:14.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of being difficult to approach and configure.""" start="00:00:16.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""That's understandable""" start="00:00:20.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""because it has many, many options""" start="00:00:23.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and major and minor modes""" start="00:00:26.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that interact in different ways with each other.""" start="00:00:27.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And it also doesn't help that Gnus started originally""" start="00:00:30.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as a newsreader""" start="00:00:35.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""rather than a mail client.""" start="00:00:36.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So a lot of the terminology that it uses""" start="00:00:38.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is also rooted in that,""" start="00:00:40.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in reading and writing news.""" start="00:00:42.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But nevertheless, with this video and talk,""" start="00:00:45.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I hope to provide a sort""" start="00:00:48.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of very quick introduction""" start="00:00:52.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of starting to use Gnus""" start="00:00:55.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to read and write email and send it.""" start="00:00:57.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We will use Gnus' IMAP support,""" start="00:01:00.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""mainly because a lot of people""" start="00:01:02.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""these days have email accounts""" start="00:01:06.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with mail service providers""" start="00:01:08.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that support IMAP,""" start="00:01:10.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is an open standard.""" start="00:01:12.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So it's widely available and supported""" start="00:01:14.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""across many different providers""" start="00:01:17.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as well as mail clients or mail user agents as well.""" start="00:01:19.720" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:01:25.240" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Okay, so let's just jump straight right in.""" start="00:01:25.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I will enter this demo directory that I created""" start="00:01:30.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for the purposes of this demonstration""" start="00:01:34.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and change my home directory to this one""" start="00:01:36.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so that we can safely experiment with Gnus here.""" start="00:01:41.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""For this presentation, I've written up""" start="00:01:49.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a quick initialization file or init file""" start="00:01:53.980" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that I will share afterwards as well""" start="00:01:56.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to get us going with Gnus.""" start="00:01:59.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""There's not much to it at the moment.""" start="00:02:01.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Just set up the package archives and""" start="00:02:04.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""install the keycast package""" start="00:02:07.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for showing the key presses in the mode line.""" start="00:02:09.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, that's about it.""" start="00:02:14.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And I'll also define""" start="00:02:15.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a little like inline function +emacs.d""" start="00:02:16.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that allows me to conveniently write""" start="00:02:20.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and have it expanded""" start="00:02:24.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or refer to files and directories, rather,""" start="00:02:26.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""paths that we could expand,""" start="00:02:29.301" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside my Emacs configuration directory.""" start="00:02:30.901" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I also have this eval-last-sexp""" start="00:02:32.834" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""bound to a global key,""" start="00:02:37.501" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so that I will be able to easily""" start="00:02:41.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""use it for this talk.""" start="00:02:43.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, let's jump right in.""" start="00:02:47.520" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Don't panic""" start="00:02:49.960" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""First things first, don't panic.""" start="00:02:49.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And that's actually also the name""" start="00:02:52.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of the very first node""" start="00:02:55.268" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in the Gnus manual when you open it.""" start="00:02:58.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And it's actually nice.""" start="00:03:01.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I definitely, definitely recommend""" start="00:03:02.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that you look through""" start="00:03:04.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""at least the very first couple of chapters of this,""" start="00:03:07.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""skim through it, and later on refer to it""" start="00:03:10.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""whenever you find something confusing""" start="00:03:14.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or don't understand it.""" start="00:03:16.134" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But yeah, we'll start""" start="00:03:19.500" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with these two paragraphs here.""" start="00:03:21.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So again, a Gnus installation""" start="00:03:22.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is basically just a list of one or more servers""" start="00:03:23.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and the subscribed groups from those servers""" start="00:03:28.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and articles in those groups.""" start="00:03:30.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You can already kind of see""" start="00:03:32.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where that influence of a newsreader comes in.""" start="00:03:34.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But yeah, basically what it's saying is that,""" start="00:03:39.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""you know, we have one or more servers.""" start="00:03:41.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can think of them as email servers.""" start="00:03:43.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Groups can be like, we can think""" start="00:03:47.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of them as folders or directories.""" start="00:03:49.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And yeah, articles,""" start="00:03:52.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""those would be like our email messages.""" start="00:03:55.240" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Configuring servers""" start="00:03:58.560" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""With Gnus, we can add""" start="00:03:58.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and configure servers mainly using two variables.""" start="00:03:59.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""One of them is the gnus-select-method""" start="00:04:06.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and the other is gnus-secondary-select-methods.""" start="00:04:07.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The first one predates the second one""" start="00:04:11.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and I generally don't recommend using it, because""" start="00:04:15.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""first of all, it can only point""" start="00:04:17.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to one server, and that server,""" start="00:04:22.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""because it's the primary,""" start="00:04:26.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""then Gnus won't add a prefix to its groups,""" start="00:04:27.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so later on, as you get into""" start="00:04:32.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""more advanced features of Gnus""" start="00:04:34.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and, for example, want to write rules""" start="00:04:36.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to modify your message composition""" start="00:04:38.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in a way for certain groups, or file mail,""" start="00:04:42.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""automatically classify mail,""" start="00:04:47.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this distinction can become""" start="00:04:48.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""confusing and annoying.""" start="00:04:51.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""My recommendation is to always and only use""" start="00:04:53.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the gnus-secondary-select-methods.""" start="00:04:57.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, so let's do that here.""" start="00:05:01.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I'm gonna uncomment this portion.""" start="00:05:07.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So here, I set the primary select method to nil,""" start="00:05:10.300" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and the second one, I define an nnimap server""" start="00:05:16.420" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of the nnimap backend.""" start="00:05:24.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I give it the name ec25gnus.""" start="00:05:30.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""What I want it to do is to""" start="00:05:32.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""connect to my mail server,""" start="00:05:35.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is at this address,""" start="00:05:37.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and fetch emails from it over TLS with this username.""" start="00:05:41.080" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text=""".authinfo""" start="00:05:46.240" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""And then the passwords or the credentials,""" start="00:05:46.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""you can put them in the .authinfo file.""" start="00:05:50.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Normally, you would want to, for example,""" start="00:05:56.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""encrypt this file with your GPG key.""" start="00:05:58.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But for this demonstration, I haven't.""" start="00:06:03.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So yeah, the format is the keyword "machine"""" start="00:06:06.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""followed by the name of your Gnus server or account,""" start="00:06:10.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""followed by the word "login",""" start="00:06:15.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""then your login username,""" start="00:06:17.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then the password, which here it's not shown.""" start="00:06:19.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah.""" start="00:06:23.960" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Configuration""" start="00:06:26.600" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""But before we actually set this,""" start="00:06:26.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I'll just show you that if we like start Gnus""" start="00:06:28.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with M-x gnus,""" start="00:06:31.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""initially, it will just show""" start="00:06:33.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""an error like this.""" start="00:06:36.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Even if we continue, it's empty.""" start="00:06:37.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""There's not much because Gnus doesn't know""" start="00:06:40.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where to fetch these emails from.""" start="00:06:43.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And that's what we will configure.""" start="00:06:47.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Excuse me.""" start="00:06:52.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, so just for convenience,""" start="00:06:55.860" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we can bind Gnus to,""" start="00:06:57.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for example, C-c g, as I've done here.""" start="00:06:59.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You will want to set your name""" start="00:07:00.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and email address, like so.""" start="00:07:04.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here we tell Emacs""" start="00:07:05.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that we are going to be using Gnus for reading email,""" start="00:07:09.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""because Emacs comes""" start="00:07:11.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with other email clients as well,""" start="00:07:12.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""such as Rmail, and in fact, defaults to Rmail,""" start="00:07:14.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so this way, we tell it to use Gnus.""" start="00:07:18.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""By default, Gnus puts its newsrc file and other files,""" start="00:07:24.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I believe it still scatters them""" start="00:07:31.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in a few different directories""" start="00:07:34.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in your home directory,""" start="00:07:35.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so it's a little bit messy.""" start="00:07:36.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So what I prefer to do is to just put it""" start="00:07:37.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""all under the Gnus directory""" start="00:07:40.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside of my Emacs configuration, as I do here.""" start="00:07:42.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and then here we just tell Gnus""" start="00:07:47.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to, like, don't try to bother""" start="00:07:50.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with a generic newsrc file""" start="00:07:53.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that would be shared""" start="00:07:55.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with other news readers.""" start="00:07:57.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Just want to use it for email.""" start="00:07:58.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And yeah, so we just tell Gnus""" start="00:07:59.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to keep all of its data""" start="00:08:01.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside a dedicated .newsrc.eld""" start="00:08:03.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""(for Emacs Lisp data) file instead.""" start="00:08:08.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And we can also have Gnus not prompt us""" start="00:08:12.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""when we want to exit with q.""" start="00:08:15.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Anyway, so let's go ahead and evaluate this.""" start="00:08:19.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So this has been set,""" start="00:08:23.400" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Starting Gnus""" start="00:08:25.720" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""so if we type M-x gnus again, or hit C-c g,""" start="00:08:25.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""now we're faced with an empty buffer,""" start="00:08:32.268" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and it says no news is good news,""" start="00:08:35.700" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and that's actually""" start="00:08:37.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""one of the characteristics of Gnus""" start="00:08:38.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is that by default it tries""" start="00:08:40.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to like sort of declutter""" start="00:08:44.780" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and show us a little less possible""" start="00:08:47.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in the group buffer,""" start="00:08:49.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""meaning that if you don't have""" start="00:08:50.820" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""any groups with unread or marked""" start="00:08:53.260" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or, like, starred messages, it will not show them.""" start="00:08:55.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""To actually see all of our groups or folders,""" start="00:09:00.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we hit shift L or capital L,""" start="00:09:03.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we see that we have an inbox here,""" start="00:09:08.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as expected. So we enter the inbox,""" start="00:09:12.420" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we see that there is an article there""" start="00:09:14.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and it's already been marked as read.""" start="00:09:17.460" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But if we mark it as unread""" start="00:09:20.780" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and exit and enter Gnus again,""" start="00:09:22.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this is what we would see.""" start="00:09:25.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We would see that our group""" start="00:09:27.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then we enter it, we see our mail here.""" start="00:09:28.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and this is our very first email""" start="00:09:34.100" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that we read in GNU Emacs here, inside Gnus.""" start="00:09:36.160" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Always showing groups""" start="00:09:40.080" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""It might be useful to have Gnus always show""" start="00:09:40.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""certain groups or folders""" start="00:09:43.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""even if they don't have""" start="00:09:46.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""anything unread or marked inside of them.""" start="00:09:48.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The way we can do that is""" start="00:09:52.340" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""by setting this variable""" start="00:09:56.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""gnus-permanently-visible-groups""" start="00:09:57.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to a regular expression""" start="00:10:01.340" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that describes the name of these groups.""" start="00:10:03.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we launch Gnus again,""" start="00:10:09.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this time, we see that that group is visible,""" start="00:10:11.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""even though there's no unread messages in it.""" start="00:10:14.760" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Reading messages""" start="00:10:19.900" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""When we enter a group or folder,""" start="00:10:19.900" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we will see a list of all of our messages.""" start="00:10:24.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here, we only have one.""" start="00:10:26.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can press M-u or Alt-u""" start="00:10:27.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to mark something as unread.""" start="00:10:31.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You can press d to mark it as read.""" start="00:10:34.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""If you press just u,""" start="00:10:38.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""it'll tick the article,""" start="00:10:40.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is kind of the equivalent""" start="00:10:41.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of marking the message or email""" start="00:10:44.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as starred in other email clients""" start="00:10:47.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""such as Thunderbird.""" start="00:10:50.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We see that when there are groups""" start="00:10:55.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that have starred or ticked messages""" start="00:11:00.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside of them,""" start="00:11:03.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Gnus will mark them""" start="00:11:04.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with this little star here, or asterisk.""" start="00:11:05.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""This talk is just barely""" start="00:11:16.020" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""scratching the surface.""" start="00:11:17.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's see how far...""" start="00:11:19.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""How am I doing with the time?""" start="00:11:21.081" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, 11 minutes already.""" start="00:11:22.760" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Debugging IMAP""" start="00:11:30.120" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Just a couple of helpful things here,""" start="00:11:30.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like this nnimap-record-commands variable.""" start="00:11:32.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It's useful when you want to debug""" start="00:11:36.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""your IMAP setup with Gnus.""" start="00:11:38.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""If you set it to anything non-nil,""" start="00:11:40.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""it will log the commands that it runs""" start="00:11:42.860" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to a special `\*imap log\*` buffer.""" start="00:11:46.700" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And here I just set it""" start="00:11:49.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to this init-file-debug variable,""" start="00:11:50.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is set to non-nil""" start="00:11:52.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""whenever you launch Emacs""" start="00:11:55.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with the --debug-init switch,""" start="00:11:56.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so that's pretty helpful.""" start="00:11:59.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You want to also set your sent folder,""" start="00:12:02.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""basically, where Gnus will save""" start="00:12:05.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a copy of the message that you just sent.""" start="00:12:07.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Normally, I think the convention these days is,""" start="00:12:09.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a lot of you know servers and clients""" start="00:12:12.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""use a dedicated sent folder,""" start="00:12:16.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but with Gnus, I just prefer to use INBOX itself.""" start="00:12:18.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Mainly because then I will have""" start="00:12:24.340" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""threading working for free,""" start="00:12:27.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so I can read the entire thread""" start="00:12:28.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of an email chain there in one place.""" start="00:12:31.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Of course, we don't have to keep""" start="00:12:34.300" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the messages in there forever.""" start="00:12:35.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And in fact, Gnus has facilities,""" start="00:12:38.900" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""both manual and automated,""" start="00:12:42.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for expiring emails into""" start="00:12:43.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""different locations or different folders.""" start="00:12:46.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah. So let's move on here.""" start="00:12:52.680" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Topics""" start="00:12:55.160" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Topics are another nice feature of Gnus.""" start="00:12:55.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So this is useful""" start="00:13:02.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for creating some topics""" start="00:13:03.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then classifying or grouping""" start="00:13:05.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""your directories there.""" start="00:13:08.460" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So we will see the use""" start="00:13:10.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of this in a moment,""" start="00:13:11.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where, let's say, I want to add""" start="00:13:13.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a second account to Gnus.""" start="00:13:17.020" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""This one I'm going to call ec25work.""" start="00:13:20.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's pretend that""" start="00:13:23.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this is my work email.""" start="00:13:24.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we open Gnus now,""" start="00:13:29.860" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we see that our work INBOX""" start="00:13:32.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""also shows up here.""" start="00:13:37.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And because we enabled topic mode,""" start="00:13:37.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we see that we have""" start="00:13:41.300" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""these sort of buttons""" start="00:13:42.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like Gnus and misc here.""" start="00:13:43.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And we can, I believe,""" start="00:13:44.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""create a topic with capital T n.""" start="00:13:46.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can call it personal, this one.""" start="00:13:49.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's create another one, work.""" start="00:13:52.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And then what we can do is go""" start="00:13:56.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""over the directory that we want,""" start="00:13:59.580" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for example, this one,""" start="00:14:02.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""hit capital T m to move it""" start="00:14:04.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to the personal topic,""" start="00:14:08.220" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and this work one,""" start="00:14:11.900" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""move it to the work topic.""" start="00:14:13.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So we can nicely classify""" start="00:14:15.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and group our groups folders here,""" start="00:14:17.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is especially useful""" start="00:14:23.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""when you have hundreds of them.""" start="00:14:24.720" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Customizing message display""" start="00:14:25.560" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Anyhow, we can customize""" start="00:14:25.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""different aspects of message display.""" start="00:14:29.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Like for example,""" start="00:14:35.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we can this way customize""" start="00:14:35.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and change the order of""" start="00:14:38.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which headers we want to see and where.""" start="00:14:39.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if I launch Gnus""" start="00:14:41.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and go back to this email here,""" start="00:14:45.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""these are the headers that we see at the top.""" start="00:14:48.460" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Excuse me.""" start="00:14:52.140" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And with Gnus we can always""" start="00:14:52.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can have it show all the headers""" start="00:14:55.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""by pressing t to toggle the headers.""" start="00:14:57.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here we can see all the nitty-gritty""" start="00:15:02.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and all of the headers in the message""" start="00:15:04.580" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we can toggle it back with t again.""" start="00:15:06.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can modify and customize the sorting""" start="00:15:12.220" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with dedicated sorting functions.""" start="00:15:16.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It comes with a number of them""" start="00:15:20.020" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""out of the box""" start="00:15:21.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but we can define them as well.""" start="00:15:21.600" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Sending emails""" start="00:15:24.320" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Now to send emails. Let's see.""" start="00:15:24.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We will be using message,""" start="00:15:29.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and that's what Gnus itself uses.""" start="00:15:31.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So I will set things up here.""" start="00:15:34.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's see.""" start="00:15:38.580" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, so first of all,""" start="00:15:42.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we want to have Gnus mark""" start="00:15:44.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the messages that we write to others""" start="00:15:46.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as read automatically,""" start="00:15:48.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so this option does that.""" start="00:15:49.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And then we define posting styles this way""" start="00:15:51.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""using the prefix, the name""" start="00:15:58.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of the IMAP server.""" start="00:16:01.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And this is how we can tell it to use""" start="00:16:04.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""what email address for the From [header]""" start="00:16:06.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and which SMTP server to send it with.""" start="00:16:09.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and then gcc is where Gnus will save""" start="00:16:14.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the copy of the messages that we write.""" start="00:16:17.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we go ahead and launch Gnus again.""" start="00:16:20.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can go into our personal email here,""" start="00:16:24.140" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""hit m to compose a new message.""" start="00:16:26.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can prepare an email to,""" start="00:16:28.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""let's say, our work address.""" start="00:16:33.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Hello from EmacsConf 2025 Gnus talk.""" start="00:16:35.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Hello, this is just a test. :)""" start="00:16:42.420" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and we hit send.""" start="00:16:47.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The sending will be done""" start="00:16:55.740" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""using Emacs's built-in SMTP libraries.""" start="00:16:56.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Sometimes it can take a moment.""" start="00:17:03.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, that's it. It's done.""" start="00:17:05.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we go back out""" start="00:17:07.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and if we hit g to get new news,""" start="00:17:09.260" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we should be able to see our new email there""" start="00:17:11.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in the other account that we just sent it to.""" start="00:17:15.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So we can come here, open it,""" start="00:17:17.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and there we go.""" start="00:17:22.361" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Plans""" start="00:17:26.660" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""There is a lot to configure in Gnus,""" start="00:17:26.660" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we're just barely scratching the surface,""" start="00:17:29.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and unfortunately I don't have the time""" start="00:17:31.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to explain all of these""" start="00:17:34.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but I do plan on doing""" start="00:17:35.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a much longer running series,""" start="00:17:36.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""whether it's text or videos,""" start="00:17:38.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""showing how to configure""" start="00:17:41.500" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and use a lot of these different aspects of Gnus.""" start="00:17:42.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But yeah, here, near the end, just a couple of...""" start="00:17:45.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""quick things. I find it's nice to have message""" start="00:17:49.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""prompt us for [confirmation]""" start="00:17:54.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that we do want to send a message.""" start="00:17:56.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Actually, when it does that, I take""" start="00:17:59.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""another look over my email""" start="00:18:01.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to make sure I don't have any typos.""" start="00:18:02.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It's generally a good idea to wrap your messages""" start="00:18:07.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""around 70 or 72 characters.""" start="00:18:09.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We do that here.""" start="00:18:14.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can tell Gnus to forward messages""" start="00:18:16.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as a proper MIME part,""" start="00:18:19.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""instead of some half-broken way.""" start="00:18:22.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""This customization, the sendmail function,""" start="00:18:27.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is how we tell Gnus with message""" start="00:18:30.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to use the SMTP library to sending the email,""" start="00:18:34.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and these two variables are useful for""" start="00:18:38.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""omitting our own email address""" start="00:18:42.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""when we want to send someone,""" start="00:18:45.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like when we hit r, to reply to someone.""" start="00:18:47.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""if we configure these variables,""" start="00:18:50.180" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""then Gnus won't add""" start="00:18:51.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""our own address to the To or Cc,""" start="00:18:52.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is pretty useful.""" start="00:18:56.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I also find it helpful""" start="00:18:58.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to unbind C-c C-s.""" start="00:18:59.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""That's another key""" start="00:19:03.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for sending the message [in addition to C-c C-c].""" start="00:19:04.975" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And because C-c C-d,""" start="00:19:06.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is very close to it on the QWERTY layout,""" start="00:19:09.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is useful for saving a draft""" start="00:19:13.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then coming back to it,""" start="00:19:15.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I don't want to accidentally hit C-c C-s,""" start="00:19:16.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and send the message prematurely.""" start="00:19:20.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So I unbind it.""" start="00:19:22.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, anyway, that's about it.""" start="00:19:25.980" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:27.960" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""That's a kind of very quick tour""" start="00:19:27.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and introduction of setting up Gnus.""" start="00:19:31.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here, we just configured a remote IMAP server,""" start="00:19:37.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but we can also, of course,""" start="00:19:40.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""set up a local IMAP server such as Dovecot""" start="00:19:43.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and point Gnus to there,""" start="00:19:46.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and use programs like OfflineIMAP, I believe,""" start="00:19:48.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or the mbsync program from isync package""" start="00:19:52.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or isync project to synchronize our messages""" start="00:19:57.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to local mail directories""" start="00:20:02.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then point Gnus to it.""" start="00:20:04.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The reason we might want to use that""" start="00:20:06.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is to always have a copy of our messages at hand""" start="00:20:08.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so we can use offline.""" start="00:20:11.720" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""nnimap""" start="00:20:12.760" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""And why use nnimap specifically?""" start="00:20:12.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""As of now, the Maildir backend included with Gnus""" start="00:20:17.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is very inefficient,""" start="00:20:27.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""especially when dealing with""" start="00:20:29.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""tens or hundreds of thousands of messages""" start="00:20:31.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like some of us are.""" start="00:20:33.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It just takes an eternity to try""" start="00:20:36.660" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and index them and get going.""" start="00:20:38.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""In that case, what I recommend doing""" start="00:20:43.260" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is instead of interfacing directly with Maildir,""" start="00:20:44.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for Gnus, just install and run""" start="00:20:47.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Dovecot, a local IMAP server,""" start="00:20:52.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and point Gnus to that.""" start="00:20:54.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I plan on writing tutorials or doing videos""" start="00:20:59.820" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""about these other aspects""" start="00:21:02.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of configuring Gnus after the conference.""" start="00:21:06.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""That's about it for me,""" start="00:21:10.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so I hope you find this helpful.""" start="00:21:11.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""If you have any questions,""" start="00:21:14.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""please feel free to email me""" start="00:21:16.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""at bandali@gnu.org or @kelar.org.""" start="00:21:18.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You can take a look at my personal website""" start="00:21:23.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where I plan on posting""" start="00:21:25.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""other Emacs and Gnus materials.""" start="00:21:26.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And yeah, thank you for watching""" start="00:21:31.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and I hope you enjoy the rest of the conference.""" start="00:21:33.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Take care.""" start="00:21:35.160" video="mainVideo-gnus" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [bandali@gnu.org](mailto:bandali@gnu.org?subject=Comment%20for%20EmacsConf%202023%20gnus%3A%20Reading%20and%20writing%20emails%20in%20GNU%20Emacs%20with%20Gnus) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/gnus-before.md b/2025/info/gnus-before.md new file mode 100644 index 00000000..4fd7221f --- /dev/null +++ b/2025/info/gnus-before.md @@ -0,0 +1,37 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="gnus"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect stroke-width="3" x="150" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 22-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-gnus.html> Etherpad: <https://pad.emacsconf.org/2025-gnus> +Etherpad: <https://pad.emacsconf.org/2025-gnus> +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 mainVideo"><video controls preload="none" id="mainVideo-gnus"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--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="mainVideo-gnus" data=""" +00:02.620 Introduction +01:25.240 Demo +02:49.960 Don't panic +03:58.560 Configuring servers +05:46.240 .authinfo +06:26.600 Configuration +08:25.720 Starting Gnus +09:40.080 Always showing groups +10:19.900 Reading messages +11:30.120 Debugging IMAP +12:55.160 Topics +14:25.560 Customizing message display +15:24.320 Sending emails +17:26.660 Plans +19:27.960 Wrapping up +20:12.760 nnimap + +"""]]<div></div>Duration: 21:37 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-gnus">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-gnus.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.opus">Download --main.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.webm">Download --main.webm (60MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--split.vtt">Download --split.vtt</a></li><li><a href="https://youtu.be/0Pu8oqdsSig">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/gnus-nav.md b/2025/info/gnus-nav.md new file mode 100644 index 00000000..66b60f15 --- /dev/null +++ b/2025/info/gnus-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/swanky">Swanky Python: Interactive development for Python</a> +Next by time: <a href="/2025/talks/python">Interactive Python programming in Emacs</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/graphics-after.md b/2025/info/graphics-after.md new file mode 100644 index 00000000..e3eda455 --- /dev/null +++ b/2025/info/graphics-after.md @@ -0,0 +1,15 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="graphics-mainVideo-transcript"></a><h1>Transcript</h1> + +[[!template text="""[ This video has no audio. ]""" start="00:00:00.000" video="mainVideo-graphics" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [incal@dataswamp.org](mailto:incal@dataswamp.org?subject=Comment%20for%20EmacsConf%202023%20graphics%3A%20Modern%20Emacs%2FElisp%20hardware%2Fsoftware%20accelerated%20graphics) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/graphics-before.md b/2025/info/graphics-before.md new file mode 100644 index 00000000..5a9384ed --- /dev/null +++ b/2025/info/graphics-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="graphics"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect stroke-width="3" x="500" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 23-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-graphics.html> Etherpad: <https://pad.emacsconf.org/2025-graphics> +Etherpad: <https://pad.emacsconf.org/2025-graphics> +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 mainVideo"><video controls preload="none" id="mainVideo-graphics"><source src="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--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:15 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-graphics">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/RVoGcLNalJw">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/graphics-nav.md b/2025/info/graphics-nav.md new file mode 100644 index 00000000..ecf2bee5 --- /dev/null +++ b/2025/info/graphics-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/open-mic">Open session</a> +Next by time: <a href="/2025/talks/sat-close">Saturday closing remarks / open session</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/greader-after.md b/2025/info/greader-after.md new file mode 100644 index 00000000..ae172158 --- /dev/null +++ b/2025/info/greader-after.md @@ -0,0 +1,90 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="greader-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.460" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Hi, I'm Yuval Langer.""" start="00:00:01.460" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Some may know me as cow_2001 on IRC.""" start="00:00:03.786" video="mainVideo-greader" id="subtitle"]] +[[!template text="""I'd like to tell you about greader mode,""" start="00:00:09.480" video="mainVideo-greader" id="subtitle"]] +[[!template text="""a versatile text-to-speech package""" start="00:00:12.120" video="mainVideo-greader" id="subtitle"]] +[[!template text="""written by Michelangelo Rodriguez.""" start="00:00:14.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Sometimes you want to read a bunch""" start="00:00:18.400" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and cannot be bothered, right?""" start="00:00:20.400" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You'd rather plop on your chair""" start="00:00:23.040" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and let the words come to you.""" start="00:00:25.080" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You can do it using greader Mode.""" start="00:00:27.520" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What is greader mode?""" start="00:00:31.158" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""What is greader mode?""" start="00:00:31.158" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Greader mode is a text-to-speech minor mode""" start="00:00:33.120" video="mainVideo-greader" id="subtitle"]] +[[!template text="""with which you can read any buffer using the point.""" start="00:00:36.320" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You move your point""" start="00:00:40.400" video="mainVideo-greader" id="subtitle"]] +[[!template text="""right before the text you want to read""" start="00:00:41.603" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and run greader-read command.""" start="00:00:43.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You can then use the left and right arrow keys""" start="00:00:47.640" video="mainVideo-greader" id="subtitle"]] +[[!template text="""to jump to the previous sentence or the next sentence.""" start="00:00:50.840" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Installing Greader""" start="00:00:56.600" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Installing GReader:""" start="00:00:56.600" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Greader is available on the GNU Emacs app store""" start="00:00:59.144" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and its copyright assigned to""" start="00:01:05.440" video="mainVideo-greader" id="subtitle"]] +[[!template text="""the Free Software Foundation.""" start="00:01:07.286" video="mainVideo-greader" id="subtitle"]] +[[!template text="""To install Greader,""" start="00:01:10.960" video="mainVideo-greader" id="subtitle"]] +[[!template text="""you can run M-x list-packages RET.""" start="00:01:12.858" video="mainVideo-greader" id="subtitle"]] +[[!template text="""look it up with C-s greader,""" start="00:01:19.280" video="mainVideo-greader" id="subtitle"]] +[[!template text="""press i to mark it for installation,""" start="00:01:23.100" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and then press x to execute the installation.""" start="00:01:26.680" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Basic usage""" start="00:01:31.760" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Basic usage:""" start="00:01:31.760" video="mainVideo-greader" id="subtitle"]] +[[!template text="""We can now open a text file and start reading.""" start="00:01:33.212" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Let's open The Willows by Algernon Blackwood.""" start="00:01:37.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""I've never read the story,""" start="00:01:42.600" video="mainVideo-greader" id="subtitle"]] +[[!template text="""but HP Lovecraft said it was the best horror story""" start="00:01:44.480" video="mainVideo-greader" id="subtitle"]] +[[!template text="""he had ever read, so it is in my reading list.""" start="00:01:48.280" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Now load greader using M-x greader-mode.""" start="00:01:52.960" video="mainVideo-greader" id="subtitle"]] +[[!template text="""To start reading, press C-r SPC.""" start="00:02:01.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""The Project Gutenberg ebook of The willows.""" start="00:02:08.140" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-read command.""" start="00:02:10.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""To stop, press the SPC key.""" start="00:02:14.080" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-stop command.""" start="00:02:16.800" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Navigation""" start="00:02:20.820" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Navigation:""" start="00:02:20.820" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You can navigate like you normally do,""" start="00:02:22.360" video="mainVideo-greader" id="subtitle"]] +[[!template text="""but using the left or right arrow keys""" start="00:02:24.680" video="mainVideo-greader" id="subtitle"]] +[[!template text="""will move the point between sentences""" start="00:02:27.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""instead of characters.""" start="00:02:30.200" video="mainVideo-greader" id="subtitle"]] +[[!template text="""So... This ebook is...""" start="00:02:33.088" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You may copy it, give it away,""" start="00:02:36.640" video="mainVideo-greader" id="subtitle"]] +[[!template text="""or reuse it if you are not.""" start="00:02:38.096" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Let's move to the start of the story.""" start="00:02:41.480" video="mainVideo-greader" id="subtitle"]] +[[!template text=""""After leaving Vienna,""" start="00:02:57.040" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and long before you come to Budapest,""" start="00:02:58.089" video="mainVideo-greader" id="subtitle"]] +[[!template text="""the Danube enters a region""" start="00:02:59.840" video="mainVideo-greader" id="subtitle"]] +[[!template text="""of singular loneliness and desolation,""" start="00:03:00.920" video="mainVideo-greader" id="subtitle"]] +[[!template text="""where its waters spread away on all sides,""" start="00:03:02.920" video="mainVideo-greader" id="subtitle"]] +[[!template text="""regardless of a main channel,""" start="00:03:04.880" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and the country becomes a swamp for miles upon miles,""" start="00:03:06.200" video="mainVideo-greader" id="subtitle"]] +[[!template text="""covered by a vast sea of low willow bushes."""" start="00:03:08.800" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Reading rate""" start="00:03:12.380" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Reading rate: this reading rate is rather slow.""" start="00:03:12.380" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Let's pick up the pace using the plus key.""" start="00:03:15.840" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-inc-rate command.""" start="00:03:19.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You must do that while greader is reading.""" start="00:03:23.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Now it is too fast.""" start="00:03:37.885" video="mainVideo-greader" id="subtitle"]] +[[!template text="""We can slow down using the - key.""" start="00:03:39.780" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-dec-rate command.""" start="00:03:44.680" video="mainVideo-greader" id="subtitle"]] +[[!template text=""""In high flood this great acreage""" start="00:03:54.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""of sand, shingle-beds, and willow-grown islands""" start="00:03:59.385" video="mainVideo-greader" id="subtitle"]] +[[!template text="""is almost topped by the water,""" start="00:04:01.240" video="mainVideo-greader" id="subtitle"]] +[[!template text="""but in normal seasons the bushes""" start="00:04:02.440" video="mainVideo-greader" id="subtitle"]] +[[!template text="""bend and rustle in the free winds,""" start="00:04:03.610" video="mainVideo-greader" id="subtitle"]] +[[!template text="""showing their silver leaves to the sunshine""" start="00:04:04.920" video="mainVideo-greader" id="subtitle"]] +[[!template text="""in an ever-moving plain of bewildering beauty."""" start="00:04:06.400" video="mainVideo-greader" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [yuval.langer@gmail.com](mailto:yuval.langer@gmail.com?subject=Comment%20for%20EmacsConf%202023%20greader%3A%20GNU%20Emacs%20Greader%20%28Gnam%C3%B9%20Reader%29%20mode%20is%20the%20best%20Emacs%20mode%20in%20existence) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/greader-before.md b/2025/info/greader-before.md new file mode 100644 index 00000000..5303089a --- /dev/null +++ b/2025/info/greader-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="greader"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect stroke-width="3" x="459" y="15" opacity="0.8" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 5-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-greader> +Etherpad: <https://pad.emacsconf.org/2025-greader> +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 mainVideo"><video controls preload="none" id="mainVideo-greader"><source src="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 04:08 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-greader">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.opus">Download --main.opus (3.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.webm">Download --main.webm (10MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--split.txt">Download --split.txt</a></li><li><a href="https://youtu.be/q1gmFAKYWBk">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/greader-nav.md b/2025/info/greader-nav.md new file mode 100644 index 00000000..9be8ca29 --- /dev/null +++ b/2025/info/greader-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a> +Next by time: <a href="/2025/talks/open-mic">Open session</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/hyperboleqa-after.md b/2025/info/hyperboleqa-after.md new file mode 100644 index 00000000..3cadfccd --- /dev/null +++ b/2025/info/hyperboleqa-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [rsw@gnu.org](mailto:rsw@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperboleqa%3A%20Questions%20and%20answers%20to%20help%20you%20fly%20with%20Hyperbole) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/hyperboleqa-before.md b/2025/info/hyperboleqa-before.md new file mode 100644 index 00000000..edd1ad33 --- /dev/null +++ b/2025/info/hyperboleqa-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="hyperboleqa"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect stroke-width="3" x="391" y="15" opacity="0.8" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 30-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html> Etherpad: <https://pad.emacsconf.org/2025-hyperboleqa> +Etherpad: <https://pad.emacsconf.org/2025-hyperboleqa> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T18:45:00Z" end="2025-12-07T19:15:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~1:45 PM - 2:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~12:45 PM - 1:15 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~11:45 AM - 12:15 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~10:45 AM - 11:15 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~6:45 PM - 7:15 PM UTC <br />Sunday, Dec 7 2025, ~7:45 PM - 8:15 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~8:45 PM - 9:15 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~12:15 AM - 12:45 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~2:45 AM - 3:15 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~3:45 AM - 4:15 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-hyperboleqa">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--intro.webm">Download --intro.webm</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/hyperboleqa-nav.md b/2025/info/hyperboleqa-nav.md new file mode 100644 index 00000000..a0f7eb94 --- /dev/null +++ b/2025/info/hyperboleqa-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/zettelkasten">Zettelkasten for regular Emacs hackers</a> +Next by time: <a href="/2025/talks/gardening">Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/juicemacs-after.md b/2025/info/juicemacs-after.md new file mode 100644 index 00000000..ca649a57 --- /dev/null +++ b/2025/info/juicemacs-after.md @@ -0,0 +1,422 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="juicemacs-mainVideo-transcript"></a><h1>Transcript</h1> + +[[!template text="""Hello! This is Kana!""" start="00:00:01.200" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And today I'll be talking about""" start="00:00:02.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""<b>J</b>ust-<b>I</b>n-<b>T</b>ime compilation, or JIT,""" start="00:00:04.368" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""for Emacs Lisp,""" start="00:00:06.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""based on my work-in-progress Emacs clone, Juicemacs.""" start="00:00:07.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Juicemacs aims to explore a few things""" start="00:00:11.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that I've been wondering about for a while.""" start="00:00:13.534" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For exmaple, what if we had better or even""" start="00:00:15.943" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""transparent concurrency in ELisp?""" start="00:00:18.568" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Or, can we have a concurrent GUI?""" start="00:00:21.323" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""One that does not block, or is blocked by Lisp code?""" start="00:00:23.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And finally what can JIT compilation do for ELisp?""" start="00:00:26.883" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Will it provide better performance?""" start="00:00:31.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""However, a main problem with explorations""" start="00:00:34.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in Emacs clones is that,""" start="00:00:37.401" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Emacs is a whole universe.""" start="00:00:38.723" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And that means, to make these explorations""" start="00:00:40.963" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""meaningful for Emacs users,""" start="00:00:43.601" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we need to cover a lot of Emacs features,""" start="00:00:45.483" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""before we can ever begin.""" start="00:00:47.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For example, one of the features of Emacs is that,""" start="00:00:50.643" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it supports a lot of encodings.""" start="00:00:54.023" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Let's look at this string: it can be encoded""" start="00:00:56.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in both Unicode and Shift-JIS, a Japanese encoding system.""" start="00:00:59.268" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But currently, Unicode does not have""" start="00:01:03.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""an official mapping for this "ki" (﨑) character.""" start="00:01:07.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So when we map from Shift-JIS to Unicode,""" start="00:01:09.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in most programming languages,""" start="00:01:12.768" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""you end up with something like this:""" start="00:01:14.523" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it's a replacement character.""" start="00:01:16.534" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But in Emacs, it actually extends""" start="00:01:19.243" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the Unicode range by threefold,""" start="00:01:22.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and uses the extra range to losslessly""" start="00:01:23.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""support characters like this.""" start="00:01:26.834" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So if you want to support this feature,""" start="00:01:29.583" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that basically rules out all string""" start="00:01:32.023" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""libraries with Unicode assumptions.""" start="00:01:34.034" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For another, you need to support""" start="00:01:37.843" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the regular expressions in Emacs,""" start="00:01:40.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which are, really irregular.""" start="00:01:41.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For example, it supports asserting""" start="00:01:45.123" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""about the user cursor position.""" start="00:01:46.901" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And it also uses some character tables,""" start="00:01:49.503" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that can be modified from Lisp code,""" start="00:01:52.034" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to determine to case mappings.""" start="00:01:53.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And all that makes it really hard, or even""" start="00:01:56.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""impossible to use any existing regexp libraries.""" start="00:01:59.568" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Also, you need a functional garbage collector.""" start="00:02:05.223" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""You need threading primitives, because""" start="00:02:07.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Emacs has already had some threading support.""" start="00:02:09.868" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And you might want the performance of your clone""" start="00:02:12.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to match Emacs, even with its native compilation enabled.""" start="00:02:14.534" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Not to mention you also need a GUI for an editor.""" start="00:02:19.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And so on.""" start="00:02:21.501" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For Juicemacs, building on Java and""" start="00:02:23.643" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""a compiler framework called Truffle,""" start="00:02:25.634" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""helps in getting better performance;""" start="00:02:27.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and by choosing a language with a good GC,""" start="00:02:30.603" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we can actually focus more on the challenges above.""" start="00:02:32.934" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Currently, Juicemacs has implemented three out of,""" start="00:02:38.163" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""at least four of the interpreters in Emacs.""" start="00:02:41.434" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""One for lisp code, one for bytecode,""" start="00:02:44.083" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and one for regular expressions,""" start="00:02:46.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""all of them JIT-capable.""" start="00:02:48.568" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Other than these, Emacs also has around""" start="00:02:51.003" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""two thousand built-in functions in C code.""" start="00:02:53.668" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And Juicemacs has around""" start="00:02:56.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""four hundred of them implemented.""" start="00:02:57.334" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""It's not that many, but it is surprisingly enough""" start="00:02:59.863" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to bootstrap Emacs and run""" start="00:03:03.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the portable dumper, or pdump, in short.""" start="00:03:05.201" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Let's have a try.""" start="00:03:08.583" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""""" start="00:03:11.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So this is the binary produced by Java native image.""" start="00:03:11.803" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And it's loading all the files""" start="00:03:15.023" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""needed for bootstrapping.""" start="00:03:17.168" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Then it dumps the memory to a file to""" start="00:03:18.863" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""be loaded later, giving us fast startup.""" start="00:03:22.234" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""As we can see here, it throws some frame errors""" start="00:03:25.023" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""because Juicemacs doesn't have an editor UI""" start="00:03:28.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or functional frames yet.""" start="00:03:31.401" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But otherwise, it can already run""" start="00:03:33.383" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""quite some lisp code.""" start="00:03:35.368" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For example, this code uses the benchmark library""" start="00:03:36.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to measure the performance of this Fibonacci function.""" start="00:03:40.401" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And we can see here, the JIT engine is""" start="00:03:44.503" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""already kicking in and makes the execution faster.""" start="00:03:47.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""In addition to that, with a bit of workaround,""" start="00:03:51.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Juicemacs can also run some of the ERT,""" start="00:03:53.583" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or, <b>E</b>macs <b>R</b>egression <b>T</b>est suite, that comes with Emacs.""" start="00:03:56.468" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So... Yes, there are a bunch of test failures,""" start="00:04:01.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which means we are not that compatible""" start="00:04:05.923" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""with Emacs and need more work.""" start="00:04:07.934" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But the whole testing procedure runs fine,""" start="00:04:09.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and it has proper stack traces,""" start="00:04:12.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which is quite useful for debugging Juicemacs.""" start="00:04:14.768" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So with that, a rather functional JIT runtime,""" start="00:04:17.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""let's now try look into today's topic, JIT compilation for ELisp.""" start="00:04:21.034" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, you probably know that Emacs has supported""" start="00:04:26.083" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""native-compilation, or nativecomp in short, for some time now.""" start="00:04:28.534" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""It mainly uses GCC to compile Lisp code""" start="00:04:32.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""into native code, ahead of time.""" start="00:04:35.034" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And during runtime, Emacs loads those compiled files,""" start="00:04:37.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and gets the performance of native code.""" start="00:04:41.434" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""However, for example, for installed packages,""" start="00:04:44.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we might want to compile them when we""" start="00:04:47.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""actually use them instead of ahead of time.""" start="00:04:49.060" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And Emacs supports this through""" start="00:04:51.923" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""this <i>native-comp-jit-compilation</i> flag.""" start="00:04:53.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""What it does is, during runtime, Emacs sends""" start="00:04:55.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""loaded files to external Emacs worker processes,""" start="00:04:59.768" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which will then compile those files asynchronously.""" start="00:05:03.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And when the compilation is done,""" start="00:05:07.003" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the current Emacs session will load the compiled code back""" start="00:05:09.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and improves its performance, on the fly.""" start="00:05:11.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""When you look at this procedure, however, it is,""" start="00:05:16.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""ahead-of-time compilation, done at runtime.""" start="00:05:18.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And it is what current Emacs calls JIT compilation.""" start="00:05:21.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But if you look at some other JIT engines,""" start="00:05:25.223" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""you'll see much more complex architectures.""" start="00:05:27.868" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, take luaJIT for an example,""" start="00:05:31.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in addition to this red line here,""" start="00:05:34.234" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which leads us from an interpreted state""" start="00:05:36.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to a compiled native state,""" start="00:05:38.768" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which is also what Emacs does,""" start="00:05:40.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""LuaJIT also supports going from""" start="00:05:42.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""a compiled state back to its interpreter.""" start="00:05:44.334" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And this process is called "deoptimization".""" start="00:05:47.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""In contrast to its name, deoptimization here actually""" start="00:05:51.583" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""enables a huge category of JIT optimizations.""" start="00:05:55.301" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""They are called speculation.""" start="00:05:58.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Basically, with speculation, the compiler""" start="00:06:01.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""can use runtime statistics to speculate,""" start="00:06:04.601" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to make bolder assumptions in the compiled code.""" start="00:06:07.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And when the assumptions are invalidated,""" start="00:06:11.543" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the runtime deoptimizes the code, updates statistics,""" start="00:06:14.083" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and then recompile the code based on new assumptions,""" start="00:06:18.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and that will make the code more performant.""" start="00:06:21.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Let's look at an example.""" start="00:06:24.543" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, here is a really simple function,""" start="00:06:28.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that adds one to the input number.""" start="00:06:30.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But in Emacs, it is not that simple,""" start="00:06:33.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""because Emacs has three categories of numbers,""" start="00:06:36.168" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that is, fix numbers, or machine-word-sized integers,""" start="00:06:38.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""floating numbers, and big integers.""" start="00:06:42.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And when we compile this, we need""" start="00:06:45.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to handle all three cases.""" start="00:06:47.601" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And if we analyze the code produced by Emacs,""" start="00:06:49.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""as is shown by this gray graph here,""" start="00:06:52.601" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we can see that it has, two paths:""" start="00:06:54.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""One fast path, that does fast fix number addition;""" start="00:06:58.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and one for slow paths, that calls out""" start="00:07:01.503" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to an external plus-one function,""" start="00:07:03.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to handle floating number and big integers.""" start="00:07:06.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Now, if we pass integers into this function,""" start="00:07:09.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it's pretty fast because it's on the fast path.""" start="00:07:13.168" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""However, if we pass in a floating number,""" start="00:07:16.383" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""then it has to go through the slow path,""" start="00:07:19.768" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""doing an extra function call, which is slow.""" start="00:07:21.943" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""What speculation might help here is that,""" start="00:07:25.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it can have flexible fast paths.""" start="00:07:28.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""When we pass a floating number into this function,""" start="00:07:31.543" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which currently has only fixnumbers on the fast path,""" start="00:07:34.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it also has to go through the slow path.""" start="00:07:37.401" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But the difference is that, a speculative runtime can""" start="00:07:40.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""deoptimize and recompile the code to adapt to this.""" start="00:07:44.568" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And when it recompiles, it might add""" start="00:07:47.863" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""floating number onto the fast path,""" start="00:07:50.368" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and now floating number operations are also fast.""" start="00:07:52.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And this kind of speculation is why""" start="00:07:55.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""speculative runtime can be really fast.""" start="00:07:58.568" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Let's take a look at some benchmarks.""" start="00:08:03.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""They're obtained with the <i>elisp-benchmarks</i> library on ELPA.""" start="00:08:05.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""The blue line here is for nativecomp,""" start="00:08:09.523" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and these blue areas mean that nativecomp is slower.""" start="00:08:12.601" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And, likewise, green areas mean that""" start="00:08:16.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Juicemacs is slower.""" start="00:08:19.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""At a glance, the two (or four)""" start="00:08:20.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""actually seems somehow on par, to me.""" start="00:08:22.868" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But, let's take a closer look at some of them.""" start="00:08:25.243" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, the first few benchmarks are the classic,""" start="00:08:30.483" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Fibonacci benchmarks.""" start="00:08:32.668" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""We know that, the series is formed by""" start="00:08:34.083" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""adding the previous two numbers in the series.""" start="00:08:36.934" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And looking at this expression here,""" start="00:08:39.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Fibonacci benchmarks are quite intensive""" start="00:08:41.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in number additions, subtractions,""" start="00:08:44.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and function calls, if you use recursions.""" start="00:08:46.801" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And it is exactly why""" start="00:08:49.203" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Fibonacci series is a good benchmark.""" start="00:08:51.001" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And looking at the results here... wow.""" start="00:08:54.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Emacs nativecomp executes instantaneously.""" start="00:08:57.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""It's a total defeat for Juicemacs, seemingly.""" start="00:08:59.943" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Now, if you're into benchmarks, you know something is wrong here:""" start="00:09:04.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we are comparing the different things.""" start="00:09:08.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So let's look under the hood""" start="00:09:11.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and disassemble the function""" start="00:09:14.201" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""with this convenient Emacs command""" start="00:09:15.583" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""called <i>disassemble</i>...""" start="00:09:17.568" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And these two lines of code is what we got.""" start="00:09:19.163" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, we already can see""" start="00:09:23.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""what's going on here:""" start="00:09:24.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""GCC sees Fibonacci is a pure function,""" start="00:09:26.223" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""because it returns the same value""" start="00:09:30.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""for the same arguments,""" start="00:09:31.868" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""so GCC chooses to do the computation""" start="00:09:33.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""at compile time""" start="00:09:35.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and inserts the final number directly""" start="00:09:36.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""into the compiled code.""" start="00:09:39.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""It is actually great!""" start="00:09:41.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Because it shows that nativecomp""" start="00:09:43.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""knows about pure functions,""" start="00:09:45.401" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and can do all kinds of things""" start="00:09:47.383" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""like removing or constant-folding them.""" start="00:09:48.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And Juicemacs just does not do that.""" start="00:09:51.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""However, we are also concerned about""" start="00:09:54.503" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the things we mentioned earlier:""" start="00:09:57.368" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the performance of number additions,""" start="00:09:59.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or function calls.""" start="00:10:00.901" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, in order to let the benchmarks""" start="00:10:03.083" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""show some extra things,""" start="00:10:05.634" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we need to modify it a bit...""" start="00:10:06.963" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""by simply making things non-constant.""" start="00:10:08.368" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""With that, Emacs gets much slower now.""" start="00:10:11.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And again, let's look what's""" start="00:10:15.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""happening behind these numbers.""" start="00:10:17.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Similarly, with the <i>disassemble</i> command,""" start="00:10:21.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we can look into the assembly.""" start="00:10:23.501" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And again, we can already see""" start="00:10:25.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""what's happening here.""" start="00:10:28.020" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, Juicemacs, due to its speculation nature,""" start="00:10:29.403" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""supports fast paths for all three kind of numbers.""" start="00:10:32.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""However, currently, Emacs nativecomp""" start="00:10:35.543" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""does not have any fast path""" start="00:10:39.234" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""for the operations here like additions,""" start="00:10:41.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or subtractions, or comparisons,""" start="00:10:43.434" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which is exactly what""" start="00:10:45.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Fibonacci benchmarks are measuring.""" start="00:10:48.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Emacs, at this time, has to call some generic,""" start="00:10:51.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""external functions for them, and this is slow.""" start="00:10:53.801" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But is nativecomp really that slow?""" start="00:11:00.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, I also ran the same benchmark""" start="00:11:03.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in Common Lisp, with SBCL.""" start="00:11:04.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And nativecomp is already fast,""" start="00:11:07.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""compared to untyped SBCL.""" start="00:11:09.001" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""It's because SBCL also emits call instructions""" start="00:11:11.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""when it comes to no type info.""" start="00:11:15.501" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""However, once we declare the types,""" start="00:11:18.583" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""SBCL is able to compile a fast path for fix numbers,""" start="00:11:21.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which makes its performance on par""" start="00:11:25.383" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""with speculative JIT engines (that is, Juicemacs),""" start="00:11:27.468" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""because, now both of us are now on fast paths.""" start="00:11:30.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Additionally, if we are bold enough""" start="00:11:36.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to pass this safety zero flag to SBCL,""" start="00:11:38.401" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it will remove all the slow paths""" start="00:11:41.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and type checks,""" start="00:11:43.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and its performance is close""" start="00:11:45.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to what you get with C.""" start="00:11:46.368" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Well, probably we don't want safety zero""" start="00:11:48.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""most of the time.""" start="00:11:51.300" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But even then, if nativecomp were to""" start="00:11:52.163" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""get fast paths for more constructs,""" start="00:11:55.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""there certainly is quite""" start="00:11:57.863" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""some room for performance improvement.""" start="00:11:59.868" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Let's look at some more benchmarks.""" start="00:12:04.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For example, for this inclist,""" start="00:12:06.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or increment-list, benchmark,""" start="00:12:08.934" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Juicemacs is really slow here. Partly,""" start="00:12:11.023" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it comes from the cost of Java boxing integers.""" start="00:12:14.334" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""On the other hand, for Emacs nativecomp,""" start="00:12:17.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""for this particular benchmark,""" start="00:12:20.301" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it actually has fast paths""" start="00:12:22.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""for all of the operations.""" start="00:12:23.668" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And that's why it can be so fast,""" start="00:12:25.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and that also proves the nativecomp""" start="00:12:27.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""has a lot potential for improvement.""" start="00:12:30.668" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""There is another benchmark here""" start="00:12:33.943" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that use advices.""" start="00:12:35.834" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So Emacs Lisp supports using""" start="00:12:38.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""advices to override functions""" start="00:12:40.501" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""by wrapping the original function, and an advice""" start="00:12:42.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""function, two of them, inside a glue function.""" start="00:12:44.834" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And in this benchmark, we advice the Fibonacci function""" start="00:12:47.543" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to cache the first ten entries to speed up computation,""" start="00:12:51.468" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""as can be seen in the speed-up in the Juicemacs results.""" start="00:12:54.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""However, it seems that nativecomp does not yet""" start="00:13:00.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""compile glue functions, and that makes advices slower.""" start="00:13:02.901" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""With these benchmarks, let's discuss this big question:""" start="00:13:08.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Should GNU Emacs adopt speculative JIT compilation?""" start="00:13:12.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Well, the hidden question is actually,""" start="00:13:16.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""is it worth it?""" start="00:13:18.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And, my personal answer is, maybe not.""" start="00:13:21.323" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""The first reason is that, slow paths, like, floating numbers,""" start="00:13:24.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""are actually not that frequent in Emacs.""" start="00:13:28.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And optimizing for fast paths like fix numbers""" start="00:13:31.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""can already get us very good performance already.""" start="00:13:34.101" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And the second or main reason is that,""" start="00:13:38.083" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""speculative JIT is very hard.""" start="00:13:40.334" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""LuaJIT, for example, took a genius to build.""" start="00:13:43.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Even with the help of GCC, we need to hand-write""" start="00:13:46.943" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""all those fast path or slow path or switching logic.""" start="00:13:50.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""We need to find a way to deoptimize, which requires""" start="00:13:54.383" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""mapping machine registers back to interpreter stack.""" start="00:13:58.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And also, speculation needs runtime info,""" start="00:14:01.903" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which also costs us extra memory.""" start="00:14:04.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Moreover, as is shown by some benchmarks above,""" start="00:14:07.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""there's some low-hanging fruits in nativecomp that""" start="00:14:10.863" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""might get us better performance with relatively lower effort.""" start="00:14:13.334" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Compared to this, a JIT engine is a huge, huge undertaking.""" start="00:14:17.443" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But, for Juicemacs, the JIT engine comes a lot cheaper,""" start="00:14:22.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""because, we are cheating by building on""" start="00:14:26.223" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""an existing compiler framework called Truffle.""" start="00:14:29.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Truffle is a meta-compiler framework,""" start="00:14:33.543" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which means that it lets you write""" start="00:14:35.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""an interpreter, add required annotations,""" start="00:14:37.634" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and it will automatically turn the""" start="00:14:40.203" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""interpreter into a JIT runtime.""" start="00:14:42.501" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So for example, here is a typical bytecode interpreter.""" start="00:14:45.743" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""After you add the required annotations,""" start="00:14:49.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Truffle will know that,""" start="00:14:51.234" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the bytecode here is constant, and it should""" start="00:14:52.623" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""unroll this loop here, to inline all those bytecode.""" start="00:14:55.534" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And then, when Truffle""" start="00:14:59.223" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""compiles the code, it knows that:""" start="00:15:00.468" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""the first loop here does: x plus one,""" start="00:15:02.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and the second does: return.""" start="00:15:05.234" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And then it will compile all that into,""" start="00:15:07.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""return x plus 1,""" start="00:15:09.534" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which is exactly what we would expect""" start="00:15:11.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""when compiling this pseudo code.""" start="00:15:14.068" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Building on that, we can also easily implement speculation,""" start="00:15:17.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""by using this <i>transferToInterpreterAndInvalidate</i> function""" start="00:15:21.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""provided by Truffle.""" start="00:15:24.868" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And Truffle will automatically turn that""" start="00:15:26.223" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""into deoptimization.""" start="00:15:28.534" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Now, for example, when this add function""" start="00:15:30.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""is supplied with, two floating numbers.""" start="00:15:32.701" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""It will go through the slow path here,""" start="00:15:35.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which might lead to a compiled slow path,""" start="00:15:38.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or deoptimization.""" start="00:15:40.961" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And going this deoptimization way,""" start="00:15:43.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""it can then update the runtime stats.""" start="00:15:45.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And now, when the code is compiled again,""" start="00:15:48.323" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Truffle will know,""" start="00:15:50.401" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that these compilation stats, suggests that,""" start="00:15:51.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""we have floating numbers.""" start="00:15:54.101" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And this floating point addition branch will""" start="00:15:55.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""then be incorporated into the fast path.""" start="00:15:58.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""To put it into Java code...""" start="00:16:02.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Most operations are just as simple as this.""" start="00:16:06.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And it supports fast paths for integers,""" start="00:16:08.823" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""floating numbers, and big integers.""" start="00:16:11.034" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And the simplicity of this not only saves us work,""" start="00:16:14.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""but also enables Juicemacs to explore more things more rapidly.""" start="00:16:17.134" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And actually, I have done some silly explorations.""" start="00:16:22.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For example, I tried to constant-fold more things.""" start="00:16:26.583" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Many of us have an Emacs config that stays""" start="00:16:30.303" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""largely unchanged, at least during one Emacs session.""" start="00:16:32.768" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And that means many of the global variables""" start="00:16:36.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in ELisp are constant.""" start="00:16:39.668" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And with speculation, we can""" start="00:16:42.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""speculate about the stable ones,""" start="00:16:44.601" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and try to inline them as constants.""" start="00:16:46.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And this might improve performance,""" start="00:16:49.663" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or maybe not?""" start="00:16:51.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Because, we will need a full editor""" start="00:16:53.183" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to get real world data.""" start="00:16:55.368" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""I also tried changing cons lists to be backed""" start="00:16:58.223" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""by some arrays, because, maybe arrays are faster, I guess?""" start="00:17:01.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But in the end, <i>setcdr</i> requires some kind of indirection,""" start="00:17:05.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and that actually makes the performance worse.""" start="00:17:09.034" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And for regular expressions,""" start="00:17:12.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""I also tried borrowing techniques from PCRE JIT,""" start="00:17:14.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""which is quite fast in itself, but it is""" start="00:17:18.023" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""unfortunately unsupported by Java Truffle runtime.""" start="00:17:20.668" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""So, looking at these, well,""" start="00:17:24.263" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""explorations can fail, certainly.""" start="00:17:27.334" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But, with Truffle and Java, these,""" start="00:17:30.343" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""for now, are not that hard to implement,""" start="00:17:32.801" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and also very often, they teach us something""" start="00:17:34.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""in return, whether or not they fail.""" start="00:17:37.668" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Finally, let's talk about some explorations""" start="00:17:42.463" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""that we might get into in the future.""" start="00:17:45.334" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For the JIT engine, for example,""" start="00:17:47.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""currently I'm looking into the implementation of""" start="00:17:49.783" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""nativecomp to maybe reuse some of its optimizations.""" start="00:17:52.634" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""For the GUI, I'm very very slowly working on one.""" start="00:17:56.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""If it ever completes, I have one thing""" start="00:18:01.423" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""I'm really looking forward to implementing.""" start="00:18:03.734" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""That is, inlining widgets, or even""" start="00:18:06.703" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""other buffers, directly into a buffer.""" start="00:18:08.901" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Well, it's because, people sometimes complain""" start="00:18:11.863" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""about Emacs's GUI capabilities,""" start="00:18:13.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But I personally think that supporting inlining,""" start="00:18:16.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""like a whole buffer inside another buffer as a rectangle,""" start="00:18:19.768" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""could get us very far in layout abilities.""" start="00:18:23.143" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And this approach should also""" start="00:18:26.983" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""be compatible with terminals.""" start="00:18:28.568" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And I really want to see how this idea""" start="00:18:30.943" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""plays out with Juicemacs.""" start="00:18:32.934" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And of course, there's Lisp concurrency.""" start="00:18:36.103" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And currently i'm thinking of a JavaScript-like,""" start="00:18:39.063" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""transparent, single-thread model, using Java's virtual threads.""" start="00:18:42.168" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""But anyway, if you are interested in JIT compilation,""" start="00:18:46.383" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Truffle, or anything above,""" start="00:18:49.968" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""or maybe you have your own ideas,""" start="00:18:51.763" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""you are very welcome to reach out!""" start="00:18:53.868" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Juicemacs does need to implement many more built-in functions,""" start="00:18:56.383" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""and any help would be very appreciated.""" start="00:19:00.034" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""And I promise, it can be a very fun playground""" start="00:19:03.163" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""to learn about Emacs and do crazy things.""" start="00:19:05.801" video="mainVideo-juicemacs" id="subtitle"]] +[[!template text="""Thank you!""" start="00:19:08.443" video="mainVideo-juicemacs" id="subtitle"]] + +</div>Questions or comments? Please e-mail [kana@iroiro.party](mailto:kana@iroiro.party?subject=Comment%20for%20EmacsConf%202023%20juicemacs%3A%20Juicemacs%3A%20exploring%20speculative%20JIT%20compilation%20for%20ELisp%20in%20Java) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/juicemacs-before.md b/2025/info/juicemacs-before.md new file mode 100644 index 00000000..f3092d8c --- /dev/null +++ b/2025/info/juicemacs-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="juicemacs"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect stroke-width="3" x="102" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 20-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-juicemacs> +Etherpad: <https://pad.emacsconf.org/2025-juicemacs> +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 mainVideo"><video controls preload="none" id="mainVideo-juicemacs"><source src="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 19:10 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-juicemacs">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-juicemacs">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://youtu.be/Lm-a7eZO5jk">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/juicemacs-nav.md b/2025/info/juicemacs-nav.md new file mode 100644 index 00000000..b49eb432 --- /dev/null +++ b/2025/info/juicemacs-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/gmail">org-gmail: A deep integration of Gmail into your Org Mode</a> +Next by time: <a href="/2025/talks/swanky">Swanky Python: Interactive development for Python</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/languages-after.md b/2025/info/languages-after.md new file mode 100644 index 00000000..950f78ba --- /dev/null +++ b/2025/info/languages-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [nospam.keram@gmail.com](mailto:nospam.keram@gmail.com?subject=Comment%20for%20EmacsConf%202023%20languages%3A%20Studying%20foreign%20languages%20with%20Emacs%2C%20Org%20Mode%20and%20gptel) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/languages-before.md b/2025/info/languages-before.md new file mode 100644 index 00000000..a24ee5fd --- /dev/null +++ b/2025/info/languages-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk cancelled +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/2025/info/languages-nav.md b/2025/info/languages-nav.md new file mode 100644 index 00000000..35ed938a --- /dev/null +++ b/2025/info/languages-nav.md @@ -0,0 +1,4 @@ + +<div class="talk-nav"> +Back to the [[talks]] +</div>
\ No newline at end of file diff --git a/2025/info/latex-after.md b/2025/info/latex-after.md new file mode 100644 index 00000000..bb59217b --- /dev/null +++ b/2025/info/latex-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [paaguti@gmail.com](mailto:paaguti@gmail.com?subject=Comment%20for%20EmacsConf%202023%20latex%3A%20LaTeX%20export%20in%20org-mode%3A%20the%20overhaul) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/latex-before.md b/2025/info/latex-before.md new file mode 100644 index 00000000..92d8b976 --- /dev/null +++ b/2025/info/latex-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="latex"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect stroke-width="3" x="199" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-latex.html> Etherpad: <https://pad.emacsconf.org/2025-latex> +Etherpad: <https://pad.emacsconf.org/2025-latex> +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 mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-latex">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-latex.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--intro.webm">Download --intro.webm</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/latex-nav.md b/2025/info/latex-nav.md new file mode 100644 index 00000000..cec53563 --- /dev/null +++ b/2025/info/latex-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/python">Interactive Python programming in Emacs</a> +Next by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/life-after.md b/2025/info/life-after.md new file mode 100644 index 00000000..d94ed0da --- /dev/null +++ b/2025/info/life-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [adougher9@gmail.com](mailto:adougher9@gmail.com?subject=Comment%20for%20EmacsConf%202023%20life%3A%20From%20FRDCSA%20to%20FLP2%3A%20Building%20AI-Powered%20Life%20Planning%20Systems%20in%20Emacs%20-%20A%20Journey%20from%20Research%20to%20Real-World%20Impact) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/life-before.md b/2025/info/life-before.md new file mode 100644 index 00000000..d9c35617 --- /dev/null +++ b/2025/info/life-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 20-min talk cancelled +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/2025/info/life-nav.md b/2025/info/life-nav.md new file mode 100644 index 00000000..35ed938a --- /dev/null +++ b/2025/info/life-nav.md @@ -0,0 +1,4 @@ + +<div class="talk-nav"> +Back to the [[talks]] +</div>
\ No newline at end of file diff --git a/2025/info/llm-after.md b/2025/info/llm-after.md new file mode 100644 index 00000000..91904dd7 --- /dev/null +++ b/2025/info/llm-after.md @@ -0,0 +1,373 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="llm-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.040" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Hi, I'm Andrew Hyatt.""" start="00:00:01.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm going to talk to you today about Emacs and AI,""" start="00:00:03.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and where things are right now""" start="00:00:09.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the world of Emacs and AI,""" start="00:00:10.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""via large language models,""" start="00:00:12.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and where things might be going,""" start="00:00:14.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and what it means for the future of Emacs.""" start="00:00:17.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think what we're seeing with Emacs is interesting.""" start="00:00:22.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We've seen a lot of different things""" start="00:00:27.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""come around in the past year,""" start="00:00:29.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the past several years.""" start="00:00:31.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's lots of different solutions.""" start="00:00:33.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But in the past year, things have been very interesting.""" start="00:00:35.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think there's new and interesting questions""" start="00:00:36.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""about what does it mean to use Emacs?""" start="00:00:39.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""What does it mean to use any editor?""" start="00:00:43.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm going to be talking about Emacs,""" start="00:00:45.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and I'm going to show you various Emacs packages""" start="00:00:47.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as demonstrations of these ideas.""" start="00:00:50.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But there's the general question of""" start="00:00:53.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what does it mean to use any editor, not just Emacs?""" start="00:00:59.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""What does it mean to do work?""" start="00:01:03.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think the industry in general is facing these challenges""" start="00:01:06.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of we don't really know where things are going to end up,""" start="00:01:10.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but we do know the direction they're going.""" start="00:01:13.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Emacs is a reflection of that.""" start="00:01:16.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think the answer for Emacs might be""" start="00:01:20.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a little bit different than everything else,""" start="00:01:23.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but I do want to show you what's out there""" start="00:01:25.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so we can explore what are the possibilities""" start="00:01:28.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of Emacs, AI, and generally how we get things done.""" start="00:01:33.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Thanks. Let's dive right into it.""" start="00:01:41.120" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Copilot""" start="00:01:44.720" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""We're going to start by showing you""" start="00:01:44.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""some things that are pretty well integrated,""" start="00:01:48.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that look a lot like what you see in Emacs""" start="00:01:51.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and fit in with the kinds of editing""" start="00:01:55.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that you normally do in Emacs.""" start="00:01:58.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is just kind of like, it's well integrated.""" start="00:02:02.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So we're going to talk about Copilot and Semext.""" start="00:02:06.580" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Copilot is by Microsoft via GitHub,""" start="00:02:08.780" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and Semext is just my personal demo,""" start="00:02:12.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but they're both showing you, you know,""" start="00:02:14.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this kind of thing. Let's start with Copilot.""" start="00:02:18.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Let's try out Copilot on just a standard bit of Elisp.""" start="00:02:24.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're going to write a Fibonacci function.""" start="00:02:31.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Let's try out Emacs on a standard bit of Elisp.""" start="00:02:38.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're going to write a Fibonacci function.""" start="00:02:43.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And you can see like as soon as we even start typing it,""" start="00:02:49.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""we get everything as a completion.""" start="00:02:53.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you can just press Tab here,""" start="00:02:56.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you've just completed""" start="00:02:59.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a significant bunch of Emacs Lisp code.""" start="00:03:02.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It will do this no matter where you are.""" start="00:03:06.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So, pretty useful. It will just keep suggesting things.""" start="00:03:09.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Do you want to do this?""" start="00:03:14.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm not sure.""" start="00:03:16.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it usually is offering pretty reasonable things.""" start="00:03:17.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you could do this with code,""" start="00:03:22.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of course, any code.""" start="00:03:29.300" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You don't really even have to have a mode for it, right?""" start="00:03:32.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's kind of the beauty of AI is that""" start="00:03:33.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you don't need any Emacs functionality for this,""" start="00:03:36.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""except for Copilot.""" start="00:03:38.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It doesn't need to know the structure of your code.""" start="00:03:39.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It doesn't need anything except for the text itself""" start="00:03:41.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and whatever AI integration that this is.""" start="00:03:45.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We can look at, you can do the same thing with Org-mode.""" start="00:03:51.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So we could say create, no,""" start="00:03:53.740" video="mainVideo-llm" id="subtitle"]] +[[!template text="""how about let's, let's do, you know, spring cleaning.""" start="00:03:58.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's actually the fall, but still we'll say spring cleaning.""" start="00:04:02.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it'll start suggesting things that, you know,""" start="00:04:10.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""maybe at first, it doesn't really know what to do to""" start="00:04:12.768" video="mainVideo-llm" id="subtitle"]] +[[!template text="""clean up all code.""" start="00:04:15.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It thinks I need to clean up code, but no,""" start="00:04:16.434" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this is going to be actual, you know,""" start="00:04:18.401" video="mainVideo-llm" id="subtitle"]] +[[!template text="""clean hood over range. Clean out pantry.""" start="00:04:21.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These are all really reasonable suggestions.""" start="00:04:31.568" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You just keep going here.""" start="00:04:33.880" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Semext""" start="00:04:38.320" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""I'm going to demonstrate Semext,""" start="00:04:38.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is a package I have on GNU Elpa,""" start="00:04:40.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that is designed to integrate AI in a very Emacs-like way.""" start="00:04:43.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And so what you could do is you could do a""" start="00:04:48.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""semext-search-forward.""" start="00:04:51.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""The UI looks just like other Emacs commands,""" start="00:04:54.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but you can search for anything.""" start="00:04:58.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's really no way to express what I'm about to,""" start="00:05:02.380" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what I'm trying to demonstrate""" start="00:05:06.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in Emacs's normal search commands.""" start="00:05:08.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could really ask for anything.""" start="00:05:12.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it takes a little while, which is not Emacs-like,""" start="00:05:15.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but everything else is sort of like""" start="00:05:18.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's designed to be like Emacs,""" start="00:05:20.034" video="mainVideo-llm" id="subtitle"]] +[[!template text="""except way more powerful.""" start="00:05:21.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You don't need any mode to be active for this.""" start="00:05:23.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You just need the library""" start="00:05:27.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and an AI provider of some sort, either locally""" start="00:05:32.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or, you know, your favorite cloud provider.""" start="00:05:34.760" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Integrated AI experiences: gptel, ellama, chatgpt-shell, etc.""" start="00:05:41.200" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Now we're going to move on to a different way""" start="00:05:41.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of interacting with AI and Emacs.""" start="00:05:43.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This way is less like the normal editing experience.""" start="00:05:46.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you lose some familiarity. However, in exchange,""" start="00:05:52.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it is a lot more powerful.""" start="00:05:57.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And there's a whole suite of these tools.""" start="00:05:58.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm going to demonstrate gptel,""" start="00:06:00.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is the most popular one.""" start="00:06:02.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But there are many.""" start="00:06:05.780" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think different people have""" start="00:06:06.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""their own preferences of what they like to use.""" start="00:06:08.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're going to try now something""" start="00:06:11.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that is a step away from just editing.""" start="00:06:13.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And we're going to, I'm actually using gptel.""" start="00:06:15.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There are several packages that are going to be""" start="00:06:19.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""doing the same sort of thing as I'm going to show you.""" start="00:06:22.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""gptel has sort of become the most popular one.""" start="00:06:25.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So that's why I'm showing that to you.""" start="00:06:30.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But let's just highlight everything and say gptel rewrite.""" start="00:06:32.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And gptel basically just has a few things.""" start="00:06:39.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's different ways of thinking about this.""" start="00:06:42.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""With just a few very configurable menus,""" start="00:06:45.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you can do a large variety of things.""" start="00:06:50.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So let's give rewrite instructions.""" start="00:06:53.960" video="mainVideo-llm" id="subtitle"]] +[[!template text=""""Turn this into an iterative program""" start="00:06:59.820" video="mainVideo-llm" id="subtitle"]] +[[!template text="""instead of a recursive program."""" start="00:07:06.601" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In Elisp, you really should not be using recursion.""" start="00:07:12.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So we could say "return to be ready".""" start="00:07:17.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Do we accept it?""" start="00:07:20.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Yes, we accept it. Or we could iterate and say, no, no,""" start="00:07:21.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that's not what we meant. We meant something else.""" start="00:07:24.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Or you did something a little something wrong.""" start="00:07:26.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Please fix it.""" start="00:07:29.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is all very powerful.""" start="00:07:29.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Is this editing?""" start="00:07:31.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Well, it's in the editor.""" start="00:07:33.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could do this while editing, while deleting,""" start="00:07:40.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could be doing some sort of traditional editing.""" start="00:07:42.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And then this, which is editing""" start="00:07:44.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the sense that it's in your editor,""" start="00:07:47.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you might have to highlight""" start="00:07:48.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""some parts of the file and do things,""" start="00:07:51.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but generally you don't even need to,""" start="00:07:52.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or you go to a spot and you say, put code at this spot.""" start="00:07:54.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's kind of like editing.""" start="00:07:59.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I would say it's not exactly editing,""" start="00:08:01.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's at least something that must happen in an editor""" start="00:08:05.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it's well integrated into Emacs.""" start="00:08:10.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""As you can tell, it used very sort of""" start="00:08:12.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""modern standard Emacs UI paradigms""" start="00:08:14.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it's all written in Elisp.""" start="00:08:18.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Everything is happening in Elisp here.""" start="00:08:20.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is just very much an Emacs experience.""" start="00:08:23.780" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's just not exactly editing""" start="00:08:25.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because the thing doing the editing""" start="00:08:27.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""is the AI and not you.""" start="00:08:29.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You're just kind of telling it what to do.""" start="00:08:32.520" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Outside the editor""" start="00:08:36.040" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Now we're going to go and look at a way of interaction""" start="00:08:36.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that's even more powerful""" start="00:08:41.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and even more disconnected from the normal editing experience.""" start="00:08:43.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In fact, it's so disconnected""" start="00:08:46.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that most people are using this without an editor.""" start="00:08:47.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These are things like Claude Code""" start="00:08:52.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or the sort of open source equivalent, Aider.""" start="00:08:57.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's a few other things that follow this pattern as well.""" start="00:09:01.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it's very interesting in the sense""" start="00:09:05.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that while you can integrate these with the editors,""" start="00:09:07.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and I'm going to show you an Emacs integration,""" start="00:09:09.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you don't need to.""" start="00:09:12.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And that's not the way most people are using them.""" start="00:09:13.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I find it very interesting that sort of""" start="00:09:16.940" video="mainVideo-llm" id="subtitle"]] +[[!template text="""we're going back kind of full circle where, you know,""" start="00:09:19.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the 1960s or 70s, we were using Ed from the terminal""" start="00:09:23.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to edit files, but then we created editors,""" start="00:09:31.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and that was a really good idea.""" start="00:09:35.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It is a lot easier to edit files""" start="00:09:37.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""when you have an actual UI.""" start="00:09:40.168" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But now it's 2025, and we're back in the terminal,""" start="00:09:42.500" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and we're editing files through the terminal,""" start="00:09:46.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you know what, it's great,""" start="00:09:50.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but I think it's even better with Emacs.""" start="00:09:53.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""On the other hand, it comes with some trade-offs,""" start="00:09:56.900" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as you can see, as we will see.""" start="00:10:00.280" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Outside Experiences: claude-code.el, aidermacs, eca""" start="00:10:04.734" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Okay, we're going to look at""" start="00:10:04.734" video="mainVideo-llm" id="subtitle"]] +[[!template text="""[audio glitch] Claude Code IDE, aidermacs, ECA.""" start="00:10:07.468" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Last time, I didn't show you all the variants.""" start="00:10:20.321" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I do want to show you eca, which points to,""" start="00:10:22.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it is a very similar tool in what it does,""" start="00:10:26.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but does have a different""" start="00:10:29.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and I think better type of Emacs integration.""" start="00:10:32.740" video="mainVideo-llm" id="subtitle"]] +[[!template text="""All right, we're going to demonstrate Claude Code IDE,""" start="00:10:37.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is one of three Claude Code packages.""" start="00:10:42.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's a bit confusing.""" start="00:10:46.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""One of them will be demoed by another presenter""" start="00:10:47.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""at the Emacs conference, so stay tuned for that.""" start="00:10:52.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Here I'm just going to give you a little taste""" start="00:10:54.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of what these packages look like.""" start="00:10:56.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So if we say Claude Code IDE,""" start="00:10:58.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it presents us with basically""" start="00:11:03.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""almost exactly what you would get""" start="00:11:06.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""when you're running this in the terminal.""" start="00:11:09.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And essentially there's a terminal interface.""" start="00:11:11.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You can see that there's a vterm.""" start="00:11:13.934" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But here we're going to say, "In scratch.el"...""" start="00:11:16.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""let's say what we want to happen.""" start="00:11:20.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""[In scratch.el, there is a fibonacci function.""" start="00:11:23.401" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Can you add all normal elisp headers""" start="00:11:32.134" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and footers to this file?]""" start="00:11:39.568" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So, we just say what's going to happen,""" start="00:11:43.860" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and this is going to do things in the background.""" start="00:11:45.841" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's not going to do things through Emacs.""" start="00:11:48.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That said, there is an integration with Emacs,""" start="00:11:50.980" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so that it can do things like show you these nice ediffs.""" start="00:11:54.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""My screen is not really wide enough""" start="00:12:00.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to show you a really great ediff here,""" start="00:12:03.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but you can kind of see what it's doing,""" start="00:12:04.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you can see, yeah, that looks good,""" start="00:12:06.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so you could say yes, yes, accept the changes,""" start="00:12:09.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and if we... Just need to revert the buffer.""" start="00:12:14.121" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We can quit the printout of this.""" start="00:12:25.300" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We see that it just did everything I asked it to.""" start="00:12:28.460" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Is everything exactly right?""" start="00:12:33.020" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Probably not. It's reasonable for a start though.""" start="00:12:36.140" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But you could ask it to do anything.""" start="00:12:39.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could say, write unit tests for this, and it will.""" start="00:12:40.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could say, write me a suite of functions""" start="00:12:45.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""like Fibonacci, and it'll probably do something reasonable.""" start="00:12:49.020" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But you can see this is not editing.""" start="00:12:52.580" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's nothing editing-like about this.""" start="00:12:54.901" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That said, there is something that is editing.""" start="00:12:58.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You need to give it instructions.""" start="00:13:07.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You need to tell it what to do.""" start="00:13:08.600" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Org files""" start="00:13:10.960" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""And what you could do is... You could have a project.org,""" start="00:13:10.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and what you could do is you could have functions.""" start="00:13:19.620" video="mainVideo-llm" id="subtitle"]] +[[!template text="""The way I've done things often is ....""" start="00:13:23.900" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could say something like,""" start="00:13:26.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""unit tests for Fibonacci. How do you spell Fibonacci?""" start="00:13:28.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't remember. But then you could say that this is,""" start="00:13:36.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could clock it, basically. org-clock.""" start="00:13:40.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""What I've done is...""" start="00:13:47.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could add custom commands to Claude Code,""" start="00:13:48.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you could just say, look, here's my Org file,""" start="00:13:50.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""read it and do the thing that I'm clocked in as.""" start="00:13:53.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And then you can write a bunch of instructions here, like,""" start="00:13:57.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I like to use ert for tests. Tests should, like, whatever.""" start="00:14:01.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You should just say... everything""" start="00:14:07.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you need to kind of specify.""" start="00:14:08.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""As you get to more complicated tasks,""" start="00:14:11.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's harder and harder to give it all the context""" start="00:14:13.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it needs for a task,""" start="00:14:16.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and Org Mode is actually a pretty good way to do this.""" start="00:14:17.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I find that this works pretty well,""" start="00:14:22.300" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you can even have it instruct Claude""" start="00:14:24.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to just mark things done in your Org file""" start="00:14:26.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""when they're done.""" start="00:14:29.334" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it knows how to do this, of course.""" start="00:14:30.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So, let's just clock out.""" start="00:14:32.868" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's one way to do things.""" start="00:14:37.960" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""ECA""" start="00:14:45.240" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So one other thing I'd like to show you is eca,""" start="00:14:45.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which, compared to Claude Code, ECA is open source.""" start="00:14:49.500" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's very nice in that respect.""" start="00:14:52.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It doesn't have to use Anthropic's models.""" start="00:14:54.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You can use local models,""" start="00:14:57.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it has the advantage of integrating very well with Emacs.""" start="00:15:00.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm not going to demonstrate it,""" start="00:15:07.620" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because it works essentially the same thing you could do""" start="00:15:08.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""approximately the same kinds of things""" start="00:15:11.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could do with Claude Code.""" start="00:15:14.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You just write what you want to happen""" start="00:15:15.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it will make it happen.""" start="00:15:17.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It again does not do this through Emacs,""" start="00:15:18.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but what it does do is""" start="00:15:21.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it gives you a much better Emacs interface""" start="00:15:23.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that's not terminal-based,""" start="00:15:25.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because you're not using it through the terminal,""" start="00:15:26.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or not even through comint,""" start="00:15:29.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you are using it through a backend""" start="00:15:31.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that is exchanging structured information""" start="00:15:35.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""with this process that is doing all the work.""" start="00:15:37.500" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But other than that,""" start="00:15:41.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's the same model as Claude Code""" start="00:15:41.901" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and projects of that nature.""" start="00:15:44.520" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Editing""" start="00:15:52.060" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""We've seen in the demos that I gave""" start="00:15:52.060" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that there are AI experiences""" start="00:15:56.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that are very natural in the world of editing.""" start="00:15:58.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because they, like Copilot, just offers completion,""" start="00:16:01.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it fits very well with what we all do in Emacs.""" start="00:16:05.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it's truly, yes, it's kind of a cheat in a sense""" start="00:16:09.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""for editing experiences,""" start="00:16:14.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because it can do so much, but it's just editing.""" start="00:16:15.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Whereas things like gptel and those kinds of tools,""" start="00:16:20.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""they are clearly in an editor and using editor,""" start="00:16:25.260" video="mainVideo-llm" id="subtitle"]] +[[!template text="""they're using Emacs, but they represent sort of like, well,""" start="00:16:29.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you can edit for a while, then you could use these tools""" start="00:16:35.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to do something that is not editing,""" start="00:16:37.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this AI just changing the buffer for you. And that's fine.""" start="00:16:39.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's still... It may not be editing,""" start="00:16:45.900" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's still clearly something that""" start="00:16:48.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""is useful to do in Emacs""" start="00:16:52.034" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and belongs in Emacs.""" start="00:16:55.568" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But the new tools like Claude Code and things like that""" start="00:16:57.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""are kind of different.""" start="00:17:01.860" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Yes, they will get better integrated with Emacs,""" start="00:17:02.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's not clear that they really need to.""" start="00:17:06.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They can do a lot of things without editing.""" start="00:17:11.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In a sense, editing is obsolete in some sense.""" start="00:17:15.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""For as many tasks, you don't need to edit anymore.""" start="00:17:19.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And that's a nice thing.""" start="00:17:23.460" video="mainVideo-llm" id="subtitle"]] +[[!template text="""No one really knows when all this will end,""" start="00:17:26.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""how far things will go. It could be that in a decade or so,""" start="00:17:30.580" video="mainVideo-llm" id="subtitle"]] +[[!template text="""no one's really editing for work anymore.""" start="00:17:36.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Maybe you're just writing instructions.""" start="00:17:41.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could do that with anything.""" start="00:17:43.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You don't need Emacs or any special editor.""" start="00:17:44.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We could all be using Notepad. That would be bad.""" start="00:17:47.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But... I think it could go that far,""" start="00:17:50.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it could be that, well, for many specialized things,""" start="00:17:58.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""people are still using editing for certain tasks,""" start="00:18:01.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but most tasks are getting fed to just...""" start="00:18:04.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""AI is just doing those things.""" start="00:18:07.001" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In any case, I think it's clear that editing is diminishing,""" start="00:18:08.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the need for editing itself is diminishing.""" start="00:18:15.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And in such a world, It's interesting to think""" start="00:18:17.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""where Emacs is headed, especially in relation to""" start="00:18:21.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""all the other editors.""" start="00:18:24.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think people will use Emacs less.""" start="00:18:26.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But I think other editors, like VS Code,""" start="00:18:28.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""may simply disappear or be a relatively fringe tool.""" start="00:18:31.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And Emacs is going to follow its own path.""" start="00:18:38.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's very extensible. It could do anything.""" start="00:18:42.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""If there's one thing Emacs can do, it's adapt.""" start="00:18:44.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Emacs has been around for a long time.""" start="00:18:47.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's pretty clear that Emacs will be around for a long time.""" start="00:18:51.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It might be that in the future,""" start="00:18:54.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""editing is some sort of like an artisanal activity that we do.""" start="00:18:58.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's kind of weird to think about it.""" start="00:19:04.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's not like baking bread.""" start="00:19:05.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it is the sense that AI might be""" start="00:19:07.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""churning out code in the way, you know,""" start="00:19:10.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the factories are turning out bread,""" start="00:19:12.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but if you really want the good stuff,""" start="00:19:14.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you'll have to do it yourself.""" start="00:19:17.140" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't know if it'll be exactly like that,""" start="00:19:21.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it could be that Emacs survives and thrives""" start="00:19:23.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in a very kind of specialized ecosystem of people""" start="00:19:29.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""who contribute and use it in the way""" start="00:19:33.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it has survived and thrive right now.""" start="00:19:35.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think that's a really nice way for all this to end up.""" start="00:19:39.540" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's the whole sense of how society will end up""" start="00:19:46.140" video="mainVideo-llm" id="subtitle"]] +[[!template text="""if all this happens. I don't know,""" start="00:19:48.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but Emacs will be there for us when whatever happens.""" start="00:19:50.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So thank you, and let's help make Emacs the best it can be""" start="00:19:54.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to survive and thrive in the next decade.""" start="00:20:00.080" video="mainVideo-llm" id="subtitle"]] + +</div> + +Captioner: amitav + +Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20Emacs%2C%20editors%2C%20and%20LLM%20driven%20workflows) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/llm-before.md b/2025/info/llm-before.md new file mode 100644 index 00000000..45c12a80 --- /dev/null +++ b/2025/info/llm-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="llm"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect stroke-width="3" x="329" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 21-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-llm.html> Etherpad: <https://pad.emacsconf.org/2025-llm> +Etherpad: <https://pad.emacsconf.org/2025-llm> +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 mainVideo"><video controls preload="none" id="mainVideo-llm"><source src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 20:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-llm">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-llm.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://youtu.be/U3kbEabBJ_s">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/llm-nav.md b/2025/info/llm-nav.md new file mode 100644 index 00000000..fcfbb800 --- /dev/null +++ b/2025/info/llm-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a> +Next by time: <a href="/2025/talks/blee-lcnt">Blee-LCNT: An Emacs-centered content production and self-publication framework</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/modern-after.md b/2025/info/modern-after.md new file mode 100644 index 00000000..4518aec2 --- /dev/null +++ b/2025/info/modern-after.md @@ -0,0 +1,251 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="modern-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> + +[[!template text="""""" start="00:00:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Hi! My name is Eduardo Ochs. I'm the""" start="00:00:55.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""author of an Emacs package called eev and""" start="00:00:57.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the title of this video is""" start="00:01:00.000" video="mainVideo-modern" id="subtitle"]] +[[!template text=""""Some problems of modernizing Emacs".""" start="00:01:03.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Here is a summary of the main themes""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of this video. I'm going to talk mainly""" start="00:01:08.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""about these four things here. The first""" start="00:01:10.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""one is that Emacs has changed a lot in its""" start="00:01:12.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""recent versions, and now it has lots of""" start="00:01:15.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""types... so if we want to look under the""" start="00:01:18.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""hood and to understand what Emacs""" start="00:01:21.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""really does we are going to stumble on""" start="00:01:24.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""lots of types... and the""" start="00:01:27.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""current tree of classes and types""" start="00:01:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""looks like this... that is,""" start="00:01:34.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""is quite big.""" start="00:01:37.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The second theme is that people used""" start="00:01:46.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to say things like "Anyone can learn Lisp""" start="00:01:49.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in one day"... I'm going to explain""" start="00:01:53.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this quote, and I'm also going to show""" start="00:01:56.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that now this is gone... anyway. This is a""" start="00:02:01.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""very short summary... details soon.""" start="00:02:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I will also show how to display""" start="00:02:08.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""better "inner views" of Emacs objects...""" start="00:02:10.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I'm going to Define what is an inner view,""" start="00:02:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of course.""" start="00:02:16.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The main trick is that we are going""" start="00:02:18.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to use one of the ways of displaying""" start="00:02:20.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""internal objects, that is the `cl-print'""" start="00:02:24.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""family of functions, for example,""" start="00:02:29.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""`cl-prin1-to-string', and here are some""" start="00:02:32.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""examples of the kind of output that we""" start="00:02:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""are going to see...""" start="00:02:37.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""for example, if we run these two lines""" start="00:02:38.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""here the first line defines a function `foo'""" start="00:02:44.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and the second line sets `o' to the""" start="00:02:47.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""internal view of the definition of `foo'.""" start="00:02:52.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""In older Emacses `o' would be just a""" start="00:02:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""list that looks... that would look very""" start="00:02:59.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""similar to this line here... but in newer""" start="00:03:02.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Emacses the result of this - I mean, the""" start="00:03:05.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the contents of `o' is this thing here,""" start="00:03:09.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that looks quite different""" start="00:03:12.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""from this definition.""" start="00:03:15.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So, in older Emacses""" start="00:03:18.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the contents of the""" start="00:03:21.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""function cell of `o'...""" start="00:03:25.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""sorry, of the function cell of `foo',""" start="00:03:28.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""would be an "old-style lambda",""" start="00:03:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that would be just a list like this...""" start="00:03:32.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and in newer Emacses uh the contents of O would""" start="00:03:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""be a "vector-like lambda"... look for the""" start="00:03:39.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""square brackets here - this is a""" start="00:03:42.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""vector, but it is preceded by a hash sign.""" start="00:03:44.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So this is what we call""" start="00:03:47.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""a "vector-like lambda",""" start="00:03:49.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and vector-like lambas do not""" start="00:03:51.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""have a canonical printed representation -""" start="00:03:53.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""they have at least two semicanonical""" start="00:03:55.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""printed representations...""" start="00:03:57.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The first semicanonical""" start="00:03:59.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""printed representation is this one, that is""" start="00:04:01.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""generated by a family of functions with""" start="00:04:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""names like `prin1'...""" start="00:04:07.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and the second semicanonical printed""" start="00:04:09.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""representation is like this -""" start="00:04:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""it looks like a list...""" start="00:04:17.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""it looks somewhat like this definition""" start="00:04:20.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of `foo' here, but it has this""" start="00:04:23.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""`:dynbind' symbol here...""" start="00:04:27.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and it turns out that when we use""" start="00:04:29.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the `cl-print' family of functions we can""" start="00:04:32.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""reconfigure how things are printed...""" start="00:04:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and I'm going to show several interesting""" start="00:04:37.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""ways of reconfiguring how lambdas are printed,""" start="00:04:40.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and one of the ways is going to""" start="00:04:47.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""be like this.""" start="00:04:49.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""We can also use the `cl-print'""" start="00:04:52.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""functions with my indentation tricks to""" start="00:04:56.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to display how types, or classes, are""" start="00:04:59.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""viewed internally by Emacs, and this is a""" start="00:05:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""big example...""" start="00:05:07.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""This is what Emacs considers as being""" start="00:05:10.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the definition of the type""" start="00:05:14.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""`cl-structure-class',""" start="00:05:16.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""class and it is this big thing here.""" start="00:05:18.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I edited it very lightly...""" start="00:05:21.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I just uh deleted some line breaks here.""" start="00:05:24.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And another thing that I want to to""" start="00:05:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""explain is that Emacs""" start="00:05:33.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""has some help functions that""" start="00:05:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I have never liked...""" start="00:05:37.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""for most people they are good enough,""" start="00:05:39.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but for me they aren't... they...""" start="00:05:41.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""uh, well - I'm going to say""" start="00:05:44.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""more about this later...""" start="00:05:48.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and, for example,""" start="00:05:50.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""if we want a description of what is""" start="00:05:52.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this type here, that we just saw in""" start="00:05:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""its internal view here...""" start="00:05:58.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we can run either `describe-type'""" start="00:06:00.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""or my variant of `describe-type',""" start="00:06:02.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and we get a help buffer""" start="00:06:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that looks like this, in which""" start="00:06:07.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""these blue things that are underlined""" start="00:06:10.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""are "buttons", in the classical sense...""" start="00:06:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""you can click on these buttons, or type""" start="00:06:15.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""RET on these buttons, and you will be""" start="00:06:17.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""taken to another help page, that is""" start="00:06:19.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""generated dynamically...""" start="00:06:22.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and you can navigate back and forth...""" start="00:06:24.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and well, whatever...""" start="00:06:28.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and I'm going to explain my""" start="00:06:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""problems with these kinds of help buffers""" start="00:06:33.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and what I'm trying to do to""" start="00:06:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""overcome these problems...""" start="00:06:37.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""One of my slogans in this video""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""is going to be this one:""" start="00:06:43.000" video="mainVideo-modern" id="subtitle"]] +[[!template text=""""Anyone can learn Lisp in one day".""" start="00:06:43.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this is a part of a bigger quote""" start="00:06:45.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that I took from a keynote presentation""" start="00:06:49.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by Abelson and Sussman, who""" start="00:06:51.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""are two dinosaurs of Computer Science...""" start="00:06:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Here is the full quote:""" start="00:06:58.000" video="mainVideo-modern" id="subtitle"]] +[[!template text=""""Anyone can learn Lisp in one day -""" start="00:07:00.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""except that if they already know Fortran""" start="00:07:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""then it would take three days."""" start="00:07:06.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""This is a frame of the video...""" start="00:07:11.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""By the way I am going to to add""" start="00:07:24.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this... "and if the person is starting""" start="00:07:28.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""with Doom Emacs then it would take 5 years."""" start="00:07:32.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""why? I'm going to explain why.""" start="00:07:34.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""This is how Emacs used to be.""" start="00:07:39.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""If we execute these two expressions here""" start="00:07:43.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the first one... sorry, each symbol can""" start="00:07:46.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""have two "values",""" start="00:07:51.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""one is its "value as a variable"""" start="00:07:53.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and another one is its "value as a function"...""" start="00:07:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and if we run this we store 42""" start="00:07:58.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in the "value cell" of the symbol `foo', and""" start="00:08:02.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""if we run this defun here it stores a""" start="00:08:07.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""certain anonymous function in the""" start="00:08:11.000" video="mainVideo-modern" id="subtitle"]] +[[!template text=""""function cell" of the symbol `foo'...""" start="00:08:14.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and in Emacs, until some time ago""" start="00:08:18.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""if we did that and and if we ran""" start="00:08:22.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this expression here the result""" start="00:08:27.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""would be 42,""" start="00:08:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""because of this line here, and if we""" start="00:08:31.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""ran this line here the result would be""" start="00:08:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the anonymous function corresponding to""" start="00:08:37.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this defun here...""" start="00:08:40.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but now this has changed...""" start="00:08:41.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the result of this thing here is this""" start="00:08:45.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""vector-like lambda here - but that doesn't""" start="00:08:48.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""matter much now...""" start="00:08:51.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So, until some time ago""" start="00:08:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""if we did that and if we ran""" start="00:08:56.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this expression here, (foo foo)...""" start="00:08:58.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Emacs would do this: it would""" start="00:09:01.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""replace the first `foo' by this""" start="00:09:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""anonymous function here, it would replace""" start="00:09:06.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the second `foo' by the value of `foo' as a""" start="00:09:09.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""variable, that is 42,""" start="00:09:11.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and it would evaluate this, and the""" start="00:09:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""result would be 420.""" start="00:09:16.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So, again, we used to have this slogan""" start="00:09:20.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""here, "anyone can learn Lisp in one day"...""" start="00:09:23.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but now this is gone.""" start="00:09:26.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Let me show... let me talk""" start="00:09:28.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""a bit more about why...""" start="00:09:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the title of this slide is""" start="00:09:34.000" video="mainVideo-modern" id="subtitle"]] +[[!template text=""""Lambdas for beginners broken"...""" start="00:09:36.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""if we run this, as I've shown""" start="00:09:38.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in the previous slide...""" start="00:09:41.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in the old style, in old Emacses,""" start="00:09:43.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the result of (symbol-function 'foo)""" start="00:09:45.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""would be this anonymous function here...""" start="00:09:47.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and now we get this strange thing here.""" start="00:09:49.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So, this is an "old-style lambda",""" start="00:09:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this is a "vector-like lambda",""" start="00:09:58.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and until the middle of 2024""" start="00:10:02.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""beginners could learn a lot of Lisp""" start="00:10:05.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by thinking only in terms of""" start="00:10:08.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""objects like these...""" start="00:10:11.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this is a function and this""" start="00:10:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""is an anonymous function, and""" start="00:10:15.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""they would learn how to draw cons cell""" start="00:10:17.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""diagrams like this thing here and this""" start="00:10:20.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""thing here...""" start="00:10:23.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""they would think on lists as""" start="00:10:25.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""being these trees here, and they""" start="00:10:27.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""would be able to understand a lot of""" start="00:10:29.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Lisp just by thinking in these terms...""" start="00:10:32.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and then vector-like lambdas started""" start="00:10:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to appear in many places... and if we use""" start="00:10:39.000" video="mainVideo-modern" id="subtitle"]] +[[!template text=""""vector-like lambdas" in a wide sense,""" start="00:10:43.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to mean all the new objects,""" start="00:10:46.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""these new objects, that are""" start="00:10:50.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""difficult to visualize... they also started""" start="00:10:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to appear in many places.""" start="00:10:56.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""This is a continuation of the""" start="00:10:58.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""previous slide - this part here is a copy""" start="00:11:01.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of things that were in the previous slide...""" start="00:11:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""before 2024 beginners could""" start="00:11:06.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""open black boxes like this...""" start="00:11:12.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""they could try to see what was in the""" start="00:11:17.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""function cell of the symbol `foo'...""" start="00:11:20.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and they would see something elegant and""" start="00:11:24.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""mind-blowing... and they would start to love""" start="00:11:27.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Lisp immediately.""" start="00:11:29.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Now what they get - what they see -""" start="00:11:31.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""is a tiny part of a very complex structure""" start="00:11:33.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that is very powerful but that is""" start="00:11:35.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""very difficult to understand...""" start="00:11:39.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and now our beginners are overwhelmed""" start="00:11:41.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""instead of mind-blown.""" start="00:11:44.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Note that I said "black box" here.""" start="00:11:46.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Let me explain the term.""" start="00:11:48.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""We can open what's inside of `foo'...""" start="00:11:52.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we can open `foo' to see the contents of""" start="00:11:57.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the symbol `foo', and we can try to see""" start="00:11:59.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""what's in the function cell of the""" start="00:12:02.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""symbol `foo'...""" start="00:12:06.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""so we can open the box, but what we get""" start="00:12:08.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""is something very difficult to understand,""" start="00:12:10.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and so I'm going to say that""" start="00:12:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""when this happens that box is black.""" start="00:12:17.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""It is not totally black - we can open open it -""" start="00:12:21.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but we don't understand what is going on there,""" start="00:12:23.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""so we declare that that is black.""" start="00:12:26.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And... when these things started to happen""" start="00:12:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""_I_ was overwhelmed -""" start="00:12:33.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and in this video I'm going to pretend""" start="00:12:38.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that I was not the only person""" start="00:12:40.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that was overwhelmed""" start="00:12:44.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by these new structures""" start="00:12:46.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that are not so elegant""" start="00:12:50.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""as the ones that we had before.""" start="00:12:52.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Anyway...""" start="00:12:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""""" start="00:12:56.000" video="mainVideo-modern" id="subtitle"]] + +</div>Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20modern%3A%20Some%20problems%20of%20modernizing%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/modern-before.md b/2025/info/modern-before.md new file mode 100644 index 00000000..86b09fda --- /dev/null +++ b/2025/info/modern-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="modern"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect stroke-width="3" x="13" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 20-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-modern> +Etherpad: <https://pad.emacsconf.org/2025-modern> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T14:10:00Z" end="2025-12-07T14:30:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~9:10 AM - 9:30 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~8:10 AM - 8:30 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~7:10 AM - 7:30 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~6:10 AM - 6:30 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~2:10 PM - 2:30 PM UTC <br />Sunday, Dec 7 2025, ~3:10 PM - 3:30 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~4:10 PM - 4:30 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~7:40 PM - 8:00 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~10:10 PM - 10:30 PM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~11:10 PM - 11:30 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-modern">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--original.mp4">Download --original.mp4 (35MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--original.vtt">Download --original.vtt</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/modern-nav.md b/2025/info/modern-nav.md new file mode 100644 index 00000000..48855c90 --- /dev/null +++ b/2025/info/modern-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/sun-open">Sunday opening remarks</a> +Next by time: <a href="/2025/talks/reader">An introduction to the Emacs Reader</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/n-angulator-after.md b/2025/info/n-angulator-after.md new file mode 100644 index 00000000..a1f2fa21 --- /dev/null +++ b/2025/info/n-angulator-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [kevinbanjo@gmail.com](mailto:kevinbanjo@gmail.com?subject=Comment%20for%20EmacsConf%202023%20n-angulator%3A%20Org-mode%20GTD%20vs%20N-angulator%20GTD) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/n-angulator-before.md b/2025/info/n-angulator-before.md new file mode 100644 index 00000000..a24ee5fd --- /dev/null +++ b/2025/info/n-angulator-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk cancelled +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/2025/info/n-angulator-nav.md b/2025/info/n-angulator-nav.md new file mode 100644 index 00000000..35ed938a --- /dev/null +++ b/2025/info/n-angulator-nav.md @@ -0,0 +1,4 @@ + +<div class="talk-nav"> +Back to the [[talks]] +</div>
\ No newline at end of file diff --git a/2025/info/open-mic-after.md b/2025/info/open-mic-after.md new file mode 100644 index 00000000..7caff151 --- /dev/null +++ b/2025/info/open-mic-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%20open-mic%3A%20Open%20session) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/open-mic-before.md b/2025/info/open-mic-before.md new file mode 100644 index 00000000..ab9982a3 --- /dev/null +++ b/2025/info/open-mic-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="open-mic"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect stroke-width="3" x="480" y="15" opacity="0.8" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 50-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-open-mic.html> Etherpad: <https://pad.emacsconf.org/2025-open-mic> +Etherpad: <https://pad.emacsconf.org/2025-open-mic> +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 mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-open-mic">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-open-mic.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--intro.webm">Download --intro.webm</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/open-mic-nav.md b/2025/info/open-mic-nav.md new file mode 100644 index 00000000..1fea380b --- /dev/null +++ b/2025/info/open-mic-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/greader">GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</a> +Next by time: <a href="/2025/talks/graphics">Modern Emacs/Elisp hardware/software accelerated graphics</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/org-babel-after.md b/2025/info/org-babel-after.md new file mode 100644 index 00000000..f788e2a1 --- /dev/null +++ b/2025/info/org-babel-after.md @@ -0,0 +1,221 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="org-babel-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""What are reactive notebooks?""" start="00:00:01.120" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""Hello, everyone. My name is Abhinav,""" start="00:00:01.120" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and I'm going to talk about""" start="00:00:03.034" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""how to make Org Babel reactive. So reactivity here""" start="00:00:03.901" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""means reactivity in the sense of reactive notebooks.""" start="00:00:07.240" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So if you used Org Babel,""" start="00:00:10.001" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you might also have used Jupyter notebooks,""" start="00:00:11.601" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which are basically notebooks primarily for""" start="00:00:13.934" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Python programming,""" start="00:00:16.200" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""where you have these text and code blocks interleaved,""" start="00:00:16.934" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then you can execute every code block independently,""" start="00:00:20.101" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then you control the order of execution manually,""" start="00:00:23.158" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""or you can just run the code blocks""" start="00:00:25.859" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""from top to bottom. But with reactive notebooks,""" start="00:00:27.200" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""what happens is that there's another way of running""" start="00:00:29.700" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which is basically by having all these""" start="00:00:32.928" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""dependent code blocks automatically get""" start="00:00:35.330" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""executed whenever you make a change.""" start="00:00:37.000" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So for example, if you change a variable,""" start="00:00:38.901" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""everything else that's dependent on""" start="00:00:40.775" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""that variable will be executed automatically.""" start="00:00:42.160" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""I'll show you an example of what that looks like.""" start="00:00:44.434" video="mainVideo-org-babel" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Reactivity demo""" start="00:00:49.042" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""Right, here's an example reactive Notebook.""" start="00:00:49.042" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So this is called Observable.""" start="00:00:51.763" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Observable is this tool made by""" start="00:00:53.560" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""the creator of d3.js which is""" start="00:00:54.864" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""a famous JavaScript charting library. So here, the""" start="00:00:57.680" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""interface is very similar to Jupyter Notebook.""" start="00:01:01.500" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""You basically are having these cells""" start="00:01:03.668" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and each cell could be a text cell, like here,""" start="00:01:06.408" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""this is a Markdown cell""" start="00:01:08.509" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then there are these code blocks.""" start="00:01:09.589" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Now each code cell is basically defining a variable.""" start="00:01:11.610" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""This is important in reactive notebooks because""" start="00:01:15.251" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""each cell is connected to other cell via this variable""" start="00:01:17.840" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""usage. So here data is defined,""" start="00:01:21.240" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""then there is filtered which is defined""" start="00:01:23.553" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which is dependent on data, and then this plot is""" start="00:01:25.013" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""dependent on filtered.""" start="00:01:27.720" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So now, in a classical notebook, what I will do is""" start="00:01:29.134" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""if I change something here, let's say from 1 to 2,""" start="00:01:31.154" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""I will have to run this, and then run this plot block again""" start="00:01:34.395" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""to make the change be visible.""" start="00:01:34.855" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""But in a reactive notebook, what happens is""" start="00:01:40.336" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""I can just change this from some value""" start="00:01:42.056" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""to some value, and then execute,""" start="00:01:44.397" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then every descendant is also executed,""" start="00:01:46.257" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""because that's how the reactivity works.""" start="00:01:48.818" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""You change this variable,""" start="00:01:51.040" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""so this should also be changed,""" start="00:01:51.938" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""because this is dependent on this variable.""" start="00:01:53.081" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Now this is really helpful""" start="00:01:55.239" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""if you have a very complex and messy notebook""" start="00:01:56.859" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which is what actually happens in reality.""" start="00:01:59.000" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""You end up doing an exploratory analysis,""" start="00:02:01.200" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and you have these code blocks lying here and there.""" start="00:02:03.481" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Then you change something""" start="00:02:05.960" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then you have to keep something in your mind""" start="00:02:07.102" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""that if I change this, I need to run""" start="00:02:09.282" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""these five code blocks again""" start="00:02:11.363" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""to finally get to the result that I want to see.""" start="00:02:13.024" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Stale state causes a lot of issues in Jupyter Notebooks.""" start="00:02:15.605" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So this is really good for reactivity, sorry reproducibility,""" start="00:02:20.468" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""but this is also really good for""" start="00:02:23.789" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""just having this exploration""" start="00:02:26.631" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""that you're trying to do. For example,""" start="00:02:28.600" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you're changing something and it's really easy""" start="00:02:30.118" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""to just see that change happening in real time""" start="00:02:31.762" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""in your outcome variables, right?""" start="00:02:34.888" video="mainVideo-org-babel" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Org-Babel""" start="00:02:38.499" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So I was wondering how to introduce this reactivity in Org Mode.""" start="00:02:38.499" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""And here's how it will look like.""" start="00:02:41.921" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So this is a demo Org Mode file.""" start="00:02:43.201" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""There are many Org Babel blocks here.""" start="00:02:46.303" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So you start from here.""" start="00:02:48.604" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Let's say this is a code block. It has a name.""" start="00:02:49.564" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""And then there's another code block,""" start="00:02:52.086" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which is dependent on the previous one,""" start="00:02:53.666" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""as you can see here, and so on.""" start="00:02:55.427" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""And then finally, there's a plot here,""" start="00:02:57.808" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which is a gnuplot code.""" start="00:02:59.369" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""And you can see the image here.""" start="00:03:00.890" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Now, what happens usually is that""" start="00:03:02.551" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""if I change this value from,""" start="00:03:04.132" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""let's say, 113 to 112, nothing happens on its own right?""" start="00:03:05.197" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""There's an extra step of execution that I will have to do""" start="00:03:09.200" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""so I will do that, and then the value is changed.""" start="00:03:12.200" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Now the problem is that only this value is changed and""" start="00:03:15.080" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""if I go down and see the image, nothing will have changed.""" start="00:03:17.700" video="mainVideo-org-babel" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Running the whole buffer""" start="00:03:21.080" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So what I can do is basically,""" start="00:03:21.080" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""a really simple thing is that,""" start="00:03:23.080" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""a simple trick is to basically""" start="00:03:24.819" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""enable a hook, like, add a hook""" start="00:03:26.600" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""whenever you're saving the buffer,""" start="00:03:29.446" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you just run the full buffer again,""" start="00:03:30.526" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""like run all the code blocks automatically.""" start="00:03:31.867" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Now if you do that, you can basically make a change somewhere""" start="00:03:34.288" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then you can, you know,""" start="00:03:36.850" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""see how everything else is changing""" start="00:03:37.890" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which gives you some sort of reactivity,""" start="00:03:41.072" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""but there's still a lot of computation""" start="00:03:42.713" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""that's being wasted.""" start="00:03:43.973" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""You might not want to change or run this code block again""" start="00:03:45.974" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""when something down there is changing.""" start="00:03:49.596" video="mainVideo-org-babel" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Caching""" start="00:03:51.901" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So to counter that, you can actually add caching.""" start="00:03:51.901" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So if you add caching to any code block,""" start="00:03:54.568" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""that code block will only be executed again""" start="00:03:57.134" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""if that code has changed or""" start="00:03:59.801" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""the input variables have changed.""" start="00:04:02.400" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""But the other problem is that""" start="00:04:04.756" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you don't want caching to be enabled for a lot of cases""" start="00:04:06.337" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""where the code block is actually dependent on""" start="00:04:08.660" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""external state, like for example,""" start="00:04:10.841" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""some sort of randomness or time.""" start="00:04:12.723" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So caching also is, you know, kind of,""" start="00:04:15.025" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""it's, like, an important thing to use,""" start="00:04:17.434" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""but it's probably not giving you the complete answer.""" start="00:04:18.968" video="mainVideo-org-babel" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Computation dependencies""" start="00:04:21.760" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So what we can instead do is basically figure out""" start="00:04:21.760" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""the whole computation dependencies here.""" start="00:04:25.974" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So let's say if I look at this buffer,""" start="00:04:28.555" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""here's how all the blocks are connected.""" start="00:04:31.276" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So as you can see the plot code block""" start="00:04:35.077" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""is dependent on c and then legendpg,""" start="00:04:37.657" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and they themselves are dependent on these other nodes.""" start="00:04:40.118" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So when I make a change in b, I only want b to run""" start="00:04:43.919" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then c and then plot. I don't want anything else to run.""" start="00:04:47.280" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So what I did was I wrote a small minor mode for Org Mode""" start="00:04:50.845" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which does exactly this.""" start="00:04:54.268" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So whenever you are in a code block""" start="00:04:55.369" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and you are making a change and then you save it,""" start="00:04:57.770" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""it will just follow the trail from that code block""" start="00:04:59.872" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""to every other descendant which is going to be impacted,""" start="00:05:01.914" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and it just runs all of them, and nothing else gets executed.""" start="00:05:05.356" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So to see it in action, I will just enable that mode.""" start="00:05:09.720" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Yeah, right. So now here, if I change this 113 to 112""" start="00:05:13.120" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and I save, this code, this variable gets changed.""" start="00:05:17.022" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""It's the same value because I did not update it again.""" start="00:05:21.244" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""And you can also see b also got changed""" start="00:05:23.745" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""because it's just following all the execution order and so on.""" start="00:05:25.720" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""The plot also got updated.""" start="00:05:29.668" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""We will be able to see more clearly""" start="00:05:31.728" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""once I change something more substantial.""" start="00:05:34.069" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So here's another variable.""" start="00:05:36.402" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So I added a small toggle button here,""" start="00:05:36.403" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which is again part of the minor mode.""" start="00:05:41.333" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So since this is nil, if I toggle it,""" start="00:05:43.469" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""it will become true. And this variable dictates whether""" start="00:05:45.210" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""the plot will have the legend or not.""" start="00:05:49.400" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So if I toggle it to be t, now it's t""" start="00:05:51.175" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and you can see that the plot has legend that's visible.""" start="00:05:54.458" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""If I toggle it back again to nil, the legend is gone.""" start="00:05:57.901" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""Now this is nice, this...""" start="00:06:03.140" video="mainVideo-org-babel" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Making this even better""" start="00:06:04.534" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""This is already pretty helpful for me""" start="00:06:04.534" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""but what we can do is we can make it even better.""" start="00:06:06.480" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So one of the nicer ideas""" start="00:06:10.180" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""from these reactive notebooks""" start="00:06:11.401" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""is this idea of having an infinite canvas""" start="00:06:13.016" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""where you don't look at the document model,""" start="00:06:16.079" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you look at the whole document""" start="00:06:19.023" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""as a canvas of multiple connected documents.""" start="00:06:20.624" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""One good thing that happens there is that""" start="00:06:25.009" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you can basically have a piece of code somewhere""" start="00:06:26.590" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then piece of code""" start="00:06:29.551" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""somewhere very different position in the document,""" start="00:06:30.411" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""but you can put them together in the canvas""" start="00:06:32.500" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and then see them side by side.""" start="00:06:34.733" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So here also, let's say""" start="00:06:36.934" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""if I want to just have this image shown up at the top,""" start="00:06:38.295" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""what I can do is like I can pop this out,""" start="00:06:41.997" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which opens a child frame, and then I can just go here.""" start="00:06:45.858" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""This child frame is showing the same image.""" start="00:06:49.939" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So there's no change. So if I toggle this variable here,""" start="00:06:52.461" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you can see that the image is updated.""" start="00:06:55.503" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""If I toggle it back to nil, the image, the legend is gone.""" start="00:06:58.424" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""And you can obviously, you know,""" start="00:07:02.200" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you can make a lot of things come up as child frames.""" start="00:07:03.368" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""This is the same image.""" start="00:07:08.691" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So even if you go down to the document,""" start="00:07:09.431" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""you will see the same image.""" start="00:07:11.292" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So yeah, this is what I have right now.""" start="00:07:13.811" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""I'm definitely looking forward to making it more useful,""" start="00:07:18.175" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""probably including more kinds of child frames,""" start="00:07:21.957" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""maybe like making the whole document an infinite canvas.""" start="00:07:25.600" video="mainVideo-org-babel" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:07:29.966" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""Alright, so that's the talk.""" start="00:07:29.966" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""If you're interested in the codebase,""" start="00:07:32.100" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""here's the homepage""" start="00:07:33.347" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""for the project [https://dev.lepisma.xyz/git/ob-rx].""" start="00:07:34.447" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So the next steps for me are basically""" start="00:07:35.547" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""making my workflow easier in matplotlib,""" start="00:07:37.567" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which is a Python-based library,""" start="00:07:40.648" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and d3.js, which is for JavaScript.""" start="00:07:42.588" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""For the JS thing, I might have to add""" start="00:07:45.349" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""the interactive JS child frames,""" start="00:07:47.889" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and I am also looking forward to building something""" start="00:07:49.640" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which can replicate the work""" start="00:07:51.830" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""of the Observable's infinite canvas,""" start="00:07:53.970" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""because that's something""" start="00:07:56.751" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""which I found really useful in my work with""" start="00:07:57.491" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""just JS visualizations.""" start="00:08:00.620" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""So yeah, happy to take questions on Etherpad""" start="00:08:02.340" video="mainVideo-org-babel" id="subtitle"]] +[[!template text="""and thank you for your time.""" start="00:08:05.560" video="mainVideo-org-babel" id="subtitle"]] + +</div> + +Captioner: abhinav + +Questions or comments? Please e-mail [abhinav@lepisma.xyz](mailto:abhinav@lepisma.xyz?subject=Comment%20for%20EmacsConf%202023%20org-babel%3A%20Making%20Org-Babel%20reactive) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/org-babel-before.md b/2025/info/org-babel-before.md new file mode 100644 index 00000000..abe568f9 --- /dev/null +++ b/2025/info/org-babel-before.md @@ -0,0 +1,29 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="org-babel"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect stroke-width="3" x="13" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 9-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-org-babel> +Etherpad: <https://pad.emacsconf.org/2025-org-babel> +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 mainVideo"><video controls preload="none" id="mainVideo-org-babel"><source src="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--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="mainVideo-org-babel" data=""" +00:01.120 What are reactive notebooks? +00:49.042 Reactivity demo +02:38.499 Org-Babel +03:21.080 Running the whole buffer +03:51.901 Caching +04:21.760 Computation dependencies +06:04.534 Making this even better +07:29.966 Wrapping up + +"""]]<div></div>Duration: 08:08 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-org-babel">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-org-babel">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--edited.vtt">Download --edited.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.opus">Download --main.opus (7.1MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.webm">Download --main.webm (17MB)</a></li><li><a href="https://youtu.be/1dWWi3xfmug">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/org-babel-nav.md b/2025/info/org-babel-nav.md new file mode 100644 index 00000000..024f36ce --- /dev/null +++ b/2025/info/org-babel-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/sat-open">Saturday opening remarks</a> +Next by time: <a href="/2025/talks/schemacs">One year progress update Schemacs (formerly Gypsum)</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/private-ai-after.md b/2025/info/private-ai-after.md new file mode 100644 index 00000000..33a2289a --- /dev/null +++ b/2025/info/private-ai-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [ajgrothe@yahoo.com](mailto:ajgrothe@yahoo.com?subject=Comment%20for%20EmacsConf%202023%20private-ai%3A%20Emacs%20and%20private%20AI%3A%20a%20great%20match) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/private-ai-before.md b/2025/info/private-ai-before.md new file mode 100644 index 00000000..acdc3861 --- /dev/null +++ b/2025/info/private-ai-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="private-ai"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect stroke-width="3" x="391" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-private-ai.html> Etherpad: <https://pad.emacsconf.org/2025-private-ai> +Etherpad: <https://pad.emacsconf.org/2025-private-ai> +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 mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-private-ai">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--slides.pdf">Download --slides.pdf</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/private-ai-nav.md b/2025/info/private-ai-nav.md new file mode 100644 index 00000000..7add07e0 --- /dev/null +++ b/2025/info/private-ai-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/blee-lcnt">Blee-LCNT: An Emacs-centered content production and self-publication framework</a> +Next by time: <a href="/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/python-after.md b/2025/info/python-after.md new file mode 100644 index 00000000..4233580a --- /dev/null +++ b/2025/info/python-after.md @@ -0,0 +1,259 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="python-mainVideo-transcript"></a><h1>Transcript</h1> + +[[!template text="""Okay, so welcome to this session about interactive Python""" start="00:00:00.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""programming. My name is David Vujic and I live and work in""" start="00:00:04.440" video="mainVideo-python" id="subtitle"]] +[[!template text="""Stockholm, Sweden. a developer and today I focus""" start="00:00:09.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""mainly on Python software development. So I do this at work""" start="00:00:15.320" video="mainVideo-python" id="subtitle"]] +[[!template text="""and I also do this on my spare time in my open source projects.""" start="00:00:20.440" video="mainVideo-python" id="subtitle"]] +[[!template text="""Before that, I've been part of the Lisp community. I've""" start="00:00:26.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""been a Clojure developer, and also, like, way back,""" start="00:00:30.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""I was in the Microsoft world and developed C# and .NET stuff.""" start="00:00:33.701" video="mainVideo-python" id="subtitle"]] +[[!template text="""What I've been doing lately is to try to improve the""" start="00:00:40.280" video="mainVideo-python" id="subtitle"]] +[[!template text="""developer experience when you write Python code. So what I""" start="00:00:46.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""want to talk about is this, but also I want to begin with""" start="00:00:52.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""feedback loops because I think it's very related to this""" start="00:00:56.160" video="mainVideo-python" id="subtitle"]] +[[!template text="""interactive programming style, like having this nice""" start="00:01:00.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""feedback when you write code.""" start="00:01:05.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""So I'm going to begin with that.""" start="00:01:07.068" video="mainVideo-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Feedback loops""" start="00:01:10.534" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""So this image, you know, this circle is supposed to be a""" start="00:01:10.534" video="mainVideo-python" id="subtitle"]] +[[!template text="""visualization of a feedback loop. Let's say we write our""" start="00:01:14.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""code and then we deploy it to production. Then when it's""" start="00:01:19.880" video="mainVideo-python" id="subtitle"]] +[[!template text="""running there, we can check if things work, or if maybe someone""" start="00:01:25.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""else will let us know. Maybe our customers will let us know.""" start="00:01:29.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""That's a pretty slow feedback loop with potential risks of""" start="00:01:35.320" video="mainVideo-python" id="subtitle"]] +[[!template text="""damaging your business or whatever.""" start="00:01:39.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""This is obvious, of course.""" start="00:01:41.868" video="mainVideo-python" id="subtitle"]] +[[!template text="""So a faster feedback loop probably is to have""" start="00:01:44.168" video="mainVideo-python" id="subtitle"]] +[[!template text="""some kind of automation when you do commits""" start="00:01:50.001" video="mainVideo-python" id="subtitle"]] +[[!template text="""or maybe you have this pull request things and even reviews.""" start="00:01:54.067" video="mainVideo-python" id="subtitle"]] +[[!template text="""So maybe not always as fast as deploy,""" start="00:01:59.734" video="mainVideo-python" id="subtitle"]] +[[!template text="""don't deploy directly to production, but""" start="00:02:02.934" video="mainVideo-python" id="subtitle"]] +[[!template text="""it's probably safer and often you get this automated""" start="00:02:05.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""feedback faster anyway. But it's still kind of slow. You""" start="00:02:10.540" video="mainVideo-python" id="subtitle"]] +[[!template text="""have to wait. You have to push things to GitHub maybe and""" start="00:02:16.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""wait. So there's faster ways for sure to get feedback.""" start="00:02:20.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""So a much faster way is to write code,""" start="00:02:24.280" video="mainVideo-python" id="subtitle"]] +[[!template text="""and write some unit tests, and run those unit tests.""" start="00:02:27.968" video="mainVideo-python" id="subtitle"]] +[[!template text="""So then you do everything on your local machine""" start="00:02:31.368" video="mainVideo-python" id="subtitle"]] +[[!template text="""and you will fairly quickly learn if your code does""" start="00:02:33.468" video="mainVideo-python" id="subtitle"]] +[[!template text="""what you think it does or if it doesn't. I want to zoom in to""" start="00:02:39.040" video="mainVideo-python" id="subtitle"]] +[[!template text="""this test write code and test flow a bit. Let's do that.""" start="00:02:47.160" video="mainVideo-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Test-driven development""" start="00:02:56.000" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""As a developer, I have used a thing called test-driven""" start="00:02:56.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""development for quite some time. I find that this way of""" start="00:02:59.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""working is very fast when it comes to getting feedback on""" start="00:03:06.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""what your code does and how you should continue the""" start="00:03:11.260" video="mainVideo-python" id="subtitle"]] +[[!template text="""development. So, test-driven development,""" start="00:03:14.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""basically that you start writing a test for""" start="00:03:19.981" video="mainVideo-python" id="subtitle"]] +[[!template text="""something that you want to develop, and then you continue""" start="00:03:24.221" video="mainVideo-python" id="subtitle"]] +[[!template text="""developing that, and then you go back to the test, and modify""" start="00:03:27.021" video="mainVideo-python" id="subtitle"]] +[[!template text="""and modify the code, and you go back and forth between the""" start="00:03:31.020" video="mainVideo-python" id="subtitle"]] +[[!template text="""tests and the code.""" start="00:03:35.080" video="mainVideo-python" id="subtitle"]] +[[!template text="""It's sort of like a ping-pong game. I find this very""" start="00:03:36.960" video="mainVideo-python" id="subtitle"]] +[[!template text="""effective when you want to get feedback and to know how to""" start="00:03:44.420" video="mainVideo-python" id="subtitle"]] +[[!template text="""continue the development. The most important thing""" start="00:03:50.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""that I feel is that you know what the code does.""" start="00:03:57.234" video="mainVideo-python" id="subtitle"]] +[[!template text="""You learn very quickly.""" start="00:04:01.701" video="mainVideo-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""REPL-driven development""" start="00:04:05.560" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""Let's zoom into this TDD flow a little bit. The last couple of""" start="00:04:05.560" video="mainVideo-python" id="subtitle"]] +[[!template text="""years, I've been doing a slightly different thing which is""" start="00:04:12.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""called REPL-driven development. REPL-driven""" start="00:04:17.380" video="mainVideo-python" id="subtitle"]] +[[!template text="""development is very similar to test-driven development,""" start="00:04:21.980" video="mainVideo-python" id="subtitle"]] +[[!template text="""but I find it even quicker. You get feedback even quicker""" start="00:04:25.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""than with a regular TDD setup. So REPL-driven development""" start="00:04:31.160" video="mainVideo-python" id="subtitle"]] +[[!template text="""is about writing and evaluating code in a REPL basically.""" start="00:04:34.980" video="mainVideo-python" id="subtitle"]] +[[!template text="""And you can do experiments and you can refactor and""" start="00:04:41.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""re-evaluate and you get instant feedback on what the code""" start="00:04:46.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""does and what you need to change. So I think that's even""" start="00:04:51.700" video="mainVideo-python" id="subtitle"]] +[[!template text="""faster than test-driven development.""" start="00:04:54.800" video="mainVideo-python" id="subtitle"]] +[[!template text="""Okay, REPL driven development. Let's go back. What's the""" start="00:04:59.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""REPL? Most of developers know what a REPL is. The most common""" start="00:05:02.900" video="mainVideo-python" id="subtitle"]] +[[!template text="""setup is you open this shell and you use the REPL for your""" start="00:05:10.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""programming language. In this case I'm using the Python""" start="00:05:16.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""REPL or the IPython REPL which is an enhanced REPL for Python""" start="00:05:19.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""development. So what happens here is that we start a REPL""" start="00:05:25.620" video="mainVideo-python" id="subtitle"]] +[[!template text="""session in isolation. So this session knows about the""" start="00:05:30.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""Python environment. So it knows about the Python language""" start="00:05:34.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""basically. So as soon as we start writing things, adding""" start="00:05:38.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""variables or creating writing functions or even doing""" start="00:05:42.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""imports. Then the session will be more and more aware of the""" start="00:05:47.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""code so we will add things to the to the session and then that""" start="00:05:51.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""means that we can run functions we can print out these""" start="00:05:55.820" video="mainVideo-python" id="subtitle"]] +[[!template text="""variables and things like that. But with REPL driven""" start="00:06:00.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""development it's not really that well at least not what I""" start="00:06:05.860" video="mainVideo-python" id="subtitle"]] +[[!template text="""mean with REPL driven development. So what I'm thinking of""" start="00:06:09.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""is that you are in your code editor where you have your""" start="00:06:14.040" video="mainVideo-python" id="subtitle"]] +[[!template text="""autocomplete, and you have your syntax highlighting and""" start="00:06:19.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""your favorite theme, color theme, and all of those things. But""" start="00:06:22.800" video="mainVideo-python" id="subtitle"]] +[[!template text="""instead, you have this running REPL in the background or in a""" start="00:06:30.460" video="mainVideo-python" id="subtitle"]] +[[!template text="""smaller window or buffer. So that means that you write code""" start="00:06:34.980" video="mainVideo-python" id="subtitle"]] +[[!template text="""and you can send that code to the running REPL, to the REPL""" start="00:06:41.140" video="mainVideo-python" id="subtitle"]] +[[!template text="""session. You write and do everything as you would do when""" start="00:06:45.320" video="mainVideo-python" id="subtitle"]] +[[!template text="""writing your code basically. In this case, in this""" start="00:06:50.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""example, I have evaluated these two functions. I've sent""" start="00:06:55.220" video="mainVideo-python" id="subtitle"]] +[[!template text="""them to the REPL session so it's aware of these functions.""" start="00:07:00.600" video="mainVideo-python" id="subtitle"]] +[[!template text="""Then I switched to a separate different module and""" start="00:07:05.820" video="mainVideo-python" id="subtitle"]] +[[!template text="""evaluated that one. So the REPL session now knows about""" start="00:07:10.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""these two functions and also these two variables. That""" start="00:07:14.040" video="mainVideo-python" id="subtitle"]] +[[!template text="""means that I can evaluate the state of those variables and""" start="00:07:19.040" video="mainVideo-python" id="subtitle"]] +[[!template text="""change code and re-evaluate and things like that. So in this""" start="00:07:24.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""example if you look in the smaller area there you see that I""" start="00:07:29.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""have evaluated this res variable on line 6 and the output was""" start="00:07:33.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""that it's a dictionary with two keys and two values""" start="00:07:39.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""basically. So this setup works in basically any of your""" start="00:07:42.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""favorite code editors. So you can do this in Visual Studio""" start="00:07:51.220" video="mainVideo-python" id="subtitle"]] +[[!template text="""Code, you can do this in PyCharm or Vim. But what I have done is""" start="00:07:54.080" video="mainVideo-python" id="subtitle"]] +[[!template text="""that... More like what I have missed is that when I write code""" start="00:08:01.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""and do this evaluation, this is really cool, but then I need""" start="00:08:07.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""to switch context if I want to see the result. I have to switch""" start="00:08:10.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""context to this other window. I""" start="00:08:15.460" video="mainVideo-python" id="subtitle"]] +[[!template text="""have my focus on the code and then I have to look in a different""" start="00:08:21.980" video="mainVideo-python" id="subtitle"]] +[[!template text="""place to know the results. And if it's a larger output, then""" start="00:08:25.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""maybe I need to scroll. So I wanted to find out if it was""" start="00:08:31.800" video="mainVideo-python" id="subtitle"]] +[[!template text="""possible to make this even smoother and faster, this""" start="00:08:37.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""feedback loop even faster, so I don't have to switch""" start="00:08:43.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""context. What I've done here is that... I can select a row or a""" start="00:08:45.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""region and I can evaluate and then an overlay, a small pop-up""" start="00:08:52.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""shows up with the evaluated result right next to it. So I can""" start="00:08:58.080" video="mainVideo-python" id="subtitle"]] +[[!template text="""change code and re-evaluate and quickly see the result of it""" start="00:09:03.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""without doing this context switching. So the way I've done""" start="00:09:07.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""it is that I wanted to reuse the existing tooling that I""" start="00:09:12.641" video="mainVideo-python" id="subtitle"]] +[[!template text="""already had. I know that my in-editor REPL, the IPython""" start="00:09:20.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""REPL, already does this evaluation. So I figured maybe I can""" start="00:09:27.740" video="mainVideo-python" id="subtitle"]] +[[!template text="""extract the data and do this visualization as a separate""" start="00:09:31.560" video="mainVideo-python" id="subtitle"]] +[[!template text="""thing. That's how I've done it. What I've done is that""" start="00:09:35.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""I've created this overlay and placed it where my cursor""" start="00:09:40.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""currently is, right next to the code. Then I've""" start="00:09:47.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""extracted the evaluated result and put it in this overlay.""" start="00:09:50.860" video="mainVideo-python" id="subtitle"]] +[[!template text="""I also want this overlay to have this nice looking syntax,""" start="00:09:55.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""so I've set it to this Python mode, so we get this syntax""" start="00:10:01.040" video="mainVideo-python" id="subtitle"]] +[[!template text="""highlighting. Make it look very readable. And as a nice""" start="00:10:04.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""developer experience thing,""" start="00:10:10.560" video="mainVideo-python" id="subtitle"]] +[[!template text="""when you move the cursor, of course you don't want the""" start="00:10:16.880" video="mainVideo-python" id="subtitle"]] +[[!template text="""overlay to be there. You want it to disappear. So those kinds""" start="00:10:20.380" video="mainVideo-python" id="subtitle"]] +[[!template text="""of things I've added. So putting the overlay at the right""" start="00:10:25.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""place and feed it with the evaluated data and then make it""" start="00:10:29.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""disappear when it's not interesting to look at anymore.""" start="00:10:33.280" video="mainVideo-python" id="subtitle"]] +[[!template text="""What I've described so far is something that I use on a""" start="00:10:39.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""daily basis, and it covers most of my needs while doing Python""" start="00:10:44.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""development. But one thing I still miss, and I miss it from my""" start="00:10:50.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""days as a Clojure developer, because over there we could""" start="00:10:56.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""have a running app on our local machine and we can have our""" start="00:11:03.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""editor, and the app and the editor were connected. So when I""" start="00:11:07.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""did some changes in the code, the app would change without""" start="00:11:12.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""any restarts or anything like that. And the same if I would""" start="00:11:17.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""change the state of the app, I can inspect the state from the""" start="00:11:20.560" video="mainVideo-python" id="subtitle"]] +[[!template text="""code. So they were connected. They are connected. So I was""" start="00:11:24.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""thinking, hey, this would be really cool if we could have""" start="00:11:28.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""something like this in Python. And that reminded me of""" start="00:11:32.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""Jupyter and Jupyter notebooks because I think notebooks,""" start="00:11:39.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""the way you do things there, is very similar to what I was""" start="00:11:43.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""trying to achieve. So I was reading up a little bit on how this""" start="00:11:49.660" video="mainVideo-python" id="subtitle"]] +[[!template text="""notebook thing works. It turns out that a notebook is a""" start="00:11:56.880" video="mainVideo-python" id="subtitle"]] +[[!template text="""client that talks to a server, that communicates with a""" start="00:12:00.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""server. It's on the server that all this Python""" start="00:12:05.280" video="mainVideo-python" id="subtitle"]] +[[!template text="""evaluation and all this thing happens. Then what I've""" start="00:12:08.800" video="mainVideo-python" id="subtitle"]] +[[!template text="""done is that instead of starting up IPython in my editor, I""" start="00:12:14.160" video="mainVideo-python" id="subtitle"]] +[[!template text="""start the Jupyter console instead. And then I can give it""" start="00:12:19.660" video="mainVideo-python" id="subtitle"]] +[[!template text="""that unique ID and it will be connected to that running""" start="00:12:23.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""kernel.""" start="00:12:27.160" video="mainVideo-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""FastAPI CRUD""" start="00:12:30.920" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""In this example, I've created this FastAPI CRUD app that""" start="00:12:30.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""has this create, read, update, and delete endpoints. It""" start="00:12:37.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""has this, it's locally running, it has this database where""" start="00:12:41.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""you can do all these things. I'm running this FastAPI app""" start="00:12:46.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""in the kernel and then I've connected to, I've connected to""" start="00:12:51.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""the kernel in my editor too. Both of them are connected to""" start="00:12:58.060" video="mainVideo-python" id="subtitle"]] +[[!template text="""the kernel. What I do now is that I want to initially create""" start="00:13:03.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""some data. I'm going to add this, creating this message.""" start="00:13:09.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""What I get back is a message ID. I want to experiment in""" start="00:13:15.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""my browser. What do I get with that message ID? I'm""" start="00:13:19.900" video="mainVideo-python" id="subtitle"]] +[[!template text="""evaluating the read function. I instantly get this""" start="00:13:24.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""evaluated result, which was this hello world text. So what""" start="00:13:30.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""happens if I do some changes in this app? I'm going to grab""" start="00:13:34.780" video="mainVideo-python" id="subtitle"]] +[[!template text="""this message ID and write something else.""" start="00:13:39.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""Now I can evaluate the same thing again, and you can see that""" start="00:13:49.660" video="mainVideo-python" id="subtitle"]] +[[!template text="""the content has changed to this new value. My editor isn't""" start="00:13:53.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""in any debug mode or something like that. It doesn't know""" start="00:14:02.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""what database it is. It doesn't have any environment""" start="00:14:07.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""variables set up or something like that. It is only""" start="00:14:11.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""connected to the kernel, and the kernel is aware of that. It's""" start="00:14:14.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""running the app. It has the connection strings and""" start="00:14:17.600" video="mainVideo-python" id="subtitle"]] +[[!template text="""everything that is needed. So that's how this thing works.""" start="00:14:20.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""Now I want to do some inline hacking because I want to store""" start="00:14:28.800" video="mainVideo-python" id="subtitle"]] +[[!template text="""this input that is sent from this app because I want to work""" start="00:14:34.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""with it afterwards. I can add this dictionary that stores""" start="00:14:37.800" video="mainVideo-python" id="subtitle"]] +[[!template text="""this message. I'm updating the source code of this app, and""" start="00:14:42.040" video="mainVideo-python" id="subtitle"]] +[[!template text="""when I run any of these endpoints again, you will see that""" start="00:14:48.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""the state changes, and the new inputs, I can grab and I can use""" start="00:15:03.080" video="mainVideo-python" id="subtitle"]] +[[!template text="""them for quick evaluation or testing. This example is""" start="00:15:08.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""really simple. It was just an integer. For example, if you""" start="00:15:14.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""are sending a more complex object, maybe a pydantic schema""" start="00:15:18.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""or something, and you want to inspect what's coming in, and if""" start="00:15:23.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""you have some sort of validation that you want to test out.""" start="00:15:28.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""The configuration or the code that I wrote to make this work""" start="00:15:34.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""is a little bit different than just adding an overlay. I'm""" start="00:15:38.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""using this overlay just like with the IPython example, but in""" start="00:15:44.160" video="mainVideo-python" id="subtitle"]] +[[!template text="""this case, when I change code, I have to think about where that""" start="00:15:51.000" video="mainVideo-python" id="subtitle"]] +[[!template text="""code lives, because it's the app that runs the code. So it's""" start="00:15:57.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""in the app context I need to manipulate with the data. If you""" start="00:16:02.160" video="mainVideo-python" id="subtitle"]] +[[!template text="""have started the app from maybe a main function and that""" start="00:16:07.040" video="mainVideo-python" id="subtitle"]] +[[!template text="""module imports namespaces, then you need to, if you want to""" start="00:16:11.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""update a function or something like that, you need to update""" start="00:16:17.880" video="mainVideo-python" id="subtitle"]] +[[!template text="""it in the correct namespace. What I did before in IPython""" start="00:16:22.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""by adding and changing things, everything ends up in the""" start="00:16:26.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""global namespace. But here, if you want the app to actually""" start="00:16:29.920" video="mainVideo-python" id="subtitle"]] +[[!template text="""react to the changes, you need to put it in the right""" start="00:16:34.440" video="mainVideo-python" id="subtitle"]] +[[!template text="""namespace. So that's what I do here. I do some lookups, where""" start="00:16:38.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""is this function, and then I do this reload of this function or""" start="00:16:43.480" video="mainVideo-python" id="subtitle"]] +[[!template text="""module. And when I was developing this, I was thinking, hey,""" start="00:16:49.140" video="mainVideo-python" id="subtitle"]] +[[!template text="""this is really ugly. I'm in this REPL and do some""" start="00:16:54.800" video="mainVideo-python" id="subtitle"]] +[[!template text="""manipulation of the imports and things like that. That""" start="00:16:59.320" video="mainVideo-python" id="subtitle"]] +[[!template text="""didn't feel good. Then I was reminded of the IPython. And""" start="00:17:03.560" video="mainVideo-python" id="subtitle"]] +[[!template text="""IPython has this feature to reload any updated""" start="00:17:09.760" video="mainVideo-python" id="subtitle"]] +[[!template text="""submodules. I was curious how do they do it. I looked in the""" start="00:17:15.520" video="mainVideo-python" id="subtitle"]] +[[!template text="""IPython source code and saw that they also use importlib and""" start="00:17:19.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""reloading of this module. Once I've learned that, then I""" start="00:17:24.080" video="mainVideo-python" id="subtitle"]] +[[!template text="""stopped thinking that my code was hacky. I thought it was""" start="00:17:28.360" video="mainVideo-python" id="subtitle"]] +[[!template text="""good enough at least.""" start="00:17:32.600" video="mainVideo-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Testing with an LLM""" start="00:17:37.160" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""But one thing that has bothered me for a long time is I quite""" start="00:17:37.160" video="mainVideo-python" id="subtitle"]] +[[!template text="""often want to test out and evaluate individual rows that""" start="00:17:45.060" video="mainVideo-python" id="subtitle"]] +[[!template text="""lives in a function. Quite often, this code uses the input""" start="00:17:50.200" video="mainVideo-python" id="subtitle"]] +[[!template text="""to that function like the input parameters. To be able to""" start="00:17:58.560" video="mainVideo-python" id="subtitle"]] +[[!template text="""do that, I need to manually type some fake data and set it to""" start="00:18:02.640" video="mainVideo-python" id="subtitle"]] +[[!template text="""this variable, and then I can evaluate the code. But I think""" start="00:18:07.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""that takes... That slows me down. I was thinking, maybe I can""" start="00:18:12.280" video="mainVideo-python" id="subtitle"]] +[[!template text="""do this in a quicker way, so I have this quicker feedback, so I""" start="00:18:17.780" video="mainVideo-python" id="subtitle"]] +[[!template text="""can run this or evaluate this code much quicker.""" start="00:18:23.440" video="mainVideo-python" id="subtitle"]] +[[!template text="""So my idea was maybe I""" start="00:18:27.934" video="mainVideo-python" id="subtitle"]] +[[!template text="""can use an LLM for this. If I give it the parameters, maybe it""" start="00:18:29.440" video="mainVideo-python" id="subtitle"]] +[[!template text="""can return some random data so I don't have to write it""" start="00:18:35.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""myself. I ended up doing that. I have this source code.""" start="00:18:41.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""I'm loading the REPL with the code. Then I select this""" start="00:18:44.120" video="mainVideo-python" id="subtitle"]] +[[!template text="""function name and the parameters with its data type. I""" start="00:18:50.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""have this prompt that instructs the LLM to come up with fake""" start="00:18:56.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""data based on the tag name and on the data type. And then I can""" start="00:19:02.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""send that to the REPL. I do that with a key command. Then""" start="00:19:06.240" video="mainVideo-python" id="subtitle"]] +[[!template text="""I can proceed by running the code within the function that""" start="00:19:10.100" video="mainVideo-python" id="subtitle"]] +[[!template text="""uses these inputs. This works for all the data types. If""" start="00:19:16.020" video="mainVideo-python" id="subtitle"]] +[[!template text="""there's a custom data type, you need to give the LLM extra""" start="00:19:21.720" video="mainVideo-python" id="subtitle"]] +[[!template text="""context. So that's something to think about. Once it knows""" start="00:19:26.280" video="mainVideo-python" id="subtitle"]] +[[!template text="""the context, it can generate this fake data that very often is""" start="00:19:30.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""good enough just to test out, you know, like I've done here, like""" start="00:19:35.680" video="mainVideo-python" id="subtitle"]] +[[!template text="""string... sorry, list destructuring and parsing and things""" start="00:19:39.840" video="mainVideo-python" id="subtitle"]] +[[!template text="""like that. I think that was all I had, and thank you for""" start="00:19:45.400" video="mainVideo-python" id="subtitle"]] +[[!template text="""listening!""" start="00:19:51.880" video="mainVideo-python" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20python%3A%20Interactive%20Python%20programming%20in%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/python-before.md b/2025/info/python-before.md new file mode 100644 index 00000000..bf3dfc48 --- /dev/null +++ b/2025/info/python-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect stroke-width="3" x="192" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-python.html> Etherpad: <https://pad.emacsconf.org/2025-python> +Etherpad: <https://pad.emacsconf.org/2025-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 mainVideo"><video controls preload="none" id="mainVideo-python"><source src="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 19:52 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-python">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-python.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://youtu.be/uACM4a5MPQM">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/python-nav.md b/2025/info/python-nav.md new file mode 100644 index 00000000..78e9400e --- /dev/null +++ b/2025/info/python-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a> +Next by time: <a href="/2025/talks/latex">LaTeX export in org-mode: the overhaul</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/reader-after.md b/2025/info/reader-after.md new file mode 100644 index 00000000..de969ba2 --- /dev/null +++ b/2025/info/reader-after.md @@ -0,0 +1,829 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="reader-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""An introduction to the Emacs reader""" start="00:00:00.720" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Hello EmacsConf!""" start="00:00:00.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Today I'm here to introduce you to the Emacs Reader.""" start="00:00:02.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It is a general-purpose document viewer""" start="00:00:06.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that lives inside our beloved Emacs.""" start="00:00:08.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It tries to prioritize memory""" start="00:00:12.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and performance efficiency as much as possible""" start="00:00:14.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""even when you're using a lower-end hardware.""" start="00:00:17.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And, most importantly,""" start="00:00:20.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it tries to do things in an Emacs manner.""" start="00:00:22.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That is, it tries to integrate""" start="00:00:25.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""with existing packages as much as possible""" start="00:00:27.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""instead of reinventing the wheel.""" start="00:00:29.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And architecturally, it tries to take the advantage""" start="00:00:32.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""of dynamic or native modules""" start="00:00:36.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which were introduced back in 2015 into Emacs.""" start="00:00:38.480" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Yet another document viewer in Emacs?""" start="00:00:44.760" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""You would ask, why exactly do we need""" start="00:00:44.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""another document viewer in Emacs?""" start="00:00:46.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Don't we already have the built-in DocView""" start="00:00:49.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and the notorious pdf-tools?""" start="00:00:51.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Well, the built-in DocView has unusable latency,""" start="00:00:55.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and I'm going to show you this later""" start="00:00:59.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""when I compare this with Emacs Reader.""" start="00:01:01.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The famous pdf-tools has actually multiple issues.""" start="00:01:04.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""One, it is extremely memory-hungry""" start="00:01:08.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""regardless of what kind of PDFs you're reading.""" start="00:01:10.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And, well, it can only read PDFs.""" start="00:01:14.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Poppler, the library which pdf-tools uses,""" start="00:01:17.940" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is actually sub-optimal,""" start="00:01:22.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""especially relative to MuPDF,""" start="00:01:23.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which is what Emacs Reader is based on.""" start="00:01:25.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""pdf-tools is also extremely painful to install.""" start="00:01:28.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""If you've ever installed pdf-tools,""" start="00:01:31.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you know that it has a bunch of dependencies,""" start="00:01:34.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""including a server that is supposedly packaged.""" start="00:01:38.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""across package managers, system package managers.""" start="00:01:42.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It's extremely difficult to install""" start="00:01:45.062" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and painful to install.""" start="00:01:47.738" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And of course, pdf-tools""" start="00:01:50.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""since the last couple of years""" start="00:01:52.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""has not been maintained as much.""" start="00:01:54.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""There's huge PRs that have been unnoticed and unmerged.""" start="00:01:56.560" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Architecture of Emacs Reader""" start="00:02:05.760" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Architecturally, Emacs Reader takes a distance""" start="00:02:05.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""from both DocView and pdf-tools.""" start="00:02:09.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So how DocView works is that""" start="00:02:12.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it basically wraps around""" start="00:02:15.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a tool called mutool.""" start="00:02:18.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""mutool is actually""" start="00:02:20.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a command line tool from MuPDF itself.""" start="00:02:22.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It relies on mutool and a bunch""" start="00:02:26.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""of other similar command line tools,""" start="00:02:28.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and basically makes process calls""" start="00:02:30.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""from Elisp to the CLI tools.""" start="00:02:34.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That's how DocView works,""" start="00:02:36.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and that's why it sort of has latency issues""" start="00:02:38.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because that's the best you can do""" start="00:02:41.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""by literally calling CLI tools""" start="00:02:42.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and outputting the images into Emacs.""" start="00:02:45.020" video="mainVideo-reader" id="subtitle"]] +[[!template text="""How pdf-tools works is that it tries""" start="00:02:50.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to have a server-client model.""" start="00:02:55.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So the client is Emacs""" start="00:02:57.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and the server is basically""" start="00:02:59.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""something they call epdfinfo.""" start="00:03:00.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It's supposed to render the images using Poppler""" start="00:03:03.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and then send the images to Emacs""" start="00:03:07.241" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which then tries to display.""" start="00:03:10.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I think the server client model is terrible.""" start="00:03:13.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""One, for latency purposes,""" start="00:03:16.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and two, it makes things""" start="00:03:18.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""unnecessarily more complicated.""" start="00:03:19.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Here is where we come""" start="00:03:21.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and introduce dynamic modules.""" start="00:03:24.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So Emacs Reader is based on""" start="00:03:26.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the concept of dynamic modules""" start="00:03:30.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which I'm going to talk about in a bit.""" start="00:03:32.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""But how it works is that we have C modules.""" start="00:03:34.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we have the emacs-module.h,""" start="00:03:37.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that's the dynamic module header""" start="00:03:39.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which every dynamic module package must have.""" start="00:03:40.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And then we have our C files.""" start="00:03:43.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And these C files essentially define functions""" start="00:03:45.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that are going to be used in Emacs but in C.""" start="00:03:52.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We then load these C modules""" start="00:03:56.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""using simple (require ...) in our Elisp modules.""" start="00:03:59.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And then whenever we call""" start="00:04:03.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""something in the Emacs runtime,""" start="00:04:05.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""say I'm going to open""" start="00:04:07.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""PDF files in (find-file) or (reader-open-doc),""" start="00:04:09.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""what it does is that""" start="00:04:13.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it tries to use one of the functions""" start="00:04:15.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that is wrapped in Elisp,""" start="00:04:19.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but actually tries to call a function in C.""" start="00:04:21.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And then the C module is actually""" start="00:04:24.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""going to make calls to the MuPDF.""" start="00:04:26.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Here the MuPDF system package,""" start="00:04:29.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""this is actually a system package""" start="00:04:31.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that is dynamically linked to the C modules.""" start="00:04:33.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we're basically""" start="00:04:35.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just using it as a shared library.""" start="00:04:36.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you have the fz_load_page, for example,""" start="00:04:39.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it's a MuPDF function""" start="00:04:43.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that we're going to be using in the C modules.""" start="00:04:44.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So it's going to make""" start="00:04:47.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a shared dynamic call to MuPDF""" start="00:04:50.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and then render the page""" start="00:04:53.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and then show this to Emacs.""" start="00:04:55.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This pipeline, I argue,""" start="00:04:59.180" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is much better and leaner and efficient""" start="00:05:01.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""than a server-client model.""" start="00:05:05.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""One, because we don't really need""" start="00:05:07.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the server-client model.""" start="00:05:09.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So back when Politza""" start="00:05:10.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""first introduced pdf-tools,""" start="00:05:12.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that was like 10 years ago in 2015,""" start="00:05:14.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the concept of dynamic modules""" start="00:05:19.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""were not integrated into Emacs.""" start="00:05:21.241" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I think they came around""" start="00:05:23.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""like one or two years late, 2017.""" start="00:05:24.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So that's the best he could go with.""" start="00:05:28.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We don't really have to, today,""" start="00:05:31.220" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because, since we can use MuPDF""" start="00:05:33.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as a shared library""" start="00:05:35.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which can render things in real-time""" start="00:05:37.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and just give us the rendered images""" start="00:05:39.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which we can then display,""" start="00:05:41.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""there's no reason for a server to do things for us.""" start="00:05:43.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So that's the main architectural difference""" start="00:05:49.660" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that Emacs Reader introduces""" start="00:05:53.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""compared to pdf-tools and DocView.""" start="00:05:55.480" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""A word on dynamic modules""" start="00:06:00.280" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""What exactly are dynamic modules?""" start="00:06:00.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Well, I can't really give you""" start="00:06:02.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a full-fledged explanation,""" start="00:06:04.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but essentially dynamic modules""" start="00:06:06.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""let you evaluate""" start="00:06:08.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""native compiled code""" start="00:06:10.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in other languages like C, C++, Rust""" start="00:06:12.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that behaves like regular Emacs Lisp.""" start="00:06:15.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So when our Emacs C modules,""" start="00:06:18.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the render-core.c or render-theme.c,""" start="00:06:23.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""when all of these are compiled,""" start="00:06:26.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and they're called from the Elisp modules.""" start="00:06:28.300" video="mainVideo-reader" id="subtitle"]] +[[!template text="""They behave like Elisp even though""" start="00:06:30.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""they're as fast as a C function""" start="00:06:34.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because they're compiled C code.""" start="00:06:37.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""But you essentially call them""" start="00:06:39.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just like Elisp functions.""" start="00:06:41.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can find them using C-h f and so on.""" start="00:06:42.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you can call any function""" start="00:06:47.820" video="mainVideo-reader" id="subtitle"]] +[[!template text="""from any language that supports""" start="00:06:49.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the C ABI, which is virtually everything,""" start="00:06:51.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""without leaving Emacs""" start="00:06:53.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and without losing any performance.""" start="00:06:54.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This is extremely helpful""" start="00:06:56.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""when you want to use""" start="00:06:58.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""existing libraries like MuPDF""" start="00:06:59.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""or any other cryptographic library""" start="00:07:02.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that is written in C""" start="00:07:04.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and you don't want to rewrite""" start="00:07:06.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the entire thing in Elisp,""" start="00:07:07.038" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but you can just use it as a native library.""" start="00:07:08.538" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can read more""" start="00:07:11.740" video="mainVideo-reader" id="subtitle"]] +[[!template text="""on how dynamic modules work""" start="00:07:13.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and how you can write one in this blog.""" start="00:07:14.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This is something that I wrote myself""" start="00:07:17.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just after starting this package""" start="00:07:19.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it will give you a bit more guidance""" start="00:07:22.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""on how to use dynamic modules more efficiently.""" start="00:07:25.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I think dynamic modules""" start="00:07:27.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""should be used more and more in Emacs""" start="00:07:28.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and I think their advantages""" start="00:07:32.300" video="mainVideo-reader" id="subtitle"]] +[[!template text="""have not been exploited""" start="00:07:34.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as much as they should.""" start="00:07:36.080" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Features of Emacs Reader""" start="00:07:39.560" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now we're going to talk a bit about""" start="00:07:39.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the core features of Emacs Reader.""" start="00:07:42.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And these are the following features""" start="00:07:46.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that we're going to talk about.""" start="00:07:48.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And finally, to talk about""" start="00:07:50.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""some challenges that we faced.""" start="00:07:51.960" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Memory efficiency""" start="00:07:56.760" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""First is memory efficiency.""" start="00:07:56.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I already told you that""" start="00:07:58.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs Reader's first priority""" start="00:08:00.820" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is to make sure that we are not slow""" start="00:08:03.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and we are not taking""" start="00:08:06.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a bunch of memory unnecessarily.""" start="00:08:07.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So here's a graph of the heap memory size""" start="00:08:10.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as it grows for DocView.""" start="00:08:14.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So this is again in emacs -Q.""" start="00:08:17.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So this is a fresh Emacs session""" start="00:08:20.638" video="mainVideo-reader" id="subtitle"]] +[[!template text="""with just DocView.""" start="00:08:22.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It grows up to 900MB""" start="00:08:25.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for a very small PDF that is a LaTeX PDF.""" start="00:08:27.820" video="mainVideo-reader" id="subtitle"]] +[[!template text="""No scanned huge PDF. It's a 2MB PDF.""" start="00:08:31.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""But when I scrolled from the beginning""" start="00:08:36.780" video="mainVideo-reader" id="subtitle"]] +[[!template text="""of the PDF to the end,""" start="00:08:39.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it went up to 900MB.""" start="00:08:41.620" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That's the memory heap size.""" start="00:08:43.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Does pdf-tools make this any better?""" start="00:08:46.820" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It actually doesn't.""" start="00:08:49.700" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So, pdf-tools pretty much""" start="00:08:51.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""does the same thing.""" start="00:08:55.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""if you look at it here""" start="00:08:57.220" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just so if you're going to ask me""" start="00:08:58.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""are they two different graphs,""" start="00:09:01.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""or are you just showing me the same graph,""" start="00:09:02.940" video="mainVideo-reader" id="subtitle"]] +[[!template text="""they're actually two different graphs,""" start="00:09:04.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because if you look at the DocView graph""" start="00:09:06.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it uses cairo and it uses librsvg""" start="00:09:08.780" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because docview by default""" start="00:09:11.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""converts the images into SVG.""" start="00:09:13.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The rendered images are SVGs.""" start="00:09:16.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""pdf-tools doesn't, so you don't see""" start="00:09:18.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""any librsvg calls here or anything""" start="00:09:20.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So this is pdf-tools""" start="00:09:24.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it basically takes up""" start="00:09:25.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the same amount of memory, 900MB,""" start="00:09:27.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and exactly the same operation,""" start="00:09:29.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""exactly the same PDF,""" start="00:09:30.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""exactly scrolling from first to the last.""" start="00:09:32.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Where do we stand?""" start="00:09:36.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Well, we actually do much better.""" start="00:09:37.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So let me zoom in this.""" start="00:09:40.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So if you see, we stand within""" start="00:09:42.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""at a peak of 72MB.""" start="00:09:46.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Exactly the same PDF,""" start="00:09:49.260" video="mainVideo-reader" id="subtitle"]] +[[!template text="""exactly the same operation""" start="00:09:51.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""from the beginning to the end,""" start="00:09:53.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""around 285 pages scrolled.""" start="00:09:54.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We take much less than 80 MB.""" start="00:09:57.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And actually, to be very frank,""" start="00:10:03.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the only memory that we're storing in Emacs,""" start="00:10:05.072" video="mainVideo-reader" id="subtitle"]] +[[!template text="""oh, sorry, not in Emacs,""" start="00:10:09.205" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in the MuPDF heap is just about 30 MB.""" start="00:10:12.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It's this dark red one.""" start="00:10:16.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That's the cache that we're storing.""" start="00:10:19.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That's the memory that we're interacting with""" start="00:10:22.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in real time.""" start="00:10:24.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This is stuff that Emacs adds on top of it""" start="00:10:25.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and a bit of libmupdf.""" start="00:10:29.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you can see, in terms of memory,""" start="00:10:32.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we're saving...""" start="00:10:35.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we're literally down,""" start="00:10:37.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""what, a fraction of 10!""" start="00:10:41.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This was a priority for us""" start="00:10:45.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""since the beginning,""" start="00:10:48.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because when I was starting to use pdf-tools,""" start="00:10:49.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it was unusable for me""" start="00:10:52.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because I was on a lower-end hardware""" start="00:10:53.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and I thought it should not be""" start="00:10:55.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""really that difficult""" start="00:10:57.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for a document reader""" start="00:10:58.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to not take a gigabyte of memory.""" start="00:11:00.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It really shouldn't because""" start="00:11:04.100" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you're not really doing that much,""" start="00:11:05.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you're just displaying images.""" start="00:11:07.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So that's how efficient""" start="00:11:10.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we are in terms of memory.""" start="00:11:12.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Let's see how efficient""" start="00:11:13.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we are in terms of speed.""" start="00:11:15.372" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Performance and speed""" start="00:11:18.720" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""So Emacs Reader is actually""" start="00:11:18.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as fast as pdf-tools,""" start="00:11:21.100" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it is actually""" start="00:11:23.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""way more faster than DocView.""" start="00:11:24.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""In some cases,""" start="00:11:27.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it actually beats existing""" start="00:11:28.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""standalone document readers and browsers.""" start="00:11:31.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So let's actually see this in action.""" start="00:11:34.860" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So here we are with""" start="00:11:41.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a few emacs -Q sessions.""" start="00:11:42.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I'm using emacs -Q so as to give you...""" start="00:11:46.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that this is actually""" start="00:11:50.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as less overhead possible.""" start="00:11:52.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we have first DocView.""" start="00:11:55.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""All of these tests""" start="00:11:57.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""are going to be done on the same PDF.""" start="00:12:01.138" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It's the documentation manual from MuPDF.""" start="00:12:03.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So if I scroll, this is fine.""" start="00:12:07.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I'm just pressing n""" start="00:12:10.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it seems to work fine.""" start="00:12:12.860" video="mainVideo-reader" id="subtitle"]] +[[!template text="""If I press and hold n,""" start="00:12:15.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I have pressed n and I'm holding.""" start="00:12:19.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And Emacs is stuck.""" start="00:12:21.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And it's going to stay stuck""" start="00:12:26.420" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because it's making calls""" start="00:12:27.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to the CLI tool that I said, mutool.""" start="00:12:28.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And after it's done getting stuck,""" start="00:12:31.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it is going to get back.""" start="00:12:35.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""As you can see, if you go back,""" start="00:12:40.180" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you're able to go back fine.""" start="00:12:43.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It does not get stuck""" start="00:12:45.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because what Emacs does""" start="00:12:46.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is it basically calls mutool,""" start="00:12:48.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""like fetches a bunch of pages,""" start="00:12:51.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""essentially all the pages""" start="00:12:53.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that you asked for it,""" start="00:12:54.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it puts them into the memory.""" start="00:12:56.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And that's it.""" start="00:12:59.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It puts them into the memory""" start="00:12:59.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and then scrolls through it.""" start="00:13:01.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So going back, you will most likely""" start="00:13:03.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""not have any stuck issues.""" start="00:13:05.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Sometimes you do""" start="00:13:07.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because some images do get GC'd.""" start="00:13:07.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""But that's the idea.""" start="00:13:10.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Whenever there's no image in memory,""" start="00:13:13.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it gets stuck.""" start="00:13:16.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And it gets stuck good.""" start="00:13:18.740" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That's DocView.""" start="00:13:21.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""pdf-tools is actually""" start="00:13:23.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""not problematic here.""" start="00:13:25.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""pdf-tools is extremely efficient""" start="00:13:27.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and extremely fast.""" start="00:13:29.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we can go through the pages""" start="00:13:30.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""without any issues.""" start="00:13:32.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We can zoom.""" start="00:13:34.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The zoom did get stuck a bit,""" start="00:13:37.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but that's relatively fine.""" start="00:13:39.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs Reader is exactly as fast""" start="00:13:44.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as pdf-tools here.""" start="00:13:46.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So this is pdf-view,""" start="00:13:49.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""this is Emacs Reader.""" start="00:13:50.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Let's scroll through the pages.""" start="00:13:51.860" video="mainVideo-reader" id="subtitle"]] +[[!template text="""As you can see, nothing is getting stuck""" start="00:13:55.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because we're not really waiting""" start="00:13:59.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for any tool to send us any images.""" start="00:14:00.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We just have a little cache""" start="00:14:06.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and we're scrolling through them""" start="00:14:08.300" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and rendering images in real time.""" start="00:14:09.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Zooming also works fine.""" start="00:14:13.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So, with regards to this,""" start="00:14:17.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we're in parity with pdf-tools.""" start="00:14:19.520" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Scanned PDFs""" start="00:14:23.680" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now, where pdf-tools and actually""" start="00:14:23.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a lot of readers have issues""" start="00:14:26.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is when they're dealing with scanned PDF.""" start="00:14:28.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So, we have this PDF which is notorious""" start="00:14:32.500" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for being really difficult to render""" start="00:14:36.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because this is entirely built""" start="00:14:40.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""with scanned images.""" start="00:14:42.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This is the kind of PDF""" start="00:14:43.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that you get from Internet Archive.""" start="00:14:44.620" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This is essentially someone""" start="00:14:46.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""took photos of the book in a camera""" start="00:14:47.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and literally turned them into a PDF.""" start="00:14:50.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs Reader actually does not have""" start="00:14:56.660" video="mainVideo-reader" id="subtitle"]] +[[!template text="""any issues rendering this.""" start="00:14:58.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""As you can see, it renders it smoothly""" start="00:15:01.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and fine without any halts.""" start="00:15:05.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I can change Emacs even while it's doing so,""" start="00:15:09.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it does not have any issues.""" start="00:15:13.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""pdf-tools are the same.""" start="00:15:17.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""PDF also does not have any issues.""" start="00:15:20.072" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Sorry. Click pdf-view-mode.""" start="00:15:21.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""pdf-view (pdf-tools) is a bit slower""" start="00:15:26.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but does not have any issues. It works.""" start="00:15:29.860" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Here, actually, pdf-tools and Emacs Reader""" start="00:15:35.620" video="mainVideo-reader" id="subtitle"]] +[[!template text="""are more efficient than even browsers.""" start="00:15:40.701" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So, if I try to open""" start="00:15:46.100" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the same page in a browser,""" start="00:15:47.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I'm trying to scroll.""" start="00:15:50.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And after I've scrolled and I leave,""" start="00:15:52.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""scrolling is going to load""" start="00:15:54.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for a bunch of seconds""" start="00:15:58.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to give me the page.""" start="00:15:59.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It's more than five seconds,""" start="00:16:03.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as you can see,""" start="00:16:04.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and this is actually totally not usable.""" start="00:16:05.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""If you're going to read this book,""" start="00:16:08.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""an electromagnetics book,""" start="00:16:10.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you're going to have a terrible time""" start="00:16:12.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""reading this in a browser,""" start="00:16:13.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which is supposed to be""" start="00:16:14.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the fastest thing alive.""" start="00:16:15.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You sort of have the same experience""" start="00:16:17.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in Okular. So this is Okular.""" start="00:16:19.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""If I try to scroll through this,""" start="00:16:20.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it will do the same thing.""" start="00:16:22.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And while it is better than the browser,""" start="00:16:25.420" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it still takes a while""" start="00:16:28.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it still has, like, if you zoom,""" start="00:16:31.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you're going to have a bit of a delay.""" start="00:16:34.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You don't really face that in Emacs Reader.""" start="00:16:36.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We zoom in and out just fine.""" start="00:16:41.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And even with using mouse,""" start="00:16:45.260" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you can zoom in and out just fine.""" start="00:16:47.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So this is how Emacs Reader performs""" start="00:16:51.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in terms of speed with these other tools.""" start="00:16:54.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now we will go back to the original presentation.""" start="00:17:01.120" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""System-level multi-threading""" start="00:17:08.960" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now, how exactly is Emacs Reader""" start="00:17:08.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""able to do a lot of this?""" start="00:17:11.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I wish I could sort of spend""" start="00:17:14.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""an entire session""" start="00:17:17.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just talking about this, but I can't.""" start="00:17:19.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So I'm just going to make this short.""" start="00:17:21.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""When you load Emacs Reader,""" start="00:17:22.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in the standard output,""" start="00:17:24.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it's going to say this:""" start="00:17:26.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that eight threads have been initialized.""" start="00:17:27.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now, what we did with Emacs here""" start="00:17:29.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is that we enabled""" start="00:17:32.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""system-level multithreading.""" start="00:17:33.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now, Emacs is not multithreaded.""" start="00:17:35.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We all know that notoriously.""" start="00:17:36.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It is single-threaded.""" start="00:17:38.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""But we don't really""" start="00:17:39.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""need Emacs to be multithreaded, though.""" start="00:17:41.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs does not need to be multithreaded.""" start="00:17:43.820" video="mainVideo-reader" id="subtitle"]] +[[!template text="""What needs to be multithreaded""" start="00:17:45.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is the rendering part""" start="00:17:47.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because that's the most expensive part.""" start="00:17:48.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""In Emacs, we're only just displaying images.""" start="00:17:50.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs itself does not have a PDF engine""" start="00:17:53.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that is rendering stuff.""" start="00:17:56.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""MuPDF is supposed to take care of that.""" start="00:17:57.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So if I can do multithreading""" start="00:18:00.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in the rendering pipeline,""" start="00:18:03.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that is when I'm rendering pages""" start="00:18:05.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""instead of displaying them,""" start="00:18:07.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that's fine for me because""" start="00:18:08.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the rendering part most of the time,""" start="00:18:10.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""especially in scanned PDFs,""" start="00:18:11.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is the most expensive part.""" start="00:18:12.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So if you look at this graph,""" start="00:18:14.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we have two parts here.""" start="00:18:16.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We have the display pipeline""" start="00:18:17.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and we have the rendering pipeline.""" start="00:18:19.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""In the display pipeline,""" start="00:18:22.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we have just the Emacs session""" start="00:18:23.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which has the reader loaded""" start="00:18:26.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and that's the main thread.""" start="00:18:29.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Then we have the rendering pipeline""" start="00:18:31.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which has the MuPDF system package""" start="00:18:33.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""dynamically linked.""" start="00:18:35.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So when you load Emacs Reader,""" start="00:18:38.460" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we initialize a thread pool with eight threads.""" start="00:18:40.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now what you do is let's say we are at page 50.""" start="00:18:45.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""At page 50, the Emacs Reader""" start="00:18:48.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""maintains a cache.""" start="00:18:51.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It's like a stack of pages""" start="00:18:54.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that we keep in memory all the time.""" start="00:18:56.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This cache is entirely outside of Emacs.""" start="00:18:58.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It is not inside Emacs environment.""" start="00:19:02.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It is in the C memory heap,""" start="00:19:04.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in the MuPDF memory heap""" start="00:19:07.571" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that is outside of Emacs environment.""" start="00:19:09.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It does not make any calls to Emacs anything.""" start="00:19:11.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It does not have a single Elisp line.""" start="00:19:13.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So this cache is stored outside.""" start="00:19:15.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now when I want to retrieve""" start="00:19:20.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""anything from this cache,""" start="00:19:22.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""let's say, so I have cached""" start="00:19:23.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""up until 55, from 45 to 55.""" start="00:19:26.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So what happens is that""" start="00:19:29.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""when you're at page 50,""" start="00:19:31.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you always have a cache""" start="00:19:32.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that's n + 5 and n - 5.""" start="00:19:34.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you have cache of 5 pages forward""" start="00:19:36.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and 5 pages backward.""" start="00:19:39.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""But let's say I want to go to page 56.""" start="00:19:41.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So I will ask an Emacs render page 56.""" start="00:19:45.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And I'm not going to ask it""" start="00:19:50.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to MuPDF directly.""" start="00:19:51.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I'm going to ask it""" start="00:19:53.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to the thread pool that do this job.""" start="00:19:54.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And thread pool is going to""" start="00:19:56.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""assign one thread to it.""" start="00:19:58.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Let's say the thread 1""" start="00:19:59.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which is going to render page 56.""" start="00:20:00.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So this thread is going to make calls to MuPDF""" start="00:20:03.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""through our code dynamic module.""" start="00:20:06.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And MuPDF after rendering it""" start="00:20:08.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is going to store it in the cache.""" start="00:20:11.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we're going to add another 56 page to this.""" start="00:20:13.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now, while this is happening,""" start="00:20:18.060" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs Reader does not, like Emacs itself,""" start="00:20:21.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the session is not going to be stuck""" start="00:20:24.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because we just made a call to the thread.""" start="00:20:27.380" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We just asked the thread.""" start="00:20:30.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So like this, this call, like it's done.""" start="00:20:32.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you just assign something to a thread""" start="00:20:35.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and then this is fine.""" start="00:20:38.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Like, you're not waiting for the thread""" start="00:20:40.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to complete or anything.""" start="00:20:42.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs is not waiting for the thread to complete.""" start="00:20:43.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The dynamic module or the C side""" start="00:20:46.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""might wait to complete""" start="00:20:48.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but that is entirely different from""" start="00:20:49.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the Emacs session.""" start="00:20:51.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So Emacs viewer can continue to""" start="00:20:52.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""display the page 50""" start="00:20:54.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""while the rendering pipeline""" start="00:20:56.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is still rendering the 56th page.""" start="00:20:58.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And when Emacs asks to display page 56,""" start="00:21:01.980" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it's going to ask it to a thread pool.""" start="00:21:05.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Then thread pool is going to assign""" start="00:21:09.620" video="mainVideo-reader" id="subtitle"]] +[[!template text="""another thread, let's say this one,""" start="00:21:11.537" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to retrieve page 56 from the memory cache.""" start="00:21:13.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And then the 56 page is going to be sent""" start="00:21:17.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to the Emacs to be displayed.""" start="00:21:20.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Again, the retrieval part""" start="00:21:24.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is entirely independent of Emacs.""" start="00:21:26.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs does not have to wait for it.""" start="00:21:28.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs only needs to wait to display it.""" start="00:21:30.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So, the displaying part""" start="00:21:34.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and the rendering pipeline""" start="00:21:36.620" video="mainVideo-reader" id="subtitle"]] +[[!template text="""are entirely asynchronous, so to speak.""" start="00:21:37.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And in the diagram, if you see,""" start="00:21:41.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""all the arrows that are""" start="00:21:43.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""magenta in color,""" start="00:21:46.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""they are native to the Emacs runtime.""" start="00:21:48.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That is, they are single-threaded.""" start="00:21:51.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""They are connected to Emacs.""" start="00:21:53.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And all the arrows that are red in color,""" start="00:21:55.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""they are totally asynchronous.""" start="00:21:58.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""They can be multi-threaded if you want.""" start="00:22:01.860" video="mainVideo-reader" id="subtitle"]] +[[!template text="""They are multi-threaded by default""" start="00:22:03.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because they interact""" start="00:22:05.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""only with the MuPDF shared library""" start="00:22:07.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and the C heap.""" start="00:22:09.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""They do not touch anything""" start="00:22:11.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in the Emacs runtime.""" start="00:22:12.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This is how we're able to switch quickly""" start="00:22:14.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""between these huge scanned PDFs""" start="00:22:18.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that have huge images""" start="00:22:22.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in each of their pages""" start="00:22:23.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because we don't really wait for""" start="00:22:25.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""each page to be rendered.""" start="00:22:28.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And Emacs does not wait for that.""" start="00:22:31.380" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So that's another architectural feature""" start="00:22:35.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""of Emacs Reader""" start="00:22:39.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that we are system-level multithreaded.""" start="00:22:40.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now Emacs viewer also supports""" start="00:22:43.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""almost all document formats.""" start="00:22:47.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It supports PDF, EPUB, MOBI, XPS, CPZ comics,""" start="00:22:49.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it even supports""" start="00:22:54.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""other non-ebook formats""" start="00:22:56.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""like document format,""" start="00:22:59.971" video="mainVideo-reader" id="subtitle"]] +[[!template text="""so you can open""" start="00:23:00.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""LibreOffice documents in it,""" start="00:23:01.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and even stuff like PPT and Excel in it,""" start="00:23:04.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""even though they're not going to be""" start="00:23:07.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""supported in a as nice manner.""" start="00:23:08.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And we can do that because MuPDF does this.""" start="00:23:13.860" video="mainVideo-reader" id="subtitle"]] +[[!template text="""MuPDF has support for all of this""" start="00:23:16.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it treats them just as it treats PDF.""" start="00:23:18.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Nothing special.""" start="00:23:22.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The only thing that we don't support right now""" start="00:23:24.540" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is DejaVu, so that is not supported right now.""" start="00:23:26.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I'm going to work on making it supported""" start="00:23:30.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""at the upstream MuPDF.""" start="00:23:33.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That's going to take a long time,""" start="00:23:36.020" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but it's in the plans.""" start="00:23:38.440" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Native Emacs integrations""" start="00:23:44.240" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now with Emacs Reader,""" start="00:23:44.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we also integrate""" start="00:23:45.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""with existing Emacs packages""" start="00:23:46.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as much as possible.""" start="00:23:48.620" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So bookmarks, C-x r b,""" start="00:23:50.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you can do it natively.""" start="00:23:53.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you can save a page as a bookmark""" start="00:23:54.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just as you save anything else in Emacs""" start="00:23:57.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as a bookmark.""" start="00:23:59.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""There's also saveplace integration.""" start="00:24:00.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you can scroll a PDF, close it,""" start="00:24:02.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and then come back to it""" start="00:24:06.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""at the same page that you saved it at.""" start="00:24:07.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Sorry, that you closed it at.""" start="00:24:10.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And it's going to work just out of the box""" start="00:24:12.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because of the saveplace""" start="00:24:14.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""package in Emacs that is built in.""" start="00:24:16.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We also have imenu integration""" start="00:24:19.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for table of contents.""" start="00:24:20.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So if you see this, this is imenu""" start="00:24:22.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and you can scroll through the contents""" start="00:24:26.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just like you scroll through any imenu.""" start="00:24:28.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can also do it in the menu bar by clicking.""" start="00:24:30.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It works just as nice.""" start="00:24:39.500" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We also have something like""" start="00:24:40.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the outline mode that pdf-tools has.""" start="00:24:42.740" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So if you press O in a document,""" start="00:24:44.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it's going to give you this outline.""" start="00:24:48.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And these are buttons that are clickable.""" start="00:24:49.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can click them.""" start="00:24:53.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can press Enter at them.""" start="00:24:54.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And this is the menu bar item that I was looking at.""" start="00:24:56.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""If you click here, index,""" start="00:25:00.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it's going to show you""" start="00:25:02.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the exact same thing""" start="00:25:03.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but in a different interface.""" start="00:25:05.340" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""(Naive) dark mode""" start="00:25:10.340" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""We also have a naive dark mode,""" start="00:25:10.340" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which is not really as nice as""" start="00:25:15.260" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we would like it to be,""" start="00:25:17.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and dark mode fanatics""" start="00:25:18.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I'm sure will have issues with it,""" start="00:25:20.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but we're going to improve it in time.""" start="00:25:22.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""For now, this is what we have.""" start="00:25:24.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And it can be enabled per document,""" start="00:25:27.380" video="mainVideo-reader" id="subtitle"]] +[[!template text="""so you can have one, like,""" start="00:25:30.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""one document that is in dark mode,""" start="00:25:33.100" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but another one that is not.""" start="00:25:34.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That is nice to have.""" start="00:25:36.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Eventually we're going to work on more themes.""" start="00:25:39.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You should be able to actually integrate it""" start="00:25:42.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""with Emacs themes as much as possible.""" start="00:25:46.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can make it default so that""" start="00:25:49.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it inherits colors from the Emacs theme.""" start="00:25:52.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That is one of the things""" start="00:25:54.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that we also have planned.""" start="00:25:56.360" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Challenges and further improvements""" start="00:26:01.140" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""We did face a bunch of challenges""" start="00:26:01.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""while trying to implement these features.""" start="00:26:03.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""One of the initial challenges was that""" start="00:26:05.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""SVGs were actually a bad idea.""" start="00:26:07.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""They're huge, especially in scanned PDFs,""" start="00:26:09.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and they make things much slower.""" start="00:26:12.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we chose to actually have PPMs,""" start="00:26:14.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which is the simplest image format ever possible.""" start="00:26:18.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Now, it was also very difficult""" start="00:26:24.100" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to make reader-mode be window-specific.""" start="00:26:26.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So, you know, while you're scrolling""" start="00:26:29.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the same document in one window,""" start="00:26:31.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the other window with the same document""" start="00:26:34.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""should not change.""" start="00:26:36.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We should be able to have multiple pages""" start="00:26:37.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in different windows of the same document.""" start="00:26:39.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That was very difficult""" start="00:26:42.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because as I told you about the cache,""" start="00:26:44.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the cache works in an idiosyncratic manner""" start="00:26:46.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and we needed to make it so that each window""" start="00:26:50.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""will have its own cache""" start="00:26:54.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""instead of having a global cache for each file.""" start="00:26:56.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That took some rewrite.""" start="00:27:01.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And now, because we needed to do""" start="00:27:03.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""this sort of multithreading,""" start="00:27:06.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""system-level multithreading,""" start="00:27:07.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we needed to use""" start="00:27:09.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a specific package of MuPDF""" start="00:27:10.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that had a bug for this which got fixed.""" start="00:27:13.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And that's 1.26.0.""" start="00:27:16.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Because we did that,""" start="00:27:20.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a lot of the GNU/Linux distributions did not""" start="00:27:23.337" video="mainVideo-reader" id="subtitle"]] +[[!template text="""really have this latest package.""" start="00:27:26.463" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we had to actually""" start="00:27:28.872" video="mainVideo-reader" id="subtitle"]] +[[!template text="""package it in-tree.""" start="00:27:30.772" video="mainVideo-reader" id="subtitle"]] +[[!template text="""as a git sub-module.""" start="00:27:33.805" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That was a horror! But eventually... now""" start="00:27:36.972" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I think most GNU/Linux distributions""" start="00:27:40.738" video="mainVideo-reader" id="subtitle"]] +[[!template text="""already have this [version].""" start="00:27:43.605" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The upcoming features that we have planned""" start="00:27:46.341" video="mainVideo-reader" id="subtitle"]] +[[!template text="""are the first one is that we need to rewrite""" start="00:27:48.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the display mechanism entirely from scratch""" start="00:27:52.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to use a tiled rendering approach.""" start="00:27:55.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So right now we just take an image""" start="00:27:57.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and display it inside an Emacs buffer""" start="00:28:00.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""just like that.""" start="00:28:02.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""But it will be changed so that the image""" start="00:28:03.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""will be displayed in the tiled manner""" start="00:28:08.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""so there will be multiple tiles""" start="00:28:10.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but it'll be pixel perfect""" start="00:28:12.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""so you won't really see a difference.""" start="00:28:14.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The reason to do this is to implement features""" start="00:28:16.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for text selection, actually.""" start="00:28:19.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we can't really do text selection""" start="00:28:21.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""without running into a bunch of memory""" start="00:28:24.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and other issues latency issues""" start="00:28:27.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""if we don't do tiling.""" start="00:28:30.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So we need to do those two things,""" start="00:28:33.020" video="mainVideo-reader" id="subtitle"]] +[[!template text="""they are at the highest priority right now.""" start="00:28:35.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And then, once we're done with that,""" start="00:28:38.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we're going to support annotations,""" start="00:28:40.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""highlighting, everything that you're used to""" start="00:28:42.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in pdf-tools and org-noter.""" start="00:28:45.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And once we're done with that,""" start="00:28:47.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we're going to also integrate with AucTeX and SyncTeX.""" start="00:28:50.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Because right now, when a PDF gets updated,""" start="00:28:55.020" video="mainVideo-reader" id="subtitle"]] +[[!template text="""especially a LaTeX PDF,""" start="00:28:58.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""since there is no SyncTeX integration,""" start="00:29:00.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it can't really do it nicely""" start="00:29:03.438" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it sometimes even crashes Emacs.""" start="00:29:05.772" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So that's something that""" start="00:29:08.661" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we will be planning to implement.""" start="00:29:11.538" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What Emacs can learn?""" start="00:29:14.272" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now, from this experiment,""" start="00:29:14.272" video="mainVideo-reader" id="subtitle"]] +[[!template text="""what exactly can Emacs,""" start="00:29:16.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the Emacs core devs and others""" start="00:29:17.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""who are building packages can learn?""" start="00:29:20.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Well, the first thing is that all of this""" start="00:29:22.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""should not be really this difficult""" start="00:29:24.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because all we're asking from Emacs""" start="00:29:27.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is to display images in real-time""" start="00:29:30.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and update them in real-time.""" start="00:29:32.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That should not be that difficult""" start="00:29:36.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""of a thing to do, but apparently it is.""" start="00:29:37.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And that's why Emacs's graphical interface""" start="00:29:40.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""needs to be more modular, more composable,""" start="00:29:43.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and flexible for real-time graphics.""" start="00:29:47.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""If it is supposed to have things like,""" start="00:29:51.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""again, a document reader,""" start="00:29:54.220" video="mainVideo-reader" id="subtitle"]] +[[!template text="""something like a video editor,""" start="00:29:56.180" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and something like that,""" start="00:29:57.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs's graphical interface""" start="00:29:58.980" video="mainVideo-reader" id="subtitle"]] +[[!template text="""needs to grow and be more mature.""" start="00:30:00.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""One of the things""" start="00:30:05.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that's stopping it from doing that""" start="00:30:06.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is actually Emacs's overlay functionality.""" start="00:30:08.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So right now, the way we display""" start="00:30:10.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""an image in a buffer""" start="00:30:13.940" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is using an overlay,""" start="00:30:16.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""actually multiple overlays.""" start="00:30:18.901" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Overlays are static in the sense that""" start="00:30:22.020" video="mainVideo-reader" id="subtitle"]] +[[!template text="""if I attach to one image to one overlay,""" start="00:30:25.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I need to have an entirely different image""" start="00:30:29.740" video="mainVideo-reader" id="subtitle"]] +[[!template text="""updated for that overlay.""" start="00:30:34.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So I need to create another different image,""" start="00:30:37.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""change it in the memory,""" start="00:30:39.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and then display it to update it.""" start="00:30:41.180" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I can't change the image data""" start="00:30:43.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in real time of the overlay.""" start="00:30:46.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And that is a big issue.""" start="00:30:49.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I've actually made an emacs-devel""" start="00:30:54.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""mailing list thread about it.""" start="00:30:56.260" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I talked to Eli about it as well.""" start="00:30:58.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And he said there's a possibility""" start="00:31:01.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that this can be changed,""" start="00:31:04.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but it's going to take""" start="00:31:05.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a certain amount of rewrite.""" start="00:31:06.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""There's also issues with Emacs GC.""" start="00:31:09.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs GC sometimes leaks memory""" start="00:31:12.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""when you update images too quickly.""" start="00:31:14.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That is, when you have a bunch of images""" start="00:31:16.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that are getting churned out too quickly,""" start="00:31:18.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs GC starts leaking""" start="00:31:21.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and it just goes up to""" start="00:31:23.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""a huge number of gigabytes in RAM.""" start="00:31:25.160" video="mainVideo-reader" id="subtitle"]] +[[!template text="""That's also a huge problem.""" start="00:31:29.680" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The dynamic module API,""" start="00:31:32.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the emacs-module.h header,""" start="00:31:33.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""needs to have more helpers.""" start="00:31:37.140" video="mainVideo-reader" id="subtitle"]] +[[!template text="""It's really bare bones,""" start="00:31:38.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and I like that it is bare bones""" start="00:31:41.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""so that other languages can use it,""" start="00:31:43.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""but at the same time, I think""" start="00:31:45.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""it'll be really good""" start="00:31:46.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""if we can have some helpers""" start="00:31:47.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that can do better memory interaction,""" start="00:31:49.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""like strings and so on,""" start="00:31:53.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""which we also faced some issues with.""" start="00:31:57.260" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Emacs's fractional scaling system""" start="00:32:00.380" video="mainVideo-reader" id="subtitle"]] +[[!template text="""seems to be broken across different toolkits.""" start="00:32:02.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We have bug reports that say in pgtk in Wayland,""" start="00:32:05.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""something seems to render differently""" start="00:32:11.000" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because they have fractional scaling enabled.""" start="00:32:13.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So that's something""" start="00:32:17.260" video="mainVideo-reader" id="subtitle"]] +[[!template text="""that I think Emacs, overall,""" start="00:32:18.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I think Emacs needs to focus on improving""" start="00:32:21.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""the graphical interface pipeline""" start="00:32:24.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to be a much more mature one.""" start="00:32:28.240" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Contributing to the development""" start="00:32:32.300" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""And finally, how can you contribute""" start="00:32:32.300" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to the development of Emacs Reader?""" start="00:32:34.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Well, we are on Codeberg.""" start="00:32:35.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""We are not on GitHub, sorry.""" start="00:32:37.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can go there,""" start="00:32:40.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you can look through the issues""" start="00:32:41.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and send us a PR if you're interested.""" start="00:32:43.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""The next major release""" start="00:32:45.280" video="mainVideo-reader" id="subtitle"]] +[[!template text="""is going to go to GNU ELPA.""" start="00:32:46.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Finally, we are not yet at GNU ELPA,""" start="00:32:49.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""so you can't really do M-x package-install""" start="00:32:52.260" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and install our package.""" start="00:32:54.440" video="mainVideo-reader" id="subtitle"]] +[[!template text="""you would need to install it""" start="00:32:56.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""through use-package :vc.""" start="00:32:58.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And since we're going to go to GNU ELPA,""" start="00:33:04.940" video="mainVideo-reader" id="subtitle"]] +[[!template text="""we request you to assign""" start="00:33:07.500" video="mainVideo-reader" id="subtitle"]] +[[!template text="""your copyright to Emacs""" start="00:33:09.120" video="mainVideo-reader" id="subtitle"]] +[[!template text="""because GNU ELPA is essentially part of GNU Emacs.""" start="00:33:10.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So you would need to do copyright assignment""" start="00:33:13.960" video="mainVideo-reader" id="subtitle"]] +[[!template text="""if you make non-trivial contribution.""" start="00:33:16.720" video="mainVideo-reader" id="subtitle"]] +[[!template text="""You can join us at IRC""" start="00:33:20.580" video="mainVideo-reader" id="subtitle"]] +[[!template text="""at #phi-mu-lambda.""" start="00:33:22.480" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And I also stream the development""" start="00:33:24.360" video="mainVideo-reader" id="subtitle"]] +[[!template text="""of this package""" start="00:33:27.200" video="mainVideo-reader" id="subtitle"]] +[[!template text="""bi-weekly on Sundays""" start="00:33:28.040" video="mainVideo-reader" id="subtitle"]] +[[!template text="""at PeerTube at the following channel.""" start="00:33:29.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Feel free to join us.""" start="00:33:31.640" video="mainVideo-reader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Acknowledgements""" start="00:33:35.520" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Finally, I want to thank Tushar,""" start="00:33:35.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""who has been persistently contributing""" start="00:33:38.500" video="mainVideo-reader" id="subtitle"]] +[[!template text="""to the project since 0.1.0,""" start="00:33:40.640" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and I'm very, very thankful for him,""" start="00:33:42.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""for his suggestions,""" start="00:33:46.520" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and for his code contributions as well.""" start="00:33:47.760" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I would also like to thank Prom,""" start="00:33:50.880" video="mainVideo-reader" id="subtitle"]] +[[!template text="""who fixed a major bug""" start="00:33:53.320" video="mainVideo-reader" id="subtitle"]] +[[!template text="""in the Windows build,""" start="00:33:55.800" video="mainVideo-reader" id="subtitle"]] +[[!template text="""since I don't really use Windows anymore,""" start="00:33:56.860" video="mainVideo-reader" id="subtitle"]] +[[!template text="""so that was really nice,""" start="00:33:58.840" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and for Teeoius, for fixing a pthread bug.""" start="00:33:59.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""I would also like to thank others""" start="00:34:05.460" video="mainVideo-reader" id="subtitle"]] +[[!template text="""who helped fix little things,""" start="00:34:06.920" video="mainVideo-reader" id="subtitle"]] +[[!template text="""who come to the stream to chat,""" start="00:34:09.560" video="mainVideo-reader" id="subtitle"]] +[[!template text="""who sort of see me bang my head""" start="00:34:13.180" video="mainVideo-reader" id="subtitle"]] +[[!template text="""across these C memory bugs.""" start="00:34:16.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""So thank you to all of those.""" start="00:34:19.240" video="mainVideo-reader" id="subtitle"]] +[[!template text="""And thank you finally to the viewers""" start="00:34:21.600" video="mainVideo-reader" id="subtitle"]] +[[!template text="""and to EmacsConf organizers as well.""" start="00:34:24.400" video="mainVideo-reader" id="subtitle"]] +[[!template text="""This is a splendid opportunity.""" start="00:34:28.080" video="mainVideo-reader" id="subtitle"]] +[[!template text="""Thank you.""" start="00:34:31.940" video="mainVideo-reader" id="subtitle"]] + +</div> + +Captioner: jay_bird + +Questions or comments? Please e-mail [divya@subvertising.org](mailto:divya@subvertising.org?subject=Comment%20for%20EmacsConf%202023%20reader%3A%20An%20introduction%20to%20the%20Emacs%20Reader) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/reader-before.md b/2025/info/reader-before.md new file mode 100644 index 00000000..5721f1b0 --- /dev/null +++ b/2025/info/reader-before.md @@ -0,0 +1,36 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="reader"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect stroke-width="3" x="54" y="15" opacity="0.8" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 35-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-reader.html> Etherpad: <https://pad.emacsconf.org/2025-reader> +Etherpad: <https://pad.emacsconf.org/2025-reader> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T14:40:00Z" end="2025-12-07T15:15:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~9:40 AM - 10:15 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~8:40 AM - 9:15 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~7:40 AM - 8:15 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~6:40 AM - 7:15 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~2:40 PM - 3:15 PM UTC <br />Sunday, Dec 7 2025, ~3:40 PM - 4:15 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~4:40 PM - 5:15 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~8:10 PM - 8:45 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~10:40 PM - 11:15 PM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~11:40 PM - 12:15 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-reader"><source src="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--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="mainVideo-reader" data=""" +00:00:00.720 An introduction to the Emacs reader +00:44.760 Yet another document viewer in Emacs? +02:05.760 Architecture of Emacs Reader +06:00.280 A word on dynamic modules +07:39.560 Features of Emacs Reader +07:56.760 Memory efficiency +11:18.720 Performance and speed +14:23.680 Scanned PDFs +17:08.960 System-level multi-threading +23:44.240 Native Emacs integrations +25:10.340 (Naive) dark mode +26:01.140 Challenges and further improvements +29:14.272 What Emacs can learn? +32:32.300 Contributing to the development +33:35.520 Acknowledgements + +"""]]<div></div>Duration: 34:37 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-reader">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-reader.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.opus">Download --main.opus (30MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.webm">Download --main.webm (101MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/reader-nav.md b/2025/info/reader-nav.md new file mode 100644 index 00000000..3811de7f --- /dev/null +++ b/2025/info/reader-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/modern">Some problems of modernizing Emacs</a> +Next by time: <a href="/2025/talks/weights">Weightlifting tracking with Emacs on Android</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/reference-after.md b/2025/info/reference-after.md new file mode 100644 index 00000000..00456b05 --- /dev/null +++ b/2025/info/reference-after.md @@ -0,0 +1,358 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="reference-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.820" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So, hello everyone, welcome to EmacsConf.""" start="00:00:00.820" video="mainVideo-reference" id="subtitle"]] +[[!template text="""My name is Vidianos, and I'm a PhD student in KU Leuven,""" start="00:00:03.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and today I'm going to be showing you""" start="00:00:06.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""how I managed to use Emacs as a reference manager,""" start="00:00:08.280" video="mainVideo-reference" id="subtitle"]] +[[!template text="""replacing what was for me Zotero,""" start="00:00:12.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""to a fully fledged approach inside Emacs.""" start="00:00:17.220" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So, what is my typical reference workflow?""" start="00:00:24.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""First I need to find literature,""" start="00:00:26.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""then I need to collect and organize it,""" start="00:00:28.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which I originally did with Zotero,""" start="00:00:30.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but now with Emacs centered tools""" start="00:00:32.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""such as zotra and ebib.""" start="00:00:36.612" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Then I create a reading list.""" start="00:00:39.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This is a new addition to my workflow""" start="00:00:41.280" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I started doing after moving this approach to Emacs""" start="00:00:43.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because now everything is well integrated.""" start="00:00:47.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I have made a very nice reading list implementation""" start="00:00:50.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""inside org-roam which I am going to be showing today.""" start="00:00:53.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Then obviously I need to read the literature, take notes,""" start="00:00:57.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""organize the notes, and ensure I am actually learning""" start="00:01:01.200" video="mainVideo-reference" id="subtitle"]] +[[!template text="""from what I am reading. This is then done through packages""" start="00:01:04.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""such as org-noter and org-roam""" start="00:01:06.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and is not going to be the focus of this talk.""" start="00:01:09.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I already gave a talk about this part of my workflow,""" start="00:01:11.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which I've been doing for many years now.""" start="00:01:14.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""You can find that""" start="00:01:17.960" video="mainVideo-reference" id="subtitle"]] +[[!template text="""or you can find many other people's approaches""" start="00:01:20.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""to reading literature and taking notes""" start="00:01:23.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""as it is quite a popular topic in the Emacs community.""" start="00:01:26.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Lastly, I will have a short section""" start="00:01:31.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""about how I ensure that I can recall the knowledge""" start="00:01:32.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""from this literature very easily""" start="00:01:37.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""through this reference management system.""" start="00:01:39.680" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Capture""" start="00:01:43.600" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So, how can we capture an article in Emacs?""" start="00:01:43.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""One of the most commonly known packages is doi-utils""" start="00:01:48.200" video="mainVideo-reference" id="subtitle"]] +[[!template text="""where doi-utils has a lot of useful things to do""" start="00:01:52.100" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and one of them is to capture a paper,""" start="00:01:58.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but you need a DOI, and for me, that is a bit inconvenient,""" start="00:02:03.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because what I want to do is that""" start="00:02:06.460" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I have a URL here of a paper,""" start="00:02:08.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I want to just copy this URL, not copy the DOI,""" start="00:02:12.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and be able to save it immediately to my bib file.""" start="00:02:16.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And that can now be done""" start="00:02:23.200" video="mainVideo-reference" id="subtitle"]] +[[!template text="""through this function zotra-add-entry.""" start="00:02:24.312" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And as you can see here,""" start="00:02:27.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""there is also a zotra-download-attachment""" start="00:02:28.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that sometimes works, but not always.""" start="00:02:31.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I don't personally recommend it.""" start="00:02:34.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""But the problem is that due to articles being""" start="00:02:35.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""locked behind paywalls in many cases,""" start="00:02:39.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""downloading attachments doesn't work""" start="00:02:42.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""through Emacs. Sometimes it doesn't work""" start="00:02:45.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""through Zotero. Sometimes you just need to go to the browser,""" start="00:02:47.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""say download PDF, and that's the only solution""" start="00:02:51.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that will properly work.""" start="00:02:54.260" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So how do I then add this to the paper?""" start="00:02:58.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I need to find this paper that is here""" start="00:03:01.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""through ivy-bibtex.""" start="00:03:04.712" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This is the bib file manager I use.""" start="00:03:05.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""There is also others like citar.""" start="00:03:10.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I think citar has much better coding and integration""" start="00:03:11.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""with other packages, but I haven't really bothered""" start="00:03:15.560" video="mainVideo-reference" id="subtitle"]] +[[!template text="""to move from ivy-bibtex""" start="00:03:18.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because it does basically everything I want perfectly.""" start="00:03:19.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I go here, say add pdf to library.""" start="00:03:24.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I find where I saved it,""" start="00:03:28.280" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and it will suggest to automatically name it something""" start="00:03:31.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which is in full integration""" start="00:03:35.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""with the rest of my Emacs packages,""" start="00:03:37.446" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and all the literature management stuff""" start="00:03:40.920" video="mainVideo-reference" id="subtitle"]] +[[!template text="""knows to find it with this exact name.""" start="00:03:43.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So it iss saved and now""" start="00:03:46.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""when I try to create a file from this,""" start="00:03:49.046" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which I will show later,""" start="00:03:53.320" video="mainVideo-reference" id="subtitle"]] +[[!template text="""you will see that the file will already appear there.""" start="00:03:55.200" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Organizing""" start="00:04:00.920" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So now let's go to organizing.""" start="00:04:00.920" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Organizing in Zotero is typically done through a""" start="00:04:06.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""hierarchical folder structure.""" start="00:04:09.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This is very familiar to most people and generally works,""" start="00:04:10.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but being someone that takes notes using the Zettelkasten method,""" start="00:04:15.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which has a fully flat hierarchy, nothing goes in folders,""" start="00:04:19.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""everything is in the same folder,""" start="00:04:24.320" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and you find everything because it's connected to other things.""" start="00:04:27.960" video="mainVideo-reference" id="subtitle"]] +[[!template text="""We have some basic indexes,""" start="00:04:31.960" video="mainVideo-reference" id="subtitle"]] +[[!template text="""from where you can jump to different points.""" start="00:04:34.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I love this structure, so I also wanted to include it""" start="00:04:37.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""in my bibliography management,""" start="00:04:41.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because with folders you have problems like,""" start="00:04:42.920" video="mainVideo-reference" id="subtitle"]] +[[!template text="""this article can go in that folder, can go in that folder,""" start="00:04:45.580" video="mainVideo-reference" id="subtitle"]] +[[!template text="""can go in that folder. Where do I actually put it?""" start="00:04:48.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Do I put copies of it in different folders?""" start="00:04:51.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It's just confusing and not really practical in my opinion.""" start="00:04:54.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I tried to do this approach inside Emacs.""" start="00:04:59.280" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Ebib""" start="00:05:03.479" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""And how? With Ebib.""" start="00:05:03.479" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Ebib is an amazing software built inside Emacs.""" start="00:05:08.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It's a reference manager and it works absolutely amazing""" start="00:05:11.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""if you configure it to your liking.""" start="00:05:15.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So let's open ebib first.""" start="00:05:18.200" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This is the interface you will see when opening.""" start="00:05:21.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Actually, by default you will not see anything,""" start="00:05:23.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but I have open three bib files.""" start="00:05:27.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""These are opened by default on boot of ebib for me.""" start="00:05:30.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""These are my three main master bib files.""" start="00:05:36.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This is the Zotero master bib file,""" start="00:05:39.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which only Zotero can touch. If I change it,""" start="00:05:41.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""it will be overwritten. This is my new master bib,""" start="00:05:44.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""where I save all the files that I have now started using""" start="00:05:47.960" video="mainVideo-reference" id="subtitle"]] +[[!template text="""after switching to this approach.""" start="00:05:53.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And then this is the master bib file""" start="00:05:55.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""for literature related to my PhD""" start="00:05:59.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and things that I have already read.""" start="00:06:02.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It's a very convenient interface.""" start="00:06:07.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""There is also search. There is one searching tool,""" start="00:06:09.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""the jump to entry, ebib-jump-to-entry,""" start="00:06:14.141" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which searches through all open bib files for the title.""" start="00:06:16.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So for example, I can search for membrane fabrication,""" start="00:06:23.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because that's something I am currently doing,""" start="00:06:29.320" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and go to this. There is another searching tool,""" start="00:06:35.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""the ebib-search, which searches through the database""" start="00:06:41.920" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that you're on right now""" start="00:06:45.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and it does a full text search,""" start="00:06:48.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""not only in the titles, but everywhere.""" start="00:06:50.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So, for example, I see that in this paper""" start="00:06:53.460" video="mainVideo-reference" id="subtitle"]] +[[!template text="""if I go to the abstract and search for the word FTIR,""" start="00:06:57.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which is a chemical analysis,""" start="00:07:04.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""it will tell me that it's here.""" start="00:07:06.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Can it find it anywhere else? It cannot. That's okay.""" start="00:07:09.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Let's search for something""" start="00:07:16.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that we'll be able to find more easily,""" start="00:07:18.112" video="mainVideo-reference" id="subtitle"]] +[[!template text="""like, for example, membrane crystallization""" start="00:07:21.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which is a main focus of my PhD.""" start="00:07:24.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Then it will be able to find it many times,""" start="00:07:27.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""many, many times.""" start="00:07:30.320" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I can also search on the next database""" start="00:07:35.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""or on this database and see where is everything that I want.""" start="00:07:40.300" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So this is different searching tools which are very useful.""" start="00:07:49.480" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Filters""" start="00:07:55.480" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""Then there's also another tool, that is, filters.""" start="00:07:55.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I can filter on any field.""" start="00:08:01.701" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Like, for example, let's say on any field,""" start="00:08:06.200" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and let's say I'm looking now again""" start="00:08:09.740" video="mainVideo-reference" id="subtitle"]] +[[!template text="""for membrane crystallization.""" start="00:08:13.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This will now filter to all entries.""" start="00:08:16.280" video="mainVideo-reference" id="subtitle"]] +[[!template text="""You can see right now there's 18 entries here""" start="00:08:19.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that mention these two words together in any field.""" start="00:08:22.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Sometimes this is easier, because this is permanent.""" start="00:08:28.020" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It's not like the search that we find one""" start="00:08:31.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and then if you move, you've lost it,""" start="00:08:33.700" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and you need to find it again.""" start="00:08:35.219" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This is permanent until I say,""" start="00:08:37.886" video="mainVideo-reference" id="subtitle"]] +[[!template text="""okay, cancel the filter.""" start="00:08:39.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I mostly work with filters,""" start="00:08:41.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I think they're the most convenient.""" start="00:08:43.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Then there's also the ebib-list-recent""" start="00:08:47.060" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which is another very useful command.""" start="00:08:49.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It asks you for a number of days""" start="00:08:51.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and it will show you the files that were added""" start="00:08:53.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""in the most recent.""" start="00:08:56.560" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So for example, show me the literature files""" start="00:08:58.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that were added to this bib file in the last month.""" start="00:09:02.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I will see five files in this case,""" start="00:09:05.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because in this bib file, I have mostly entries""" start="00:09:09.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that I have read, these are the files""" start="00:09:12.700" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I have most recently read and added here.""" start="00:09:15.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""While if I go for example here and say that,""" start="00:09:18.960" video="mainVideo-reference" id="subtitle"]] +[[!template text="""these are files that maybe I haven't read yet,""" start="00:09:21.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but I was planning to read. So this is something useful.""" start="00:09:25.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Although for things I'm planning to read,""" start="00:09:31.100" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I mostly use the reading list""" start="00:09:33.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that I'm going to show next.""" start="00:09:34.440" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Dependent databases""" start="00:09:36.179" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""But before that,""" start="00:09:36.179" video="mainVideo-reference" id="subtitle"]] +[[!template text="""a few more neat things that you can do in Ebib.""" start="00:09:37.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I have a list of dependent databases.""" start="00:09:41.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""For ease, I have already opened them here.""" start="00:09:45.020" video="mainVideo-reference" id="subtitle"]] +[[!template text="""These, as you can see, have two brackets here,""" start="00:09:48.820" video="mainVideo-reference" id="subtitle"]] +[[!template text="""indicating that they're dependent on phd_literature_1.bib,""" start="00:09:52.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and these, in my case, act as the sort of index file,""" start="00:09:59.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""where I am tagging things based on the structure""" start="00:10:06.379" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that I wanted to have for the organization.""" start="00:10:10.912" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So all the organization is flat,""" start="00:10:14.652" video="mainVideo-reference" id="subtitle"]] +[[!template text="""all the literature is in phd_literature_1,""" start="00:10:16.479" video="mainVideo-reference" id="subtitle"]] +[[!template text="""however, I have this file""" start="00:10:20.146" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that has 14 entries.""" start="00:10:23.420" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I have another file here that has 20 entries.""" start="00:10:25.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And these are smaller indexes""" start="00:10:32.900" video="mainVideo-reference" id="subtitle"]] +[[!template text="""where I can find things easier,""" start="00:10:35.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but things are not limited to one of these.""" start="00:10:38.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Things can be in all of these, or probably not all of these,""" start="00:10:41.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but can be in three or four of these very easily.""" start="00:10:45.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And how you add things is that I go here,""" start="00:10:50.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and I say not r, it's... M for the dependent databases,""" start="00:10:55.220" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and I add entry, and it will tell me""" start="00:11:00.080" video="mainVideo-reference" id="subtitle"]] +[[!template text=""""Where do you want to add this?"""" start="00:11:02.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So when I read a new paper,""" start="00:11:03.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I can say okay, this is related to these three tags,""" start="00:11:05.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and this is sort of like, again,""" start="00:11:09.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""it's tagging it and it's putting it""" start="00:11:11.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""there, there, and there.""" start="00:11:13.186" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And then this creates a flat structure""" start="00:11:15.060" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that however has a great organization,""" start="00:11:17.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""similar to how Zettelkasten works""" start="00:11:21.620" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and I really like working with something like this,""" start="00:11:23.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""with dependent databases.""" start="00:11:27.880" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Another feature that I really like,""" start="00:11:33.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""another feature that exists by default... But if I tag,""" start="00:11:36.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""this tagging is done through "m",""" start="00:11:41.920" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and then I can tag different files here,""" start="00:11:45.280" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and this is to do different actions with these together,""" start="00:11:49.020" video="mainVideo-reference" id="subtitle"]] +[[!template text="""such as, for example,""" start="00:11:52.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""copy them to a different file,""" start="00:11:53.586" video="mainVideo-reference" id="subtitle"]] +[[!template text="""with "x" I can export the entries somewhere else,""" start="00:11:55.586" video="mainVideo-reference" id="subtitle"]] +[[!template text="""there are many things that you can do""" start="00:11:59.460" video="mainVideo-reference" id="subtitle"]] +[[!template text="""when you mark them.""" start="00:12:00.686" video="mainVideo-reference" id="subtitle"]] +[[!template text="""By the way, one of them is this function,""" start="00:12:01.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which sees everything that I have marked""" start="00:12:05.320" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and shows me an org-roam-node-find entry""" start="00:12:08.940" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that is filtered to just these files.""" start="00:12:14.786" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I can select one and it will take me""" start="00:12:18.053" video="mainVideo-reference" id="subtitle"]] +[[!template text="""to my notes on this specific paper.""" start="00:12:20.886" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I find this very useful,""" start="00:12:24.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because I can be looking for something""" start="00:12:25.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and I can say, okay I remember,""" start="00:12:27.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""or I did some filtering,""" start="00:12:30.019" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and I know it's in one of these files""" start="00:12:31.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and now I want to see my in-depth notes on each one""" start="00:12:34.100" video="mainVideo-reference" id="subtitle"]] +[[!template text="""to remember where exactly I found it.""" start="00:12:37.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I find this kind of filtering,""" start="00:12:41.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""this org-roam related filtering, to be also very effective.""" start="00:12:43.420" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Reading lists""" start="00:12:50.540" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So now let's finally move to reading list.""" start="00:12:50.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""The reading list in ebib""" start="00:12:54.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""reminds me a lot of the philosophy that Emacs uses.""" start="00:12:55.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""By default, it is extremely bare bones, not very usable,""" start="00:13:00.260" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but it is so customizable, to where you can do""" start="00:13:05.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""anything that you can imagine through it""" start="00:13:10.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because the limit truly is your imagination.""" start="00:13:13.020" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It's how much you can code into this""" start="00:13:16.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that actually makes sense""" start="00:13:21.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and you can actually imagine it working.""" start="00:13:22.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Besides that, you can do anything really.""" start="00:13:25.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So we can open ebib and try to find this paper""" start="00:13:31.700" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that I just added here.""" start="00:13:36.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Then we can create a reading list entry from it.""" start="00:13:42.700" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Here, my reading list prompts me""" start="00:13:48.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""for a priority for this.""" start="00:13:52.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""How urgent it is for me to read this.""" start="00:13:53.419" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It adds a TO-READ, which is a todo entry,""" start="00:13:57.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which helps with organizing my reading list,""" start="00:14:02.220" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because as you may also be able to see, this has an ID,""" start="00:14:04.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because this is an org-roam node,""" start="00:14:08.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""so the TO-READ allows me to organize it inside org-roam.""" start="00:14:11.580" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It saves the citekey, the link to the paper,""" start="00:14:16.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and also tags it with the parent file node""" start="00:14:21.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because I don't like having orphan nodes in my Zettelkasten.""" start="00:14:25.980" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I like everything to be linked to at least one thing.""" start="00:14:30.380" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So everything in the reading list""" start="00:14:33.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""is linked to the parent file.""" start="00:14:35.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And now I can find this in the org-roam-node-find menu,""" start="00:14:39.300" video="mainVideo-reference" id="subtitle"]] +[[!template text="""here. However, that's not very interesting.""" start="00:14:47.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""In practice, my typical org-roam-node-find""" start="00:14:53.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""does not even include these reading list files""" start="00:14:56.240" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because I don't really care to have them there.""" start="00:14:59.760" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Special org-roam-node-find""" start="00:15:02.440" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""I have a special org-roam-node-find""" start="00:15:02.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that is designed to find these in particular.""" start="00:15:06.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And here these have 22. These are the amount of files""" start="00:15:13.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that are currently in my reading list.""" start="00:15:16.460" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So for example, let's try and press here.""" start="00:15:21.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And magically, this prompts me to select a capture template,""" start="00:15:29.900" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because what it's doing is that I selected this,""" start="00:15:33.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and because of the citekey, it knows""" start="00:15:39.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that it wants to create a new node for that.""" start="00:15:42.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I select the capture template.""" start="00:15:46.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It knows that it wants to create this new node for this.""" start="00:15:47.960" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And now, if I for a second close the reading list,""" start="00:15:56.100" video="mainVideo-reference" id="subtitle"]] +[[!template text="""now I can already go ahead and take notes on this.""" start="00:16:01.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""This is org-noter, in particular,""" start="00:16:07.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and it makes it all very easy""" start="00:16:09.760" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because it's all integrated in one place.""" start="00:16:11.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""If I then close this and open a new Emacs,""" start="00:16:15.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""we have this, and the reading list allows me to very quickly""" start="00:16:22.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""go from this being reading this item to initializing it.""" start="00:16:27.940" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Another thing that is very useful is that""" start="00:16:32.540" video="mainVideo-reference" id="subtitle"]] +[[!template text="""everything is sorted by priority.""" start="00:16:35.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I need to increase the font size again""" start="00:16:38.740" video="mainVideo-reference" id="subtitle"]] +[[!template text="""because I closed the previous Emacs.""" start="00:16:41.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So here, I can select what is high priority,""" start="00:16:48.900" video="mainVideo-reference" id="subtitle"]] +[[!template text="""what is low priority. I can also change the priority""" start="00:16:52.320" video="mainVideo-reference" id="subtitle"]] +[[!template text="""without needing to be in this file.""" start="00:16:56.400" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Let's leave this file. I can say, okay, I decided""" start="00:16:58.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that this file is priority B. It needs to be A,""" start="00:17:05.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""which is more urgent.""" start="00:17:08.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""In my system, there's five different priority levels.""" start="00:17:11.900" video="mainVideo-reference" id="subtitle"]] +[[!template text="""You can get away with less""" start="00:17:16.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but I like to have the very much low ones""" start="00:17:18.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""as this is not urgent at all""" start="00:17:20.960" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but I want to keep it somewhere. A is very urgent""" start="00:17:23.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and B is urgent but just below A.""" start="00:17:27.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And then the C in the middle is just""" start="00:17:31.780" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I will eventually read this""" start="00:17:34.620" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but not something I want to focus my attention on right now.""" start="00:17:36.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So this is mostly about reading list.""" start="00:17:41.920" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I can also show, for example,""" start="00:17:45.440" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I have this if I finalize something,""" start="00:17:46.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""if I read it. For example, I created a note for this new thing.""" start="00:17:50.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Let's say I finished reading it.""" start="00:17:56.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I want to remove from my reading list.""" start="00:17:59.080" video="mainVideo-reference" id="subtitle"]] +[[!template text="""It's also just one command and it's done.""" start="00:18:02.180" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Annotations""" start="00:18:05.640" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""If we now return to the presentation,""" start="00:18:05.640" video="mainVideo-reference" id="subtitle"]] +[[!template text="""the last thing I want to show is annotations.""" start="00:18:08.740" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So for annotations, it's the idea that sometimes""" start="00:18:11.700" video="mainVideo-reference" id="subtitle"]] +[[!template text="""you just need to find something in Ebib quickly.""" start="00:18:17.120" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I'm here and I'm looking for something.""" start="00:18:23.140" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I said I'm here and I'm looking for something.""" start="00:18:26.680" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And as you can see, there's the annote file everywhere,""" start="00:18:31.000" video="mainVideo-reference" id="subtitle"]] +[[!template text="""the annote entry, which is a very very small description""" start="00:18:35.200" video="mainVideo-reference" id="subtitle"]] +[[!template text="""of things that I want to remember for this paper.""" start="00:18:40.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""So I can be scrolling here or scrolling""" start="00:18:43.800" video="mainVideo-reference" id="subtitle"]] +[[!template text="""in one of the smaller files""" start="00:18:48.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and saying this was in this subsection,""" start="00:18:51.812" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and which paper was it, and I can scroll,""" start="00:18:56.860" video="mainVideo-reference" id="subtitle"]] +[[!template text="""read all these annotes.""" start="00:18:59.520" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Each annote takes like 15 seconds to read,""" start="00:19:01.712" video="mainVideo-reference" id="subtitle"]] +[[!template text="""and really decide, okay,""" start="00:19:04.920" video="mainVideo-reference" id="subtitle"]] +[[!template text="""it was this paper that I wanted, good.""" start="00:19:07.360" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Now I can open the note for it, go there, and it's very easy.""" start="00:19:09.800" video="mainVideo-reference" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:21.820" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So I think that's all. I would like to thank you for your time.""" start="00:19:21.820" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I would love to see your questions either in IRC,""" start="00:19:25.720" video="mainVideo-reference" id="subtitle"]] +[[!template text="""I will be, maybe I've already answered""" start="00:19:29.320" video="mainVideo-reference" id="subtitle"]] +[[!template text="""some of your questions there in the Etherpad,""" start="00:19:32.200" video="mainVideo-reference" id="subtitle"]] +[[!template text="""or right now, we're going to the live Q&A""" start="00:19:35.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""where I'd love to interact with everyone and have a discussion.""" start="00:19:37.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""However, if you don't have any questions right now,""" start="00:19:42.160" video="mainVideo-reference" id="subtitle"]] +[[!template text="""but you have a question later on, feel free to send me an email.""" start="00:19:44.480" video="mainVideo-reference" id="subtitle"]] +[[!template text="""My mail is also on the site.""" start="00:19:48.560" video="mainVideo-reference" id="subtitle"]] +[[!template text="""And if you're curious how all this "magic" worked,""" start="00:19:51.740" video="mainVideo-reference" id="subtitle"]] +[[!template text="""feel free to go to my Github and see the ebib section""" start="00:19:54.600" video="mainVideo-reference" id="subtitle"]] +[[!template text="""here that will also be linked in the doc page,""" start="00:20:00.840" video="mainVideo-reference" id="subtitle"]] +[[!template text="""where you can see all the configuration""" start="00:20:04.040" video="mainVideo-reference" id="subtitle"]] +[[!template text="""that I have done in Ebib for everything to work.""" start="00:20:06.280" video="mainVideo-reference" id="subtitle"]] +[[!template text="""Thank you again and have a wonderful EmacsConf!""" start="00:20:10.920" video="mainVideo-reference" id="subtitle"]] + +</div>Questions or comments? Please e-mail [vidianosgiannitsis@gmail.com](mailto:vidianosgiannitsis@gmail.com?subject=Comment%20for%20EmacsConf%202023%20reference%3A%20Emacs%20as%20a%20fully-fledged%20reference%20manager) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/reference-before.md b/2025/info/reference-before.md new file mode 100644 index 00000000..713e80d7 --- /dev/null +++ b/2025/info/reference-before.md @@ -0,0 +1,31 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="reference"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect stroke-width="3" x="41" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 21-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-reference.html> Etherpad: <https://pad.emacsconf.org/2025-reference> +Etherpad: <https://pad.emacsconf.org/2025-reference> +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 mainVideo"><video controls preload="none" id="mainVideo-reference"><source src="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--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="mainVideo-reference" data=""" +00:00:00.820 Introduction +01:43.600 Capture +04:00.920 Organizing +05:03.479 Ebib +07:55.480 Filters +09:36.179 Dependent databases +12:50.540 Reading lists +15:02.440 Special org-roam-node-find +18:05.640 Annotations +19:21.820 Wrapping up + +"""]]<div></div>Duration: 20:14 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-reference">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-reference.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.webm">Download --main.webm (103MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--script.org">Download --script.org</a></li><li><a href="https://youtu.be/XjhnY4WuQRQ">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/reference-nav.md b/2025/info/reference-nav.md new file mode 100644 index 00000000..699b7825 --- /dev/null +++ b/2025/info/reference-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/schemacs">One year progress update Schemacs (formerly Gypsum)</a> +Next by time: <a href="/2025/talks/gmail">org-gmail: A deep integration of Gmail into your Org Mode</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/sat-close-after.md b/2025/info/sat-close-after.md new file mode 100644 index 00000000..c37a7f60 --- /dev/null +++ b/2025/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%202023%20sat-close%3A%20Saturday%20closing%20remarks%20%2F%20open%20session) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/sat-close-before.md b/2025/info/sat-close-before.md new file mode 100644 index 00000000..7633a02e --- /dev/null +++ b/2025/info/sat-close-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="sat-close"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect stroke-width="3" x="576" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" 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/2025/current/bbb-sat-close.html> Etherpad: <https://pad.emacsconf.org/2025-sat-close> +Etherpad: <https://pad.emacsconf.org/2025-sat-close> +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 mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sat-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-sat-close.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/sat-close-nav.md b/2025/info/sat-close-nav.md new file mode 100644 index 00000000..fe14f1b1 --- /dev/null +++ b/2025/info/sat-close-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/graphics">Modern Emacs/Elisp hardware/software accelerated graphics</a> +Next by time: <a href="/2025/talks/sun-open">Sunday opening remarks</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/sat-open-after.md b/2025/info/sat-open-after.md new file mode 100644 index 00000000..2b428ad8 --- /dev/null +++ b/2025/info/sat-open-after.md @@ -0,0 +1,143 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="sat-open-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Tracks""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Welcome to EmacsConf, where we have fun""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""exploring just how much we can do with a text editor.""" start="00:00:02.247" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""There's a General track and a Development track,""" start="00:00:05.485" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""but really, you'll probably find""" start="00:00:07.925" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""interesting things on both tracks""" start="00:00:09.484" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""no matter what your level of experience is,""" start="00:00:11.079" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so don't feel limited to one or the other.""" start="00:00:13.216" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Watching and participating""" start="00:00:16.000" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:16.000" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:19.393" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and I'll give you a quick overview as well.""" start="00:00:22.486" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:24.910" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""using free and open source software.""" start="00:00:28.885" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Using a streaming media player like mpv""" start="00:00:31.186" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:34.388" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""but there are also web-based players""" start="00:00:37.275" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""just in case that's all you've got.""" start="00:00:39.241" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The schedule shows the General track on top""" start="00:00:41.378" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and the Development track on the bottom,""" start="00:00:44.064" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so you can see what else is going on.""" start="00:00:45.603" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""As you're watching the talks,""" start="00:00:47.820" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""you can refer to the schedule in another window.""" start="00:00:49.819" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Hover over the boxes to see the times and titles,""" start="00:00:52.355" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and click on the boxes in the schedule""" start="00:00:55.601" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""to jump to the talk's page for more details.""" start="00:00:57.614" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Other schedule formats""" start="00:01:00.607" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:00.607" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""or as an Org file in different time zones.""" start="00:01:03.587" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The Org file has some links to talk resources""" start="00:01:05.621" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and might be handy as a starting point for your notes.""" start="00:01:08.255" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""BigBlueButton""" start="00:01:10.601" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Many talks will be followed by""" start="00:01:10.601" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:12.145" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:14.572" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:17.734" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:20.819" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can join the web conference room""" start="00:01:24.001" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""by clicking on the BBB link""" start="00:01:25.901" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:27.467" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:30.176" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""To improve performance, please keep your webcam off""" start="00:01:34.215" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:37.211" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you don't like Javascript,""" start="00:01:39.890" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""you can still ask questions via IRC""" start="00:01:41.692" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and the hosts can read them out for you.""" start="00:01:43.643" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""On and off the stream""" start="00:01:46.036" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""We're probably going to automatically switch""" start="00:01:46.036" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""between talks and Q&A sessions,""" start="00:01:47.895" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so the transitions on the stream might be a little sudden.""" start="00:01:49.483" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""People in the BigBlueButton room""" start="00:01:52.897" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""can continue the conversation""" start="00:01:54.439" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""even after the talk moves off-stream,""" start="00:01:55.862" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and you can also reach out to the speakers""" start="00:01:58.220" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""using the contact information on the talk page.""" start="00:02:00.271" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Etherpad and IRC""" start="00:02:03.217" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:02:03.217" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""depending on what the speakers prefer.""" start="00:02:06.302" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:08.542" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and on the schedule page as well.""" start="00:02:11.380" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The schedule pages have quick shortcuts so that you can""" start="00:02:13.510" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""find out more about talks, open the Etherpads,""" start="00:02:16.543" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and join the Q&A sessions.""" start="00:02:19.053" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The watch page has more tips""" start="00:02:21.204" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""on how to make the most of Q&A.""" start="00:02:23.366" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Etherpad""" start="00:02:25.456" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""If you can, please add notes and ask questions""" start="00:02:25.456" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""in the Etherpad for the talk.""" start="00:02:28.330" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""That makes it easier""" start="00:02:30.133" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""for everyone to share their notes,""" start="00:02:31.598" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:33.130" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:36.355" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""We have one pad for each talk,""" start="00:02:39.622" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so you can follow the links to get to the next one""" start="00:02:41.497" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:43.773" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you have general feedback about""" start="00:02:46.828" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""the conference itself, please put it in""" start="00:02:48.423" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""pad.emacsconf.org/emacsconf.""" start="00:02:50.668" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can also use this as a community message board""" start="00:02:54.593" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""for things like Help Wanted.""" start="00:02:57.550" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""IRC""" start="00:02:59.440" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:02:59.440" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""to be part of lots of conversations.""" start="00:03:02.800" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:05.176" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""through your web browser.""" start="00:03:09.451" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The tabs on the left can help you""" start="00:03:11.046" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""switch between the different channels.""" start="00:03:12.857" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:14.892" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:17.611" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:20.490" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:23.957" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:29.475" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Captions""" start="00:03:32.778" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:32.778" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:35.588" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""captioning volunteers.""" start="00:03:38.480" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The captioned talks are indicated on the schedule,""" start="00:03:39.896" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and with any luck, we'll be posting""" start="00:03:42.523" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""videos and transcripts on talk pages""" start="00:03:44.313" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""shortly after the talks start.""" start="00:03:46.124" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you need additional accommodations, please let us know""" start="00:03:47.884" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""in #emacsconf-org and we'll see""" start="00:03:51.070" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""if we can make things happen.""" start="00:03:54.017" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""status.emacsconf.org""" start="00:03:55.238" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:03:55.238" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If it doesn't look like we've noticed yet,""" start="00:03:59.918" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:01.744" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""where we will be quietly panicking.""" start="00:04:05.263" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Guidelines for conduct""" start="00:04:07.282" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""In all of these conversations, please keep in mind""" start="00:04:07.282" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""our guidelines for conduct.""" start="00:04:09.705" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can find them on the wiki,""" start="00:04:11.239" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and they basically boil down to: please be nice. Thank you!""" start="00:04:12.620" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Videos""" start="00:04:16.020" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:16.020" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""should be available from the talk pages""" start="00:04:18.892" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""shortly after they start playing,""" start="00:04:20.538" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and we'll post the recordings of live talks""" start="00:04:22.039" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and Q&A sessions within the next few weeks.""" start="00:04:24.144" video="mainVideo-sat-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Let's get started!""" start="00:04:26.776" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""All right, let's get going.""" start="00:04:26.776" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You might see Leo Vivier, Corwin Brust,""" start="00:04:28.248" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and Amin Bandali hosting the various tracks.""" start="00:04:31.215" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""I will run around mostly backstage,""" start="00:04:33.954" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:04:35.768" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""That's also where we get to thank""" start="00:04:37.794" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""all the people and organizations""" start="00:04:39.244" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""who make EmacsConf possible.""" start="00:04:40.660" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Let's have fun at EmacsConf!""" start="00:04:42.550" video="mainVideo-sat-open" id="subtitle"]] + +</div> + +Captioner: sachac + +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/2025/info/sat-open-before.md b/2025/info/sat-open-before.md new file mode 100644 index 00000000..178d7516 --- /dev/null +++ b/2025/info/sat-open-before.md @@ -0,0 +1,34 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="sat-open"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect stroke-width="3" x="0" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 5-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-sat-open> +Etherpad: <https://pad.emacsconf.org/2025-sat-open> +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 mainVideo"><video controls preload="none" id="mainVideo-sat-open"><source src="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-sat-open--saturday-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="mainVideo-sat-open" data=""" +00:00.000 Tracks +00:16.000 Watching and participating +01:00.607 Other schedule formats +01:10.601 BigBlueButton +01:46.036 On and off the stream +02:03.217 Etherpad and IRC +02:25.456 Etherpad +02:59.440 IRC +03:32.778 Captions +03:55.238 status.emacsconf.org +04:07.282 Guidelines for conduct +04:16.020 Videos +04:26.776 Let's get started! + +"""]]<div></div>Duration: 04:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sat-open">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-sat-open">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (15MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/sat-open-nav.md b/2025/info/sat-open-nav.md new file mode 100644 index 00000000..00816f18 --- /dev/null +++ b/2025/info/sat-open-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Next by time: <a href="/2025/talks/org-babel">Making Org-Babel reactive</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/schemacs-after.md b/2025/info/schemacs-after.md new file mode 100644 index 00000000..595a5d18 --- /dev/null +++ b/2025/info/schemacs-after.md @@ -0,0 +1,411 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="schemacs-mainVideo-transcript"></a><h1>Transcript</h1> + +[[!template text="""Hi, EmacsConf 2025. My name is Ramin Honary,""" start="00:00:01.060" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and I'd like to talk to you today""" start="00:00:05.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""about my project called Schemacs""" start="00:00:07.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which I presented last year.""" start="00:00:10.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Back then it was called "Gypsum"""" start="00:00:12.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the name has since changed.""" start="00:00:13.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So my name is Ramin Honary.""" start="00:00:18.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm an Emacs enthusiast, have been since 2017 or so.""" start="00:00:20.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm a full stack software developer.""" start="00:00:25.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I love Haskell, Scheme,""" start="00:00:27.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""anything functional programming related,""" start="00:00:29.301" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and of course Emacs.""" start="00:00:31.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I started learning Scheme about three years ago,""" start="00:00:32.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and this is my third time presenting""" start="00:00:36.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""at EmacsConf.""" start="00:00:38.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So the Schemacs project that I'm talking to,""" start="00:00:40.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm talking about to you today,""" start="00:00:46.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""was originally called "Gypsum".""" start="00:00:48.160" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The reason I did not call it "Schemacs"""" start="00:00:50.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""was that the name "Schemacs" was taken on GitHub.""" start="00:00:53.360" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But in the past year,""" start="00:00:58.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I was able to get the permission""" start="00:00:59.568" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of the author of GitHub's Schemacs""" start="00:01:02.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""project to name my project the same thing,""" start="00:01:04.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""even though it's a very similar project.""" start="00:01:08.841" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I changed the name.""" start="00:01:11.321" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let me see if I can quickly show the screen.""" start="00:01:14.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So yeah, I have archived the old project.""" start="00:01:19.701" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's still there, but there's an explanation in""" start="00:01:24.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the readme file and a screen grab""" start="00:01:27.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of the conversation I had""" start="00:01:30.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""with the original author of GitHub Schemacs.""" start="00:01:31.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""My Schemacs is not on GitHub at all.""" start="00:01:36.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's only on Codeberg. So please don't get confused.""" start="00:01:38.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But yes, I received permission""" start="00:01:43.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to change the name and so I did.""" start="00:01:46.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I would like to give a quick shout-out to""" start="00:01:50.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""user "Tusharhero" for helping me with that.""" start="00:01:52.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This person really helped make that name change happen.""" start="00:01:57.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So back to the slides.""" start="00:02:02.640" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The scope of the project""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""And so now I'd like to clarify the scope of the project.""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I don't think I quite made it clear""" start="00:02:11.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""well enough last year,""" start="00:02:13.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but... Although I'm definitely cloning""" start="00:02:14.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Emacs Lisp programming language,""" start="00:02:18.401" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the actual scope of the Schemacs project""" start="00:02:20.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is to make an Emacs-like app platform for Scheme.""" start="00:02:25.268" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I don't consider Emacs to be a text editor.""" start="00:02:29.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I consider Emacs to be a Lisp app platform.""" start="00:02:32.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it's similar to something like the""" start="00:02:38.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""World Wide Web, or Microsoft's .NET app platform, or Java.""" start="00:02:39.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""These are all examples of app platforms.""" start="00:02:48.540" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I would like Schemacs to make it easy""" start="00:02:52.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for not only people to use it for""" start="00:02:55.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""things like editing text or, you know, for""" start="00:02:59.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""using your computer through a command line""" start="00:03:03.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or manipulating your Git repository.""" start="00:03:06.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd also like you to be able to create simple""" start="00:03:10.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""GUIs or TUIs using Scheme.""" start="00:03:13.160" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So that's also one of the goals of this project.""" start="00:03:16.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It will of course have an Emacs-like text editor,""" start="00:03:19.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and I will clone Emacs Lisp.""" start="00:03:23.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So hopefully GNU Emacs users""" start="00:03:25.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""will feel comfortable moving over to Schemacs""" start="00:03:29.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""because they'll be able to use your init.""" start="00:03:32.780" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You'll be able to use your init.el file.""" start="00:03:35.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So configuring and scripting Schemacs""" start="00:03:40.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""should be done in Scheme.""" start="00:03:43.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd like to encourage scripting in Scheme""" start="00:03:44.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and creating new workflows and macros in Scheme.""" start="00:03:47.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It will support Emacs Lisp depending on""" start="00:03:51.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""how much of the Emacs Lisp interpreter I can clone.""" start="00:03:54.268" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""That will be supported but not encouraged.""" start="00:03:59.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But you should still be able to run your init.el.""" start="00:04:03.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I would like it to be good enough,""" start="00:04:06.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""this Emacs Lisp interpreter""" start="00:04:08.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""should be good enough to run packages from ELPA.""" start="00:04:10.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Although it will probably be some time""" start="00:04:13.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""before it will be able to run""" start="00:04:15.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""something as large as Org Mode or Magit.""" start="00:04:17.560" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Difference with Robin Templeton's project (Guile-Emacs)""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""It is slightly different from the Guile-Emacs project.""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the work of Robin Templeton""" start="00:04:27.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""who presented last year.""" start="00:04:30.334" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Guile-Emacs links the Guile runtime""" start="00:04:32.220" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""into the Emacs executable.""" start="00:04:36.034" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's not a Scheme application. Emacs,""" start="00:04:38.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the core of Emacs is written in C.""" start="00:04:41.581" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Guile, the core of Guile is written in C.""" start="00:04:44.201" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""What Robin Templeton has done is, at the C level, linked""" start="00:04:48.121" video="mainVideo-schemacs" id="subtitle"]] +[[!template text=""""libguile.so" into Emacs and then provided""" start="00:04:53.701" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a programming layer where you can""" start="00:04:56.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""call the Scheme interpreter from Emacs Lisp""" start="00:04:59.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so that you can run Scheme programs from within Emacs""" start="00:05:04.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""without having to launch a separate process""" start="00:05:11.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and communicate over a channel such as a socket.""" start="00:05:13.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You won't need "SLIME" or anything.""" start="00:05:18.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The Guile interpreter is just right there inside of Emacs.""" start="00:05:19.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But my project is not like this at all.""" start="00:05:23.420" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Schemacs is written completely from the ground up""" start="00:05:26.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in R7RS-compliant Scheme. And because it's R7RS-compliant,""" start="00:05:28.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""it's not bound to any one particular Scheme implementation,""" start="00:05:35.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""although Guile is the reference implementation.""" start="00:05:38.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""One goal of this project is to be able to run""" start="00:05:39.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Schemacs on any R7RS-compliant Scheme implementation.""" start="00:05:42.360" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Progress made since last year""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The work that I've done this past year mostly is internal.""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There's not much that you can see on the surface.""" start="00:05:56.260" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But the most... One of the most important things that I""" start="00:06:00.940" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""did was I rewrote the parser in R7RS Scheme,""" start="00:06:04.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so it no longer depends on""" start="00:06:06.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Guile regular expressions library.""" start="00:06:07.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The parser now also provides source locations,""" start="00:06:12.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so if an error occurs in Emacs Lisp,""" start="00:06:14.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""there will be a stack trace""" start="00:06:18.940" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it will show you where in the source code""" start="00:06:20.568" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the error occured. This was not possible last year.""" start="00:06:23.634" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And because it no longer depends on Guile,""" start="00:06:28.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can make it work on multiple Scheme implementations.""" start="00:06:30.861" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So far, I've been able to get it to run on""" start="00:06:34.521" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Chibi Scheme interpreter""" start="00:06:36.821" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the Gauche Scheme interpreter, as well as""" start="00:06:38.921" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Guile, which is the reference implementation.""" start="00:06:41.281" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""For a short time, it did work also on Chez Scheme,""" start="00:06:44.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Chez Scheme compiler, using Gwen Weinholt's "Akku,"""" start="00:06:48.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which is a program that translates R7RS Scheme to R6RS Scheme.""" start="00:06:53.180" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And with that translation, because Chez Scheme""" start="00:06:59.300" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is pretty strictly an R6RS compiler,""" start="00:07:04.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the translation allows you to run R7RS programs.""" start="00:07:07.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But due to some change, I'm not sure where,""" start="00:07:11.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""it may have been changed in the Schemacs source code,""" start="00:07:15.220" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or it may have been a change to Akku,""" start="00:07:17.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but it no longer builds on Chez.""" start="00:07:19.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It did at one point. I'd like to try to fix that.""" start="00:07:21.240" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Portable React-like GUI""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The second most important thing that I've worked on is a""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""portable React-like GUI. And so React,""" start="00:07:30.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for anyone who has done web programming,""" start="00:07:36.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is a very popular framework for programming web applications.""" start="00:07:41.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I've provided something""" start="00:07:46.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""very similar to that in Scheme now.""" start="00:07:48.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it works. I have constructed a DOM data structure""" start="00:07:49.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in Scheme. It's just an ordinary Scheme data structure.""" start="00:07:54.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It works like the web's "Document Object Model"""" start="00:07:59.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or the "DOM" data structure.""" start="00:08:01.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And then this Scheme DOM data structure can be rendered""" start="00:08:03.961" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""using any GUI framework that is convenient""" start="00:08:10.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for the Scheme implementation that you're targeting.""" start="00:08:13.060" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And you should be able to implement""" start="00:08:16.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""also rendering to a CLI as well.""" start="00:08:18.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The current reference implementation""" start="00:08:22.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is using a framework called Guile-GI.""" start="00:08:24.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the "GObject Introspection" framework.""" start="00:08:27.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's a very simple""" start="00:08:30.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""GObject Introspection framework for Guile,""" start="00:08:31.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it binds to GTK3 on Linux.""" start="00:08:36.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There's a similar framework called G-Golf""" start="00:08:40.980" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which I'd like to begin using as well, also for Guile.""" start="00:08:42.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""G-Golf seems to be a bit more well-maintained, a bit...""" start="00:08:48.360" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It has better features. G-Golf may be a""" start="00:08:53.740" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""better rendering backend for the reference""" start="00:08:57.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""implementation, but I would like to provide both.""" start="00:09:00.040" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""I will give a demo of this now.""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Unfortunately not a whole lot""" start="00:09:07.934" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to see compared to last year.""" start="00:09:13.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""First thing I'd like to show is""" start="00:09:18.140" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I now have a Makefile. You can look inside""" start="00:09:20.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""this Makefile and if you're able to read a Makefile,""" start="00:09:24.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can see that I have several targets now available.""" start="00:09:28.401" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can build Schemacs for Guile,""" start="00:09:31.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can build Schemacs for Gambit,""" start="00:09:35.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or Stklos, or Chicken, or Chez,""" start="00:09:36.668" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""although none of these (except for Guile)""" start="00:09:40.334" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""currently works. These targets will actually""" start="00:09:42.901" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""build the source code, but then you would have to""" start="00:09:51.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""load it into the REPL separately.""" start="00:09:56.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There are targets for launching""" start="00:09:59.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a Gauche REPL and a Chibi REPL.""" start="00:10:02.468" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can also run the Emacs Lisp tests""" start="00:10:06.468" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in Gauche and Chibi.""" start="00:10:10.868" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can also start a Guile REPL through this Makefile.""" start="00:10:13.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I will do that right now in the shell.""" start="00:10:19.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(...make the text larger...there we go...)""" start="00:10:27.500" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""OK, so we have this directory of the source code.""" start="00:10:31.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let's just begin by running "guile.sh".""" start="00:10:38.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This will launch a REPL and you can load "main-guile".""" start="00:10:44.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This will launch the GUI. This is the basic""" start="00:10:52.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""proof of concept GUI that uses Guile-GI.""" start="00:10:59.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it may be hard to see.""" start="00:11:04.801" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I cannot change the size of the text yet.""" start="00:11:10.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I've implemented the M-: feature""" start="00:11:14.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where you can eval in a minibuffer some Scheme code.""" start="00:11:17.334" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(string-append "hello" ...)""" start="00:11:24.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It outputs the result in the buffer.""" start="00:11:34.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is basically the "\*Messages\*" buffer.""" start="00:11:38.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And that's all the more that I have.""" start="00:11:40.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the same state it was in last year.""" start="00:11:42.620" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It hasn't changed a whole lot since back then.""" start="00:11:45.480" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Additional changes""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""But I have made additional changes.""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So first of all, you can run""" start="00:11:52.820" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(let me just go back into the Guile)... you can""" start="00:12:05.380" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""run the Emacs Lisp interpreter tests, so "elisp-tests".""" start="00:12:10.201" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""As you can see, it gives you a stack trace.""" start="00:12:16.620" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So this is an error that I've been able to reproduce.""" start="00:12:18.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I know exactly what the cause of this error is.""" start="00:12:22.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It is not finding a variable""" start="00:12:24.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""because the closure is not correctly""" start="00:12:27.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""capturing its environment. So there should be a variable""" start="00:12:30.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in the closure, but that variable has not been captured""" start="00:12:35.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and so it is causing an error.""" start="00:12:38.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It is currently loading "byte-run.el".""" start="00:12:43.460" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let me show you what code that is here.""" start="00:12:48.081" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I've copied into the source repository""" start="00:12:49.821" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for Schemacs some of the Elisp code from GNU Emacs.""" start="00:12:53.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I have this "subr.el".""" start="00:12:58.761" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This declares most of the core of Emacs Lisp""" start="00:13:04.421" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that's not written in C.""" start="00:13:09.861" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There's also "byte-run.el". Schemacs Emacs Lisp can now""" start="00:13:12.861" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""evaluate this. This is where functions like "defun" are""" start="00:13:19.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""defined, and "defmacro". So as you can see,""" start="00:13:24.380" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""defun itself is a defmacro defined right here.""" start="00:13:28.360" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's written in Emacs Lisp itself,""" start="00:13:30.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""defined in terms of defalias.""" start="00:13:34.860" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I can evaluate "byte-run",""" start="00:13:37.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can evaluate "macroexp",""" start="00:13:40.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the failure occurs somewhere in "subr.el".""" start="00:13:42.740" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Although if you look at the stack trace,""" start="00:13:46.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""it doesn't provide all the necessary information.""" start="00:13:48.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it appears to be happening in byte-run.el.""" start="00:13:51.160" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Really, it's an error that's occurring inside of a macro,""" start="00:13:56.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the macro call site is somewhere in subr.el.""" start="00:14:00.620" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Anyway, take note of this stack trace.""" start="00:14:05.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This was run from within Guile.""" start="00:14:08.640" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Other Scheme implementations""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""Now what I've done this past year""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is make it work on other Scheme implementations.""" start="00:14:14.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Use "make" to launch a Gauche REPL.""" start="00:14:19.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Now I'm inside of Gauche.""" start="00:14:23.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the command that""" start="00:14:26.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you would use to launch a Gauche REPL.""" start="00:14:27.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I can load the same program (load "elisp-tests.scm").""" start="00:14:30.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You get the exact same result as Guile.""" start="00:14:38.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So we have two different Scheme implementations""" start="00:14:42.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""producing the same result.""" start="00:14:45.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let's try "make" a Chibi REPL. This is Chibi Scheme.""" start="00:14:46.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And you can (load "elisp-tests.scm").""" start="00:14:53.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Chibi is a bit slower, but you get the exact same result.""" start="00:15:00.220" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So we have three different Scheme implementations""" start="00:15:04.081" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""all running Emacs Lisp,""" start="00:15:07.401" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and all producing the same result.""" start="00:15:11.540" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I think that's...""" start="00:15:14.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm fairly proud of that accomplishment.""" start="00:15:14.768" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I was able to get the code written to the point""" start="00:15:17.100" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where it actually runs on multiple implementations.""" start="00:15:21.201" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can also try making it for other Scheme compilers""" start="00:15:24.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""like "schemacs-mitscheme" for example,""" start="00:15:30.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but this will fail.""" start="00:15:35.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can try building it for "schemacs-chez",""" start="00:15:40.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let's try Chez... there we go.""" start="00:15:46.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And it will use Akku,""" start="00:15:51.801" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it will fetch the necessary dependencies.""" start="00:15:54.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But it fails, and I haven't been able to""" start="00:15:58.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""debug that quite yet.""" start="00:16:03.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Stklos fails for a similar reason.""" start="00:16:05.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Gambit... Chicken still doesn't build all the way yet.""" start="00:16:13.140" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The Makefile at least has places for it.""" start="00:16:21.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""If anyone can help me out and get Schemacs to compile""" start="00:16:27.121" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""on these other Scheme implementations,""" start="00:16:30.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd appreciate it.""" start="00:16:32.734" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can probably figure it out myself,""" start="00:16:34.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but that will take more time.""" start="00:16:35.468" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And let me just show you quickly""" start="00:16:37.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the test program.""" start="00:16:40.121" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Basically this is the Emacs Lisp test program""" start="00:16:41.721" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I was just running, and it produces an error.""" start="00:16:44.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""All it does is it loads these files here in this order,""" start="00:16:48.581" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it fails right around here.""" start="00:16:53.221" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it's able to load these two.""" start="00:16:55.181" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And yeah, that's what I've accomplished""" start="00:16:58.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""on the Emacs Lisp side of things.""" start="00:17:01.361" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The next thing I want to show you is the GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I've written, which I'm fairly proud of so far.""" start="00:17:09.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So this is the GUI framework""" start="00:17:13.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(oops, I better launch it again, OK...)""" start="00:17:15.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and let me show you the tests.""" start="00:17:19.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So here in the tests, you can start to see""" start="00:17:22.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""some examples of how you use it.""" start="00:17:25.701" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So here is a "counter" test, and this is kind of like""" start="00:17:29.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the "hello world" of reactive programming frameworks,""" start="00:17:31.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where you have a state variable,""" start="00:17:35.941" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""sometimes called an "observable."""" start="00:17:38.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm calling it "number",""" start="00:17:41.660" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it uses "=" to check if the state has updated.""" start="00:17:43.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""If an update occurs and the new value is different""" start="00:17:49.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""from the old value according to the "=" function,""" start="00:17:52.821" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""then trigger a state update in the GUI as well.""" start="00:17:55.033" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Initialize to 0, bound to "number".""" start="00:17:59.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I have a "button" function which creates a simple button.""" start="00:18:03.100" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It takes a label and an action.""" start="00:18:06.133" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Right here you see the "div" command.""" start="00:18:07.833" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is what creates a "div".""" start="00:18:10.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Using the properties, I describe that this div is a""" start="00:18:13.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""push-button and the "on-button-push" is an action.""" start="00:18:19.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The action is to update the variable "number"""" start="00:18:22.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""using whatever function or lambda was provided to it.""" start="00:18:25.266" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And then the content that you see on screen,""" start="00:18:30.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that you will see on screen when it runs,""" start="00:18:31.966" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is here. You create a "div-pack cut-vertical".""" start="00:18:34.034" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You declare two buttons and then you declare""" start="00:18:38.668" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""this "use-vars" which will take the content""" start="00:18:43.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of this variable here, this observable,""" start="00:18:46.801" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and place it into the GUI next to the buttons here.""" start="00:18:48.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So what you will see on screen is""" start="00:18:51.734" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a "plus" button which increments,""" start="00:18:54.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""here is the "increment" function,""" start="00:18:57.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a "minus" button which decrements,""" start="00:18:59.321" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then the content of the variable that is""" start="00:19:02.780" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""being incremented and decremented.""" start="00:19:05.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The advantage of these reactive frameworks is that""" start="00:19:09.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""with very few lines of code""" start="00:19:11.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can create fairly complex interfaces.""" start="00:19:13.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The less code you have to write,""" start="00:19:16.033" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the fewer chances you have to make mistakes.""" start="00:19:18.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So let's just run this program.""" start="00:19:21.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This was the "counter-test."""" start="00:19:23.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And that is the debug window. Here's the "counter."""" start="00:19:33.293" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm sorry it's not much larger than this.""" start="00:19:35.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But here's the "plus" button, the "minus" button,""" start="00:19:38.453" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and here's the "number", 0.""" start="00:19:41.133" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I can increment or decrement as much as I like.""" start="00:19:43.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So yeah, that's kind of the hello world""" start="00:19:49.793" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of reactive programming. (I'll reboot the REPL...)""" start="00:19:51.101" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The next thing I want to show you is this layout test.""" start="00:19:55.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I'll just run the test first.""" start="00:19:58.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So here we have basically""" start="00:20:02.193" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a tiling window manager kind of thing,""" start="00:20:05.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where you can resize the tiles""" start="00:20:08.540" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then by clicking on these buttons here,""" start="00:20:11.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can change the layout.""" start="00:20:12.934" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So you can do two on the right,""" start="00:20:16.940" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""two up above, or three up above. So, yeah.""" start="00:20:20.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Those tiling windows, as you can see,""" start="00:20:27.101" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""once I work this branch into the main branch of Schemacs,""" start="00:20:30.268" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can use that to implement""" start="00:20:33.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the split window functionality for Schemacs,""" start="00:20:35.274" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the editor. So here's what this split...""" start="00:20:38.266" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Here's the layout test that you just saw.""" start="00:20:42.466" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let me make it a bit smaller""" start="00:20:44.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so that it all fits on one screen.""" start="00:20:46.733" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So basically we have the "button" command again,""" start="00:20:48.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then these are the button actions""" start="00:20:51.366" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which basically just changes the layout,""" start="00:20:54.133" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then I have the layout. So this layout is a "div."""" start="00:20:57.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The first div just places three buttons in a row.""" start="00:21:01.460" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The next layout is a div within a div.""" start="00:21:04.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So we have one div which places the button""" start="00:21:07.533" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""called "two right" buttons, and the div above it,""" start="00:21:13.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which places the "three in a row" button""" start="00:21:18.633" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or the "two above" buttons.""" start="00:21:21.493" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And here's the next... So there's three different""" start="00:21:22.661" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""layouts, and clicking on one of their associated buttons""" start="00:21:26.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""will just change the layout.""" start="00:21:30.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""As you can see, very little code""" start="00:21:32.101" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to create a somewhat complex user interface.""" start="00:21:33.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""That's the advantage of using reactive or declarative""" start="00:21:38.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""UI programming paradigms.""" start="00:21:42.868" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So yeah, this has not been merged into Schemacs""" start="00:21:44.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""at the time of this recording,""" start="00:21:47.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but will be soon hopefully.""" start="00:21:48.701" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""So yeah, I think I've already gone on for 20 minutes.""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I guess I'll just end my presentation here.""" start="00:21:55.166" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I have lots more to talk about.""" start="00:21:59.140" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I guess I will say one last thing before I go:""" start="00:22:00.466" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I would very much like for others""" start="00:22:03.980" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to try and contribute to this project.""" start="00:22:07.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I will do my best to try and help teach anybody""" start="00:22:09.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or work with anybody, especially even""" start="00:22:14.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""if you don't have much experience with Scheme.""" start="00:22:16.833" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd like to help everybody try to contribute.""" start="00:22:18.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Basically I want to get this proof of concept working.""" start="00:22:22.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I want to get a stable user interface up and running,""" start="00:22:26.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then we can start working on""" start="00:22:30.674" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""improving the Emacs Lisp interpreter all together.""" start="00:22:33.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There are close to 1,400 built-in functions""" start="00:22:36.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which need to be implemented.""" start="00:22:41.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""We don't need to get all of them""" start="00:22:43.660" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in order to be able to run probably most of ELPA,""" start="00:22:44.966" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but as much as possible.""" start="00:22:48.466" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""We would like to clone Emacs Lisp and I need help.""" start="00:22:50.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So get a hold of me. My project is on Codeberg.""" start="00:22:54.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Well, (oh, I can't show this here),""" start="00:23:02.580" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but I will end it there. Thank you for listening.""" start="00:23:06.920" video="mainVideo-schemacs" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20schemacs%3A%20One%20year%20progress%20update%20Schemacs%20%28formerly%20Gypsum%29) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/schemacs-before.md b/2025/info/schemacs-before.md new file mode 100644 index 00000000..acdbb81c --- /dev/null +++ b/2025/info/schemacs-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 Sat 2025-12-06. 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="schemacs"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect stroke-width="3" x="41" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 24-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-schemacs.html> Etherpad: <https://pad.emacsconf.org/2025-schemacs> +Etherpad: <https://pad.emacsconf.org/2025-schemacs> +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 mainVideo"><video controls preload="none" id="mainVideo-schemacs"><source src="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--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="mainVideo-schemacs" data=""" +02:07.200 The scope of the project +04:24.760 Difference with Robin Templeton's project (Guile-Emacs) +05:49.720 Progress made since last year +07:28.040 Portable React-like GUI +09:06.040 Demo +11:48.700 Additional changes +14:12.020 Other Scheme implementations +17:06.200 GUI framework +21:51.520 Wrapping up + +"""]]<div></div>Duration: 23:14 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-schemacs">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-schemacs.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://youtu.be/KmMeLfYn1xY">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/schemacs-nav.md b/2025/info/schemacs-nav.md new file mode 100644 index 00000000..9c4b7a69 --- /dev/null +++ b/2025/info/schemacs-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/org-babel">Making Org-Babel reactive</a> +Next by time: <a href="/2025/talks/reference">Emacs as a fully-fledged reference manager</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/sun-close-after.md b/2025/info/sun-close-after.md new file mode 100644 index 00000000..aebbe6f8 --- /dev/null +++ b/2025/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/2025/info/sun-close-before.md b/2025/info/sun-close-before.md new file mode 100644 index 00000000..8b7bc9c2 --- /dev/null +++ b/2025/info/sun-close-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="sun-close"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect stroke-width="3" x="549" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" 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/2025/current/bbb-sun-close.html> Etherpad: <https://pad.emacsconf.org/2025-sun-close> +Etherpad: <https://pad.emacsconf.org/2025-sun-close> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T20:40:00Z" end="2025-12-07T20:50:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~3:40 PM - 3:50 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~2:40 PM - 2:50 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~1:40 PM - 1:50 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~12:40 PM - 12:50 PM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~8:40 PM - 8:50 PM UTC <br />Sunday, Dec 7 2025, ~9:40 PM - 9:50 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~10:40 PM - 10:50 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~2:10 AM - 2:20 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~4:40 AM - 4:50 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~5:40 AM - 5:50 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sun-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-sun-close.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/sun-close-nav.md b/2025/info/sun-close-nav.md new file mode 100644 index 00000000..6c9590ba --- /dev/null +++ b/2025/info/sun-close-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/sun-open-after.md b/2025/info/sun-open-after.md new file mode 100644 index 00000000..d30936b4 --- /dev/null +++ b/2025/info/sun-open-after.md @@ -0,0 +1,143 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="sun-open-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Tracks""" start="00:00:00.000" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Welcome to EmacsConf, where we have fun""" start="00:00:00.000" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""exploring just how much we can do with a text editor.""" start="00:00:02.247" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""There's a General track and a Development track,""" start="00:00:05.485" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""but really, you'll probably find""" start="00:00:07.925" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""interesting things on both tracks""" start="00:00:09.484" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""no matter what your level of experience is,""" start="00:00:11.079" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so don't feel limited to one or the other.""" start="00:00:13.216" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Watching and participating""" start="00:00:16.000" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:16.000" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:19.393" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and I'll give you a quick overview as well.""" start="00:00:22.486" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:24.910" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""using free and open source software.""" start="00:00:28.885" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Using a streaming media player like mpv""" start="00:00:31.186" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:34.388" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""but there are also web-based players""" start="00:00:37.275" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""just in case that's all you've got.""" start="00:00:39.241" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The schedule shows the General track on top""" start="00:00:41.378" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and the Development track on the bottom,""" start="00:00:44.064" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so you can see what else is going on.""" start="00:00:45.603" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""As you're watching the talks,""" start="00:00:47.820" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""you can refer to the schedule in another window.""" start="00:00:49.819" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Hover over the boxes to see the times and titles,""" start="00:00:52.355" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and click on the boxes in the schedule""" start="00:00:55.601" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""to jump to the talk's page for more details.""" start="00:00:57.614" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Other schedule formats""" start="00:01:00.607" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:00.607" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""or as an Org file in different time zones.""" start="00:01:03.587" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The Org file has some links to talk resources""" start="00:01:05.621" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and might be handy as a starting point for your notes.""" start="00:01:08.255" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""BigBlueButton""" start="00:01:10.601" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Many talks will be followed by""" start="00:01:10.601" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:12.145" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:14.572" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:17.734" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:20.819" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can join the web conference room""" start="00:01:24.001" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""by clicking on the BBB link""" start="00:01:25.901" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:27.467" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:30.176" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""To improve performance, please keep your webcam off""" start="00:01:34.215" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:37.211" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you don't like Javascript,""" start="00:01:39.890" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""you can still ask questions via IRC""" start="00:01:41.692" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and the hosts can read them out for you.""" start="00:01:43.643" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""On and off the stream""" start="00:01:46.036" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""We're probably going to automatically switch""" start="00:01:46.036" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""between talks and Q&A sessions,""" start="00:01:47.895" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so the transitions on the stream might be a little sudden.""" start="00:01:49.483" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""People in the BigBlueButton room""" start="00:01:52.897" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""can continue the conversation""" start="00:01:54.439" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""even after the talk moves off-stream,""" start="00:01:55.862" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and you can also reach out to the speakers""" start="00:01:58.220" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""using the contact information on the talk page.""" start="00:02:00.271" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Etherpad and IRC""" start="00:02:03.217" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:02:03.217" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""depending on what the speakers prefer.""" start="00:02:06.302" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:08.542" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and on the schedule page as well.""" start="00:02:11.380" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The schedule pages have quick shortcuts so that you can""" start="00:02:13.510" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""find out more about talks, open the Etherpads,""" start="00:02:16.543" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and join the Q&A sessions.""" start="00:02:19.053" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The watch page has more tips""" start="00:02:21.204" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""on how to make the most of Q&A.""" start="00:02:23.366" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Etherpad""" start="00:02:25.456" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""If you can, please add notes and ask questions""" start="00:02:25.456" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""in the Etherpad for the talk.""" start="00:02:28.330" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""That makes it easier""" start="00:02:30.133" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""for everyone to share their notes,""" start="00:02:31.598" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:33.130" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:36.355" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""We have one pad for each talk,""" start="00:02:39.622" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so you can follow the links to get to the next one""" start="00:02:41.497" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:43.773" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you have general feedback about""" start="00:02:46.828" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""the conference itself, please put it in""" start="00:02:48.423" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""pad.emacsconf.org/emacsconf.""" start="00:02:50.668" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can also use this as a community message board""" start="00:02:54.593" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""for things like Help Wanted.""" start="00:02:57.550" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""IRC""" start="00:02:59.440" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:02:59.440" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""to be part of lots of conversations.""" start="00:03:02.800" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:05.176" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""through your web browser.""" start="00:03:09.451" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The tabs on the left can help you""" start="00:03:11.046" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""switch between the different channels.""" start="00:03:12.857" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:14.892" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:17.611" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:20.490" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:23.957" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:29.475" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Captions""" start="00:03:32.778" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:32.778" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:35.588" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""captioning volunteers.""" start="00:03:38.480" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The captioned talks are indicated on the schedule,""" start="00:03:39.896" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and with any luck, we'll be posting""" start="00:03:42.523" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""videos and transcripts on talk pages""" start="00:03:44.313" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""shortly after the talks start.""" start="00:03:46.124" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you need additional accommodations, please let us know""" start="00:03:47.884" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""in #emacsconf-org and we'll see""" start="00:03:51.070" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""if we can make things happen.""" start="00:03:54.017" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""status.emacsconf.org""" start="00:03:55.238" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:03:55.238" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If it doesn't look like we've noticed yet,""" start="00:03:59.918" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:01.744" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""where we will be quietly panicking.""" start="00:04:05.263" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Guidelines for conduct""" start="00:04:07.282" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""In all of these conversations, please keep in mind""" start="00:04:07.282" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""our guidelines for conduct.""" start="00:04:09.705" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can find them on the wiki,""" start="00:04:11.239" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and they basically boil down to: please be nice. Thank you!""" start="00:04:12.620" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Videos""" start="00:04:16.020" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:16.020" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""should be available from the talk pages""" start="00:04:18.892" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""shortly after they start playing,""" start="00:04:20.538" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and we'll post the recordings of live talks""" start="00:04:22.039" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and Q&A sessions within the next few weeks.""" start="00:04:24.144" video="mainVideo-sun-open" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Let's get started!""" start="00:04:26.776" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""All right, let's get going.""" start="00:04:26.776" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You might see Leo Vivier, Corwin Brust,""" start="00:04:28.248" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and Amin Bandali hosting the various tracks.""" start="00:04:31.215" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""I will run around mostly backstage,""" start="00:04:33.954" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:04:35.768" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""That's also where we get to thank""" start="00:04:37.794" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""all the people and organizations""" start="00:04:39.244" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""who make EmacsConf possible.""" start="00:04:40.660" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Let's have fun at EmacsConf!""" start="00:04:42.550" video="mainVideo-sun-open" id="subtitle"]] + +</div> + +Captioner: sachac + +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/2025/info/sun-open-before.md b/2025/info/sun-open-before.md new file mode 100644 index 00000000..288e7cf8 --- /dev/null +++ b/2025/info/sun-open-before.md @@ -0,0 +1,34 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="sun-open"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect stroke-width="3" x="0" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 5-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-sun-open> +Etherpad: <https://pad.emacsconf.org/2025-sun-open> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T14:00:00Z" end="2025-12-07T14:10:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~9:00 AM - 9:10 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~8:00 AM - 8:10 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~7:00 AM - 7:10 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~6:00 AM - 6:10 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~2:00 PM - 2:10 PM UTC <br />Sunday, Dec 7 2025, ~3:00 PM - 3:10 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~4:00 PM - 4:10 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~7:30 PM - 7:40 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~10:00 PM - 10:10 PM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~11:00 PM - 11:10 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sun-open"><source src="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-sun-open--sunday-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="mainVideo-sun-open" data=""" +00:00.000 Tracks +00:16.000 Watching and participating +01:00.607 Other schedule formats +01:10.601 BigBlueButton +01:46.036 On and off the stream +02:03.217 Etherpad and IRC +02:25.456 Etherpad +02:59.440 IRC +03:32.778 Captions +03:55.238 status.emacsconf.org +04:07.282 Guidelines for conduct +04:16.020 Videos +04:26.776 Let's get started! + +"""]]<div></div>Duration: 04:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sun-open">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-sun-open">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (15MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/sun-open-nav.md b/2025/info/sun-open-nav.md new file mode 100644 index 00000000..32ce1916 --- /dev/null +++ b/2025/info/sun-open-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/sat-close">Saturday closing remarks / open session</a> +Next by time: <a href="/2025/talks/modern">Some problems of modernizing Emacs</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/swanky-after.md b/2025/info/swanky-after.md new file mode 100644 index 00000000..53c84315 --- /dev/null +++ b/2025/info/swanky-after.md @@ -0,0 +1,387 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="swanky-mainVideo-transcript"></a><h1>Transcript</h1> + +[[!template text="""Hello everyone, I'm Scott""" start="00:00:00.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and I'll be talking about Swanky Python,""" start="00:00:02.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which is a development environment for Python""" start="00:00:04.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""based on Emacs' Slime package.""" start="00:00:06.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So what is that and why might you find it interesting?""" start="00:00:08.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""SLIME is the Superior Lisp Interaction Mode for Emacs.""" start="00:00:11.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""It's an Emacs package for developing Common Lisp,""" start="00:00:15.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and it's a bit different from the way we develop most languages""" start="00:00:18.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""in that you're always connected""" start="00:00:20.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""to a running instance of your application,""" start="00:00:22.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and you kind of build up your application, piece by piece,""" start="00:00:25.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""modifying one expression at a time""" start="00:00:27.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""without ever having to restart your application.""" start="00:00:30.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So why might you want to develop this way?""" start="00:00:34.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""One advantage is that you can get a faster feedback loop.""" start="00:00:36.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""For some kinds of software, it doesn't make a big difference.""" start="00:00:40.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Like, if you're developing a web backend""" start="00:00:42.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""where all state is stored externally in a database,""" start="00:00:43.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""then you can have a file watcher""" start="00:00:48.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that just restarts the whole Python process""" start="00:00:50.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""whenever you make any edit,""" start="00:00:52.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and you're not really losing anything,""" start="00:00:54.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""because all the state is stored outside the Python process""" start="00:00:56.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""in a database. So it works great.""" start="00:00:59.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But for other kinds of software, like""" start="00:01:01.720" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""let's say you're developing an Emacs package""" start="00:01:03.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""or a video game,""" start="00:01:05.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""then it can be a real pain to restart the application""" start="00:01:07.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and recreate the state it was in before""" start="00:01:10.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""just to test the effect of each edit you want to make.""" start="00:01:12.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Another advantage is the runtime introspection you have available.""" start="00:01:17.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So since you're always connected""" start="00:01:21.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""to a running instance of your application,""" start="00:01:22.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""you can inspect the values of variables,""" start="00:01:25.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""you can trace functions, and all sorts of other information""" start="00:01:27.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""to help you understand your application better.""" start="00:01:30.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""And lastly, it's just a lot of fun to develop this way,""" start="00:01:36.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""or at least I find it fun developing with SLIME,""" start="00:01:39.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""so I wrote a SLIME backend for Python""" start="00:01:43.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""so I could have more fun when I'm coding in Python.""" start="00:01:45.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""As for the name swanky-python, within SLIME,""" start="00:01:48.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""swank is the name of the Common Lisp backend""" start="00:01:52.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that runs within your Common Lisp application""" start="00:01:56.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and connects to Emacs. So I'm not too creative.""" start="00:01:59.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""swanky-python is just a swank implementation in Python.""" start="00:02:02.920" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:02:08.000" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""So let's see it in action. So we started up with M-x slime.""" start="00:02:08.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""And what that does is it starts a Python process,""" start="00:02:15.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""starts swanky-python within it, and connects to it from Emacs.""" start="00:02:19.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""And you can configure how exactly it runs Python.""" start="00:02:25.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Or you can start swanky python manually""" start="00:02:29.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""within a Python application running on a remote server""" start="00:02:32.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and forward the port locally""" start="00:02:35.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and connect to it in Emacs, from Emacs remotely.""" start="00:02:36.614" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Within the README, there's more documentation""" start="00:02:40.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""on other ways to start it.""" start="00:02:43.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But just M-x slime is the basic way that works most of the time.""" start="00:02:45.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So within the REPL, the first thing you'll notice is that""" start="00:02:52.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""REPL outputs are clickable buttons,""" start="00:02:55.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""what SLIME calls presentations.""" start="00:02:58.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So you can do things like inspect them.""" start="00:03:02.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""And for each presentation, in the Python backend,""" start="00:03:04.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it holds on to the reference to the object.""" start="00:03:09.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So for an int, it's not too interesting,""" start="00:03:12.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but let's do a more complex object like a file.""" start="00:03:14.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Then we can inspect the file.""" start="00:03:20.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can describe it, which will bring up documentation""" start="00:03:22.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""on that class. We can use it in further expressions""" start="00:03:26.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""like if we copy it, it will use the actual Python object""" start="00:03:33.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""in this expression.""" start="00:03:39.432" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can assign it to a variable.""" start="00:03:43.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""SLIME uses presentations everywhere""" start="00:03:48.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that a Python object would be displayed.""" start="00:03:51.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So instead of just their string representation,""" start="00:03:53.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""when you have a backtrace on an exception,""" start="00:03:56.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""or you... within the inspector or anywhere else really,""" start="00:04:00.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""anywhere that the string representation""" start="00:04:03.966" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""of an object would be displayed,""" start="00:04:06.020" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it displays a presentation that you can go on to""" start="00:04:07.941" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""inspect, reuse, or send to the REPL and so on.""" start="00:04:10.741" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""One useful utility function is pp for print presentation.""" start="00:04:14.961" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We haven't imported it yet.""" start="00:04:23.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So when we get a name error exception""" start="00:04:25.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and SLIME sees that that name is available for import somewhere,""" start="00:04:29.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it'll give us the option of importing it.""" start="00:04:33.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Since it's available for import from multiple modules,""" start="00:04:38.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it'll prompt us for which one we want to import it from.""" start="00:04:40.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We want to import it from swanky-python,""" start="00:04:43.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""not from the standard library.""" start="00:04:45.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Then it will print a presentation of that object.""" start="00:04:48.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Within the REPL, this is not really useful""" start="00:04:52.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""because all REPL outputs are already presentations.""" start="00:04:55.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But I use this now whenever I would use print debugging,""" start="00:04:58.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""just whenever I would use insert print statements in my program""" start="00:05:02.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""to see what's going on, I have it print a presentation""" start="00:05:05.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""because that way I can go back and inspect it later,""" start="00:05:08.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""copy it to the REPL and further manipulate it and so on.""" start="00:05:11.200" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Inspector""" start="00:05:16.600" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at the inspector more.""" start="00:05:16.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""If we go back and inspect the file object,""" start="00:05:20.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""you can write custom inspector views""" start="00:05:25.580" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""for different kinds of objects.""" start="00:05:27.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So far, I just have a couple. One for sequences,""" start="00:05:28.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""one for mappings, and one for every other kind of object.""" start="00:05:32.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Like if we inspect a mapping, there's a shortcut""" start="00:05:36.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""inspect last result, which is what I normally use""" start="00:05:45.980" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""to open the inspector. Then we see the values,""" start="00:05:48.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and each value in the inspector is a presentation""" start="00:05:52.380" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that we can go on to inspect, and so on.""" start="00:05:56.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Let's go back to inspecting the file object.""" start="00:05:58.420" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Again, we can inspect each of the values,""" start="00:06:03.980" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""we can copy them back to the REPL and so on.""" start="00:06:06.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""It just displays all the attributes for the class""" start="00:06:10.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and their values.""" start="00:06:13.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can configure what attributes we want to show.""" start="00:06:15.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""There's a transient menu where we can toggle""" start="00:06:18.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""if we want to show private attributes, dunder attributes,""" start="00:06:21.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""doc strings, so on, or everything,""" start="00:06:23.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which is a bit much to show by default.""" start="00:06:26.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So we'll reset it to the default.""" start="00:06:28.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""In the future, I want to add graphical inspector views""" start="00:06:33.720" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""for different kinds of objects, and also support""" start="00:06:37.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""showing plots in both the inspector and the REPL,""" start="00:06:40.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but that's future work I haven't started on yet.""" start="00:06:43.000" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Evaluating Python""" start="00:06:47.720" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Let's look at the different options for evaluating Python.""" start="00:06:47.720" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So we can evaluate a whole file.""" start="00:06:52.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can evaluate just a class.""" start="00:06:59.100" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can evaluate just the method we're working on.""" start="00:07:00.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can evaluate a Python statement,""" start="00:07:03.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and it will show the result in an overlay next to the cursor.""" start="00:07:06.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can select some code and just evaluate the highlighted region.""" start="00:07:11.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can sync the REPL to the active file.""" start="00:07:17.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So now everything we evaluate in the REPL will be in the""" start="00:07:24.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""context of the eval_demo module.""" start="00:07:27.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can also set the module that the REPL is in.""" start="00:07:29.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can go back to main.""" start="00:07:35.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But let's go back to the eval_demo module for now.""" start="00:07:38.280" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Updating""" start="00:07:43.680" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""One useful thing is when you update a class or a function,""" start="00:07:43.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it updates old instances of that class or function.""" start="00:07:49.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So right now, f.bar is foobar.""" start="00:07:54.540" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But if we edit that class, it will actually edit the code""" start="00:07:58.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""for the old instance of that class.""" start="00:08:03.720" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""And that's provided by code I copied""" start="00:08:05.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""from IPython's autoreload extension.""" start="00:08:07.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""It helps when you're trying to develop in Python""" start="00:08:12.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""without having to restart the Python process""" start="00:08:14.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""whenever you make a change.""" start="00:08:16.499" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Auto reload in Python is a big topic""" start="00:08:20.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that I don't really have time to go into here,""" start="00:08:22.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but right now it is more limited""" start="00:08:26.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""than what is done in Common Lisp.""" start="00:08:29.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Like for example, if you have a data class in Python""" start="00:08:32.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and you add a new field to the data class,""" start="00:08:35.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it won't automatically update old instances""" start="00:08:37.620" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""of the data class with a new field.""" start="00:08:41.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So there's more that needs to be done with that,""" start="00:08:43.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but I am perhaps naively optimistic""" start="00:08:46.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that Python's runtime is quite dynamic and flexible,""" start="00:08:50.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and that I can fully implement autoreload in Python,""" start="00:08:54.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but there's still work to be done,""" start="00:08:59.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and it's a big topic to go into.""" start="00:09:02.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Next up, let's look at the backtrace buffer.""" start="00:09:05.420" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But as it is right now, autoreload is actually useful.""" start="00:09:08.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""I mostly develop in Python without having to restart the process""" start="00:09:12.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and without running into issues from old state""" start="00:09:16.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that hasn't been updated properly.""" start="00:09:19.600" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Backtraces""" start="00:09:22.900" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""So if we go on to look at the backtrace buffer,""" start="00:09:22.900" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""whenever we get an exception in Python...""" start="00:09:26.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Let's go back to it.""" start="00:09:32.820" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Whenever we get an exception, it will...""" start="00:09:37.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""let's change the code so that it actually""" start="00:09:41.420" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""gets an exception...""" start="00:09:43.699" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""we will get an interactive backtrace buffer""" start="00:09:49.966" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""where we can browse the source code for the different stack frames""" start="00:09:52.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and the local variables within the stack frames,""" start="00:09:57.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which are all presentations that we can inspect and so on.""" start="00:10:00.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can also open a REPL in the context of any stack frame.""" start="00:10:04.340" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Or we can, when we go to the source for a given stack frame,""" start="00:10:10.620" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""we can select some Python code and evaluate it""" start="00:10:16.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""within the context of that stack frame.""" start="00:10:20.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""One major limitation compared to SLIME for Common Lisp""" start="00:10:25.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""is that in Common Lisp, you have the option to""" start="00:10:30.700" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""restart or resume execution from a given stack frame""" start="00:10:33.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""after an exception happens, where in Python,""" start="00:10:38.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""what we have right now is pretty much equivalent to""" start="00:10:42.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""the postmortem debugger.""" start="00:10:45.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""You can view the state that the call stack was in""" start="00:10:47.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""at the time of the exception,""" start="00:10:50.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but you can't actually resume execution,""" start="00:10:51.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which you often might want to do,""" start="00:10:55.660" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""because when you're coding in a dynamic language,""" start="00:10:57.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""you're going to get runtime errors.""" start="00:10:59.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So if you're writing a script that does like some sort of""" start="00:11:01.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""long-running computation or processes a ton of files""" start="00:11:04.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and gets an exception parsing one file halfway through,""" start="00:11:08.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""normally you'd have to fix the script, and then rerun it""" start="00:11:11.940" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and have it process all the same files all over again,""" start="00:11:16.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and lose a bunch of time for every bug you run into""" start="00:11:19.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and fix you have to make.""" start="00:11:23.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So right now we've got a kind of mediocre workaround""" start="00:11:24.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which is you can add the restart decorator to a function""" start="00:11:28.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and then... where in the case of a script""" start="00:11:34.020" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""processing a bunch of files,""" start="00:11:37.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""you would add the restart decorator to the function""" start="00:11:38.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that processes a single file.""" start="00:11:41.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""You'd add it to the function""" start="00:11:43.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that represents kind of the smallest unit of work""" start="00:11:45.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that might fail with an exception,""" start="00:11:47.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Then, when you get an exception,""" start="00:11:50.220" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""you can actually edit the function.""" start="00:11:54.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Like, if we edit it so it doesn't throw an error,""" start="00:11:57.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and then we can resume execution,""" start="00:12:01.020" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""then it will return from foo using the""" start="00:12:07.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""the new version of baz,""" start="00:12:12.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""without having to run the script from the beginning again.""" start="00:12:15.041" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So in the example of a script that processes a bunch of files,""" start="00:12:18.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that would let you,""" start="00:12:22.380" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""as you run into files that cause an exception,""" start="00:12:24.300" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""fix your code to deal with it""" start="00:12:27.620" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and resume execution without having to restart the script""" start="00:12:29.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""from the beginning.""" start="00:12:31.881" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But this is obviously a pretty terrible hack,""" start="00:12:33.081" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""having to add the restart decorator to the function.""" start="00:12:36.121" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""I would like it to be able to restart from any function.""" start="00:12:38.841" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""without needing the decorator, as you can in Common Lisp,""" start="00:12:46.740" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but I think that will require patching CPython""" start="00:12:49.632" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and I really have no idea how to do that.""" start="00:12:54.032" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So if you do know anything about CPython internals""" start="00:12:56.580" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and are interested in helping, please reach out.""" start="00:13:00.532" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""pydumpling""" start="00:13:03.721" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Another feature we have with the backtrace buffer is""" start="00:13:03.721" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""there's this library called PyDumpling""" start="00:13:07.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which can serialize a traceback and store it to a file.""" start="00:13:09.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So you can use PyDumpling with your applications running in""" start="00:13:14.660" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""production to serialize a traceback""" start="00:13:17.860" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""whenever they have an exception and save it to a file.""" start="00:13:21.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Then you can transfer the file locally""" start="00:13:24.900" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and load it into your local Emacs with slime-py-load-pydumpling.""" start="00:13:28.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""This will load the same backtrace buffer,""" start="00:13:38.860" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and you see all the same local variables""" start="00:13:41.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""at the time of the exception.""" start="00:13:44.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""You can inspect them and get a REPL""" start="00:13:45.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""in the context of the stack frame.""" start="00:13:48.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Well, this will only work for variables""" start="00:13:51.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that can be serialized with pickle.""" start="00:13:54.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Or actually, the library uses dill,""" start="00:13:57.620" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which can serialize a bit more than pickle can.""" start="00:13:59.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But yeah so this can help you inspect and debug errors""" start="00:14:03.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""for applications running in production remotely""" start="00:14:10.201" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that you don't want to have SLIME connected to 24-7.""" start="00:14:12.881" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Documentation browser""" start="00:14:20.060" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at the documentation browser.""" start="00:14:20.060" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can bring up documentation for any module,""" start="00:14:24.860" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and all this information is generated""" start="00:14:29.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""from runtime introspection,""" start="00:14:33.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""from the doc strings for the module""" start="00:14:35.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and the classes and so on.""" start="00:14:37.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So you won't see documentation for libraries""" start="00:14:39.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that you don't have actually loaded""" start="00:14:41.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""into your running Python process.""" start="00:14:43.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Then you can go browse to classes.""" start="00:14:45.940" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""It'll show all the attributes, their methods, and so on.""" start="00:14:50.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""By each method to the right, it will show""" start="00:14:54.720" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""the base class where the method was originally inherited from.""" start="00:14:57.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""You can also bring up a screen with all the Python packages""" start="00:15:02.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that are installed, and browse that with imenu,""" start="00:15:09.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and bring up information on any package and so on.""" start="00:15:14.440" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Thread view""" start="00:15:20.360" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's take a look at the thread view.""" start="00:15:20.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So let's run this and then bring up the thread view""" start="00:15:28.500" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and this will show information on all running threads.""" start="00:15:31.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""You can configure it to refresh after a given interval,""" start="00:15:35.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""like every second, but I don't have that set up right now,""" start="00:15:38.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""so I have to manually refresh it.""" start="00:15:41.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Probably the most useful thing is that""" start="00:15:45.660" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""you can bring up a backtrace for any thread""" start="00:15:47.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which won't pause the thread or anything,""" start="00:15:49.740" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but will just give you the call stack""" start="00:15:51.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""at the time you requested the backtrace.""" start="00:15:53.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""You can again view the stack frames, local variables,""" start="00:15:55.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""open a REPL in the context of the thread, and so on.""" start="00:15:59.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""There's also a viewer for async tasks,""" start="00:16:04.140" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but I'm not going to demo that right now,""" start="00:16:07.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""because for that to work, you have to start swanky-python""" start="00:16:10.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""after the async event loop has started,""" start="00:16:14.160" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""from within the same thread.""" start="00:16:16.600" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""If you go to the project readme,""" start="00:16:18.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""there's a demo of how to use the async task viewer""" start="00:16:20.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""with a fastapi project.""" start="00:16:23.920" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Tracing functions""" start="00:16:27.440" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at tracing functions.""" start="00:16:27.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So here we got some random error,""" start="00:16:33.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""because this is still very much a work in progress.""" start="00:16:36.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But it looks like it executed""" start="00:16:39.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""correctly this time.""" start="00:16:42.360" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So now let's mark the fibonacci function""" start="00:16:43.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""for tracing and execute it.""" start="00:16:47.566" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can see, every time the function is called,""" start="00:16:50.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""all its arguments and return values.""" start="00:16:56.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Again, there are presentations that we can inspect and so on.""" start="00:16:58.240" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But let's inspect a more complex object, like a file object.""" start="00:17:02.900" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""If we trace the count_lines function and run that code,""" start="00:17:06.080" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""then we can inspect the file it was passed, or the file object.""" start="00:17:11.340" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""One pitfall is that in Python, objects are mutable.""" start="00:17:15.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So in the trace buffer, the string representation""" start="00:17:21.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that's printed is the string representation""" start="00:17:25.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""at the time it was passed to the function.""" start="00:17:27.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But when we go to inspect it,""" start="00:17:31.220" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""we're inspecting the object as it is right now,""" start="00:17:32.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which can be different than it was at the time""" start="00:17:34.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""the function saw it. So for this file object, for example,""" start="00:17:37.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it's closed now, when it was open at the time""" start="00:17:41.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""the function used it.""" start="00:17:44.280" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""AI integrations""" start="00:17:47.800" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at AI integrations.""" start="00:17:47.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So if you're used to SLIME with Common Lisp,""" start="00:17:50.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Emacs actually has a built-in AI that can help with the transition.""" start="00:17:54.520" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So it's just a joke, I actually really like Python.""" start="00:18:09.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""And for more serious AI integrations,""" start="00:18:14.560" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""I have some ideas for the future""" start="00:18:18.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but I haven't implemented anything yet.""" start="00:18:19.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""I think right now, people are mostly passing source code to LLMs""" start="00:18:21.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""but since we're embedded in the Python process at runtime,""" start="00:18:27.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""we have a lot of more information available,""" start="00:18:32.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""like maybe we can trace all calls to functions,""" start="00:18:35.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and when we have a bug,""" start="00:18:39.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""we can feed the trace to the LLM,""" start="00:18:41.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and the LLM can point out maybe""" start="00:18:46.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""when this function was called with these arguments,""" start="00:18:48.720" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""its return value doesn't make sense,""" start="00:18:51.960" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""so maybe that's the root cause of your bug.""" start="00:18:53.880" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""If you have any ideas of potential LLM or AI integrations,""" start="00:18:55.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""let me know. I'm happy to discuss.""" start="00:19:02.360" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""LSP-type features""" start="00:19:06.000" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at standard LSP-type features.""" start="00:19:06.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So we've got completions. It's fuzzy completions right now,""" start="00:19:09.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""so it's showing everything with a PR in the name.""" start="00:19:14.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can bring up documentation for each one.""" start="00:19:16.320" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""When we start calling a method in the minibuffer at the bottom""" start="00:19:21.780" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""it'll show the signature.""" start="00:19:26.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""There's some refactoring available.""" start="00:19:28.860" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""We can extract a function or variable,""" start="00:19:33.720" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""or rename something,""" start="00:19:37.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""like, let's rename fib to fib2,""" start="00:19:39.500" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and it will rename all the uses of it.""" start="00:19:42.920" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""All these features are based on Jedi,""" start="00:19:47.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""which is the Python library used by IPython.""" start="00:19:49.760" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But as it is right now,""" start="00:19:55.400" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""if you want the most complete Python development experience""" start="00:19:57.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""in Emacs, I'd probably recommend using LSP""" start="00:20:02.040" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""for everything LSP can do, and then just using swanky-python""" start="00:20:05.580" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""for the object inspector and backtrace buffer,""" start="00:20:10.440" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and the interactive features it has""" start="00:20:13.680" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""that an LSP can't provide.""" start="00:20:15.360" video="mainVideo-swanky" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:20:18.032" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""And that's it really.""" start="00:20:18.032" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""Shortly we'll have questions and answers""" start="00:20:23.340" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""as part of EmacsConf, and later on,""" start="00:20:25.866" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""if you have any questions, ideas, or issues""" start="00:20:28.800" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""feel free to reach out over email""" start="00:20:31.200" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""or create an issue on the repository.""" start="00:20:34.640" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""I should probably warn you,""" start="00:20:38.000" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""if you want to try out the project:""" start="00:20:39.332" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""so far I'm probably the only user of it""" start="00:20:41.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""and I've only tested it on my own Emacs setup,""" start="00:20:45.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""so it's quite likely you'll run into issues""" start="00:20:48.280" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""trying to get it installed and working.""" start="00:20:50.840" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""But if you do run into problems, please reach out,""" start="00:20:53.480" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""let me know. I'm happy to help and try and fix them.""" start="00:20:56.120" video="mainVideo-swanky" id="subtitle"]] +[[!template text="""So that's it. Thanks for listening.""" start="00:20:59.280" video="mainVideo-swanky" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [sczi@disroot.org](mailto:sczi@disroot.org?subject=Comment%20for%20EmacsConf%202023%20swanky%3A%20Swanky%20Python%3A%20Interactive%20development%20for%20Python) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/swanky-before.md b/2025/info/swanky-before.md new file mode 100644 index 00000000..a374e6d9 --- /dev/null +++ b/2025/info/swanky-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2025-12-06. 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="swanky"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/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="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" 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)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect stroke-width="3" x="144" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 22-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 Etherpad: <https://pad.emacsconf.org/2025-swanky> +Etherpad: <https://pad.emacsconf.org/2025-swanky> +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 mainVideo"><video controls preload="none" id="mainVideo-swanky"><source src="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 21:03 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-swanky">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/fy0ofT1I54U">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/swanky-nav.md b/2025/info/swanky-nav.md new file mode 100644 index 00000000..710a4414 --- /dev/null +++ b/2025/info/swanky-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/juicemacs">Juicemacs: exploring speculative JIT compilation for ELisp in Java</a> +Next by time: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a> +Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong> +</div> diff --git a/2025/info/weights-after.md b/2025/info/weights-after.md new file mode 100644 index 00000000..d2f9ed7d --- /dev/null +++ b/2025/info/weights-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [zacromero@posteo.com](mailto:zacromero@posteo.com?subject=Comment%20for%20EmacsConf%202023%20weights%3A%20Weightlifting%20tracking%20with%20Emacs%20on%20Android) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/weights-before.md b/2025/info/weights-before.md new file mode 100644 index 00000000..134f24c3 --- /dev/null +++ b/2025/info/weights-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="weights"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect stroke-width="3" x="130" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" 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/2025/current/bbb-weights.html> Etherpad: <https://pad.emacsconf.org/2025-weights> +Etherpad: <https://pad.emacsconf.org/2025-weights> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T15:35:00Z" end="2025-12-07T15:45:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~10:35 AM - 10:45 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~9:35 AM - 9:45 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~8:35 AM - 8:45 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~7:35 AM - 7:45 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~3:35 PM - 3:45 PM UTC <br />Sunday, Dec 7 2025, ~4:35 PM - 4:45 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~5:35 PM - 5:45 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~9:05 PM - 9:15 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~11:35 PM - 11:45 PM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~12:35 AM - 12:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-weights">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-weights.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--intro.webm">Download --intro.webm</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/weights-nav.md b/2025/info/weights-nav.md new file mode 100644 index 00000000..3984baec --- /dev/null +++ b/2025/info/weights-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/reader">An introduction to the Emacs Reader</a> +Next by time: <a href="/2025/talks/completion">corfu+yasnippet: Easier than I thought</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/writing-after.md b/2025/info/writing-after.md new file mode 100644 index 00000000..f2f66379 --- /dev/null +++ b/2025/info/writing-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20writing%3A%20A%20writing%20day%20in%20the%20life%20with%20Org-Mode) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/writing-before.md b/2025/info/writing-before.md new file mode 100644 index 00000000..d9c35617 --- /dev/null +++ b/2025/info/writing-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 20-min talk cancelled +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/2025/info/writing-nav.md b/2025/info/writing-nav.md new file mode 100644 index 00000000..f413029d --- /dev/null +++ b/2025/info/writing-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a> +Next by time: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> diff --git a/2025/info/zettelkasten-after.md b/2025/info/zettelkasten-after.md new file mode 100644 index 00000000..d7556a30 --- /dev/null +++ b/2025/info/zettelkasten-after.md @@ -0,0 +1,516 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="zettelkasten-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.400" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Hello there, fellow basement dwellers.""" start="00:00:01.400" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I'm Christian and you are watching """" start="00:00:03.939" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Zettelkasten for Regular Emacs Hackers,"""" start="00:00:05.959" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""my Emacs Conference 2025 talk submission.""" start="00:00:08.520" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""In this presentation,""" start="00:00:12.921" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I'll be showing you a couple of things""" start="00:00:14.001" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""about Zettelkasten, very basic mechanics and habits""" start="00:00:15.701" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that you can pick up and implement in Emacs,""" start="00:00:18.702" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""the most malleable of all environments,""" start="00:00:21.623" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to make a thinking environment happen in your life""" start="00:00:24.443" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that stays with you potentially forever.""" start="00:00:27.824" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The subtitle "For Regular Emacs Hackers" implies at least""" start="00:00:32.435" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""the possibility of irregular Emacs hackers""" start="00:00:36.056" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and regular Emacs non-hackers, so the target audience here""" start="00:00:38.357" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""is people who are comfortable tweaking their setup""" start="00:00:42.499" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""when they run into issues and use Emacs to write,""" start="00:00:45.120" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""no matter if it's prose or code.""" start="00:00:47.981" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So that's regular Emacs hacking.""" start="00:00:49.981" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You don't need to be an irregular Emacs hacker,""" start="00:00:53.632" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for example, being a core maintainer or whatever.""" start="00:00:55.615" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You just need to be a normal user""" start="00:00:58.760" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""who also modifies the setup.""" start="00:01:01.244" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""However, you should probably not be an Emacs non-hacker.""" start="00:01:06.680" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Or maybe you shouldn't stay an Emacs non-hacker,""" start="00:01:10.302" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""someone who is not tweaking their setup ever.""" start="00:01:12.782" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So, if you just open your application""" start="00:01:16.003" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to write with a double click,""" start="00:01:18.821" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and it happens to be Emacs, this may not be for you,""" start="00:01:20.241" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but you ultimately be the judge there.""" start="00:01:23.284" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Advocating Freedoms""" start="00:01:25.534" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""It is my sacred duty to, of course,""" start="00:01:25.534" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""advocate all the essential freedoms during this presentation.""" start="00:01:28.745" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""These are the following.""" start="00:01:32.666" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You shall not be shackled by a proprietary tool.""" start="00:01:34.508" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""(You shall be shackled by Emacs. (Which is free software.))""" start="00:01:37.390" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You shall also not be shackled by an esoteric method""" start="00:01:40.792" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that turns out to be a grift""" start="00:01:44.115" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""where you need to visit annual workshops, walk on broken glass""" start="00:01:45.276" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and stuff to be a true ""knower"".""" start="00:01:47.898" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You shall be empowered to do great things""" start="00:01:50.400" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for the rest of your life after this session alone.""" start="00:01:52.881" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This is not a sales pitch.""" start="00:01:55.884" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Finally, you should also not be shackled""" start="00:01:58.871" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""by whichever sources of information you rely on in the future.""" start="00:02:00.652" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You shall be free to think and explore new ideas,""" start="00:02:05.040" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""ideally forever, in an environment you built to your liking,""" start="00:02:07.854" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""without the degrading web searches and the dead internet""" start="00:02:12.176" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""getting in your way. No libraries, no dead trees.""" start="00:02:15.797" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's you and your knowledge base""" start="00:02:18.858" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that can truly produce magnificent things.""" start="00:02:21.539" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What Is This About?""" start="00:02:29.680" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""So what is this about? In the teaser text for this session,""" start="00:02:29.680" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I brought up that when people talk about Emacs""" start="00:02:33.587" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""pulling in everything that people do on their computer,""" start="00:02:36.149" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""it's usually things they used other software for in the past.""" start="00:02:38.932" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Like email, chat, playing music, browsing the web,""" start="00:02:42.615" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""managing tasks, you know, stuff like that.""" start="00:02:46.058" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""We don't have a good blueprint for thinking environments though.""" start="00:02:48.820" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So it's not a trivial task,""" start="00:02:51.762" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""just port this or that to Emacs""" start="00:02:53.264" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then you'll be happy and productive.""" start="00:02:54.745" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's different from doing your emails""" start="00:02:56.706" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""or task management or writing in Emacs,""" start="00:02:58.200" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""where we have a lot of experience with existing software""" start="00:03:00.329" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to adapt and deviate from, where we can essentially""" start="00:03:02.951" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""port the task to Emacs. We can practice to think,""" start="00:03:06.414" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""purposefully and productively, on complex things""" start="00:03:09.856" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""over long periods of time""" start="00:03:12.999" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""when we create bespoke environments that help with that.""" start="00:03:14.460" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The first assumption is this:""" start="00:03:19.060" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Writing is very important to form complex thought.""" start="00:03:20.468" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Without writing, you won't be able to cross""" start="00:03:24.059" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""a certain complexity threshold.""" start="00:03:26.280" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Thinking in your head alone without any externalization""" start="00:03:28.761" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""makes you prone to loops, repetitions,""" start="00:03:31.922" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and worst of all: jumps.""" start="00:03:34.262" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Jumps that get you to a point,""" start="00:03:36.143" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but not backed by reason or argument.""" start="00:03:38.563" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So you and your future and others cannot follow.""" start="00:03:40.724" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Written words direct thought.""" start="00:03:46.502" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The linearization or sequence-making of thoughts""" start="00:03:48.363" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""frames your next idea. That's the same for reading,""" start="00:03:51.985" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""which enables you to pick up existing ideas""" start="00:03:55.307" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and continue to write about them later.""" start="00:03:57.308" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So for "good thinking", writing, reading,""" start="00:04:00.250" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and writing is mandatory.""" start="00:04:02.811" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Emacs is good at showing text to read.""" start="00:04:05.073" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's good at processing keyboard inputs to write.""" start="00:04:07.194" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So let's go. Let's set up an environment within Emacs""" start="00:04:09.635" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to make this thinking thing happen.""" start="00:04:13.177" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I'll walk you through some mechanics""" start="00:04:16.320" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""of the Zettelkasten machine and habits for you,""" start="00:04:18.060" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""dear thinker and regular Emacs hacker.""" start="00:04:20.882" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And for your reference, highlight these things""" start="00:04:22.901" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""as I present them in the bottom left corner of the screen.""" start="00:04:25.886" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So working with Zettelkasten as a thinking environment""" start="00:04:30.469" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""only requires very simple mechanics.""" start="00:04:33.191" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Write - Essential Mechanic""" start="00:04:36.534" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""First one is to write. I mentioned this.""" start="00:04:36.534" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It could be one large text file, could be many small ones.""" start="00:04:39.640" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""We use the power of Emacs and small files because Emacs is cool,""" start="00:04:42.489" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and individual files put boundaries around ideas""" start="00:04:46.360" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that force you to decide what goes where.""" start="00:04:49.355" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Most importantly though, write like you mean it.""" start="00:04:52.663" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The principle of "garbage in and garbage out" holds.""" start="00:04:55.687" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You don't need to use your novelist voice when taking notes,""" start="00:04:58.511" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but it also shouldn't be shorthand only,""" start="00:05:01.375" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""so that your future you has an easy time""" start="00:05:04.138" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""reading and digesting what you wrote.""" start="00:05:06.795" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Connect - Essential Mechanic""" start="00:05:09.601" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Next mechanic, which is also essential, is to connect.""" start="00:05:09.601" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""We think in associations.""" start="00:05:13.525" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Connect notes to capture the associations that come to mind""" start="00:05:15.000" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and that you want the reader, which is the future you,""" start="00:05:18.640" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to make. Traveling a path of connections""" start="00:05:20.917" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""indirectly via tags or keywords""" start="00:05:24.075" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and directly with links""" start="00:05:25.836" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""can feel like reading an essay you make up as you go.""" start="00:05:27.097" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's where connections show their power.""" start="00:05:30.721" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Correct - Essential Habit""" start="00:05:34.268" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""The next essential habit is to read and correct""" start="00:05:34.268" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and reconnect as you go.""" start="00:05:38.261" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You spend time and effort at the writing stage,""" start="00:05:40.181" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you are the primary audience,""" start="00:05:42.312" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""so do your past self a favor and read what you wrote.""" start="00:05:43.793" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And then as you read it, make it better.""" start="00:05:46.896" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Make it better, continuously make things better""" start="00:05:50.479" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and capture new ideas as they come up as you read.""" start="00:05:52.341" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And things you can only now remember""" start="00:05:55.223" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""because you learned about things in the meantime.""" start="00:05:57.785" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You'll also get better at this whole thing with practice.""" start="00:06:00.928" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So improve old notes when you find them lacking in detail,""" start="00:06:03.430" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""their tone pretentious, their mere existence""" start="00:06:05.867" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""an insult to your intelligence.""" start="00:06:08.576" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Pay [knocks on table] attention [knocks again]""" start="00:06:10.896" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to pain points in using notes.""" start="00:06:11.736" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Yes, I knocked on my desk to emphasize.""" start="00:06:13.640" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And fix things on the fly.""" start="00:06:16.560" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""From this principle follows""" start="00:06:18.602" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""a lot of common practices and tips.""" start="00:06:19.803" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This principle truly is essential.""" start="00:06:22.064" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Too long and you didn't read it?""" start="00:06:24.126" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Add a summary at the beginning.""" start="00:06:25.547" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You can't understand what you wrote a year ago?""" start="00:06:27.228" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Do your best to rewrite it in your own words.""" start="00:06:30.090" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It only gets worse if you wait longer.""" start="00:06:32.512" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Can't find anything in the mess?""" start="00:06:35.100" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Collect links to what you could find""" start="00:06:37.116" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""in a new "meta" note so next time,""" start="00:06:39.138" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you have a navigational help.""" start="00:06:41.660" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This practice will form the basis""" start="00:06:43.241" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for structure notes, maps, and overviews,""" start="00:06:44.862" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""which we will come to later.""" start="00:06:46.734" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Design for Use - Habit""" start="00:06:49.434" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""The next habit, non-essential though,""" start="00:06:49.434" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""is to create notes with intent to use them.""" start="00:06:52.072" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's one thing to write about facts, capture information,""" start="00:06:55.333" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but all this is just collecting stuff.""" start="00:06:58.134" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's another thing altogether to write about""" start="00:07:01.355" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""a train of thought, about an argument you found compelling,""" start="00:07:03.616" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""about a model to understand the world, or yourself,""" start="00:07:06.557" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""in a better way. So collect to remember,""" start="00:07:09.859" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but work in your Zettelkasten to think.""" start="00:07:12.900" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""What does that even mean, though?""" start="00:07:16.261" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Recreate how intriguing books""" start="00:07:18.222" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""lay out their premises and arguments, for example.""" start="00:07:19.823" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""First this, then that, also that supports the premise,""" start="00:07:21.804" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and so on. That's the structure of an argument.""" start="00:07:24.886" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You can recreate it in list form, as a graph,""" start="00:07:27.408" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you can draw and import the image, whatever.""" start="00:07:30.550" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The structure of that argument is one thing,""" start="00:07:33.501" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and the details, like the evidence for each claim,""" start="00:07:36.113" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""can be separate things.""" start="00:07:38.334" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""These can become their own sub-networks over time.""" start="00:07:40.000" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Create Structure - Mechanic""" start="00:07:43.920" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""To facilitate all that,""" start="00:07:43.920" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you will be needing to create structures.""" start="00:07:45.471" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You've connected notes, so links already leave trails""" start="00:07:47.932" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to traverse between your notes.""" start="00:07:50.613" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Structures can emerge from these with a sheer volume,""" start="00:07:52.520" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but they also can be designed by you to be""" start="00:07:55.930" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""navigational hubs of similar shape and form over time.""" start="00:07:58.617" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Patterns like that reduce confusion""" start="00:08:02.259" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and improve feeling at home""" start="00:08:04.241" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and finding your way around, so that's worth investing in.""" start="00:08:05.801" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""For example, use outlines for complex topics.""" start="00:08:09.223" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Tables of contents of a book, for example,""" start="00:08:13.405" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that you love and processed in great detail.""" start="00:08:15.248" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Just recreate the table of contents,""" start="00:08:17.320" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""the nested structure of it, in your notes,""" start="00:08:19.493" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then you have something to hang your future thoughts onto.""" start="00:08:23.038" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Another example is a pro/contra table or list""" start="00:08:28.197" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to discuss opposing facets and perspective of a thing.""" start="00:08:31.518" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Another example would be models or metaphors""" start="00:08:35.479" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""like the iceberg model""" start="00:08:37.831" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""where you point out something has a hidden depth to it""" start="00:08:39.061" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""or the metaphor of a tree to model a thing""" start="00:08:42.182" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""as a branching and growing idea.""" start="00:08:44.382" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Start in the Zettelkasten - Mechanic""" start="00:08:47.968" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Another habit which is also not essential""" start="00:08:47.968" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""is to start in your Zettelkasten.""" start="00:08:50.435" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Starting in your Zettelkasten removes the cost of deciding""" start="00:08:52.455" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""what goes in there and what doesn't.""" start="00:08:55.256" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It gets you moving and up to speed""" start="00:08:57.517" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""with the method and the tool much easier.""" start="00:08:59.637" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Importing stuff later into the Zettelkasten""" start="00:09:03.278" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""can feel like a chore,""" start="00:09:05.079" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but starting the work you need to do anyway in it?""" start="00:09:06.199" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That reduces the mental hurdle.""" start="00:09:09.260" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""As a regular Emacs hacker,""" start="00:09:11.561" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you'll eventually develop your own tools""" start="00:09:12.922" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to make initial exploration smoother over time,""" start="00:09:14.583" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""like do you start in a particular place""" start="00:09:17.304" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""or just create a new note from scratch somewhere.""" start="00:09:19.545" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You won't know this until you experience this stuff""" start="00:09:22.520" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for a while and try different things.""" start="00:09:25.027" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So don't worry and be open for change.""" start="00:09:26.868" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Start with a Link - Mechanic""" start="00:09:32.401" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""The final habit, also non-essential, is to start with a link""" start="00:09:32.401" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and not with the creation of a new file.""" start="00:09:36.370" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Start with a link, create the file later.""" start="00:09:38.452" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This avoids orphaned notes.""" start="00:09:40.513" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Orphaned notes are those no others are linking to.""" start="00:09:42.474" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""To these you can only get with a full-text search""" start="00:09:45.897" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""or maybe by accident when you browse your notes,""" start="00:09:48.458" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but there is no orderly way to get to them.""" start="00:09:51.300" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Recap""" start="00:09:54.568" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""To recap: Write. Don't be sloppy.""" start="00:09:54.568" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Put in effort early to get faster at this.""" start="00:09:58.534" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This is essential, because without putting effort""" start="00:10:00.601" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""into writing, you won't have anything to use.""" start="00:10:04.160" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Connect and leave trails to navigate.""" start="00:10:08.134" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That can tell a story when you traverse the trail later.""" start="00:10:10.501" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This is essential because without connection,""" start="00:10:13.620" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you will not get anywhere.""" start="00:10:16.541" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Correct and improve things as you go.""" start="00:10:18.601" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The last essential thing: well,""" start="00:10:20.301" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""don't worry about perfection, and then,""" start="00:10:21.840" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""be gentle to your past self.""" start="00:10:24.142" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Adapt to what you learn along the way.""" start="00:10:25.803" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's essential, because without this attitude,""" start="00:10:27.977" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you can easily get stuck in analysis paralysis,""" start="00:10:31.125" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""like where do I need to put this,""" start="00:10:33.746" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""or what would be the perfect way to phrase this.""" start="00:10:35.040" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Design for use. This helps both finding your voice,""" start="00:10:37.368" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and to have criteria for selecting""" start="00:10:40.734" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""what to spend time and effort on in the first place.""" start="00:10:42.820" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It takes into account the opportunity cost""" start="00:10:45.234" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""of high quality work from writing and connecting.""" start="00:10:47.350" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Create structures. You won't be able to scale""" start="00:10:50.251" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and stay organized and find your way around""" start="00:10:53.334" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""without structures. You can practice this early""" start="00:10:55.877" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and design structures deliberately,""" start="00:10:58.540" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but it's also okay to ignore this for a while and wing it.""" start="00:11:00.600" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So it's not marked essential,""" start="00:11:03.985" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""although it may hurt you sooner than later.""" start="00:11:05.747" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The habit to start in the Zettelkasten?""" start="00:11:08.940" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Well, do the work you need to do in a place""" start="00:11:10.892" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that can pay back dividends""" start="00:11:13.794" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""on the effort you put in.""" start="00:11:15.480" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's powerful, but also not essential.""" start="00:11:16.716" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You could just as well continue to write and think""" start="00:11:19.258" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and scribble somewhere else,""" start="00:11:21.620" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then do the Zettelkasten importing stuff later.""" start="00:11:23.461" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Start with a link.""" start="00:11:27.424" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's really useful practice,""" start="00:11:28.440" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but more like a lifehack and not an essential habit.""" start="00:11:30.246" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So you can also create new files from scratch""" start="00:11:33.207" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for ideas that come up as they come up""" start="00:11:35.348" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then try to connect them later.""" start="00:11:38.050" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Well, that's better than not writing at all, right?""" start="00:11:39.611" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So if you look at this, you may ask yourself,""" start="00:11:42.732" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""why is this create structure thing a mechanic and not a habit?""" start="00:11:44.748" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""What's the difference? It seems kind of random.""" start="00:11:48.320" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Well, do create structures as an imperative""" start="00:11:50.877" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""is a good habit, yes.""" start="00:11:53.919" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Structures facilitate growth of the Zettelkasten""" start="00:11:55.280" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and help you discover useful patterns""" start="00:11:57.982" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and the things you care about.""" start="00:11:59.563" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Patterns that work for you personally,""" start="00:12:00.680" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""which make navigation easier""" start="00:12:03.445" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""because they fit your personal expectations""" start="00:12:04.725" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for what is and what is not.""" start="00:12:07.606" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's something for you to do. That's a process.""" start="00:12:10.587" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""But from the perspective of the Zettelkasten as a system,""" start="00:12:13.848" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that's a mechanic or rather dynamic,""" start="00:12:18.149" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""the Zettelkasten grows organically.""" start="00:12:20.610" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Thanks to your constant intervention and usage of course.""" start="00:12:23.150" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's how time passes in your Zettelkasten.""" start="00:12:25.311" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's how a process of transformation enters the system.""" start="00:12:27.632" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The transformation affects the network.""" start="00:12:32.273" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Every new or updated note,""" start="00:12:34.801" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""every new connection changes the network.""" start="00:12:36.256" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The existing network then imposes demands""" start="00:12:38.558" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for new stuff to fit in, slowly solidifying""" start="00:12:40.719" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""how things are organized to be perceived as orderly.""" start="00:12:43.680" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This is calcifying.""" start="00:12:47.364" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's emergent creation of structure from use.""" start="00:12:49.085" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Structure here is expectation for what could come next.""" start="00:12:52.327" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""On top of this interplay of emergent structure""" start="00:12:56.269" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""in your notes and processes""" start="00:12:58.650" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that operate these constraints,""" start="00:13:00.191" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you can design and influence and architect""" start="00:13:01.872" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and have explicit structures and patterns,""" start="00:13:04.373" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and therefore you can influence what is expected,""" start="00:13:06.874" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""what is unexpected and what fits""" start="00:13:09.634" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and what needs to change to fit in.""" start="00:13:11.837" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So the time you spend designing these things""" start="00:13:14.258" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""will influence how the Zettelkasten""" start="00:13:18.140" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""will behave in the future.""" start="00:13:20.301" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Facilitate Growth""" start="00:13:22.034" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""To prepare for growth""" start="00:13:22.034" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you will probably encounter thresholds along your journey.""" start="00:13:24.062" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Like 1-10 notes, well,""" start="00:13:27.534" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you can easily remember all of them.""" start="00:13:29.268" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""10-100, you will have forgotten some details,""" start="00:13:31.301" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but will probably remember writing most of these notes""" start="00:13:34.334" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""in some way. 100-1000?""" start="00:13:37.068" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Bad luck, you will have a hard time going through everything""" start="00:13:40.240" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""one by one to find what you have. You will have to rely on""" start="00:13:42.920" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""filtering results. For example, with a full text search,""" start="00:13:46.440" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you will crave to use tags and keywords more""" start="00:13:50.088" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to group notes into more manageable departments or collections.""" start="00:13:53.493" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""By this mark, search results produce way too many results.""" start="00:14:02.040" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Popular tags become overcrowded,""" start="00:14:05.880" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and you have the same problem you had in the last stage,""" start="00:14:07.968" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but for each of these tags.""" start="00:14:10.070" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So manual structures will take you through this.""" start="00:14:12.520" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Anticipate growth pains by starting from structures.""" start="00:14:15.780" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's the recommendation here. Design your entry points""" start="00:14:18.920" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""into your current projects and research topics""" start="00:14:22.120" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and interests as 'departments' of your Zettelkasten.""" start="00:14:24.168" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Keep a list of, for example, 12 darlings,""" start="00:14:28.160" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""like Feynman did: a list of 12 things""" start="00:14:31.162" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that you can check mechanically""" start="00:14:34.125" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""where you capture something new,""" start="00:14:35.486" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then you can see whether the newfound knowledge""" start="00:14:36.927" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""can also push one of your darling projects forward.""" start="00:14:39.890" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Emacs demo""" start="00:14:46.140" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Now, finally, let's get to the demonstration in Emacs.""" start="00:14:46.140" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Here is a very minimal init file.""" start="00:14:50.223" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I will share it with you in the show notes.""" start="00:14:52.335" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And this is the Denote default configuration.""" start="00:14:55.739" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Here I'm using the shortcut to create a new note""" start="00:14:59.540" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""immediately for this talk. And there you see.""" start="00:15:02.440" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's an empty new note. Here,""" start="00:15:08.595" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""sped up like two or three times the normal typing speed of me,""" start="00:15:10.497" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""is how I would process this very Emacs conference talk.""" start="00:15:16.421" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The essential mechanics and habits, additional habits,""" start="00:15:21.786" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""mechanics, and then from there after I capture everything.""" start="00:15:25.669" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Make sure that I have a reference.""" start="00:15:30.112" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This is not a thought-out implementation in Emacs,""" start="00:15:32.054" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""so this is just plain text. Christian Tietze,""" start="00:15:36.137" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Zettelkasten for Regular Emacs Hackers at the bottom.""" start="00:15:39.040" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You can use reference management systems that you like,""" start="00:15:42.147" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but I don't want to get into these details.""" start="00:15:46.586" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Here I'm creating a note with the denote shortcut.""" start="00:15:49.234" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Based on the selected text,""" start="00:15:54.368" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I'm starting a link. This link is creating the note for me.""" start="00:15:56.400" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's also default Denote functionality""" start="00:16:01.100" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and garbage in garbage out.""" start="00:16:04.641" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I needed to edit the title because the selected text""" start="00:16:05.721" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""became the note title. Didn't want that.""" start="00:16:08.023" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That was the abbreviation.""" start="00:16:10.044" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Notice that the default configuration does not in fact""" start="00:16:13.336" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""include auto-fill-mode, so the lines get infinitely long.""" start="00:16:16.221" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Looks a bit weird. Just garbage in, garbage out.""" start="00:16:20.528" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Processing this from Wikipedia.""" start="00:16:23.654" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So we have a detail note from this overview.""" start="00:16:27.921" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So that's an overview with one link already.""" start="00:16:31.864" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Starting from here, now I want to write more about my talk.""" start="00:16:34.266" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And next we create structure, types of structures, etc.""" start="00:16:38.669" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It creates a weird link, but I can edit this easily""" start="00:16:43.773" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""thanks to Emacs being so nice to work with.""" start="00:16:46.836" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""A couple of examples. I mentioned some of these""" start="00:16:51.923" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""in previous minutes of this conference talk,""" start="00:16:55.324" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""like position pair, one note for the pair,""" start="00:16:58.605" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""one note per pro and contra, table of contents,""" start="00:17:00.585" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""like lists of things you like,""" start="00:17:03.922" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to talk about recreating a book's content,""" start="00:17:06.406" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""table of contents so you can process the book in detail,""" start="00:17:10.608" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""argument structures, I believe I mentioned these.""" start="00:17:14.309" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Look at this up if you're not into arguments,""" start="00:17:16.840" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but arguments are very well structured, usually.""" start="00:17:19.371" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""A table of things like two-dimensional table or grid.""" start="00:17:22.913" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Graphics. You can also include graphics, images,""" start="00:17:26.134" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then write about these. And then there are metaphors.""" start="00:17:28.335" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And into one metaphor that I'm presenting here,""" start="00:17:31.637" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""iceberg, black box, and then atom, molecule, and organism,""" start="00:17:33.798" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I want to get into this. Atom, molecule, organism.""" start="00:17:37.539" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's a composition and recursion""" start="00:17:40.401" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""because I have Big Ideas there. Atom, smallest part;""" start="00:17:43.924" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""molecule, comprised of atoms;""" start="00:17:47.800" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and organism is comprised of molecules.""" start="00:17:49.568" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Different level of analysis. Because this is irreducible.""" start="00:17:51.969" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""In fact, if you have no clue about reducibility,""" start="00:17:56.433" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""irreducibility -- that doesn't mean much to you? --""" start="00:17:59.155" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but look this up. You can go very deep""" start="00:18:02.197" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""with this kind of stuff. It's basically that if you""" start="00:18:05.979" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""decompose organs into atoms,""" start="00:18:10.618" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you cannot get back to the organs.""" start="00:18:12.523" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You just have a bunch of atoms. There's information loss,""" start="00:18:14.126" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""more or less.""" start="00:18:17.073" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Here you see that I create a new thing at the end""" start="00:18:19.880" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""so that I can write about Denote. The tool doesn't matter,""" start="00:18:24.247" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but when you use Emacs, use Denote because, well, why?""" start="00:18:26.950" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Let's get into this. Fix the link.""" start="00:18:31.835" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""These are good reasons to use Denote.""" start="00:18:35.458" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Denote is very simple. Denote has a couple of sane defaults.""" start="00:18:37.280" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That makes life easier. Backlinks.""" start="00:18:44.380" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""We will see a backlink view at the end.""" start="00:18:47.079" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I have to create a couple of things.""" start="00:18:51.141" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I'm copying the source code there, the Elisp source,""" start="00:18:52.398" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""so that you can see, hey, this is just an Org Mode file.""" start="00:18:55.965" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You can style it to your liking""" start="00:19:01.668" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then you can even execute the code if you want.""" start="00:19:03.630" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Very powerful. Create notes as links first to avoid orphans.""" start="00:19:06.752" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Forward link again.""" start="00:19:13.295" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""At least I wanted to create a forward link.""" start="00:19:14.676" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""I pressed the wrong shortcut.""" start="00:19:16.016" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""But anyway, I can fix this easily.""" start="00:19:17.037" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You see, there's no link. Dammit.""" start="00:19:19.738" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Now I need to create the link after the fact.""" start="00:19:23.480" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Here's a list of shortcuts. The denote keymap.""" start="00:19:26.762" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's a recommended practice by me,""" start="00:19:33.280" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""starting your note with a link.""" start="00:19:35.166" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You've heard this all just a couple of minutes ago.""" start="00:19:36.767" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It reduces orphans and supposedly teaches you""" start="00:19:40.640" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""about thinking in connections early.""" start="00:19:42.855" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""It's a good practice to practice.""" start="00:19:45.575" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""So with that note, trying to switch back.""" start="00:19:53.100" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Denote note switching, that wasn't as smooth,""" start="00:19:55.939" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""but inserting links is.""" start="00:20:00.120" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And there you go. Here's a backlink view. And that's it.""" start="00:20:01.320" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""In a somewhat self-documenting way,""" start="00:20:10.180" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""here you see a structure note""" start="00:20:12.652" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""which is an overview that represents the gist""" start="00:20:14.868" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""of this Emacs conference talk,""" start="00:20:17.683" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""with a couple of links to details.""" start="00:20:19.564" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""From these details, as you've seen,""" start="00:20:21.840" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""you can go into even more detail. That's all there is to it.""" start="00:20:24.108" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Repeat this for infinity,""" start="00:20:27.892" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and you get really really complex networks""" start="00:20:30.134" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and can do a lot of amazing things in parallel""" start="00:20:32.876" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""without interference.""" start="00:20:35.859" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Learn, Share, Grow""" start="00:20:39.068" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""I just want to stress that the Zettelkasten""" start="00:20:39.068" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""can help you to learn when you publish, when you share,""" start="00:20:42.440" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and when you grow it and yourself in the process.""" start="00:20:47.033" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Again, design the Zettelkasten to be used.""" start="00:20:51.182" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Publish something, write a blog, share stuff with co-workers.""" start="00:20:54.084" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That's powerful and that's so rewarding.""" start="00:20:58.160" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This can in turn influence how you do it""" start="00:21:00.486" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""the next time in your Zettelkasten,""" start="00:21:04.040" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""because now you can anticipate these kinds of arguments,""" start="00:21:06.034" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""maybe I can do this early on,""" start="00:21:09.381" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then you're prepared even more for the future""" start="00:21:11.980" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to share what you learn.""" start="00:21:15.134" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""You are also invited very warmly to our""" start="00:21:17.480" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""community of practice in the Zettelkasten forums.""" start="00:21:20.160" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Just share your journey, write about your projects,""" start="00:21:23.320" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""ask questions. Everyone's welcome, newbie to pro.""" start="00:21:26.156" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Just get in touch with people, talk about the processes,""" start="00:21:29.794" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""improve them, and eventually you'll figure out, well,""" start="00:21:32.675" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""reaching enlightenment in that regard may not be that hard after all,""" start="00:21:35.362" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and then you're fine and good to go for the next projects""" start="00:21:39.980" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that you tackle. Most importantly is to make this thing your own.""" start="00:21:42.954" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The Zettelkasten, the method, the environment.""" start="00:21:48.560" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Create a thinking environment for you.""" start="00:21:50.747" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Create your own tools to think with.""" start="00:21:53.475" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""This goes back to the meme of Shuhari,""" start="00:21:56.878" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""which is basically imitate and then deviate and innovate.""" start="00:21:59.379" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And this invitation here is to imitate what I just laid out.""" start="00:22:02.801" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Imitate for a couple of years. One, two, three years.""" start="00:22:07.124" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""The time goes by faster [snaps fingers] than you think.""" start="00:22:10.587" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And then figure out ways to deviate from the doctrine,""" start="00:22:12.928" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""to figure out ways to improve""" start="00:22:16.449" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and change the processes to fit you better.""" start="00:22:18.910" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""But you need to try to manifest""" start="00:22:22.031" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""the best practices in your life first,""" start="00:22:24.452" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for a while, to then figure out, well,""" start="00:22:26.653" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""they are not that best after all""" start="00:22:28.834" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and I need to change some of them.""" start="00:22:30.854" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""But you wouldn't know if you didn't try. So do try.""" start="00:22:33.055" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Yeah, and with that I want to thank you.""" start="00:22:37.065" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Thank you so much for watching. That's it.""" start="00:22:38.640" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""That was the conference talk,""" start="00:22:40.250" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""my short introduction to the Zettelkasten mechanics and habits.""" start="00:22:41.532" video="mainVideo-zettelkasten" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Outro""" start="00:22:45.297" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""I want to thank you so much for watching""" start="00:22:45.297" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and spending time with me on this topic,""" start="00:22:46.679" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""on these two topics actually,""" start="00:22:48.381" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""that are very near and dear to my heart.""" start="00:22:50.144" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Do share questions, ask questions in the etherpad.""" start="00:22:52.547" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""And if you watch this after the conference""" start="00:22:55.400" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""and all the live participation is long over,""" start="00:22:57.609" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""step into the forums and ask around there.""" start="00:23:01.191" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Thanks also to Sacha and team for organizing EmacsConf 2025,""" start="00:23:04.633" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""for having me. Well, I'm looking forward to hearing from""" start="00:23:09.235" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""every one of you. So that's it.""" start="00:23:11.596" video="mainVideo-zettelkasten" id="subtitle"]] +[[!template text="""Peace out and see you in the next one.""" start="00:23:14.257" video="mainVideo-zettelkasten" id="subtitle"]] + +</div> + +Captioner: sachac + +Questions or comments? Please e-mail [hi@christiantietze.de](mailto:hi@christiantietze.de?subject=Comment%20for%20EmacsConf%202023%20zettelkasten%3A%20Zettelkasten%20for%20regular%20Emacs%20hackers) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2025/info/zettelkasten-before.md b/2025/info/zettelkasten-before.md new file mode 100644 index 00000000..b9785474 --- /dev/null +++ b/2025/info/zettelkasten-before.md @@ -0,0 +1,36 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2025-12-07. 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="zettelkasten"> +<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/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.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" 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)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect stroke-width="3" x="329" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 24-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-zettelkasten.html> Etherpad: <https://pad.emacsconf.org/2025-zettelkasten> +Etherpad: <https://pad.emacsconf.org/2025-zettelkasten> +Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) +Status: Q&A open for participation +<div>Times in different time zones:</div><div class="times" start="2025-12-07T18:00:00Z" end="2025-12-07T18:25:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~1:00 PM - 1:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~12:00 PM - 12:25 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~11:00 AM - 11:25 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~10:00 AM - 10:25 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~6:00 PM - 6:25 PM UTC <br />Sunday, Dec 7 2025, ~7:00 PM - 7:25 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~8:00 PM - 8:25 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~11:30 PM - 11:55 PM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~2:00 AM - 2:25 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~3:00 AM - 3:25 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-zettelkasten"><source src="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--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="mainVideo-zettelkasten" data=""" +00:01.400 Introduction +01:25.534 Advocating Freedoms +02:29.680 What Is This About? +04:36.534 Write - Essential Mechanic +05:09.601 Connect - Essential Mechanic +05:34.268 Correct - Essential Habit +06:49.434 Design for Use - Habit +07:43.920 Create Structure - Mechanic +08:47.968 Start in the Zettelkasten - Mechanic +09:32.401 Start with a Link - Mechanic +09:54.568 Recap +13:22.034 Facilitate Growth +14:46.140 Emacs demo +20:39.068 Learn, Share, Grow +22:45.297 Outro + +"""]]<div></div>Duration: 23:18 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-zettelkasten">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-zettelkasten.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.webm">Download --main.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--script.org">Download --script.org</a></li><li><a href="https://youtu.be/wE8vCWyr1Eo">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/zettelkasten-nav.md b/2025/info/zettelkasten-nav.md new file mode 100644 index 00000000..900421db --- /dev/null +++ b/2025/info/zettelkasten-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2025/talks/completion">corfu+yasnippet: Easier than I thought</a> +Next by time: <a href="/2025/talks/hyperboleqa">Questions and answers to help you fly with Hyperbole</a> +Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong> +</div> |
