<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/assets/rss.xsl" type="text/xsl"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"

>
<channel>
	<title>Sacha Chua - category - geek</title>
	<atom:link href="https://sachachua.com/blog/category/geek/feed/index.xml" rel="self" type="application/rss+xml" />
	<atom:link href="https://sachachua.com/blog/category/geek" rel="alternate" type="text/html" />
	<link>https://sachachua.com/blog/category/geek/feed/index.xml</link>
	<description>Emacs, sketches, and life</description>
  
	<lastBuildDate>Thu, 29 Oct 2026 19:53:50 GMT</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>11ty</generator>
  <item>
		<title>Clip: Emacs voice control - describing my setup during Linkarzu's livestream</title>
		<link>https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Thu, 29 Oct 2026 19:53:50 GMT</pubDate>
    <category>emacs</category>
<category>speech</category>
<category>speech-recognition</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/</guid>
		<description><![CDATA[<div class="media-post" id="org8cb8551">
<p>
</p><div class="yt-video"><iframe width="456" height="315" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/Xk02luunlfc?enablejsapi=1" frameborder="0" allowfullscreen=""></iframe><a href="https://sachachua.com/blog/feed/Xk02luunlfc">Watch on YouTube</a></div>
<p></p>

<p>
linkarzu wins the clip-off thanks to his fancy AI-powered clipping process!
Here's a snippet from our conversation today.
He'll be posting more clips, and I'm also going to edit the transcript of the conversation.
Fun fun fun!
</p>

<p>
Additional notes:
</p>

<ul class="org-ul">
<li><a href="https://sachachua.com/dotemacs#navigation-substitution">Substitution</a>: I use <code>(add-hook 'substitute-post-replace-functions #'sacha-substitute-save-common-edits)</code> to save the changes. <a href="https://sachachua.com/dotemacs#navigation-substitution">sacha-substitute-save-common-edits</a>
<a href="https://sachachua.com/dotemacs#edit-text">Edit text</a> has functions like <code>sacha-subed-fix-common-errors-in-text</code> that apply those changes to my speech recognition results and <code>sacha-subed-fix-common-errors-from-start</code> that apply them to already-prepared transcripts.</li>

<li><a href="https://github.com/sachac/whisper.el/">sachac/whisper.el</a> has my fork of <a href="https://github.com/natrys/whisper.el">natrys/whisper.el</a> to support voice commands. <a href="https://codeberg.org/sachac/speech-input">speech-input</a> has a bunch of other things, too, and of course <a href="https://sachachua.com/dotemacs/">my Emacs config</a>.</li>

<li>I've been using <a href="https://github.com/ErikPrantare/phony.el">phony</a> to define more voice commands using a parser.</li>

<li>Apparently I cannot spell when thinking out loud. It is <a href="https://www.orgzlyrevived.com/">Orgzly Revived</a>, not ogrzly.</li>

<li>This actually doesn't use generative AI in the sense of Gemini or Claude, except for the conversational French demo. I use a local speech recognition model (currently <a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/emacsconf-subed.el">Orukeet</a>) and local speech synthesis (<a href="https://github.com/remsky/Kokoro-FastAPI">Kokoro FastAPI</a>), So depending on your feelings about large language models, the models might be small enough to be fine with you. Alternatively, there are classical approaches to both speech recognition and speech synthesis like <a href="https://kaldi-asr.org/">kaldi</a> and <a href="https://github.com/espeak-ng/espeak-ng">espeak-ng</a>.</li>
</ul>

<details class="code-details"><summary>Transcript and screenshots</summary>
<p>
</p><div class="full-transcript"><p></p><div class="transcript-heading"><span class="audio-time" data-start="0.000000">0:00</span> <strong>Voice commands that mishear</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="0.000000" data-stop="0.888000"><strong class="speaker-name">Sacha:</strong>  It turns out I cannot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="0.948000" data-stop="3.229000">say start streaming reliably. Sometimes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3.289000" data-stop="4.599000">I say start screaming.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="4.600000" data-stop="6.218000"><strong class="speaker-name">Linkarzu:</strong>  Or like if I say Neovim,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="6.838000" data-stop="7.819000">it doesn't get it. It</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="7.839000" data-stop="9.559000">says "New of him".</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="9.952000" data-stop="10.553000">I want to take a</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="10.593000" data-stop="11.374000">look at what you were</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="11.414000" data-stop="12.276000">sharing a moment ago.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="14.579000" data-stop="16.121000">The speech to text,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="16.542000" data-stop="18.985000">and it happens in real time, right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="18.986000" data-stop="20.287000"><strong class="speaker-name">Sacha:</strong>  Oh yeah, yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="20.000000">0:20</span> <strong>How the live transcript works</strong></div><p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="20.499000" data-stop="21.880000"><strong class="speaker-name">Linkarzu:</strong>  But I don't do stuff</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="22.020000" data-stop="23.141000">real-time the way that</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="23.161000" data-stop="24.263000">you're doing right now.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="24.264000" data-stop="25.696000">The transcription happens</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="25.697000" data-stop="27.161000">when we're done with the call</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="27.162000" data-stop="29.344000">and the process starts automatically.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="30.005000" data-stop="31.446000">And a few hours after,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="31.586000" data-stop="32.506000">I have the clips in</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="32.526000" data-stop="33.727000">my dashboard that I can</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="33.847000" data-stop="35.448000">upload if I want, right?</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="35.468000" data-stop="37.489000">But it's not real-time and</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="37.509000" data-stop="39.170000">I'm like, oh, and I saw</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="39.851000" data-stop="40.911000">how you did it on</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="40.951000" data-stop="41.892000">your side and it's pretty</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="42.152000" data-stop="43.133000">accurate. Like,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="43.773000" data-stop="44.613000">what's the magic?</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="44.994000" data-stop="45.994000">What are you doing there?</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="46.375000" data-stop="47.315000">You're sending it</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="47.675000" data-stop="48.882000">somewhere, right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="48.883000" data-stop="50.758000"><strong class="speaker-name">Sacha:</strong>  No, this is an entirely local</span> <span class="audio-time caption" data-speaker="Sacha" data-start="50.818000" data-stop="51.999000">model and I'm running</span> <span class="audio-time caption" data-speaker="Sacha" data-start="52.740000" data-stop="53.701000">it in a computer with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="53.761000" data-stop="55.323000">hardly any GPU. So I'm</span> <span class="audio-time caption" data-speaker="Sacha" data-start="55.363000" data-stop="56.324000">actually just making it use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="56.404000" data-stop="57.285000">CPU only</span> <span class="audio-time caption" data-speaker="Sacha" data-start="58.226000" data-stop="59.868000">for the speech recognition because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="59.888000" data-stop="62.531000">I have a Lenovo P52 from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="62.571000" data-stop="63.091000">2018, I think.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="64.773000" data-stop="65.734000">So it doesn't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="66.455000" data-stop="67.798000">do this GPU thing very well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="67.799000" data-stop="68.817000">I think you're usually</span> <span class="audio-time caption" data-speaker="Sacha" data-start="68.857000" data-stop="70.738000">On a Mac, so you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="70.798000" data-stop="71.899000">spoiled for choices there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="72.320000" data-stop="73.861000">But speech recognition has gotten</span> <span class="audio-time caption" data-speaker="Sacha" data-start="74.021000" data-stop="75.442000">really good over the last</span> <span class="audio-time caption" data-speaker="Sacha" data-start="75.483000" data-stop="76.103000">few years.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="76.583000" data-stop="78.025000">I'm using Orukeet at</span> <span class="audio-time caption" data-speaker="Sacha" data-start="78.065000" data-stop="78.545000">the moment.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="78.546000" data-stop="79.727000">It's a multilingual model,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="79.728000" data-stop="80.667000">so it can handle my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="81.027000" data-stop="82.529000">poor French pronunciations</span> <span class="audio-time caption" data-speaker="Sacha" data-start="83.369000" data-stop="84.470000">just as fine as my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="84.510000" data-stop="85.031000">English ones.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="85.791000" data-stop="86.732000">I can press my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="87.033000" data-stop="87.882000">keyboard shortcut.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="87.883000" data-stop="88.554000">For example,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="88.594000" data-stop="89.114000">I can say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="90.015000" data-stop="90.896000">this is a test during</span> <span class="audio-time caption" data-speaker="Sacha" data-start="90.916000" data-stop="91.877000">a chat with linkarzu.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="93.612000" data-stop="94.974000">And then, because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="94.975000" data-stop="97.094000">I've modified my dictionary,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="97.114000" data-stop="99.375000">your channel name actually shows</span> <span class="audio-time caption" data-speaker="Sacha" data-start="99.455000" data-stop="101.496000">up properly. Oh, okay. Okay,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="101.516000" data-stop="103.417000">okay, okay. We are talking</span> <span class="audio-time caption" data-speaker="Sacha" data-start="103.497000" data-stop="105.786000">about speech-to-text, dictation,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="105.787000" data-stop="105.814000">all sorts of other things like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="105.815000" data-stop="109.080000">Oh, where's my phone?</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="111.601000" data-stop="113.403000"><strong class="speaker-name">Linkarzu:</strong>  Okay, yeah, so it just</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="113.423000" data-stop="113.715000">puts it in.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="113.716000" data-stop="114.424000">It's pretty accurate.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="114.805000" data-stop="116.293000">It's extremely accurate.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="116.294000" data-stop="117.187000">What's the name</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="117.228000" data-stop="118.849000">you said? Because I use</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="118.889000" data-stop="120.751000">Wispr Flow, a local model as</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="120.791000" data-stop="122.213000">well. I do the transcript</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="122.253000" data-stop="124.135000">locally on my Mac. Wispr Flow</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="124.255000" data-stop="125.417000">is what the AI decided</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="125.437000" data-stop="126.157000">to use and I'm like,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="126.578000" data-stop="129.581000">oh, it gets it, but not...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="130.562000" data-stop="131.823000"><strong class="speaker-name">Sacha:</strong>  Yeah, the model I'm currently</span> <span class="audio-time caption" data-speaker="Sacha" data-start="131.923000" data-stop="133.923000">using is called Orukeet.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="135.784000" data-stop="136.865000">I think it's based on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="136.945000" data-stop="138.985000">Parakeet, but it's been tweaked</span> <span class="audio-time caption" data-speaker="Sacha" data-start="139.026000" data-stop="140.206000">for more performance</span> <span class="audio-time caption" data-speaker="Sacha" data-start="140.686000" data-stop="141.466000">and less memory.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="141.760000" data-stop="142.640000">But there are so many</span> <span class="audio-time caption" data-speaker="Sacha" data-start="142.820000" data-stop="143.928000">new models coming out.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="143.929000" data-stop="145.347000">It's really quite interesting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="145.348000" data-stop="147.042000">because every day or every other day,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="147.062000" data-stop="148.122000">there's like, oh, try this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="148.182000" data-stop="149.203000">new model.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="149.683000" data-stop="151.984000">I'm not good enough to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="152.025000" data-stop="152.745000">keep on top of all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="152.785000" data-stop="153.806000">those changes. If I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="153.846000" data-stop="154.906000">manage to get the AI</span> <span class="audio-time caption" data-speaker="Sacha" data-start="154.946000" data-stop="155.647000">to generate me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="156.027000" data-stop="157.068000">a server that has an</span> <span class="audio-time caption" data-speaker="Sacha" data-start="157.188000" data-stop="158.428000">OpenAI interface, I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="158.468000" data-stop="159.609000">can plop it right into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="159.649000" data-stop="160.470000">my Emacs setup</span> <span class="audio-time caption" data-speaker="Sacha" data-start="160.870000" data-stop="161.930000">and it will just work.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="162.151000" data-stop="163.231000">So I'm happy with that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="163.972000" data-stop="165.921000">And this is fast enough</span> <span class="audio-time caption" data-speaker="Sacha" data-start="165.922000" data-stop="167.374000">that I can use it to think</span> <span class="audio-time caption" data-speaker="Sacha" data-start="167.854000" data-stop="168.694000">and then when I have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="168.714000" data-stop="169.255000">the text,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="169.635000" data-stop="171.096000">I can rearrange it however</span> <span class="audio-time caption" data-speaker="Sacha" data-start="171.176000" data-stop="171.636000">I'd like.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="172.000000">2:52</span> <strong>Playing with voice commands</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="172.036000" data-stop="172.897000"><strong class="speaker-name">Sacha:</strong> So for example,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="173.357000" data-stop="174.398000">"prepare to fast forward."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="176.625000" data-stop="177.305000">We're here.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="177.665000" data-stop="178.785000"><strong class="speaker-name">Linkarzu:</strong>  I have a similar command.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="179.053000" data-stop="179.687000">Let me see if it</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="179.707000" data-stop="180.347000">works. Hold on.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="181.007000" data-stop="183.528000">You see my terminal right now, right?</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="185.688000" data-stop="186.368000">Yes. I don't know if</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="186.408000" data-stop="187.168000">you can see my screen.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="187.396000" data-stop="188.396000">Virgin mode off.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="189.436000" data-stop="191.197000"><strong class="speaker-name">Sacha:</strong>  Mm hmm. Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="191.297000" data-stop="191.777000">I saw that.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="191.815000" data-stop="192.433000"><strong class="speaker-name">Linkarzu:</strong>  It didn't work.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="193.213000" data-stop="196.854000">But it changes my wallpaper and</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="196.914000" data-stop="197.874000">it changes my...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="199.343000" data-stop="200.304000"><strong class="speaker-name">Sacha:</strong>  I have one too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="200.704000" data-stop="201.084000">Laser.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="201.610000" data-stop="202.430000">Look, I changed</span> <span class="audio-time caption" data-speaker="Sacha" data-start="202.450000" data-stop="203.471000">my cursor to a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="203.511000" data-stop="204.792000">laser so I can say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="204.852000" data-stop="205.892000">here's my mouse</span> <span class="audio-time caption" data-speaker="Sacha" data-start="205.932000" data-stop="206.573000">cursor, right?</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="206.953000" data-stop="209.855000"><strong class="speaker-name">Linkarzu:</strong>  Okay. Pretty cool.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="211.344000" data-stop="212.384000"><strong class="speaker-name">Sacha:</strong>  Yeah, so the nice thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="212.424000" data-stop="212.805000">about it...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="213.265000" data-stop="214.185000">Oh, it's still listening.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="214.206000" data-stop="216.567000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="217.208000" data-stop="217.948000">Let me just turn off</span> <span class="audio-time caption" data-speaker="Sacha" data-start="217.988000" data-stop="218.909000">laser mode here. Oh,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="219.489000" data-stop="219.929000">ah!</span> <span class="audio-time caption" data-speaker="Sacha" data-start="220.850000" data-stop="222.717000">Laser. Laser. Laser.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="223.816000" data-stop="224.657000"><strong class="speaker-name">Linkarzu:</strong>  It happens to me as</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="224.697000" data-stop="225.170000">well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="225.171000" data-stop="228.580000"><strong class="speaker-name">Sacha:</strong>  Edit, retry. Laser.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="229.601000" data-stop="230.602000">Yeah, okay, there you go.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="231.000000">3:51</span> <strong>Speech commands enable more shortcuts</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="231.463000" data-stop="232.844000"><strong class="speaker-name">Sacha:</strong> The nice thing about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="232.904000" data-stop="234.486000">speech commands is that it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="234.606000" data-stop="235.887000">opens up a whole lot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="235.927000" data-stop="237.609000">of other ways to run</span> <span class="audio-time caption" data-speaker="Sacha" data-start="237.669000" data-stop="239.450000">commands without necessarily having to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="239.511000" data-stop="240.832000">memorize keyboard shortcuts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="241.232000" data-stop="241.993000">And you can have more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="242.093000" data-stop="242.914000">fun with it too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="243.274000" data-stop="244.475000">So for example, now I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="244.515000" data-stop="245.196000">have this command.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="246.817000" data-stop="247.717000">It turns out I cannot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="247.777000" data-stop="250.058000">say "start streaming" reliably. Sometimes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="250.118000" data-stop="252.198000">I say start screaming. Or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="252.238000" data-stop="253.099000">at least that's... Well,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="253.459000" data-stop="254.539000">I know sometimes I accidentally</span> <span class="audio-time caption" data-speaker="Sacha" data-start="254.579000" data-stop="255.559000">say that and sometimes that's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="255.599000" data-stop="257.380000">what the speech recognition hears.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="257.740000" data-stop="258.940000">So instead, my command for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="259.000000" data-stop="260.160000">starting this stream,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="260.680000" data-stop="262.341000">because of course Emacs controls</span> <span class="audio-time caption" data-speaker="Sacha" data-start="262.421000" data-stop="263.961000">my OBS through WebSockets,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="264.441000" data-stop="265.641000">is "let's go live".</span> <span class="audio-time caption" data-speaker="Sacha" data-start="266.142000" data-stop="267.042000">And my command</span> <span class="audio-time caption" data-speaker="Sacha" data-start="267.482000" data-stop="269.162000">for stopping the stream is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="269.362000" data-stop="270.042000">"over and out".</span> <span class="audio-time caption" data-speaker="Sacha" data-start="270.663000" data-stop="271.543000">And just because it's a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="271.563000" data-stop="272.523000">little more fun to say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="272.563000" data-stop="273.523000">it becomes easier for me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="273.543000" data-stop="274.684000">me to remember what I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="274.724000" data-stop="275.524000">need to say in order</span> <span class="audio-time caption" data-speaker="Sacha" data-start="275.544000" data-stop="276.184000">to make this happen.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="277.000000">4:37</span> <strong>Does it handle hard words?</strong></div><p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="277.364000" data-stop="278.225000"><strong class="speaker-name">Linkarzu:</strong>  Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="278.685000" data-stop="278.865000">Now,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="279.585000" data-stop="280.926000">why is it accurate? And</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="281.333000" data-stop="282.733000">you have a dictionary of</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="282.873000" data-stop="283.594000">like the</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="285.494000" data-stop="286.815000">difficult words. Like if I</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="286.835000" data-stop="287.415000">say Neovim,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="288.035000" data-stop="289.016000">it doesn't get it. It</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="289.036000" data-stop="290.756000">says "New of him",</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="291.136000" data-stop="292.597000">or it just puts whatever</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="292.677000" data-stop="294.077000">it wants, whenever it wants.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="294.117000" data-stop="295.698000">Sometimes it puts something random</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="295.858000" data-stop="296.238000">out there.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="296.718000" data-stop="297.579000">What do you do for</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="297.599000" data-stop="298.805000">yours?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="298.806000" data-stop="301.360000"><strong class="speaker-name">Sacha:</strong>  "Neovim is okay, I guess."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="302.235000" data-stop="302.995000">Let's see if it does</span> <span class="audio-time caption" data-speaker="Sacha" data-start="303.075000" data-stop="304.780000">a thing. Yeah, it got</span> <span class="audio-time caption" data-speaker="Sacha" data-start="304.800000" data-stop="305.801000">that without my needing to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="305.821000" data-stop="306.821000">correct things. Let's pick a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="306.881000" data-stop="307.582000">harder word.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="310.184000" data-stop="311.805000">Anti-disestablishmentarianism.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="312.770000" data-stop="314.292000">Close enough. Okay, you know,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="314.312000" data-stop="315.653000">that requires very little</span> <span class="audio-time caption" data-speaker="Sacha" data-start="315.753000" data-stop="317.094000">editing. What's a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="317.194000" data-stop="319.655000">difficult word? Oh, actually, let's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="319.675000" data-stop="321.057000">pick a different name.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="321.777000" data-stop="323.278000">Sometimes it gets Prot's name wrong.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="323.859000" data-stop="324.619000">"Prot does a lot of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="324.659000" data-stop="325.580000">videos on Emacs."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="326.177000" data-stop="329.680000">Oh, no, it got him too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="330.220000" data-stop="332.863000">If there was a thing that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="333.063000" data-stop="334.284000">is difficult to say...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="334.651000" data-stop="335.812000">What was that? Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="336.293000" data-stop="338.855000">"Heisenbug is making org.nvim."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="339.596000" data-stop="341.017000">That one. Okay, here we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="341.627000" data-stop="343.649000">"Heisenbug is making org.nvim."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="345.318000" data-stop="346.539000">I mean, it's getting him.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="351.000000">5:51</span> <strong>Thanking sponsors and members</strong></div><p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="351.225000" data-stop="352.133000"><strong class="speaker-name">Linkarzu:</strong>  Let me thank my</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="352.993000" data-stop="354.934000">YouTube members, the CEOs are</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="354.974000" data-stop="356.374000">shown on screen, web2three,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="356.634000" data-stop="358.034000">web2trhee.com, TED,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="358.354000" data-stop="360.835000">cpnllc.com, and also</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="361.195000" data-stop="361.535000">Gallo,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="361.915000" data-stop="363.235000">these are the three CEOs,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="363.395000" data-stop="364.015000">and I just want to</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="364.035000" data-stop="364.895000">thank the rest of the</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="364.915000" data-stop="365.575000">YouTube members,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="366.016000" data-stop="367.396000">which are the ones that are</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="367.456000" data-stop="368.316000">shown here, so</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="368.776000" data-stop="369.996000">just appreciate</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="370.516000" data-stop="371.496000">each one of the members</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="371.576000" data-stop="373.497000">for supporting the channel, okay?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="374.000000">6:14</span> <strong>Fixing misrecognized words with a shortcut</strong></div><p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="374.248000" data-stop="377.473000"><strong class="speaker-name">Linkarzu:</strong>  So, it's a local model, interesting.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="377.493000" data-stop="378.454000">It is a local model.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="378.474000" data-stop="379.234000">Do you feed it a</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="379.274000" data-stop="380.073000">dictionary at some point?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="380.074000" data-stop="380.935000"><strong class="speaker-name">Sacha:</strong>  If I do need to change</span> <span class="audio-time caption" data-speaker="Sacha" data-start="380.975000" data-stop="382.216000">things... Okay, so if I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="382.276000" data-stop="383.177000">need to change things, let's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="383.197000" data-stop="384.438000">say for example, Orgzly</span> <span class="audio-time caption" data-speaker="Sacha" data-start="384.478000" data-stop="385.478000">Revived, you probably can't get</span> <span class="audio-time caption" data-speaker="Sacha" data-start="385.498000" data-stop="385.818000">that one.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="386.359000" data-stop="387.479000">"I use Orgzly Revived on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="387.519000" data-stop="388.460000">my phone to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="388.940000" data-stop="389.641000">check my tasks."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="390.583000" data-stop="391.504000">Oh yeah, so here, right?</span> <p></p><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-06-33-143.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-06-33-143.jpg" alt="image from video 00:06:33.143" data-time="00:06:33.143"></a><span class="audio-time caption" data-speaker="Sacha" data-start="391.544000" data-stop="393.005000"><strong class="speaker-name">Sacha:</strong> It says Orgsley Revived. What</span> <span class="audio-time caption" data-speaker="Sacha" data-start="393.125000" data-stop="393.765000">is that even?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="394.226000" data-stop="396.516000">But I can press Ctrl+; and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="396.517000" data-stop="398.129000">it uses substitute.el.</span> <p></p><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-06-40-066.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-06-40-066.jpg" alt="image from video 00:06:40.066" data-time="00:06:40.066"></a><span class="audio-time caption" data-speaker="Sacha" data-start="398.729000" data-stop="400.570000"><strong class="speaker-name">Sacha:</strong> Orgzly Revived here. And</span> <span class="audio-time caption" data-speaker="Sacha" data-start="403.032000" data-stop="404.213000">what that does, in addition</span> <span class="audio-time caption" data-speaker="Sacha" data-start="404.273000" data-stop="406.415000">to the substitutions that happen</span> <span class="audio-time caption" data-speaker="Sacha" data-start="406.435000" data-stop="407.515000">throughout the buffer, so for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="407.555000" data-stop="408.416000">example, if I'm adding a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="408.476000" data-stop="408.936000">transcript,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="409.357000" data-stop="410.718000">it will change that all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="410.778000" data-stop="411.578000">throughout the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="412.339000" data-stop="414.080000">transcript. I've also added some</span> <span class="audio-time caption" data-speaker="Sacha" data-start="414.160000" data-stop="415.561000">code because this is Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="415.601000" data-stop="416.402000">I can just do that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="416.782000" data-stop="418.443000">that saves this in common</span> <span class="audio-time caption" data-speaker="Sacha" data-start="418.543000" data-stop="421.185000">errors or commonly misrecognized words.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="421.586000" data-stop="423.307000">And then when I recognize text,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="424.148000" data-stop="425.168000">whether it's before a voice</span> <span class="audio-time caption" data-speaker="Sacha" data-start="425.188000" data-stop="425.849000">command or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="426.489000" data-stop="427.350000">if I'm just doing this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="427.410000" data-stop="427.870000">or whatever, it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="428.771000" data-stop="429.712000">will apply all of those</span> <span class="audio-time caption" data-speaker="Sacha" data-start="429.752000" data-stop="430.512000">common fixes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="431.913000" data-stop="432.874000">Common edits.</span> <p></p><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-07-16-061.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-07-16-061.jpg" alt="image from video 00:07:16.061" data-time="00:07:16.061"></a><span class="audio-time caption" data-speaker="Sacha" data-start="433.314000" data-stop="434.115000"><strong class="speaker-name">Sacha:</strong> Here we go. So it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="434.195000" data-stop="435.416000">automatically adds it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="436.056000" data-stop="438.118000">to this thing here, which</span> <span class="audio-time caption" data-speaker="Sacha" data-start="438.178000" data-stop="439.118000">gets saved</span> <span class="audio-time caption" data-speaker="Sacha" data-start="439.338000" data-stop="440.439000">automatically for me.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="440.939000" data-stop="442.300000">And that's the change</span> <span class="audio-time caption" data-speaker="Sacha" data-start="442.340000" data-stop="444.482000">that I've just added.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="445.323000" data-stop="448.706000"><strong class="speaker-name">Linkarzu:</strong>  Interesting. Pretty cool.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="448.726000" data-stop="449.606000"><strong class="speaker-name">Sacha:</strong>  So it's really nice to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="449.647000" data-stop="452.909000">have that kind of [dictionary] shortcut</span> <span class="audio-time caption" data-speaker="Sacha" data-start="453.890000" data-stop="454.871000">built into the way that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="454.911000" data-stop="455.992000">I edit things. All I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="456.032000" data-stop="457.993000">know is I just hit Ctrl+;</span> <span class="audio-time caption" data-speaker="Sacha" data-start="458.554000" data-stop="459.714000">and put in what it's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="459.734000" data-stop="460.395000">supposed to be.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="460.915000" data-stop="462.156000">And then it gets</span> <span class="audio-time caption" data-speaker="Sacha" data-start="462.157000" data-stop="463.397000">not only fixed in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="463.437000" data-stop="464.818000">my current file, but in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="464.838000" data-stop="465.699000">the future as well.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="466.380000" data-stop="468.962000"><strong class="speaker-name">Linkarzu:</strong>  Yeah, I need to</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="469.002000" data-stop="470.843000">work on my transcript game.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="471.000000">7:51</span> <strong>How the live transcript began</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="471.339000" data-stop="474.321000"><strong class="speaker-name">Sacha:</strong>  Like many things in Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="474.381000" data-stop="476.121000">this came out of a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="476.202000" data-stop="478.383000">bunch of small, seemingly unrelated</span> <span class="audio-time caption" data-speaker="Sacha" data-start="478.423000" data-stop="478.743000">hacks.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="479.383000" data-stop="481.044000">One was, I was having</span> <span class="audio-time caption" data-speaker="Sacha" data-start="481.064000" data-stop="483.445000">this conversation with a French</span> <span class="audio-time caption" data-speaker="Sacha" data-start="483.505000" data-stop="484.406000">tutor and I was like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="484.906000" data-stop="486.027000">man, I am having a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="486.067000" data-stop="487.067000">hard time making sure... Like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="487.507000" data-stop="488.568000">he would switch into lecture</span> <span class="audio-time caption" data-speaker="Sacha" data-start="488.588000" data-stop="489.328000">mode and I was trying</span> <span class="audio-time caption" data-speaker="Sacha" data-start="489.348000" data-stop="490.629000">to have more conversation mode</span> <span class="audio-time caption" data-speaker="Sacha" data-start="490.669000" data-stop="493.577000">so I could practice some more, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="493.578000" data-stop="496.472000">So I think I've got this right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="496.896000" data-stop="498.437000">Anyway, so I had</span> <span class="audio-time caption" data-speaker="Sacha" data-start="499.317000" data-stop="500.918000">a large language model generate</span> <span class="audio-time caption" data-speaker="Sacha" data-start="501.038000" data-stop="502.959000">a Python server, because sometimes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="502.979000" data-stop="505.139000">I'm like, I just want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="505.179000" data-stop="506.540000">a proof of concept for this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="506.920000" data-stop="508.401000">I don't necessarily know all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="508.421000" data-stop="509.421000">the details of how to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="509.461000" data-stop="510.742000">work with the Silero voice</span> <span class="audio-time caption" data-speaker="Sacha" data-start="510.802000" data-stop="511.856000">activity detection thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="511.857000" data-stop="513.423000">Anyway, so make me a server that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="513.443000" data-stop="514.423000">can listen to my audio</span> <span class="audio-time caption" data-speaker="Sacha" data-start="514.463000" data-stop="515.744000">devices in real time without</span> <span class="audio-time caption" data-speaker="Sacha" data-start="515.784000" data-stop="518.125000">messing up my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="519.085000" data-stop="520.366000">actual microphone use if I'm</span> <span class="audio-time caption" data-speaker="Sacha" data-start="520.426000" data-stop="520.826000">on stream.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="521.266000" data-stop="521.966000">Okay, so I have this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="522.006000" data-stop="523.207000">Python server and then I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="523.247000" data-stop="524.227000">wanted to visualize it within</span> <span class="audio-time caption" data-speaker="Sacha" data-start="524.267000" data-stop="525.187000">Emacs. I got</span> <span class="audio-time caption" data-speaker="Sacha" data-start="525.227000" data-stop="527.008000">that visualizing inside Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="527.048000" data-stop="527.908000">Then I wanted to say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="528.648000" data-stop="530.369000">all right, you know,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="530.849000" data-stop="531.609000">why don't I have speech</span> <span class="audio-time caption" data-speaker="Sacha" data-start="531.649000" data-stop="533.130000">recognition listening on this thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="533.170000" data-stop="533.930000">so that if I say</span> <span class="audio-time caption" data-speaker="Sacha" data-start="534.010000" data-stop="538.420000">something, it can check it off,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="538.421000" data-stop="539.818000">like playing bingo, you know,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="539.819000" data-stop="540.852000">if I say it, then it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="540.892000" data-stop="541.813000">gives me a note that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="541.833000" data-stop="542.833000">I've actually said that word</span> <span class="audio-time caption" data-speaker="Sacha" data-start="543.153000" data-stop="544.073000">or phrase. And so</span> <span class="audio-time caption" data-speaker="Sacha" data-start="544.734000" data-stop="545.274000">it could show me a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="545.314000" data-stop="546.134000">list of the words or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="546.154000" data-stop="547.214000">phrases that I still want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="547.255000" data-stop="548.355000">to say in conversation.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="548.915000" data-stop="549.336000">And then, as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="550.317000" data-stop="551.719000">we're preparing for this conversation,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="551.739000" data-stop="552.620000">I was like, you know</span> <span class="audio-time caption" data-speaker="Sacha" data-start="552.640000" data-stop="553.622000">what would be really cool</span> <span class="audio-time caption" data-speaker="Sacha" data-start="554.122000" data-stop="555.204000">is if I could</span> <span class="audio-time caption" data-speaker="Sacha" data-start="555.605000" data-stop="556.841000">have that speech recognition,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="556.842000" data-stop="558.469000">which is running anyway,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="558.929000" data-stop="560.171000">give me a transcript of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="560.231000" data-stop="561.673000">the current conversation in a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="562.174000" data-stop="563.808000">way that I can use it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="563.809000" data-stop="565.017000">I could then clip</span> <span class="audio-time caption" data-speaker="Sacha" data-start="565.137000" data-stop="565.998000">if I wanted to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="566.479000" data-stop="567.760000">because sometimes I'll be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="567.880000" data-stop="570.302000">doing a live stream and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="570.342000" data-stop="570.723000">I'd be like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="571.243000" data-stop="572.044000">you know, that was a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="572.084000" data-stop="573.125000">really cool demo and I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="573.165000" data-stop="574.326000">should grab that. So that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="574.446000" data-stop="575.347000">I can just grab the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="575.367000" data-stop="576.428000">screenshot or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="577.269000" data-stop="578.150000">put it into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="579.051000" data-stop="579.831000">a blog post or just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="579.851000" data-stop="581.633000">get a text or extract</span> <span class="audio-time caption" data-speaker="Sacha" data-start="582.073000" data-stop="582.854000">a clip out of it,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="582.914000" data-stop="584.316000">turn it into a video, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="585.957000" data-stop="586.997000">And so now I have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="587.037000" data-stop="588.318000">this thing where,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="588.859000" data-stop="589.679000">hang on a second,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="590.139000" data-stop="591.821000">if I'm somewhere else, for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="591.881000" data-stop="592.321000">example,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="593.081000" data-stop="593.822000">it's easy for me to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="593.862000" data-stop="593.885000">get to.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="593.000000">9:53</span> <strong>Prepare to fast forward</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="593.886000" data-stop="594.622000"><strong class="speaker-name">Sacha:</strong> I have a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="594.662000" data-stop="595.503000">voice command for it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="596.023000" data-stop="597.284000">"Prepare to fast forward",</span> <span class="audio-time caption" data-speaker="Sacha" data-start="598.765000" data-stop="599.525000">which is of course a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="599.586000" data-stop="600.592000">Spaceballs reference.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="600.593000" data-stop="601.427000">It'll show me then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="601.867000" data-stop="602.547000">this thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="603.428000" data-stop="607.030000">And if we are... Let me load this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="607.451000" data-stop="609.172000">real quick.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="610.042000" data-stop="611.083000">It will show me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="611.143000" data-stop="612.745000">the video that we have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="613.125000" data-stop="614.166000">or at least the recording</span> <span class="audio-time caption" data-speaker="Sacha" data-start="614.186000" data-stop="615.187000">that I've got of it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="615.908000" data-stop="617.089000">That's on the right side.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="617.109000" data-stop="618.511000">Here, this MPV is controlled</span> <span class="audio-time caption" data-speaker="Sacha" data-start="618.531000" data-stop="619.291000">by Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="620.032000" data-stop="623.540000">If I go here...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="624.180000" data-stop="625.690000">Let's say this one.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="625.691000" data-stop="627.163000">So here's your waveform for it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="627.183000" data-stop="628.457000">If I play it back:</span> <span class="audio-time caption" data-speaker="Sacha" data-start="628.458000" data-stop="629.665000">"which is of course</span> <span class="audio-time caption" data-speaker="Sacha" data-start="629.705000" data-stop="630.904000">a Spaceballs reference",</span> <span class="audio-time caption" data-speaker="Sacha" data-start="630.905000" data-stop="632.848000">it'll show me then this thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="633.608000" data-stop="636.291000">And I can copy the text if I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="636.331000" data-stop="637.291000">wanted to, or I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="637.732000" data-stop="638.553000">extract this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="639.333000" data-stop="640.875000">into its own video.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="641.000000">10:41</span> <strong>Talking with Emacs
</strong></div><p></p><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-00-00-000.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-00-00-000.jpg" alt="image from video 00:00:00.000" data-time="00:00:00.000"></a><span class="audio-time caption" data-speaker="Linkarzu" data-start="641.222000" data-stop="642.383000"><strong class="speaker-name">Linkarzu:</strong>  What other tricks do you</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="642.423000" data-stop="643.504000">want to show us there?</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="643.644000" data-stop="644.785000">What other things do you</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="644.805000" data-stop="646.287000">want to share about,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="647.088000" data-stop="649.390000">brag about your Emacs workflow?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="650.001000" data-stop="650.801000"><strong class="speaker-name">Sacha:</strong>  It's really hard to say.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="653.447000" data-stop="654.388000">I told you how M-x doctor</span> <span class="audio-time caption" data-speaker="Sacha" data-start="654.408000" data-stop="655.629000">was the beginning of my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="656.449000" data-stop="657.230000">experience, right?</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="657.231000" data-stop="657.970000"><strong class="speaker-name">Linkarzu:</strong>  Your journey, yep.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="658.270000" data-stop="659.371000"><strong class="speaker-name">Sacha:</strong>  Yes, yes. So this is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="659.431000" data-stop="660.252000">the doctor. You can say</span> <span class="audio-time caption" data-speaker="Sacha" data-start="660.312000" data-stop="660.912000">things like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="661.953000" data-stop="664.215000">"I'm feeling happy today," as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="664.295000" data-stop="665.115000">I said, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="665.896000" data-stop="666.917000">And then it uses that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="666.977000" data-stop="668.578000">to generate its response.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="669.598000" data-stop="671.220000">But I have this conversation mode.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="673.621000" data-stop="674.782000">"Yes, especially when I get</span> <span class="audio-time caption" data-speaker="Sacha" data-start="674.822000" data-stop="675.783000">to tinker with Emacs."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="679.095000" data-stop="681.340000">And then, uh... "What happened</span> <span class="audio-time caption" data-speaker="Sacha" data-start="681.380000" data-stop="682.162000">when you get to tinker</span> <span class="audio-time caption" data-speaker="Sacha" data-start="682.182000" data-stop="682.743000">with Emacs?"</span> <span class="audio-time caption" data-speaker="Sacha" data-start="683.550000" data-stop="685.450000">Did that...? Does the TTS come</span> <span class="audio-time caption" data-speaker="Sacha" data-start="685.470000" data-stop="686.731000">through? Yeah, it does.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="687.911000" data-stop="688.591000">And the reason I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="689.391000" data-stop="690.652000">did this was because after</span> <span class="audio-time caption" data-speaker="Sacha" data-start="690.692000" data-stop="691.572000">I showed off my vocal</span> <span class="audio-time caption" data-speaker="Sacha" data-start="691.592000" data-stop="693.152000">commands to Emacs Paris, they</span> <span class="audio-time caption" data-speaker="Sacha" data-start="693.172000" data-stop="694.233000">were like, oh, you know,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="694.313000" data-stop="694.873000">what if you can have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="694.893000" data-stop="695.613000">a conversation? So</span> <span class="audio-time caption" data-speaker="Sacha" data-start="696.113000" data-stop="696.813000">I was like, OK, let's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="697.173000" data-stop="698.253000">come back full circle to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="698.293000" data-stop="699.534000">the thing that got me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="699.574000" data-stop="700.734000">curious about Emacs in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="700.754000" data-stop="702.554000">first place, and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="703.015000" data-stop="703.895000">voice enable that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="704.275000" data-stop="705.175000">And then, of course, this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="705.235000" data-stop="706.255000">is a very old AI.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="706.295000" data-stop="707.216000">It's much more interesting if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="707.256000" data-stop="708.256000">you apply it to the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="708.356000" data-stop="709.096000">new models.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="709.676000" data-stop="711.857000">So if I want to, for example,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="712.277000" data-stop="712.957000">practice French.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="714.217000" data-stop="715.657000">This is one of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="716.858000" data-stop="718.558000">my voice commands here.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="719.558000" data-stop="720.211000">Then I can...</span> <p></p><span class="audio-time caption" data-speaker="Doctor" data-start="720.212000" data-stop="720.679000"><strong class="speaker-name">Doctor:</strong>  "What would</span> <span class="audio-time caption" data-speaker="Doctor" data-start="720.739000" data-stop="721.919000">happen? I would</span> <span class="audio-time caption" data-speaker="Doctor" data-start="721.959000" data-stop="722.799000">appreciate it if you would</span> <span class="audio-time caption" data-speaker="Doctor" data-start="722.839000" data-stop="723.319000">continue."</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="724.259000" data-stop="724.919000"><strong class="speaker-name">Sacha:</strong>  Okay, here we are.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="725.560000" data-stop="726.380000">Then I might say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="728.340000" data-stop="730.161000">"Je parle avec linkarzu."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="730.721000" data-stop="732.022000">And then I think...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="733.322000" data-stop="733.942000">There you go. It</span> <span class="audio-time caption" data-speaker="Sacha" data-start="734.740000" data-stop="735.741000">will eventually...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="736.292000" data-stop="736.632000">Maybe? Thank you.</span> <p></p><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-12-18-696.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-12-18-696.jpg" alt="image from video 00:12:18.696" data-time="00:12:18.696"></a><span class="audio-time caption" data-speaker="Gemini" data-start="738.688000" data-stop="740.750000"><strong class="speaker-name">Gemini:</strong>  "Ah, c'est super de discuter</span> <span class="audio-time caption" data-speaker="Gemini" data-start="740.790000" data-stop="742.652000">avec lui ! C'est toujours enrichissant</span> <span class="audio-time caption" data-speaker="Gemini" data-start="742.672000" data-stop="744.514000">de partager (to share) ses passions</span> <span class="audio-time caption" data-speaker="Gemini" data-start="744.574000" data-stop="746.092000">en direct. Quel sujet</span> <span class="audio-time caption" data-speaker="Gemini" data-start="746.093000" data-stop="747.757000">abordez-vous ensemble aujourd'hui?"</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="748.307000" data-stop="749.708000"><strong class="speaker-name">Sacha:</strong>  Alright, so</span> <span class="audio-time caption" data-speaker="Sacha" data-start="750.808000" data-stop="752.249000">this now uses a large</span> <span class="audio-time caption" data-speaker="Sacha" data-start="752.309000" data-stop="753.769000">language model. This one uses</span> <span class="audio-time caption" data-speaker="Sacha" data-start="754.310000" data-stop="756.791000">Gemini because gptel makes it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="756.851000" data-stop="757.851000">super easy to plug in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="757.871000" data-stop="758.551000">different models.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="759.752000" data-stop="760.572000">So if I wanted</span> <span class="audio-time caption" data-speaker="Sacha" data-start="760.612000" data-stop="761.533000">to practice</span> <span class="audio-time caption" data-speaker="Sacha" data-start="762.013000" data-stop="763.394000">French, but I don't necessarily</span> <span class="audio-time caption" data-speaker="Sacha" data-start="763.414000" data-stop="764.254000">want to bug people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="765.675000" data-stop="766.695000">because I take a while</span> <span class="audio-time caption" data-speaker="Sacha" data-start="766.735000" data-stop="767.695000">to think about my words</span> <span class="audio-time caption" data-speaker="Sacha" data-start="767.775000" data-stop="768.976000">and sometimes I'm looking stuff up,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="769.396000" data-stop="770.076000">then at least I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="770.116000" data-stop="771.497000">simulate that kind of conversation.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="771.557000" data-stop="772.417000">And there are a gazillion</span> <span class="audio-time caption" data-speaker="Sacha" data-start="772.558000" data-stop="773.857000">apps that will sell you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="773.858000" data-stop="775.179000">a subscription to do this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="775.939000" data-stop="777.220000">But because it's here and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="777.280000" data-stop="778.400000">it's plain text and I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="778.460000" data-stop="779.441000">can control it, then I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="779.461000" data-stop="781.181000">can more easily go through it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="781.261000" data-stop="784.883000">afterwards and analyze the vocabulary</span> <span class="audio-time caption" data-speaker="Sacha" data-start="785.163000" data-stop="787.784000">or correct the things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="787.824000" data-stop="788.945000">that it didn't get right,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="789.085000" data-stop="790.245000">which I know is because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="790.345000" data-stop="792.086000">of the speech recognition and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="792.126000" data-stop="792.927000">not because of me or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="792.947000" data-stop="793.507000">whatever, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="794.787000" data-stop="795.648000">So it's so much fun</span> <span class="audio-time caption" data-speaker="Sacha" data-start="795.688000" data-stop="796.668000">to be able to tinker</span> <span class="audio-time caption" data-speaker="Sacha" data-start="796.748000" data-stop="798.229000">with Emacs to do what</span> <span class="audio-time caption" data-speaker="Sacha" data-start="798.329000" data-stop="799.169000">I wanted to do.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="799.000000">13:19</span> <strong>Life in tiny time chunks</strong></div><p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="799.596000" data-stop="800.857000"><strong class="speaker-name">Linkarzu:</strong>  How long do you spend</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="800.897000" data-stop="801.877000">sitting? Like do you spend</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="801.897000" data-stop="803.058000">sitting most of the day?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="804.327000" data-stop="805.448000"><strong class="speaker-name">Sacha:</strong>  Most of the time, actually,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="805.468000" data-stop="806.149000">I have to go help</span> <span class="audio-time caption" data-speaker="Sacha" data-start="806.209000" data-stop="807.370000">out the kiddo, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="808.331000" data-stop="809.672000">So that keeps me away</span> <span class="audio-time caption" data-speaker="Sacha" data-start="809.712000" data-stop="810.753000">from the computer, which is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="810.853000" data-stop="811.894000">one of the reasons why</span> <span class="audio-time caption" data-speaker="Sacha" data-start="812.415000" data-stop="813.736000">I've had to learn how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="813.776000" data-stop="815.938000">to deal with very fragmented time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="816.799000" data-stop="817.980000">Not much time sitting in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="818.000000" data-stop="818.881000">front of the computer to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="818.921000" data-stop="820.422000">focus on something. Everything that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="820.562000" data-stop="821.183000">I want to do</span> <span class="audio-time caption" data-speaker="Sacha" data-start="821.583000" data-stop="822.764000">has to be something that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="822.784000" data-stop="823.265000">I can do in 5,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="823.325000" data-stop="824.286000">10, 15 minutes, maybe 30</span> <span class="audio-time caption" data-speaker="Sacha" data-start="824.326000" data-stop="824.966000">minutes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="826.267000" data-stop="826.747000">There might be...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="827.208000" data-stop="828.048000">At the moment,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="828.088000" data-stop="830.850000">she is fairly independent, but I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="830.890000" data-stop="831.970000">can still be interrupted by</span> <span class="audio-time caption" data-speaker="Sacha" data-start="832.030000" data-stop="833.671000">somebody who needs breakfast or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="833.711000" data-stop="834.772000">somebody who needs a hug</span> <span class="audio-time caption" data-speaker="Sacha" data-start="834.832000" data-stop="836.573000">and whatever. So I need to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="836.613000" data-stop="837.573000">be able to capture a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="837.613000" data-stop="838.434000">thought, get it out of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="838.474000" data-stop="839.214000">the way and work on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="839.234000" data-stop="840.195000">things in tiny chunks.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="841.261000" data-stop="841.702000"><strong class="speaker-name">Linkarzu:</strong>  I've seen</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="842.122000" data-stop="843.944000">my wife, how she handles</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="844.004000" data-stop="845.045000">things. And I'm like, man,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="845.865000" data-stop="846.266000">it's a lot of</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="847.226000" data-stop="848.868000">mental overhead, you know?</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="849.858000" data-stop="852.179000">That's a whole other</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="852.219000" data-stop="853.521000">conversation to say, see,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="854.141000" data-stop="855.482000">men are the ones that</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="855.582000" data-stop="857.944000">make progress, build their professional</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="858.004000" data-stop="859.546000">careers and wives, you know,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="859.606000" data-stop="860.707000">usually take care of the kids.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="861.347000" data-stop="865.200000">It's a huge sacrifice.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="865.201000" data-stop="866.291000">What do you think?</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="866.325000" data-stop="866.956000">How do you feel about</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="866.976000" data-stop="867.257000">all that?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="868.183000" data-stop="869.184000"><strong class="speaker-name">Sacha:</strong>  I signed up for it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="869.306000" data-stop="870.908000">totally knowing what I was</span> <span class="audio-time caption" data-speaker="Sacha" data-start="870.948000" data-stop="872.210000">getting into. I was like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="872.267000" data-stop="873.447000">okay, there's a lot involved</span> <span class="audio-time caption" data-speaker="Sacha" data-start="873.487000" data-stop="875.168000">in being the default parent,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="875.228000" data-stop="876.008000">right? The primary</span> <span class="audio-time caption" data-speaker="Sacha" data-start="876.788000" data-stop="878.549000">person who patches up.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="879.529000" data-stop="880.329000">But I think</span> <span class="audio-time caption" data-speaker="Sacha" data-start="880.850000" data-stop="882.150000">partly because of Org Mode</span> <span class="audio-time caption" data-speaker="Sacha" data-start="882.190000" data-stop="882.730000">and Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="883.013000" data-stop="884.454000">it's been very, very helpful</span> <span class="audio-time caption" data-speaker="Sacha" data-start="884.594000" data-stop="885.554000">to me to be able</span> <span class="audio-time caption" data-speaker="Sacha" data-start="885.574000" data-stop="885.874000">to say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="886.254000" data-stop="887.375000">"Yeah, that's a great idea.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="887.415000" data-stop="888.135000">I'm going to write that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="888.175000" data-stop="889.355000">down in my phone or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="889.395000" data-stop="890.456000">on my computer" - usually on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="890.476000" data-stop="891.196000">my phone back in the early</span> <span class="audio-time caption" data-speaker="Sacha" data-start="891.536000" data-stop="891.976000">parenting days.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="894.217000" data-stop="895.098000">I'm away from my computer.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="895.118000" data-stop="896.779000">I'm at the playground.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="897.300000" data-stop="898.220000">So the fact that I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="898.260000" data-stop="898.981000">can capture</span> <span class="audio-time caption" data-speaker="Sacha" data-start="899.561000" data-stop="900.903000">a note into Org Mode</span> <span class="audio-time caption" data-speaker="Sacha" data-start="901.283000" data-stop="902.544000">and then know that I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="902.604000" data-stop="903.525000">can get back to it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="903.645000" data-stop="905.186000">in several years when I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="905.226000" data-stop="906.027000">have more free time,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="906.427000" data-stop="907.308000">or that Org Mode can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="907.348000" data-stop="908.569000">keep track of the deadlines</span> <span class="audio-time caption" data-speaker="Sacha" data-start="908.649000" data-stop="909.590000">that might be a year</span> <span class="audio-time caption" data-speaker="Sacha" data-start="909.630000" data-stop="910.430000">from now, like when I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="910.490000" data-stop="910.731000">need to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="911.111000" data-stop="912.032000">renew my passport,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="912.452000" data-stop="913.933000">and just have that surface</span> <span class="audio-time caption" data-speaker="Sacha" data-start="913.953000" data-stop="914.874000">the reminder, at the right</span> <span class="audio-time caption" data-speaker="Sacha" data-start="914.914000" data-stop="916.195000">time with the notes on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="916.255000" data-stop="917.436000">exactly what I need to do,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="917.936000" data-stop="918.857000">and the links to wherever</span> <span class="audio-time caption" data-speaker="Sacha" data-start="918.877000" data-stop="919.518000">I need to go, I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="920.058000" data-stop="921.259000">think that has been very,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="921.299000" data-stop="922.160000">very helpful for me.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="923.000000">15:23</span> <strong>Capturing tasks on phone and computer</strong></div><p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="923.000000" data-stop="924.641000"><strong class="speaker-name">Linkarzu:</strong>  Good point that you brought</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="924.721000" data-stop="925.961000">up because I don't know,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="926.381000" data-stop="927.241000">quite a few days ago</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="927.281000" data-stop="928.381000">I just came up, well,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="928.742000" data-stop="930.642000">the clanker came up with a</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="931.022000" data-stop="932.202000">method, we could say,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="932.563000" data-stop="934.003000">of me just tapping it,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="934.263000" data-stop="935.323000">saying something to it,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="935.783000" data-stop="936.543000">and when I come to</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="936.563000" data-stop="938.284000">my computer, the task is</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="938.364000" data-stop="939.404000">there in Neovim,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="939.784000" data-stop="941.645000">right? Yes. Because I forget,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="941.925000" data-stop="943.865000">I'm outside, I'm like, okay,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="943.945000" data-stop="944.946000">I have to remember this,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="944.966000" data-stop="945.886000">I have to, I'm not</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="945.906000" data-stop="946.926000">gonna remember it, it's just</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="946.966000" data-stop="948.126000">gonna go away. So I</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="948.146000" data-stop="948.827000">do it on the phone,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="949.287000" data-stop="950.167000">shows up in Neovim.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="951.767000" data-stop="953.176000">It's a huge benefit.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="953.177000" data-stop="953.908000">How do you do it</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="955.989000" data-stop="957.269000"><strong class="speaker-name">Sacha:</strong>  For my phone, I often</span> <span class="audio-time caption" data-speaker="Sacha" data-start="957.330000" data-stop="958.650000">just put it into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="958.670000" data-stop="961.131000">Orgzly Revived, sometimes with dictation,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="961.191000" data-stop="962.291000">sometimes just typing in a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="962.331000" data-stop="963.252000">few keywords to help me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="963.292000" data-stop="965.112000">remember. A lot of times,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="965.132000" data-stop="966.233000">if I'm coming across...</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="966.453000" data-stop="968.614000"><strong class="speaker-name">Linkarzu:</strong>  Orgzly Revived, what is it?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="969.074000" data-stop="972.519000"><strong class="speaker-name">Sacha:</strong>  (Hah, I clearly can't spell) ogrzly?</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="972.520000" data-stop="973.586000"><strong class="speaker-name">Linkarzu:</strong>  If you want to show it,</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="973.587000" data-stop="974.416000">I don't know.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="975.576000" data-stop="976.497000"><strong class="speaker-name">Sacha:</strong>  It's on my phone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="977.310000" data-stop="978.531000">I'm gonna say, okay, because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="978.551000" data-stop="979.522000">this is what, Orgzly.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="979.523000" data-stop="982.373000"><strong class="speaker-name">Linkarzu:</strong>  Is it like an app?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="982.413000" data-stop="983.493000"><strong class="speaker-name">Sacha:</strong>  Yeah, so I use an</span> <span class="audio-time caption" data-speaker="Sacha" data-start="983.593000" data-stop="984.974000">Android phone. And now there</span> <span class="audio-time caption" data-speaker="Sacha" data-start="984.994000" data-stop="986.375000">are actually a gazillion apps</span> <span class="audio-time caption" data-speaker="Sacha" data-start="986.535000" data-stop="989.417000">that talk Org Mode and can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="989.437000" data-stop="990.557000">synchronize with your files and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="990.577000" data-stop="990.977000">whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="991.438000" data-stop="992.918000">I'm currently still just using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="992.979000" data-stop="994.699000">Orgzly Revived as an app</span> <span class="audio-time caption" data-speaker="Sacha" data-start="994.799000" data-stop="996.360000">on my phone with Syncthing,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="996.801000" data-stop="998.021000">With Syncthing being the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="998.501000" data-stop="1000.643000">free synchronization that I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1000.783000" data-stop="1002.103000">use to just get my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1002.123000" data-stop="1002.904000">files back and forth.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1004.267000" data-stop="1005.327000">But there are lots of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1005.367000" data-stop="1006.488000">other alternatives, so you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1006.528000" data-stop="1007.728000">find something that fits you well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1008.228000" data-stop="1010.069000">I am very tempted to figure out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1010.449000" data-stop="1012.269000">finally how to use Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1012.349000" data-stop="1014.270000">native, because there's an Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1014.330000" data-stop="1015.250000">port for Android.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1016.330000" data-stop="1017.351000">Especially if I can get</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1017.451000" data-stop="1019.191000">my speech synthesis and speech</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1019.231000" data-stop="1020.351000">recognition working on it. I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1020.371000" data-stop="1021.432000">think that would be amazing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1021.472000" data-stop="1022.032000">to have this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1022.412000" data-stop="1024.092000">kind of conversation with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1024.793000" data-stop="1025.593000">Emacs along the way.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1025.000000">17:05</span> <strong>Capturing tasks by voice</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1025.993000" data-stop="1026.913000"><strong class="speaker-name">Sacha:</strong> And then on the computer,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1026.973000" data-stop="1027.793000">if I need to capture</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1027.814000" data-stop="1028.954000">something quickly, oh, I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1028.994000" data-stop="1031.675000">show you this one. Let's see. Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1033.555000" data-stop="1034.936000">"Remind me to put together</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1034.956000" data-stop="1036.917000">a quick description of my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1038.718000" data-stop="1039.559000">to-do workflow."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1041.545000" data-stop="1043.566000">And it will take that note</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1044.007000" data-stop="1044.887000">and it will stick it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1045.047000" data-stop="1046.848000">into an inbox.</span> <p></p><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-17-36-180.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-17-36-180.jpg" alt="image from video 00:17:36.180" data-time="00:17:36.180"></a><span class="audio-time caption" data-speaker="Sacha" data-start="1047.529000" data-stop="1050.030000"><strong class="speaker-name">Sacha:</strong> Here I'm in live mode</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1050.751000" data-stop="1055.154000">so my public tasks don't get mixed in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1055.194000" data-stop="1056.150000">with my private tasks.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1056.151000" data-stop="1056.874000">If I do an agenda,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1056.875000" data-stop="1057.835000">it should just be limited to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1057.855000" data-stop="1058.476000">the public stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1059.196000" data-stop="1060.657000">Anyway, so the remind me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1060.953000" data-stop="1061.893000">created the note for me.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1062.093000" data-stop="1064.194000">It includes the audio</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1064.735000" data-stop="1067.091000">in case the speech recognition</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1067.092000" data-stop="1068.837000">didn't get anything right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1069.217000" data-stop="1070.437000">And it includes a screenshot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1070.537000" data-stop="1071.558000">so that in case I'm</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1071.598000" data-stop="1073.241000">doing this from a different application</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1073.242000" data-stop="1075.120000">because my keyboard shortcut is global,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1075.580000" data-stop="1076.280000">I can still see the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1076.340000" data-stop="1077.761000">context and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1077.801000" data-stop="1079.142000">find that sort of stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1079.843000" data-stop="1080.764000">So yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1081.000000">18:01</span> <strong>Building workflows out of little bits of time</strong></div><p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="1081.304000" data-stop="1082.185000"><strong class="speaker-name">Linkarzu:</strong>  Quite interesting.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="1082.565000" data-stop="1084.467000">Quite advanced. Quite complex.</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="1084.847000" data-stop="1085.808000">It must have taken you</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="1086.068000" data-stop="1088.110000">months, years to set all</span> <span class="audio-time caption" data-speaker="Linkarzu" data-start="1088.130000" data-stop="1088.570000">of this up.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1089.371000" data-stop="1090.012000"><strong class="speaker-name">Sacha:</strong>  As I said, I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1090.052000" data-stop="1090.892000">only work in thirty</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1090.912000" data-stop="1091.813000">minutes or so. So this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1091.933000" data-stop="1093.294000">one, I think was a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1094.042000" data-stop="1095.263000">10, 15 minute hack.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1096.032000" data-stop="1099.515000">Okay. Little bits of time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1099.896000" data-stop="1101.297000">This link here to whatever</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1101.317000" data-stop="1102.118000">I was looking at, you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1102.138000" data-stop="1103.078000">got that free from Org</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1103.098000" data-stop="1105.120000">Mode. This thing here with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1105.220000" data-stop="1105.921000">a recording,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1106.542000" data-stop="1108.103000">I got that because I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1108.303000" data-stop="1109.384000">already wanted to save my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1109.424000" data-stop="1110.565000">recordings anyway, so it was</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1110.605000" data-stop="1111.586000">just a matter of adding</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1111.626000" data-stop="1112.607000">a link to the file</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1112.647000" data-stop="1113.388000">name that I already had</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1113.448000" data-stop="1113.748000">saved.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1114.309000" data-stop="1116.170000">This screenshot, you know, another</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1116.210000" data-stop="1116.751000">five minutes,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1117.111000" data-stop="1118.432000">because I already had Spectacle</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1119.053000" data-stop="1120.494000">capturing the screenshot of both</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1120.534000" data-stop="1120.995000">screens.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1122.138000" data-stop="1123.441000">So it's fairly simple.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1124.102000" data-stop="1125.044000">It will even work for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1125.084000" data-stop="1125.585000">things like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1126.086000" data-stop="1127.088000">"remind me next month to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1127.108000" data-stop="1128.151000">follow up with linkarzu to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1128.191000" data-stop="1129.173000">see whether he's switched to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1129.253000" data-stop="1129.573000">Emacs."</span> <p></p><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-18-50-296.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt-00-18-50-296.jpg" alt="image from video 00:18:50.296" data-time="00:18:50.296"></a><span class="audio-time caption" data-speaker="Sacha" data-start="1129.588000" data-stop="1130.233000"><strong class="speaker-name">Sacha:</strong> So this one here, for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1130.273000" data-stop="1131.575000">example, it says, remind me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1131.975000" data-stop="1132.876000">next month, et cetera, et</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1132.916000" data-stop="1133.937000">cetera. And it has scheduled</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1133.977000" data-stop="1134.738000">it for next month.</span> <p></p><span class="audio-time caption" data-speaker="Linkarzu" data-start="1135.279000" data-stop="1136.060000"><strong class="speaker-name">Linkarzu:</strong>  That's pretty cool.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1137.649000" data-stop="1138.670000"><strong class="speaker-name">Sacha:</strong>  I'm not actually going to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1138.710000" data-stop="1139.570000">pressure you to switch the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1139.610000" data-stop="1140.971000">Emacs. You can keep using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1140.991000" data-stop="1142.252000">Neovim and just borrow all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1142.272000" data-stop="1143.193000">the interesting ideas.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1143.194000" data-stop="1145.154000">org.nvim is there,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1145.594000" data-stop="1146.715000">I can adapt it to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1146.815000" data-stop="1147.715000">do this, you know?</span></div>
<p></p>


</details>

<p>
<a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/Xk02luunlfc%20-%20Emacs%20Voice%20Control%20With%20Local%20AI%20on%20a%202018%20Laptop%20-%20Sacha%20Chua's%20Setup.vtt">Download the VTT</a>
</p>

</div>

<p>
He hasn't released a clip of this one yet, but this exchange was one of my favourite parts of the main conversation:
</p>

<blockquote>
<p>
[Linkarzu]: I don't know if like that's a particularity of Neovim users, we're all toxic and we just hate each other.
</p>

<p>
[Sacha]: Yeah, maybe you should just come over to the Emacs community. We have hot chocolate.
</p>

<p>
[Linkarzu]: If you go to the Emacs subreddit,
it's like rainbows and butterflies.
There's not a lot of hate.
I always wonder why does that happen?
It's not moderators, you know,
it's just people.
Is it just because it's old people?
Like the professor,
he doesn't want to fight any more.
He's old enough.
He retired already.
He's just ready to pass to the next life.
So what, what?
</p>

<p>
[Sacha]: Hypothesis number two,
maybe your editor makes you grumpy.
</p>
</blockquote>

<p>
That's at about 01:30:06 in this unlisted embed of the full conversation:
</p>

<p>
</p><div class="yt-video"><iframe width="456" height="315" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/BlgtfOsXgCs?enablejsapi=1&start=5406" frameborder="0" allowfullscreen=""></iframe><a href="https://www.youtube.com/watch?v=BlgtfOsXgCs&t=5406">Watch on YouTube</a></div>
<p></p>
<div><a href="https://sachachua.com/blog/2026/10/clip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F10%2Fclip-emacs-voice-control-describing-my-setup-during-linkarzu-s-livestream%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>EmacsConf: Using message-sent-hook to run buffer-specific code to keep track of e-mailed schedules</title>
		<link>https://sachachua.com/blog/2026/10/emacsconf-using-message-sent-hook-to-run-buffer-specific-code-to-keep-track-of-e-mailed-schedules/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Wed, 28 Oct 2026 14:13:35 GMT</pubDate>
    <category>emacs</category>
<category>org</category>
<category>emacsconf</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/10/emacsconf-using-message-sent-hook-to-run-buffer-specific-code-to-keep-track-of-e-mailed-schedules/</guid>
		<description><![CDATA[<p>
I make lots of little <a href="https://emacsconf.org/2026/talks">EmacsConf schedule</a> updates based on the speakers' feedback.
I needed a way to keep track of the schedule that I've just sent the speaker so that I could calculate the differences and notify them again the next time I change the schedule for their talk.
I like the way that keeping track of this lets me include a summary of the change in the subject and in the body of the message. For example, one of the emails I sent today had the subject:
This blog post is about updating the <code>EMAILED_SCHEDULE</code> entry property in my Org Mode file that keeps track of this year's conference talks so that I can save the schedule that I've emailed. I want to set it only after I've successfully sent the email, because I might change my mind or forget to send the e-mail, and I want to make sure the entry property is based on what I've e-mailed.
</p>

<pre class="example" id="org1929970">
EmacsConf 2026: Schedule update as of 2026-10-28: svg: Sun ~2:20 PM EST (40 min earlier)
</pre>

<p>
I send the messages within Emacs, of course. This lets me use <a href="https://git.emacsconf.org/emacsconf-el/tree/emacsconf-mail.el">emacsconf-mail.el</a> to mail-merge using Emacs Lisp. I can then use <code>message-sent-hook</code> to run buffer-specific code once I've sent the message. This lets me set it up so that each message updates its own talk once I've used <code>C-c C-c</code> to send it.
</p>

<p>
First, I need a function that adds to a talk's logbook.
This is not specifically needed for the <code>message-sent-hook</code>, but it's useful for keeping track of the fact that I've sent this kind of email to that speaker on this date.
It's very helpful to be able to see who I've already sent the backstage information to or when was the last time I sent them a schedule update.
I can also filter the list of talks by the text in the logs so that if I partially send a mail merge and then cancel the rest because I want to tweak the code, I can send the new mail merge only to the remaining speakers.
This is in <a href="https://git.emacsconf.org/emacsconf-el/tree/emacsconf.el">emacsconf.el</a>.
</p>

<p>
</p><details><summary>emacsconf-add-to-talk-logbook: Add NOTE as a logbook entry for TALK.</summary><div class="org-src-container"><pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">emacsconf-add-to-talk-logbook</span> (talk note)
  <span class="org-doc">"Add NOTE as a logbook entry for TALK."</span>
  (<span class="org-keyword">interactive</span> (list (emacsconf-complete-talk) (read-string <span class="org-string">"Note: "</span>)))
  (<span class="org-keyword">save-window-excursion</span>
    (<span class="org-keyword">save-excursion</span>
      (<span class="org-keyword">emacsconf-with-talk-heading</span> talk
        (emacsconf-add-to-logbook
         (<span class="org-keyword">if</span> (functionp note)
             (funcall note)
           note))
        (bury-buffer (current-buffer))))))

</pre></div></details>
<p></p>

<p>
This function is the one that gets added to the message sent hook. It's in <a href="https://git.emacsconf.org/emacsconf-el/tree/emacsconf-mail.el">emacsconf-mail.el</a>:
</p>

<p>
</p><details><summary>emacsconf-mail-add-to-logbook: Add to logbook for all matching talks from this speaker.</summary><div class="org-src-container"><pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">emacsconf-mail-add-to-logbook</span> (email note)
  <span class="org-doc">"Add to logbook for all matching talks from this speaker."</span>
  (<span class="org-keyword">interactive</span>
   (<span class="org-keyword">let*</span> ((email (mail-strip-quoted-names
                  (plist-get (plist-get (notmuch-show-get-message-properties) <span class="org-builtin">:headers</span>)
                             <span class="org-builtin">:From</span>)))
          (talks (emacsconf-mail-talks email)))
     (list
      email
      (read-string (format <span class="org-string">"Note for %s: "</span>
                           (mapconcat (<span class="org-keyword">lambda</span> (o) (plist-get o <span class="org-builtin">:slug</span>))
                                      talks<span class="org-string">", "</span>))))))
  (<span class="org-keyword">condition-case</span> e
      (<span class="org-keyword">save-window-excursion</span>
        (mapc
         (<span class="org-keyword">lambda</span> (talk)
           (emacsconf-add-to-talk-logbook talk note))
         (emacsconf-mail-talks email)))
    (<span class="org-warning">error</span> (message <span class="org-string">"Error %s"</span> e))))

</pre></div></details>
<p></p>

<p>
And this function actually sets up the <code>message-sent-hook</code>:
</p>

<p>
</p><details><summary>emacsconf-mail-log-message-when-sent</summary><div class="org-src-container"><pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">emacsconf-mail-log-message-when-sent</span> (o message)
  (add-hook <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">message-sent-hook</span>
            <span class="org-highlight-quoted-quote">`</span>(<span class="org-keyword">lambda</span> ()
               (<span class="org-keyword">save-window-excursion</span>
                 (emacsconf-add-to-talk-logbook
                  ,(plist-get o <span class="org-builtin">:slug</span>)
                  ,message))
               (<span class="org-keyword">when</span> (match-buffers <span class="org-string">"*unsent"</span>)
                 (switch-to-buffer (car (match-buffers <span class="org-string">"*unsent"</span>)))))
            nil t))

</pre></div></details>
<p></p>

<p>
Which gets called by this part of <code>emacsconf-mail-prepare</code>:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">when</span> (plist-get template <span class="org-builtin">:log-note</span>)
  (mapc (<span class="org-keyword">lambda</span> (talk)
          (emacsconf-mail-log-message-when-sent talk (plist-get template <span class="org-builtin">:log-note</span>)))
        (emacsconf-mail-talks email)))
</code></pre>
</div>


<p>
Then my <code>emacsconf-mail-interim-schedule-update</code> can specify the <code>:log-note</code> like this:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>      <span class="org-builtin">:log-note</span>
      (<span class="org-keyword">lambda</span> ()
        (<span class="org-keyword">dolist</span> (talk (cdr group))
          (<span class="org-keyword">emacsconf-with-talk-heading</span> talk
            (emacsconf-schedule-save-emailed-time)))
        (concat <span class="org-string">"emacsconf-mail-interim-schedule-update"</span>
                (<span class="org-keyword">if</span> log-note (concat <span class="org-string">": "</span> log-note) <span class="org-string">""</span>) <span class="org-string">" - "</span> summary))
</code></pre>
</div>


<p>
This lets me run that code only when the mail gets sent.
</p>

<p>
Next automation idea: Someday I may even figure out how to attach an
iCalendar file (including updates to events) so that people can add it to their calendars.
</p>

<p>
If you find yourself wanting to run code when a message gets sent, then definitely take a look at <code>message-sent-hook</code>.
You can add a buffer-local hook with the fourth argument to add-hook (ex: <code>(add-hook 'message-sent-hook (lambda () ...) nil t)</code>) so that you can take actions specific to that message.
</p>

<p>
Have fun!
</p>
<div><a href="https://sachachua.com/blog/2026/10/emacsconf-using-message-sent-hook-to-run-buffer-specific-code-to-keep-track-of-e-mailed-schedules/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F10%2Femacsconf-using-message-sent-hook-to-run-buffer-specific-code-to-keep-track-of-e-mailed-schedules%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>2026-10-26 Emacs news</title>
		<link>https://sachachua.com/blog/2026/10/2026-10-26-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 26 Oct 2026 13:26:36 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/10/2026-10-26-emacs-news/</guid>
		<description><![CDATA[<p>
The coolest thing I saw this week is <a href="https://handwritten.danieljanus.pl/2026-10-20-clerkenwell.html">Clerkenwell, a handwritten Clojure notebook</a> (<a href="https://github.com/nathell/clerkenwell">Github</a>).
</p>

<ul class="org-ul">
<li>Upcoming events (<a href="https://emacslife.com/calendar/emacs-calendar.ics">iCal file</a>, <a href="https://emacslife.com/calendar/">Org</a>):
<ul class="org-ul">
<li>Emacs Berlin: Emacs-Berlin Hybrid Meetup <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Wed Oct 28 1100 America/Vancouver - 1300 America/Chicago - 1400 America/Toronto - 1800 Etc/UTC - 1900 Europe/Berlin - 2330 Asia/Kolkata &ndash; Thu Oct 29 0200 Asia/Singapore</li>
<li>EmacsATX: Emacs Social <a href="https://www.meetup.com/emacsatx/events/316464081/">https://www.meetup.com/emacsatx/events/316464081/</a> Thu Nov 5 1600 America/Vancouver - 1800 America/Chicago - 1900 America/Toronto &ndash; Fri Nov 6 0000 Etc/UTC - 0100 Europe/Berlin - 0530 Asia/Kolkata - 0800 Asia/Singapore</li>
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Fri Nov 6 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1600 Etc/UTC - 1700 Europe/Berlin - 2130 Asia/Kolkata &ndash; Sat Nov 7 0000 Asia/Singapore</li>
<li><a href="https://www.youtube.com/watch?v=BlgtfOsXgCs">Why Sacha Chua Still Lives in Emacs After 20+ Years</a></li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://codeberg.org/jjba23/welkomscherm.el">welkomscherm v1.2.1: a small, calm, extensible dashboard for Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1xdrqzb/welkomscherm_v121_a_small_calm_extensible/">Reddit</a>)</li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://macadie.info/2026/10/21/i-updated-my-emacs-number-package/">Eric MacAdie: I Updated My Emacs Number Package</a></li>
<li><a href="https://github.com/benleis1/emacs-init/blob/main/docs/flymake.md">Flymake for Emacs Lisp</a> (<a href="https://mathstodon.xyz/@benleis/117504833640810631">@benleis@mathstodon.xyz</a>)</li>
<li><a href="https://www.youtube.com/watch?v=5qgXUH5pHOk">Better lisp editing with `tree-guide.el` (and other packages)</a> (28:53)</li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://github.com/abidanBrito/region-cursors">region-cursors - Cursor overlays at both ends of the region</a> (<a href="https://www.reddit.com/r/emacs/comments/1xf9z53/regioncursors_cursor_overlays_at_both_ends_of_the/">Reddit</a>)</li>
<li><a href="https://gitlab.com/vegasharmon/flick">Flick: a quick and simple font picker</a> (<a href="https://www.reddit.com/r/emacs/comments/1xb242b/flick_a_quick_and_simple_font_picker/">Reddit</a>)</li>
<li><a href="https://protesilaos.com/codelog/2026-10-25-emacs-doric-themes-1-4-0/">Protesilaos: Emacs: doric-themes version 1.4.0</a></li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://youtu.be/7okzjW_fZGg">Some recent changes I've made to tab-config my tabbing package for emacs built on top of tab-line</a> (<a href="https://mathstodon.xyz/@benleis/117481104430095288">@benleis@mathstodon.xyz</a>)</li>
<li><a href="https://jointhefreeworld.org/blog/articles/emacs/emacs-folding-kirigami/">Emacs finally folds to my liking - jointhefreeworld</a></li>
<li><a href="https://ripscope.com/docs/editors/emacs">Emacs - Ripscope</a> - search C symbol definitions</li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://lvajxi03.github.io/posts/2026-10-21/">Letters to Auntie: spell-checking in Emacs</a> (<a href="https://mastodon.social/@marcin_bielewicz/117479797618270995">@marcin_bielewicz</a>)</li>
<li><a href="https://www.youtube.com/watch?v=pS3MI9DRD44">Emacs for obsessive word lovers</a> (10:40)</li>
<li><a href="https://blog.davep.org/2026/10/22/blogmore-el-v5-4-0.html">Dave Pearson: blogmore.el v5.4.0</a></li>
<li><a href="https://sachachua.com/blog/2026/10/dictating-blog-posts-into-emacs/">Sacha Chua: Dictating blog posts into Emacs</a> (<a href="https://irreal.org/blog/?p=14169">Irreal</a>)</li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://modeorg.org/">modeorg.org: a human guide to Org Mode</a> (<a href="https://murad.social/@pablo/statuses/01M5EX6XX7Y488PY26PMA212FY">@pablo@murad.social</a>)</li>
<li><a href="https://martinschell.eu/blog/create_subtree_org_capture_dynamic/">Martin Schell: Using Org-Capture Templates with Elisp Evaluation to Set Values Depending on User Input</a> (<a href="https://irreal.org/blog/?p=14176">Irreal</a>)</li>
<li><a href="https://gist.github.com/olekenneth/1f49995c53f5e1ae4ad9e774afff7ab7">How to export your org-mode and org-agenda to Apple Reminders · GitHub</a></li>
<li><a href="https://peterprevos.com/praxis/publishing-websites-with-org-mode-01-principles/">Building a website with Org mode</a> (<a href="https://www.reddit.com/r/orgmode/comments/1xfr53s/building_a_website_with_org_mode/">Reddit</a>)</li>
<li><a href="https://idlip.in/log/denden/">Denden: Emacs Lisp SSG based on org-publish | Dilip's Log</a> (<a href="https://social.lol/@swrogers/117507706326339354">@swrogers@social.lol</a>)</li>
<li><a href="https://taingram.org/blog/org-publish-rss-caching.html">Adding Caching to org-publish-rss.el</a> (<a href="https://mastodon.social/@tiang/117499026239014230">@tiang</a>)</li>
<li><a href="https://github.com/senkireign/org-constellation">org-constellation</a> (<a href="https://www.reddit.com/r/emacs/comments/1xaktsn/orgconstellation/">Reddit</a>)</li>
</ul></li>
<li>Completion:
<ul class="org-ul">
<li><a href="https://github.com/redguardtoo/cmd-rewind">cmd-rewind: resume last completing-read with saved input</a> (<a href="https://www.reddit.com/r/emacs/comments/1xdehqe/rewind_is_published/">Reddit</a>)</li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://arunmozhi.in/2026/07/10/using-typescript-v7-with-emacs-eglot/">Using Typescript V7 With Emacs Eglot</a> (<a href="https://social.lol/@swrogers/117479961048981979">@swrogers@social.lol</a>)</li>
<li><a href="https://www.jamescherti.com/emacs-eglot-apply-code-actions-fixes-on-save/">Auto apply Emacs Eglot safe Code Actions (fixes) on Save</a></li>
<li><a href="https://www.youtube.com/watch?v=PEr-_MyBJ0Y">Video 3 - Configuring Emacs, Arrays, Slices, Vectors, and the Borrow Checker</a> (15:47)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1xas6a6/back_to_emacs_with_the_scss_workflow_i_always/">Back to Emacs with the SCSS workflow I always wanted</a></li>
<li><a href="https://youtu.be/42dvpr2BRqA?t=608">Writing an mTLS server in Go using Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1xdo91q/writing_an_mtls_server_in_go_using_emacs/">Reddit</a>)</li>
<li><a href="https://handwritten.danieljanus.pl/2026-10-20-clerkenwell.html">Clerkenwell: a handwritten Clojure notebook</a> (<a href="https://github.com/nathell/clerkenwell">Github</a>)</li>
</ul></li>
<li>Shells:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=jB17WtV9JCk">Ghostel integration in Emacs</a> (10:27)</li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://gitlab.com/emacs-vm/vm">VM 9.0.0, a mail reader for Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1xaia4t/vm_900_a_mail_reader_for_emacs/">Reddit</a>)</li>
<li><a href="https://irreal.org/blog/?p=14163">Irreal: A Small Improvement</a> - deleting cookies after using elfeed-webkit</li>
</ul></li>
<li>Evil mode:
<ul class="org-ul">
<li><a href="https://github.com/redguardtoo/evil-matchit">evil-matchit 5.0.0 is published</a> (<a href="https://www.reddit.com/r/emacs/comments/1x9uscf/evilmatchit_500_is_published/">Reddit</a>) jumping between paired structures</li>
</ul></li>
<li>Multimedia:
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2026/10/subed-el-and-quoting-snippets-of-youtube-videos-from-the-auto-captions/">Sacha Chua: subed.el and quoting snippets of YouTube videos from the auto captions</a></li>
<li><a href="https://www.youtube.com/watch?v=HrvyY1x3lg4">Yay Emacs 44: More conversational voice interfaces</a> (01:11:04)</li>
</ul></li>
<li>LLMs:
<ul class="org-ul">
<li><a href="https://github.com/nmagko/gptel-web">nmagko/gptel-web: Web search tools for Emacs gptel · GitHub</a></li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1xagzfp/fortnightly_tips_tricks_and_questions_20261020/">Fortnightly Tips, Tricks, and Questions — 2026-10-20 / week 42</a></li>
<li><a href="https://lists.gnu.org/archive/html/guix-devel/2026-10/msg00121.html">40c3 - organizing a Lisp assembly for self-organized workshops</a> (<a href="https://chaos.social/@nmeum/117473767401979292">@nmeum@chaos.social</a>)</li>
<li><a href="https://softwarepreservation.computerhistory.org/emacs/">Emacs Historical Archive</a> (<a href="https://sfba.social/@kickingvegas/117485881894213904">@kickingvegas@sfba.social</a>)</li>
<li><a href="https://macadie.info/2026/10/25/emacs-carnival-are-keyboards-and-m-x-here-to-stay/">Eric MacAdie: Emacs Carnival: Are keyboards and M-x here to stay?</a></li>
<li><a href="https://www.youtube.com/watch?v=CUYWAyCgzos">Can your Vim do that?  <b>starts beatboxing</b></a> (00:53) having fun with multiple cursors.</li>
<li><a href="https://sachachua.com/blog/2026/10/upcoming-chat-with-linkarzu-about-using-emacs-for-25-years/">Sacha Chua: Upcoming chat with linkarzu about using Emacs for 25 years</a></li>
<li><a href="https://www.youtube.com/watch?v=Qlxxe07CtC8">Github PR box * tech chats * conference outfits * Emacs Conf prep</a> (05:35:41)</li>
<li>Linkarzu clips:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=dQ6X0-XCLIw">Emacs vs Neovim - Why Prot Won't Pick a Side</a> (01:30:34)</li>
<li><a href="https://www.youtube.com/watch?v=X23tIQSX6u8">Emacs vs Neovim - Why He Switched for Good</a> (12:27)</li>
<li><a href="https://www.youtube.com/watch?v=eqyAS5y_4Co">vim user admits emacs is better</a> (14:08)</li>
<li><a href="https://youtu.be/dQ6X0-XCLIw">Emacs vs Neovim - Why Prot Won't Pick a Side</a> (<a href="https://www.reddit.com/r/emacs/comments/1xfv0vp/emacs_vs_neovim_why_prot_wont_pick_a_side/">Reddit</a>)</li>
</ul></li>
<li><a href="https://sachachua.com/blog/2026/10/analyzing-emacs-news/">Sacha Chua: Analyzing Emacs News: 564 posts over 11 years, &gt; 34k items, ~60/post</a></li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://ray-on-emacs.blogspot.com/2026/10/a-point-based-tooltip-for-emacs.html">Raymond Zeitler: A Point-Based Tooltip for Emacs</a></li>
<li><a href="https://www.youtube.com/watch?v=Nfiu6cXLsb8">Chai v2.1.0: Read Books in Emacs, Highlight, Search &amp; Ask with Sources</a> (01:36)</li>
<li><a href="https://www.youtube.com/watch?v=61-uNV9N154">exc.el — Runs Excel in Emacs</a> (18:48, <a href="https://github.com/mhoye/moderntools">Github</a>)</li>
<li><a href="https://techhub.social/@lispwizard/117478600944786880">Comparing file with autosaved file (@lispwizard@techhub.social)</a></li>
<li><a href="https://github.com/kickingvegas/anju/discussions/193">anju 1.9: mouse menus for storing frameset, setting macro counter, fill functions</a> (<a href="https://sfba.social/@kickingvegas/117485654190161814">@kickingvegas@sfba.social</a>)</li>
<li><a href="https://github.com/twitchy-ears/buffer-snapshotter">buffer-snapshotter: keeps snapshots of changed versions buffers (visiting files or not) written to disk</a> (<a href="https://loci.onl/@morix/117503888090868115">@morix@loci.onl</a>)</li>
<li><a href="https://pretalx.seagl.org/2026/talk/ANUBN3/">Learning an Ancient Language with an Ancient Text Editor - SeaGL 2026 - pretalx</a></li>
<li><a href="https://jaded.xwx.moe/lib/emacs-backups-undo.html">Profound anguish and Emacs persistent undos — (^ω^)</a> (<a href="https://jam.xwx.moe/objects/316c544a-01d0-4375-a66b-dd5acb05393e">@jadedctrl@jam.xwx.moe</a>)</li>
<li><a href="https://ice.ch3.st/notes/asm610jjcwh00h50">returning nonzero exit code from emacsclient (@amy@ice.ch3.st)</a></li>
<li><a href="https://www.youtube.com/watch?v=T6_PQSeK38E">Emacs and rust on an ASUS Eee PC 1000HA</a> (03:51)</li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2026-10/msg00426.html">ekp-fill - line-breaking algorithm; some parts were LLM-generated, so the author is rewriting</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="https://melpa.org/#/ctftime">ctftime</a>: CTFtime dashboard (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/difflayer">difflayer</a>: Overlay diffs on selected regions (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/elark">elark</a>: Emacs interface to Lark/Feishu via lark-cli (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/fz-index">fz-index</a>: Sublime-style fuzzy file open with a native index (MELPA)</li>
<li><a target="_blank" href="https://elpa.gnu.org/packages/isbn.html">isbn</a>: ISBN library (GNU ELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/modern-tab">modern-tab</a>: The common part of the two tab modes (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/region-cursors">region-cursors</a>: Display point and active mark using overlays (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/straight-overview">straight-overview</a>: Selective upgrade UI for straight.el packages (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/typst-overlay">typst-overlay</a>: Overlay Typst equations (MELPA)</li>
<li><a target="_blank" href="https://elpa.gnu.org/packages/xc.html">xc</a>: Emacs interface for xc (GNU ELPA)</li>
</ul></li>
</ul>

<p>
Links from <a href="https://www.reddit.com/r/emacs">reddit.com/r/emacs</a>, <a href="https://www.reddit.com/r/orgmode">r/orgmode</a>, <a href="https://www.reddit.com/r/spacemacs">r/spacemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #emacs</a>, <a href="https://bsky.app/hashtag/emacs">Bluesky #emacs</a>, <a href="https://hn.algolia.com/?query=emacs&amp;sort=byDate&amp;prefix&amp;page=0&amp;dateRange=all&amp;type=story">Hacker News</a>, <a href="https://lobste.rs/search?q=emacs&amp;what=stories&amp;order=newest">lobste.rs</a>, <a href="https://programming.dev/c/emacs?dataType=Post&amp;page=1&amp;sort=New">programming.dev</a>, <a href="https://lemmy.world/c/emacs">lemmy.world</a>, <a href="https://lemmy.ml/c/emacs?dataType=Post&amp;page=1&amp;sort=New">lemmy.ml</a>, <a href="https://planet.emacslife.com">planet.emacslife.com</a>, <a href="https://www.youtube.com/playlist?list=PL4th0AZixyREOtvxDpdxC9oMuX7Ar7Sdt">YouTube</a>, <a href="http://git.savannah.gnu.org/cgit/emacs.git/log/etc/NEWS">the Emacs NEWS file</a>, <a href="https://emacslife.com/calendar/">Emacs Calendar</a>, and <a href="https://lists.gnu.org/archive/html/emacs-devel/2026-10">emacs-devel</a>. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at <a href="mailto:sacha@sachachua.com">sacha@sachachua.com</a>. Thank you!</p>
<div><a href="https://sachachua.com/blog/2026/10/2026-10-26-emacs-news/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F10%2F2026-10-26-emacs-news%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>subed.el and quoting snippets of YouTube videos from the auto captions</title>
		<link>https://sachachua.com/blog/2026/10/subed-el-and-quoting-snippets-of-youtube-videos-from-the-auto-captions/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 26 Oct 2026 02:11:17 GMT</pubDate>
    <category>emacs</category>
<category>audio</category>
<category>subed</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/10/subed-el-and-quoting-snippets-of-youtube-videos-from-the-auto-captions/</guid>
		<description><![CDATA[<p>
I'm preparing for a conversation with <a href="https://linkarzu.com/">linkarzu</a>.
It would be fun to quote snippets from some of the other videos he has.
I like the way he does a lot of reaction videos that build on what people have shared.
He tends to listen to things at 1.25 or 1.5x speed.
I'm not sure if I have the patience even for that,
so it'd be nice to be able to just quickly skim the text.
He also clips a lot of his own videos.
It might be interesting to play around with my workflows for listening to snippets and clipping them.
</p>

<p>
I've grabbed YouTube captions and reformatted them before:
</p>
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2021/04/grabbing-the-youtube-auto-generated-captions-is-pretty-useful-when-making-emacs-news/">Grabbing the Youtube auto-generated captions is pretty useful when making Emacs News</a> (2021)</li>
<li><a href="https://sachachua.com/blog/2021/04/org-mode-insert-youtube-video-with-separate-captions/">Org Mode: Insert YouTube video with separate captions</a> (2021)</li>
</ul>

<p>
This time around, I want to get the VTT format so that I can possibly use them with <a href="https://github.com/sachac/subed-record">subed-record</a> to clip audio or video.
</p>

<p>
From a YouTube link, I want to run a single command that gets me a VTT file with that as the media source and with the captions.
If there are any chapters in the description, it would be lovely to get them too. I can get them from the JSON, yay!
</p>

<p>
Now I can use <code>M-x sacha-subed-youtube</code> to open the VTT file, which is cached locally, and I can use <code>M-x sacha-subed-youtube-region-as-quote</code> after selecting a section. Well, actually, I have an Embark command <code>s</code> (for "subed") that I can run on a YouTube video link and a selected-mode shortcut for <code>y</code> that I can run when the region is selected. Results:
</p>

<p>
<a href="https://youtu.be/-1qS7Xiuh9E?t=586&end=619">I Asked Prot If I Should Switch to Emacs</a>
</p>
<blockquote>
<p>
<span class="media-time" data-start="586.000">00:09:46</span>: I think the value of Org is that it is in the context of Emacs, which can now do other things. It can be your email client. It can be your agenda. Of course, it can be your programming environment. All these sorts of things, like your RSS feed reader and so on. And in the context of all that, you also have Org. So for me, that's kind of the value. But otherwise, having Org elsewhere, it's great still, because the paradigm of Org, I think, is a portable paradigm.
</p>
</blockquote>

<p>
<a href="https://youtu.be/N95_UgZXPms?t=0&end=7">Org Mode in Neovim Is Finally Here - Full org.nvim Demo</a>
</p>
<blockquote>
<p>
<span class="media-time" data-start="0.000">00:00:00</span>: I think that I achieved like 100% of parity with the original Org Mode version on Emacs.
</p>
</blockquote>

<details><summary>Code for subed + YouTube</summary>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defvar</span> <span class="org-variable-name">sacha-subed-youtube-dir</span> <span class="org-string">"~/proj/youtube-captions"</span>
  <span class="org-doc">"Directory with YouTube captions."</span>)
(<span class="org-keyword">defvar</span> <span class="org-variable-name">sacha-subed-youtube-temp-dir</span> <span class="org-string">"~/Downloads"</span> <span class="org-doc">"Snap installations need a workaround for permission."</span>)
<span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-subed-youtube</span> (url)
  <span class="org-doc">"Download the automatic subtitles or check my cache."</span>
  (<span class="org-keyword">interactive</span> <span class="org-string">"MURL: "</span>)
  (<span class="org-keyword">let*</span> ((id (sacha-org-yt-id url))
         (existing (car (directory-files sacha-subed-youtube-dir t
                                         (concat <span class="org-string">"^"</span> (regexp-quote id) <span class="org-string">".*\\.vtt\\'"</span>)))))
    (<span class="org-keyword">if</span> existing
        (<span class="org-keyword">progn</span>
          (find-file existing)
          (subed-mpv-play-from-url url))
      <span class="org-comment-delimiter">;; </span><span class="org-comment">Download</span>
      (<span class="org-keyword">let</span> ((directory (make-temp-file (expand-file-name <span class="org-string">"yt-dlp"</span> sacha-subed-youtube-temp-dir) t))
            filename
            json
            match
            chapters
            subtitles)
        (<span class="org-keyword">with-current-buffer</span> (get-buffer-create <span class="org-string">"*yt-dlp*"</span>)
          (<span class="org-keyword">let</span> ((default-directory directory))
            (call-process
             <span class="org-string">"yt-dlp"</span> nil t nil
             <span class="org-string">"&#45;&#45;skip-download"</span>
             <span class="org-string">"&#45;&#45;write-info-json"</span>
             <span class="org-string">"&#45;&#45;sub-format"</span>
             <span class="org-string">"vtt"</span>
             <span class="org-string">"&#45;&#45;write-subs"</span>
             <span class="org-string">"&#45;&#45;write-auto-subs"</span>
             url)))
        (<span class="org-keyword">when</span> (null (directory-files directory t <span class="org-string">"\\.json$"</span>))
          (<span class="org-warning">error</span> <span class="org-string">"Could not get data."</span>))
        (<span class="org-keyword">setq</span> json (json-read-file (car (directory-files directory t <span class="org-string">"\\.json$"</span>))))
        (<span class="org-keyword">setq</span> chapters (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">chapters</span> json))
        (<span class="org-keyword">setq</span> filename (expand-file-name
                        (concat id <span class="org-string">" - "</span> (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">title</span> json) <span class="org-string">".vtt"</span>)
                        sacha-subed-youtube-dir))
        (<span class="org-keyword">setq</span> subtitles (subed-parse-file (car (directory-files
                                                directory t
                                                <span class="org-string">"\\.vtt$"</span>))))
        (delete-directory directory t)
        <span class="org-comment-delimiter">;; </span><span class="org-comment">add the chapters as comments</span>
        (mapc
         (<span class="org-keyword">lambda</span> (sub)
           (<span class="org-keyword">when</span> (<span class="org-keyword">and</span> chapters
                      (&gt;= (elt sub 1)
                          (* (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">start_time</span> (car chapters)) 1000)))
             (<span class="org-keyword">setf</span> (elt sub 4) (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">title</span> (<span class="org-keyword">pop</span> chapters)))))
         subtitles)
        (subed-create-file
         filename
         subtitles
         t)
        (find-file filename)
        (subed-mpv-play-from-url url)))))

(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-subed-youtube-id</span> ()
  <span class="org-doc">"Return the YouTube ID."</span>
  (<span class="org-keyword">or</span> (<span class="org-keyword">save-restriction</span>
        (<span class="org-keyword">save-excursion</span>
          (goto-char (point-min))
          (subed-forward-subtitle-text)
          (<span class="org-keyword">when</span> (subed-record-get-directive <span class="org-string">"YOUTUBE_URL"</span>)
            (sacha-org-yt-id
             (subed-record-get-directive <span class="org-string">"YOUTUBE_URL"</span>)))))
      (car (split-string (file-name-base (buffer-file-name)) <span class="org-string">" "</span>))))

<span class="org-comment-delimiter">;; </span><span class="org-comment">Now we just need a quick way to copy a YouTube URL.</span>
<span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-subed-youtube-url</span> (<span class="org-type">&amp;optional</span> start-msecs end-msecs)
  <span class="org-doc">"Copy YouTube URL for the current timestamp."</span>
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">when-let*</span>
      ((id (sacha-subed-youtube-id))
       (s
        (<span class="org-keyword">if</span> end-msecs
            (format <span class="org-string">"https://youtu.be/%s?t=%d&amp;end=%d"</span>
                    id
                    (/ (<span class="org-keyword">or</span> start-msecs (subed-subtitle-msecs-start))
                       1000)
                    (1+ (/ end-msecs
                           1000)))
          (format <span class="org-string">"https://youtu.be/%s?t=%d"</span>
                    id
                    (/ (<span class="org-keyword">or</span> start-msecs (subed-subtitle-msecs-start))
                       1000)))))
    (<span class="org-keyword">when</span> (called-interactively-p <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">any</span>)
      (kill-new s)
      (message <span class="org-string">"%s"</span> s))
    s))

<span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-subed-youtube-play</span> ()
  <span class="org-doc">"Play this video from YouTube."</span>
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">when-let*</span>
      ((id (sacha-subed-youtube-id))
       (s (concat <span class="org-string">"https://youtu.be/"</span> id)))
    (<span class="org-keyword">when</span> (string= subed-mpv-media-file s)
      (subed-mpv-play-from-url s))
    (subed-mpv-jump-to-current-subtitle)
    (subed-mpv-unpause)))

<span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-subed-youtube-region-as-quote</span> (beg end <span class="org-type">&amp;optional</span> label)
  <span class="org-doc">"Format this as a quote."</span>
  (<span class="org-keyword">interactive</span> (list (region-beginning) (region-end) (<span class="org-keyword">when</span> current-prefix-arg (read-string <span class="org-string">"Label: "</span>))))
  (<span class="org-keyword">let*</span> ((id (sacha-subed-youtube-id))
         (url (sacha-subed-youtube-url
               (<span class="org-keyword">save-excursion</span>
                 (goto-char beg)
                 (subed-subtitle-msecs-start))
               (<span class="org-keyword">save-excursion</span>
                 (goto-char end)
                 (subed-subtitle-msecs-stop))))
         (base (file-name-base (buffer-file-name)))
         (text (subed-subtitle-list-text (subed-subtitle-list beg end)))
         (s (format
             <span class="org-string">"%s\n#+begin_quote\n%s: %s\n#+end_quote\n"</span>
             (org-link-make-string
              (concat <span class="org-string">"yt:"</span> url)
              (<span class="org-keyword">or</span> label
                  (<span class="org-keyword">and</span> (string-match (format <span class="org-string">"^%s - </span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.+</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">"</span> (regexp-quote id)) base)
                       (match-string 1 base))
                  (sacha-page-title url)))
             (org-link-make-string
              (concat <span class="org-string">"vtime:"</span>
                      (subed-msecs-to-timestamp
                       (<span class="org-keyword">save-excursion</span>
                         (goto-char beg)
                         (subed-subtitle-msecs-start))
                       t)))
             (<span class="org-keyword">with-temp-buffer</span>
               (insert text)
               (<span class="org-keyword">let</span> ((fill-column most-positive-fixnum))
                 (fill-region (point-min) (point-max))
                 (string-trim (buffer-string)))))))
      (<span class="org-keyword">when</span> (called-interactively-p <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">any</span>)
        (kill-new s)
        (message <span class="org-string">"%s"</span> s))
      s))
</code></pre>
</div>

</details>

<p>
Some of this code hasn't been committed to <a href="https://github.com/sachac/subed">subed</a> yet, but I will commit it sometime this week.
</p>

<p>
My next steps might be to:
</p>

<ul class="org-ul">
<li>cache the video as a whole to make it easier to check the waveforms</li>
<li>extract the segment to a standalone video file so that it's easy for me to play back or include in another video</li>
<li>see if I can use my voice activity detection and semi-streaming speech recognition to get a VTT of my current OBS recording</li>
</ul>

<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#subed">EmacsConfiguration.</a></div><div><a href="https://sachachua.com/blog/2026/10/subed-el-and-quoting-snippets-of-youtube-videos-from-the-auto-captions/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F10%2Fsubed-el-and-quoting-snippets-of-youtube-videos-from-the-auto-captions%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Analyzing Emacs News: 564 posts over 11 years, > 34k items, ~60/post</title>
		<link>https://sachachua.com/blog/2026/10/analyzing-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Sun, 25 Oct 2026 13:15:33 GMT</pubDate>
    <category>emacs</category>
<category>community</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/10/analyzing-emacs-news/</guid>
		<description><![CDATA[<p>
<a href="https://sachachua.com/blog/2026/10/upcoming-chat-with-linkarzu-about-using-emacs-for-25-years/">While summarizing my history with Emacs</a>, I was curious about just how many <a href="https://sachachua.com/blog/category/emacs-news">Emacs News</a> posts I've written and how many links I've highlighted. 564 posts, &gt; 34000 items, an average of 60 items per posts.
</p>

<p>
Analysis: It turned out that my <a href="https://github.com/sachac/emacs-news">emacs-news/index.org</a> only went back to about 2016,
missing a few months of 2015.
To fill in the data, I needed to convert the old HTML files into Org format.
</p>


<div class="org-src-container">
<pre class="src src-:eval"><code>find -name \*news\*.html -exec zsh -c 'pandoc -f html -t org {} &#45;&#45;wrap=none -o $(basename {} .html).org' \;
</code></pre>
</div>


<p>
Then I inserted the old entries into my file.
<code>insert-file-contents</code> doesn't seem to move the point, but if I narrow to my Posts subtree (<code>org-narrow-to-subtree</code>), then I can go to the end of the narrowed part.
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-emacs-news-insert-old-ones</span> ()
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">let</span> ((dir <span class="org-string">"~/proj/static-blog/blog/2015/"</span>))
    (<span class="org-keyword">dolist</span> (f
             (sort
              (directory-files-recursively dir <span class="org-string">"news.*org$"</span>)
              <span class="org-builtin">:key</span> <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">file-name-base</span>
              <span class="org-builtin">:reverse</span> t))
      (insert <span class="org-string">"** "</span> (substring (file-name-base f) 0 10) <span class="org-string">" Emacs News\n\n"</span>)
      (insert-file-contents f)
      (goto-char (point-max)))))
</code></pre>
</div>


<p>
With all the entries in place, let's look at the list items that start with a link.
</p>

<details><summary>code for analysis</summary>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code><span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-emacs-news-count-links</span> ()
  <span class="org-doc">"Return the number of main links in this subtree."</span>
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">let</span> ((count 0))
    (<span class="org-keyword">save-excursion</span>
      (org-back-to-heading)
      (<span class="org-keyword">while</span> (re-search-forward <span class="org-string">"^ *- \\[\\["</span> (<span class="org-keyword">save-excursion</span> (org-end-of-subtree)) t)
        (<span class="org-keyword">incf</span> count)))
    (<span class="org-keyword">when</span> (called-interactively-p <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">any</span>)
      (message <span class="org-string">"%d"</span> count))
    count))

<span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-emacs-news-analyze</span> ()
  <span class="org-doc">"Count how many entries and items. Make a table of entries."</span>
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">with-current-buffer</span> (find-file-noselect <span class="org-string">"~/sync/emacs-news/index.org"</span>)
    (goto-char (point-min))
    (<span class="org-keyword">let</span> (results)
      (org-map-entries
       (<span class="org-keyword">lambda</span> ()
         (<span class="org-keyword">let</span> ((title (org-entry-get (point) <span class="org-string">"ITEM"</span>)))
           (<span class="org-keyword">when</span> (string-match <span class="org-string">"</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string"> Emacs"</span> title)
             (<span class="org-keyword">push</span> (list (match-string 1 title)
                         (sacha-emacs-news-count-links))
                   results)))))
      (seq-uniq (sort results <span class="org-builtin">:key</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">car</span> <span class="org-builtin">:reverse</span> t)))))
</code></pre>
</div>

</details>


<div class="org-src-container">
<pre class="src src-emacs-lisp" id="orgd57c2cb"><code>(append <span class="org-highlight-quoted-quote">'</span>((<span class="org-string">"Date"</span> <span class="org-string">"Count"</span>) hline) (sacha-emacs-news-analyze))
</code></pre>
</div>



<div class="org-src-container">
<pre class="src src-gnuplot"><code><span class="org-constant">set</span> <span class="org-type">title</span> <span class="org-string">"Number of links in Emacs News per week"</span>
<span class="org-constant">set</span> xdata time
<span class="org-constant">set</span> timefmt <span class="org-string">"%Y-%m-%d"</span>
<span class="org-constant">set</span> format x <span class="org-string">"%Y"</span>
<span class="org-constant">set</span> xlabel <span class="org-string">"Year"</span>
<span class="org-constant">set</span> ylabel <span class="org-string">"Count"</span>
<span class="org-constant">set</span> grid
<span class="org-keyword">plot</span> data <span class="org-type">using</span> 1:2 <span class="org-type">with</span> <span class="org-function-name">lines</span> <span class="org-type">title</span> <span class="org-string">"Items"</span>
</code></pre>
</div>



<figure id="org9307c01">
<img src="https://sachachua.com/blog/2026/10/analyzing-emacs-news/emacs-news.png" alt="emacs-news.png">

</figure>

<p>
This probably tracks my availability more than anything else. The dip in 2017 and 2018 corresponds pretty well to the time that the kiddo needed more of my attention. Babies sleep a lot; toddlers, not so much.
</p>

<p>
I generally feel that there are so many interesting rabbit holes to go down each week,
and the Emacs community is active enough that there's always one or two things I want to add to my to-do list to explore further.
Putting together Emacs News is one of the highlights of my week. <a href="https://sachachua.com/blog/2023/12/analyzing-my-emacs-time-over-the-last-11-years-or-so/">It takes me about 1 - 2 hours</a>,
and some of that is just because I get distracted trying out the cool stuff I come across.
</p>

<p>
Learning from similar newsletters: <a href="https://alan.petitepomme.net/cwn/">OCaml Weekly News</a> has a single author as well and does a lot more summarization, but includes fewer links.
<a href="https://this-week-in-rust.org/">This Week in Rust</a> is a similar link-dump weekly newsletter.
It's written by a larger team and it has more commentary.
I think that for the Emacs community, I'm still leaning towards this large list of categorized links for easy skimming.
As I get the hang of writing more, I'd like to write more blog posts myself that Emacs News can also link to.
If your community doesn't already have a weekly or monthly newsletter, I highly recommend it as a way to <a href="https://sachachua.com/blog/2025/05/working-on-the-plumbing-in-a-small-web-community/">bring the community together</a>.
</p>

<p>
Here's the table, in case you're curious:
</p>

<details class="code-details"><summary>Data</summary>
<table>


<colgroup>
<col class="org-right">

<col class="org-right">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">Date</th>
<th scope="col" class="org-right">Count</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">2026-10-19</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2026-10-12</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2026-10-05</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2026-09-28</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2026-09-21</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2026-09-14</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2026-09-07</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2026-08-31</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2026-08-24</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2026-08-17</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2026-08-10</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2026-08-03</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2026-07-27</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2026-07-20</td>
<td class="org-right">99</td>
</tr>

<tr>
<td class="org-right">2026-07-13</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2026-07-06</td>
<td class="org-right">78</td>
</tr>

<tr>
<td class="org-right">2026-06-29</td>
<td class="org-right">60</td>
</tr>

<tr>
<td class="org-right">2026-06-22</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2026-06-15</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2026-06-08</td>
<td class="org-right">93</td>
</tr>

<tr>
<td class="org-right">2026-06-01</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2026-05-25</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2026-05-18</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2026-05-11</td>
<td class="org-right">94</td>
</tr>

<tr>
<td class="org-right">2026-05-04</td>
<td class="org-right">88</td>
</tr>

<tr>
<td class="org-right">2026-04-27</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2026-04-20</td>
<td class="org-right">91</td>
</tr>

<tr>
<td class="org-right">2026-04-13</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2026-04-06</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2026-03-30</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2026-03-23</td>
<td class="org-right">61</td>
</tr>

<tr>
<td class="org-right">2026-03-16</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2026-03-09</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2026-03-02</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2026-02-23</td>
<td class="org-right">96</td>
</tr>

<tr>
<td class="org-right">2026-02-16</td>
<td class="org-right">89</td>
</tr>

<tr>
<td class="org-right">2026-02-09</td>
<td class="org-right">87</td>
</tr>

<tr>
<td class="org-right">2026-02-02</td>
<td class="org-right">109</td>
</tr>

<tr>
<td class="org-right">2026-01-26</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2026-01-19</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2026-01-12</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2026-01-05</td>
<td class="org-right">88</td>
</tr>

<tr>
<td class="org-right">2026-01-04</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2025-12-29</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2025-12-22</td>
<td class="org-right">99</td>
</tr>

<tr>
<td class="org-right">2025-12-15</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2025-12-08</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2025-12-01</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2025-11-24</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2025-11-17</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2025-11-10</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2025-11-03</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2025-10-27</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2025-10-20</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2025-10-13</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2025-10-06</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2025-09-29</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2025-09-22</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2025-09-15</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2025-09-08</td>
<td class="org-right">61</td>
</tr>

<tr>
<td class="org-right">2025-09-01</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2025-08-25</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2025-08-18</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2025-08-11</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2025-08-04</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2025-07-28</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2025-07-21</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2025-07-14</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2025-07-07</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2025-06-30</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2025-06-23</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2025-06-16</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2025-06-09</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2025-06-02</td>
<td class="org-right">68</td>
</tr>

<tr>
<td class="org-right">2025-05-26</td>
<td class="org-right">61</td>
</tr>

<tr>
<td class="org-right">2025-05-19</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2025-05-12</td>
<td class="org-right">58</td>
</tr>

<tr>
<td class="org-right">2025-05-05</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2025-04-28</td>
<td class="org-right">96</td>
</tr>

<tr>
<td class="org-right">2025-04-21</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2025-04-14</td>
<td class="org-right">99</td>
</tr>

<tr>
<td class="org-right">2025-04-07</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2025-03-31</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2025-03-24</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2025-03-17</td>
<td class="org-right">94</td>
</tr>

<tr>
<td class="org-right">2025-03-10</td>
<td class="org-right">102</td>
</tr>

<tr>
<td class="org-right">2025-03-03</td>
<td class="org-right">102</td>
</tr>

<tr>
<td class="org-right">2025-02-24</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2025-02-17</td>
<td class="org-right">85</td>
</tr>

<tr>
<td class="org-right">2025-02-10</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2025-02-03</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2025-01-27</td>
<td class="org-right">78</td>
</tr>

<tr>
<td class="org-right">2025-01-20</td>
<td class="org-right">80</td>
</tr>

<tr>
<td class="org-right">2025-01-13</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2025-01-06</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2024-12-30</td>
<td class="org-right">92</td>
</tr>

<tr>
<td class="org-right">2024-12-23</td>
<td class="org-right">85</td>
</tr>

<tr>
<td class="org-right">2024-12-16</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2024-12-09</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2024-12-02</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2024-11-25</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2024-11-18</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2024-11-11</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2024-11-04</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2024-10-28</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2024-10-21</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2024-10-14</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2024-10-07</td>
<td class="org-right">80</td>
</tr>

<tr>
<td class="org-right">2024-09-30</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2024-09-23</td>
<td class="org-right">93</td>
</tr>

<tr>
<td class="org-right">2024-09-16</td>
<td class="org-right">85</td>
</tr>

<tr>
<td class="org-right">2024-09-09</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2024-09-02</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2024-08-26</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2024-08-19</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2024-08-12</td>
<td class="org-right">48</td>
</tr>

<tr>
<td class="org-right">2024-08-05</td>
<td class="org-right">45</td>
</tr>

<tr>
<td class="org-right">2024-07-29</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2024-07-22</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2024-07-15</td>
<td class="org-right">60</td>
</tr>

<tr>
<td class="org-right">2024-07-08</td>
<td class="org-right">68</td>
</tr>

<tr>
<td class="org-right">2024-07-01</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2024-06-24</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2024-06-17</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2024-06-10</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2024-06-03</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2024-05-27</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2024-05-20</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2024-05-13</td>
<td class="org-right">91</td>
</tr>

<tr>
<td class="org-right">2024-05-06</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2024-04-29</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2024-04-22</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2024-04-15</td>
<td class="org-right">94</td>
</tr>

<tr>
<td class="org-right">2024-04-08</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2024-04-01</td>
<td class="org-right">95</td>
</tr>

<tr>
<td class="org-right">2024-03-25</td>
<td class="org-right">91</td>
</tr>

<tr>
<td class="org-right">2024-03-18</td>
<td class="org-right">78</td>
</tr>

<tr>
<td class="org-right">2024-03-11</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2024-03-04</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2024-02-26</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2024-02-19</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2024-02-12</td>
<td class="org-right">78</td>
</tr>

<tr>
<td class="org-right">2024-02-05</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2024-01-29</td>
<td class="org-right">96</td>
</tr>

<tr>
<td class="org-right">2024-01-22</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2024-01-15</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2024-01-08</td>
<td class="org-right">99</td>
</tr>

<tr>
<td class="org-right">2024-01-01</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2023-12-25</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2023-12-18</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2023-12-11</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2023-12-04</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2023-11-27</td>
<td class="org-right">85</td>
</tr>

<tr>
<td class="org-right">2023-11-20</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2023-11-13</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2023-11-06</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2023-10-30</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2023-10-23</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2023-10-16</td>
<td class="org-right">91</td>
</tr>

<tr>
<td class="org-right">2023-10-09</td>
<td class="org-right">93</td>
</tr>

<tr>
<td class="org-right">2023-10-02</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2023-09-25</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2023-09-18</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2023-09-11</td>
<td class="org-right">90</td>
</tr>

<tr>
<td class="org-right">2023-09-04</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2023-08-28</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2023-08-21</td>
<td class="org-right">78</td>
</tr>

<tr>
<td class="org-right">2023-08-14</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2023-08-07</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2023-07-31</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2023-07-24</td>
<td class="org-right">46</td>
</tr>

<tr>
<td class="org-right">2023-07-17</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2023-07-10</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2023-07-03</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2023-06-26</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2023-06-19</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2023-06-12</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2023-06-05</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2023-05-29</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2023-05-22</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2023-05-15</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2023-05-08</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2023-05-01</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2023-04-24</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2023-04-17</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2023-04-10</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2023-04-03</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2023-03-27</td>
<td class="org-right">92</td>
</tr>

<tr>
<td class="org-right">2023-03-20</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2023-03-13</td>
<td class="org-right">85</td>
</tr>

<tr>
<td class="org-right">2023-03-06</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2023-02-27</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2023-02-20</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2023-02-13</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2023-02-06</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2023-01-30</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2023-01-23</td>
<td class="org-right">85</td>
</tr>

<tr>
<td class="org-right">2023-01-16</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2023-01-09</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2023-01-02</td>
<td class="org-right">89</td>
</tr>

<tr>
<td class="org-right">2022-12-26</td>
<td class="org-right">89</td>
</tr>

<tr>
<td class="org-right">2022-12-19</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2022-12-12</td>
<td class="org-right">92</td>
</tr>

<tr>
<td class="org-right">2022-12-05</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2022-11-28</td>
<td class="org-right">90</td>
</tr>

<tr>
<td class="org-right">2022-11-21</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2022-11-14</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2022-11-07</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2022-10-31</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2022-10-24</td>
<td class="org-right">37</td>
</tr>

<tr>
<td class="org-right">2022-10-17</td>
<td class="org-right">54</td>
</tr>

<tr>
<td class="org-right">2022-10-10</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2022-10-03</td>
<td class="org-right">81</td>
</tr>

<tr>
<td class="org-right">2022-09-26</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2022-09-19</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2022-09-12</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2022-09-05</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2022-08-29</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2022-08-22</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2022-08-15</td>
<td class="org-right">45</td>
</tr>

<tr>
<td class="org-right">2022-08-08</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2022-08-01</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2022-07-25</td>
<td class="org-right">60</td>
</tr>

<tr>
<td class="org-right">2022-07-18</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2022-07-11</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2022-07-04</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2022-06-27</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2022-06-20</td>
<td class="org-right">60</td>
</tr>

<tr>
<td class="org-right">2022-06-13</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2022-06-06</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2022-05-30</td>
<td class="org-right">38</td>
</tr>

<tr>
<td class="org-right">2022-05-23</td>
<td class="org-right">68</td>
</tr>

<tr>
<td class="org-right">2022-05-16</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2022-05-09</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2022-05-02</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2022-04-25</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2022-04-18</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2022-04-11</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2022-04-04</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2022-03-28</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2022-03-21</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2022-03-14</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2022-03-07</td>
<td class="org-right">68</td>
</tr>

<tr>
<td class="org-right">2022-02-28</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2022-02-21</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2022-02-14</td>
<td class="org-right">88</td>
</tr>

<tr>
<td class="org-right">2022-02-07</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2022-01-31</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2022-01-24</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2022-01-17</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2022-01-10</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2022-01-03</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2021-12-27</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2021-12-20</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2021-12-13</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2021-12-06</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2021-11-29</td>
<td class="org-right">75</td>
</tr>

<tr>
<td class="org-right">2021-11-22</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2021-11-15</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2021-11-08</td>
<td class="org-right">94</td>
</tr>

<tr>
<td class="org-right">2021-11-01</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2021-10-25</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2021-10-18</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2021-10-11</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2021-10-04</td>
<td class="org-right">91</td>
</tr>

<tr>
<td class="org-right">2021-09-27</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2021-09-20</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2021-09-13</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2021-09-06</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2021-08-30</td>
<td class="org-right">68</td>
</tr>

<tr>
<td class="org-right">2021-08-23</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2021-08-16</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2021-08-09</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2021-08-02</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2021-07-26</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2021-07-19</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2021-07-12</td>
<td class="org-right">48</td>
</tr>

<tr>
<td class="org-right">2021-07-05</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2021-06-28</td>
<td class="org-right">46</td>
</tr>

<tr>
<td class="org-right">2021-06-21</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2021-06-14</td>
<td class="org-right">37</td>
</tr>

<tr>
<td class="org-right">2021-06-07</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2021-05-31</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2021-05-24</td>
<td class="org-right">46</td>
</tr>

<tr>
<td class="org-right">2021-05-17</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2021-05-10</td>
<td class="org-right">58</td>
</tr>

<tr>
<td class="org-right">2021-05-03</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2021-04-26</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2021-04-19</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2021-04-12</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2021-04-05</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2021-03-29</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2021-03-22</td>
<td class="org-right">82</td>
</tr>

<tr>
<td class="org-right">2021-03-15</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2021-03-08</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2021-03-01</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2021-02-22</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2021-02-15</td>
<td class="org-right">96</td>
</tr>

<tr>
<td class="org-right">2021-02-08</td>
<td class="org-right">74</td>
</tr>

<tr>
<td class="org-right">2021-02-01</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2021-01-25</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2021-01-18</td>
<td class="org-right">58</td>
</tr>

<tr>
<td class="org-right">2021-01-11</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2021-01-04</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2020-12-28</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2020-12-21</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2020-12-14</td>
<td class="org-right">92</td>
</tr>

<tr>
<td class="org-right">2020-12-07</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2020-11-30</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2020-11-23</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2020-11-16</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2020-11-09</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2020-11-02</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2020-10-26</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2020-10-19</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2020-10-12</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2020-10-05</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2020-09-28</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2020-09-21</td>
<td class="org-right">81</td>
</tr>

<tr>
<td class="org-right">2020-09-14</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2020-09-07</td>
<td class="org-right">61</td>
</tr>

<tr>
<td class="org-right">2020-08-31</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2020-08-24</td>
<td class="org-right">73</td>
</tr>

<tr>
<td class="org-right">2020-08-17</td>
<td class="org-right">80</td>
</tr>

<tr>
<td class="org-right">2020-08-10</td>
<td class="org-right">89</td>
</tr>

<tr>
<td class="org-right">2020-08-03</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2020-07-27</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2020-07-20</td>
<td class="org-right">60</td>
</tr>

<tr>
<td class="org-right">2020-07-13</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2020-07-06</td>
<td class="org-right">48</td>
</tr>

<tr>
<td class="org-right">2020-06-29</td>
<td class="org-right">43</td>
</tr>

<tr>
<td class="org-right">2020-06-22</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2020-06-15</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2020-06-08</td>
<td class="org-right">66</td>
</tr>

<tr>
<td class="org-right">2020-06-01</td>
<td class="org-right">116</td>
</tr>

<tr>
<td class="org-right">2020-05-25</td>
<td class="org-right">64</td>
</tr>

<tr>
<td class="org-right">2020-05-18</td>
<td class="org-right">83</td>
</tr>

<tr>
<td class="org-right">2020-05-11</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2020-05-04</td>
<td class="org-right">77</td>
</tr>

<tr>
<td class="org-right">2020-04-27</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2020-04-20</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2020-04-13</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2020-04-06</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2020-03-30</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2020-03-23</td>
<td class="org-right">58</td>
</tr>

<tr>
<td class="org-right">2020-03-16</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2020-03-09</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2020-03-02</td>
<td class="org-right">43</td>
</tr>

<tr>
<td class="org-right">2020-02-24</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2020-02-17</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2020-02-10</td>
<td class="org-right">60</td>
</tr>

<tr>
<td class="org-right">2020-02-03</td>
<td class="org-right">67</td>
</tr>

<tr>
<td class="org-right">2020-01-27</td>
<td class="org-right">68</td>
</tr>

<tr>
<td class="org-right">2020-01-20</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2020-01-13</td>
<td class="org-right">61</td>
</tr>

<tr>
<td class="org-right">2020-01-06</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2019-12-30</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2019-12-23</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2019-12-16</td>
<td class="org-right">71</td>
</tr>

<tr>
<td class="org-right">2019-12-09</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2019-12-02</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2019-11-25</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2019-11-18</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2019-11-11</td>
<td class="org-right">62</td>
</tr>

<tr>
<td class="org-right">2019-11-04</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2019-10-28</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2019-10-21</td>
<td class="org-right">59</td>
</tr>

<tr>
<td class="org-right">2019-10-14</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2019-10-07</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2019-09-30</td>
<td class="org-right">68</td>
</tr>

<tr>
<td class="org-right">2019-09-23</td>
<td class="org-right">88</td>
</tr>

<tr>
<td class="org-right">2019-09-16</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2019-09-09</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2019-09-02</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2019-08-26</td>
<td class="org-right">61</td>
</tr>

<tr>
<td class="org-right">2019-08-19</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2019-08-12</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2019-08-05</td>
<td class="org-right">58</td>
</tr>

<tr>
<td class="org-right">2019-07-29</td>
<td class="org-right">79</td>
</tr>

<tr>
<td class="org-right">2019-07-22</td>
<td class="org-right">96</td>
</tr>

<tr>
<td class="org-right">2019-07-15</td>
<td class="org-right">78</td>
</tr>

<tr>
<td class="org-right">2019-07-08</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2019-07-01</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2019-06-24</td>
<td class="org-right">76</td>
</tr>

<tr>
<td class="org-right">2019-06-17</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2019-06-10</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2019-06-03</td>
<td class="org-right">92</td>
</tr>

<tr>
<td class="org-right">2019-05-27</td>
<td class="org-right">69</td>
</tr>

<tr>
<td class="org-right">2019-05-20</td>
<td class="org-right">86</td>
</tr>

<tr>
<td class="org-right">2019-05-13</td>
<td class="org-right">100</td>
</tr>

<tr>
<td class="org-right">2019-05-06</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2019-04-29</td>
<td class="org-right">92</td>
</tr>

<tr>
<td class="org-right">2019-04-22</td>
<td class="org-right">88</td>
</tr>

<tr>
<td class="org-right">2019-04-15</td>
<td class="org-right">97</td>
</tr>

<tr>
<td class="org-right">2019-04-08</td>
<td class="org-right">88</td>
</tr>

<tr>
<td class="org-right">2019-04-01</td>
<td class="org-right">94</td>
</tr>

<tr>
<td class="org-right">2019-03-25</td>
<td class="org-right">85</td>
</tr>

<tr>
<td class="org-right">2019-03-18</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2019-03-11</td>
<td class="org-right">29</td>
</tr>

<tr>
<td class="org-right">2019-03-04</td>
<td class="org-right">70</td>
</tr>

<tr>
<td class="org-right">2019-02-25</td>
<td class="org-right">80</td>
</tr>

<tr>
<td class="org-right">2019-02-18</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2019-02-11</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2019-02-04</td>
<td class="org-right">65</td>
</tr>

<tr>
<td class="org-right">2019-01-28</td>
<td class="org-right">29</td>
</tr>

<tr>
<td class="org-right">2019-01-21</td>
<td class="org-right">27</td>
</tr>

<tr>
<td class="org-right">2019-01-14</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2019-01-07</td>
<td class="org-right">63</td>
</tr>

<tr>
<td class="org-right">2018-12-31</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2018-12-24</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2018-12-17</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2018-12-10</td>
<td class="org-right">43</td>
</tr>

<tr>
<td class="org-right">2018-12-03</td>
<td class="org-right">42</td>
</tr>

<tr>
<td class="org-right">2018-11-26</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2018-11-19</td>
<td class="org-right">42</td>
</tr>

<tr>
<td class="org-right">2018-11-12</td>
<td class="org-right">58</td>
</tr>

<tr>
<td class="org-right">2018-11-05</td>
<td class="org-right">38</td>
</tr>

<tr>
<td class="org-right">2018-10-29</td>
<td class="org-right">31</td>
</tr>

<tr>
<td class="org-right">2018-10-22</td>
<td class="org-right">37</td>
</tr>

<tr>
<td class="org-right">2018-10-15</td>
<td class="org-right">31</td>
</tr>

<tr>
<td class="org-right">2018-10-08</td>
<td class="org-right">28</td>
</tr>

<tr>
<td class="org-right">2018-10-01</td>
<td class="org-right">49</td>
</tr>

<tr>
<td class="org-right">2018-09-24</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2018-09-17</td>
<td class="org-right">28</td>
</tr>

<tr>
<td class="org-right">2018-09-03</td>
<td class="org-right">84</td>
</tr>

<tr>
<td class="org-right">2018-08-27</td>
<td class="org-right">23</td>
</tr>

<tr>
<td class="org-right">2018-08-20</td>
<td class="org-right">24</td>
</tr>

<tr>
<td class="org-right">2018-08-13</td>
<td class="org-right">26</td>
</tr>

<tr>
<td class="org-right">2018-08-06</td>
<td class="org-right">25</td>
</tr>

<tr>
<td class="org-right">2018-07-30</td>
<td class="org-right">24</td>
</tr>

<tr>
<td class="org-right">2018-07-23</td>
<td class="org-right">27</td>
</tr>

<tr>
<td class="org-right">2018-07-16</td>
<td class="org-right">25</td>
</tr>

<tr>
<td class="org-right">2018-07-09</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2018-07-02</td>
<td class="org-right">26</td>
</tr>

<tr>
<td class="org-right">2018-06-25</td>
<td class="org-right">36</td>
</tr>

<tr>
<td class="org-right">2018-06-18</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2018-06-11</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2018-06-04</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2018-05-28</td>
<td class="org-right">28</td>
</tr>

<tr>
<td class="org-right">2018-05-21</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2018-05-14</td>
<td class="org-right">29</td>
</tr>

<tr>
<td class="org-right">2018-05-07</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2018-04-30</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2018-04-23</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2018-04-16</td>
<td class="org-right">31</td>
</tr>

<tr>
<td class="org-right">2018-04-09</td>
<td class="org-right">44</td>
</tr>

<tr>
<td class="org-right">2018-04-02</td>
<td class="org-right">20</td>
</tr>

<tr>
<td class="org-right">2018-03-26</td>
<td class="org-right">22</td>
</tr>

<tr>
<td class="org-right">2018-03-20</td>
<td class="org-right">29</td>
</tr>

<tr>
<td class="org-right">2018-03-12</td>
<td class="org-right">37</td>
</tr>

<tr>
<td class="org-right">2018-03-04</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2018-02-26</td>
<td class="org-right">23</td>
</tr>

<tr>
<td class="org-right">2018-02-19</td>
<td class="org-right">39</td>
</tr>

<tr>
<td class="org-right">2018-02-12</td>
<td class="org-right">20</td>
</tr>

<tr>
<td class="org-right">2018-02-05</td>
<td class="org-right">48</td>
</tr>

<tr>
<td class="org-right">2018-01-29</td>
<td class="org-right">26</td>
</tr>

<tr>
<td class="org-right">2018-01-23</td>
<td class="org-right">48</td>
</tr>

<tr>
<td class="org-right">2018-01-15</td>
<td class="org-right">18</td>
</tr>

<tr>
<td class="org-right">2018-01-09</td>
<td class="org-right">30</td>
</tr>

<tr>
<td class="org-right">2018-01-01</td>
<td class="org-right">26</td>
</tr>

<tr>
<td class="org-right">2017-12-26</td>
<td class="org-right">30</td>
</tr>

<tr>
<td class="org-right">2017-12-19</td>
<td class="org-right">28</td>
</tr>

<tr>
<td class="org-right">2017-12-11</td>
<td class="org-right">20</td>
</tr>

<tr>
<td class="org-right">2017-12-04</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2017-11-27</td>
<td class="org-right">20</td>
</tr>

<tr>
<td class="org-right">2017-11-20</td>
<td class="org-right">34</td>
</tr>

<tr>
<td class="org-right">2017-11-13</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-11-06</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-10-30</td>
<td class="org-right">28</td>
</tr>

<tr>
<td class="org-right">2017-10-23</td>
<td class="org-right">28</td>
</tr>

<tr>
<td class="org-right">2017-08-21</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2017-08-14</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2017-08-07</td>
<td class="org-right">29</td>
</tr>

<tr>
<td class="org-right">2017-07-31</td>
<td class="org-right">53</td>
</tr>

<tr>
<td class="org-right">2017-07-24</td>
<td class="org-right">52</td>
</tr>

<tr>
<td class="org-right">2017-07-17</td>
<td class="org-right">54</td>
</tr>

<tr>
<td class="org-right">2017-07-10</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2017-07-03</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-06-26</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2017-06-19</td>
<td class="org-right">21</td>
</tr>

<tr>
<td class="org-right">2017-06-12</td>
<td class="org-right">24</td>
</tr>

<tr>
<td class="org-right">2017-06-05</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2017-05-29</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2017-05-22</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-05-15</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-05-08</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2017-05-01</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2017-04-24</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2017-04-17</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-04-10</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2017-04-03</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-03-27</td>
<td class="org-right">31</td>
</tr>

<tr>
<td class="org-right">2017-03-20</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2017-03-13</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2017-03-06</td>
<td class="org-right">38</td>
</tr>

<tr>
<td class="org-right">2017-02-27</td>
<td class="org-right">44</td>
</tr>

<tr>
<td class="org-right">2017-02-20</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2017-02-06</td>
<td class="org-right">23</td>
</tr>

<tr>
<td class="org-right">2017-01-30</td>
<td class="org-right">30</td>
</tr>

<tr>
<td class="org-right">2017-01-23</td>
<td class="org-right">43</td>
</tr>

<tr>
<td class="org-right">2017-01-16</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2017-01-13</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2017-01-09</td>
<td class="org-right">34</td>
</tr>

<tr>
<td class="org-right">2017-01-02</td>
<td class="org-right">25</td>
</tr>

<tr>
<td class="org-right">2016-12-26</td>
<td class="org-right">37</td>
</tr>

<tr>
<td class="org-right">2016-12-19</td>
<td class="org-right">44</td>
</tr>

<tr>
<td class="org-right">2016-12-12</td>
<td class="org-right">36</td>
</tr>

<tr>
<td class="org-right">2016-12-05</td>
<td class="org-right">37</td>
</tr>

<tr>
<td class="org-right">2016-11-28</td>
<td class="org-right">27</td>
</tr>

<tr>
<td class="org-right">2016-11-21</td>
<td class="org-right">34</td>
</tr>

<tr>
<td class="org-right">2016-11-14</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2016-11-07</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2016-10-31</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2016-10-24</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2016-10-17</td>
<td class="org-right">36</td>
</tr>

<tr>
<td class="org-right">2016-10-10</td>
<td class="org-right">34</td>
</tr>

<tr>
<td class="org-right">2016-10-03</td>
<td class="org-right">41</td>
</tr>

<tr>
<td class="org-right">2016-09-26</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2016-09-19</td>
<td class="org-right">39</td>
</tr>

<tr>
<td class="org-right">2016-09-12</td>
<td class="org-right">27</td>
</tr>

<tr>
<td class="org-right">2016-09-05</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2016-08-29</td>
<td class="org-right">78</td>
</tr>

<tr>
<td class="org-right">2016-08-22</td>
<td class="org-right">19</td>
</tr>

<tr>
<td class="org-right">2016-08-15</td>
<td class="org-right">17</td>
</tr>

<tr>
<td class="org-right">2016-08-08</td>
<td class="org-right">19</td>
</tr>

<tr>
<td class="org-right">2016-08-01</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2016-07-25</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2016-07-18</td>
<td class="org-right">26</td>
</tr>

<tr>
<td class="org-right">2016-07-10</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2016-07-04</td>
<td class="org-right">48</td>
</tr>

<tr>
<td class="org-right">2016-06-27</td>
<td class="org-right">32</td>
</tr>

<tr>
<td class="org-right">2016-06-20</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2016-06-13</td>
<td class="org-right">34</td>
</tr>

<tr>
<td class="org-right">2016-06-06</td>
<td class="org-right">29</td>
</tr>

<tr>
<td class="org-right">2016-05-30</td>
<td class="org-right">39</td>
</tr>

<tr>
<td class="org-right">2016-05-23</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2016-05-16</td>
<td class="org-right">43</td>
</tr>

<tr>
<td class="org-right">2016-05-09</td>
<td class="org-right">60</td>
</tr>

<tr>
<td class="org-right">2016-05-02</td>
<td class="org-right">45</td>
</tr>

<tr>
<td class="org-right">2016-04-25</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2016-04-18</td>
<td class="org-right">35</td>
</tr>

<tr>
<td class="org-right">2016-04-11</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2016-04-04</td>
<td class="org-right">42</td>
</tr>

<tr>
<td class="org-right">2016-03-28</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2016-03-21</td>
<td class="org-right">42</td>
</tr>

<tr>
<td class="org-right">2016-03-14</td>
<td class="org-right">93</td>
</tr>

<tr>
<td class="org-right">2016-02-22</td>
<td class="org-right">72</td>
</tr>

<tr>
<td class="org-right">2016-02-15</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2016-02-15</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2016-02-08</td>
<td class="org-right">57</td>
</tr>

<tr>
<td class="org-right">2016-02-01</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2016-01-25</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2016-01-18</td>
<td class="org-right">37</td>
</tr>

<tr>
<td class="org-right">2016-01-11</td>
<td class="org-right">51</td>
</tr>

<tr>
<td class="org-right">2015-12-28</td>
<td class="org-right">55</td>
</tr>

<tr>
<td class="org-right">2015-12-21</td>
<td class="org-right">33</td>
</tr>

<tr>
<td class="org-right">2015-12-14</td>
<td class="org-right">45</td>
</tr>

<tr>
<td class="org-right">2015-12-07</td>
<td class="org-right">50</td>
</tr>

<tr>
<td class="org-right">2015-11-30</td>
<td class="org-right">56</td>
</tr>

<tr>
<td class="org-right">2015-11-23</td>
<td class="org-right">47</td>
</tr>

<tr>
<td class="org-right">2015-11-16</td>
<td class="org-right">54</td>
</tr>

<tr>
<td class="org-right">2015-11-09</td>
<td class="org-right">40</td>
</tr>

<tr>
<td class="org-right">2015-11-02</td>
<td class="org-right">25</td>
</tr>

<tr>
<td class="org-right">2015-10-26</td>
<td class="org-right">32</td>
</tr>
</tbody>
</table>


</details>
<div><a href="https://sachachua.com/blog/2026/10/analyzing-emacs-news/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F10%2Fanalyzing-emacs-news%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Upcoming chat with linkarzu about using Emacs for 25 years</title>
		<link>https://sachachua.com/blog/2026/10/upcoming-chat-with-linkarzu-about-using-emacs-for-25-years/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Sat, 24 Oct 2026 13:39:16 GMT</pubDate>
    <category>community</category>
<category>emacs</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/10/upcoming-chat-with-linkarzu-about-using-emacs-for-25-years/</guid>
		<description><![CDATA[<div class="update" id="org7534346">
<ul class="org-ul">
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-10-26">[2026-10-26 Mon]</time></span>: Added more notes based on topics in the description</li>
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-10-25">[2026-10-25 Sun]</time></span>: Ha, I accidentally left in some raw transcription output. Serves me right for not scrolling down.</li>
</ul>
<p>
Also, I've added a summary image.
</p>

</div>

<p>
I'm going to be chatting with <a href="https://linkarzu.com/">linkarzu</a> about Emacs and life.
He's more of a Vim person than an Emacs person, so I'll try to share things that are generally useful. He's called it: "Why Sacha Chua Still Lives in Emacs After 20+ Years."
</p>

<p>
</p><div class="yt-video"><iframe width="456" height="315" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/BlgtfOsXgCs?enablejsapi=1" frameborder="0" allowfullscreen=""></iframe><a href="https://www.youtube.com/watch?v=BlgtfOsXgCs">Watch on YouTube</a></div>
<p></p>

<p>
I am not sure my eyebrows have ever done that, but linkarzu does like his AI-generated thumbnails, so we'll let that pass. =)
</p>

<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-10-29T08:00:00-0400">[2026-10-29 Thu 08:00]</time></span> (America/Toronto, -0400) = Thu Oct 29 0800H EDT / 0700H CDT / 0600H MDT / 0500H PDT / 1200H UTC / 1300H CET / 1400H EET / 1730H IST / 2000H +08 / 2100H JST
</p>

<p>
His description:
</p>

<blockquote>
<p>
Sacha Chua joins me to talk about Emacs. She has been living in it for
decades, and she shares the Emacs world with all of us through Emacs News,
Emacs Chat and EmacsConf.
</p>

<p>
I want to see how she runs her life in Org Mode and how she uses her speech and audio braindump workflows, and to ask her what she thinks of what Prot and I have been doing with Emacs.
</p>

<p>
We'll also be discussing Neovim and other usual tech related topics
</p>
</blockquote>

<p>
As a backup and so that it shows up on my YouTube feed, it's also going to be streamed at:
</p>

<p>
</p><div class="yt-video"><iframe width="456" height="315" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/czhp_oFx1po?enablejsapi=1" frameborder="0" allowfullscreen=""></iframe><a href="https://youtube.com/live/czhp_oFx1po">Watch on YouTube</a></div>
<p></p>

<p>
(but watch it on his channel instead for the stats boost!)
</p>

<p>
<b>Note: Both videos will become unlisted afterwards.</b> I think that means you'll still be able to reach it from my blog post or from a direct link, but you won't see it on his channel or mine, at least until he posts the edited video publicly. Also, to encourage people to sign up for his memberships (and to keep things more focused during the conversation), Linkarzu limits chat during the livestream to members of his channel. That's totally fine, he's allowed to experiment with ways to make a living, so please don't give him any grief about it. =) If you have any questions about what we talk about, or would like to continue the conversation, feel free to leave a comment or email me at <a href="mailto:sacha@sachachua.com">sacha@sachachua.com</a> and I will check it afterwards.
</p>

<p>
I like making things available and searchable long-term.
I plan to post the transcript of either the full conversation or excerpts of it on my blog, and I'll probably also post screenshots or clips of the video or audio where it makes sense.
It might be something like the transcript I posted in <a href="https://sachachua.com/blog/2026/07/chatting-with-john-wiegley-about-personal-information-management-and-karthik-chikmagalur/">Chatted with John Wiegley and Karthik Chikmagalur about personal information management</a>.
</p>

<p>
I am looking forward to learning more about the NeoVim community.
I think the NeoVim community does the YouTube thing really well, and
I'm hoping that the new <a href="https://org-nvim.com/">org.nvim</a> stuff might encourage people to do
more literate programming and blogging.
<a href="https://sachachua.com/blog/2026/10/upcoming-chat-with-linkarzu-about-using-emacs-for-25-years/">I put together some notes on my Emacs history</a>, building on from the
title that Linkarzu put on his event ("Why Sacha Chua Still Lives in
Emacs After 20+ Years").
I'll probably add a little bit more over the next two days.
I am more curious about where the conversation can take us rather than
switching into presentation mode, since I can write blog posts and
make videos whenever I want. =)
</p>

<p>
I put together some sketches to help me organize my thoughts.
His channel uses dark mode, so let's experiment with dark mode in my sketches too.
I want to think about things so that the relevant resources are readily available and so that I can express myself more concisely.
I can put together a presentation or write a blog post by myself, so I'm more curious about the kinds of things he wants to explore in the conversation.
</p>
<div id="outline-container-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-about-me" class="outline-3">
<h3 id="upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-about-me"><a href="https://sachachua.com/blog/feed/index.xml#upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-about-me">About me</a></h3>
<div class="outline-text-3" id="text-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-about-me">
<p>
I'll probably need to do a brief introduction to set the context
so that people know where I'm coming from.
Let's disclaim my professional irrelevance up front.
</p>

<p>
</p><div class="sketch-full"><a class="photoswipe" href="https://sketches.sachachua.com/filename/2026-10-24-03%20About%20me%20&#45;&#45;%20life%20darkmode.svg" data-src="https://sketches.sachachua.com/static/2026-10-24-03%20About%20me%20&#45;&#45;%20life%20darkmode.svg" data-title="2026-10-24-03 About me &#45;&#45; life darkmode.svg" data-w="791" data-h="559"><picture>
      <img src="https://sketches.sachachua.com/static/2026-10-24-03%20About%20me%20&#45;&#45;%20life%20darkmode.svg" width="791" height="559" alt="2026-10-24-03 About me &#45;&#45; life darkmode.svg" class="dark" loading="lazy" style="max-height: 90vw; height: auto; width: auto" decoding="async">
      <figcaption>2026-10-24-03 About me &#45;&#45; life darkmode.svg</figcaption>
    </picture></a></div>
<p></p>

<details class="code-details"><summary>Image text and links</summary>
<p>
About me
2026-10-24-03
</p>

<ul class="org-ul">
<li><a href="https://sachachua.com">sachachua.com</a> (since 2001 :) )</li>
<li><a href="https://sachachua.com/blog/category/emacs-news">Emacs News</a></li>
<li><a href="https://planet.emacslife.com">planet.emacslife.com</a></li>
<li><a href="https://emacsconf.org/organizers-notebook/">EmacsConf</a></li>
<li>Where: Manila, Philippines to Toronto, Canada in 2005</li>
<li>Now:
<ul class="org-ul">
<li>Continuing with hanging out with A+ (kiddo) and W- (husband)</li>
<li>Experimenting with retirement</li>
</ul></li>
<li>Previously: web prototypes, data analysis, sketchnoting, computer science</li>
<li>Currently tinkering with: learning French, hybrid speech interfaces, community sharing</li>
</ul>


</details>

<p>
It turns out that I've been using Emacs for at least 25 years, which is pretty cool. I am 43, so that's more than half my life.
</p>
</div>
</div>
<div id="outline-container-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-quick-notes-on-the-stuff-he-mentioned-in-the-description" class="outline-3">
<h3 id="upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-quick-notes-on-the-stuff-he-mentioned-in-the-description"><a href="https://sachachua.com/blog/feed/index.xml#upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-quick-notes-on-the-stuff-he-mentioned-in-the-description">Quick notes on the stuff he mentioned in the description</a></h3>
<div class="outline-text-3" id="text-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-quick-notes-on-the-stuff-he-mentioned-in-the-description">
<ul class="org-ul">
<li>How I run my life in Org Mode
<ul class="org-ul">
<li>Capture into an inbox on my computer or on my phone (Orgzly Revived + Syncthing),</li>
<li>Agenda on either Orgzly or my computer.</li>
<li>Several large files that I add a lot of ideas to and slowly chip away at when I have time. I'm still the primary parent for our ten-year-old. Although I have a little bit more focus time now that she (usually) attends virtual school, I still find myself capturing ideas and knowing that I will get to them maybe sometime over the next few years.</li>
</ul></li>

<li>It's a lot of fun to be able to make tiny improvements that add up.</li>

<li>Speech and audio brain dump workflow
<ul class="org-ul">
<li>On my computer
<ul class="org-ul">
<li>I use dictation to quickly grab some snippets.</li>
<li>I can put each sentence on its own line and then use Org Mode to move things around.</li>
<li>could demo: fill paragraph cycling, one sentence per line, paragraph mode,</li>
<li>For more complicated things, then I'll use Org Mode outlines or maybe start with some kind of sketch.</li>
<li>I also type too. It's nice to have that option, especially when there's code.</li>
<li><a href="https://sachachua.com/blog/2025/07/finding-the-shape-of-my-thoughts/">Finding the shape of my thoughts</a></li>
<li><a href="https://sachachua.com/blog/2026/10/dictating-blog-posts-into-emacs/">Dictating blog posts into Emacs</a></li>
<li><a href="https://sachachua.com/blog/2026/10/emacs-carnival-oct-2026-exploring-keys-and-voice-input-in-emacs/">Emacs Carnival Oct 2026: Exploring keys and voice input in Emacs</a>
<ul class="org-ul">
<li>Voice commands are great when you've run out of keyboard shortcuts or you can't remember them</li>
</ul></li>
</ul></li>
<li>On my phone
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2023/12/audio-braindump-workflow-tweaks-adding-org-mode-hyperlinks-to-recordings-based-on-keywords/">Audio braindump workflow tweaks: Adding Org Mode hyperlinks to recordings based on keywords</a>
<ul class="org-ul">
<li>I prefer this kind of thinking out loud at my computer, though, because being able to read and restructure the text right away helps me.</li>
</ul></li>
<li>My mobile use has shifted to <a href="https://sachachua.com/blog/2026/09/practising-french-pronunciation-on-the-go-experimenting-with-a-bluetooth-phone-controller-ring/">practising French</a> with my tongue twisters and audio recordings.</li>
</ul></li>
</ul></li>

<li>What I think of Linkarzu and Prot's conversations
<ul class="org-ul">
<li>It's totally okay if you want to stick with NeoVim. I'm looking forward to seeing what people come up with!</li>
<li>I think the discussions we can have about workflows can cross editor boundaries. =)</li>
</ul></li>
</ul>
</div>
</div>
<div id="outline-container-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-summary-of-other-important-things" class="outline-3">
<h3 id="upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-summary-of-other-important-things"><a href="https://sachachua.com/blog/feed/index.xml#upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-summary-of-other-important-things">Summary of other important things</a></h3>
<div class="outline-text-3" id="text-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-summary-of-other-important-things">
<p>
Let's start with a summary so that we don't worry about running out of time and so that people don't have to listen to two hours before getting to the good stuff.
I want people to be able to get something out of this, whether they're a Vim diehard or experimenting with Helix, or even if they're passionate about things other than text editors.
Here are some of the things I'm learning about that I think are important.
</p>

<p>
</p><div class="sketch-full"><a class="photoswipe" href="https://sketches.sachachua.com/filename/2026-10-24-08%20Some%20things%20that%20work%20really%20well%20&#45;&#45;%20emacs%20community%20darkmode.svg" data-src="https://sketches.sachachua.com/static/2026-10-24-08%20Some%20things%20that%20work%20really%20well%20&#45;&#45;%20emacs%20community%20darkmode.svg" data-title="2026-10-24-08 Some things that work really well &#45;&#45; emacs community darkmode.svg" data-w="791" data-h="559"><picture>
      <img src="https://sketches.sachachua.com/static/2026-10-24-08%20Some%20things%20that%20work%20really%20well%20&#45;&#45;%20emacs%20community%20darkmode.svg" width="791" height="559" alt="2026-10-24-08 Some things that work really well &#45;&#45; emacs community darkmode.svg" class="dark" loading="lazy" style="max-height: 90vw; height: auto; width: auto" decoding="async">
      <figcaption>2026-10-24-08 Some things that work really well &#45;&#45; emacs community darkmode.svg</figcaption>
    </picture></a></div>
<p></p>

<ul class="org-ul">
<li><b>Community:</b>
<ul class="org-ul">
<li>It's really hard to learn Emacs all by yourself. It's obscure, arcane, and overwhelming.
<ul class="org-ul">
<li><a href="https://web.archive.org/web/20080726054506/http://blogs.msdn.com/steverowe/archive/2004/11/17/code-editor-learning-curves.aspx">Steve Rowe's Blog : Code Editor Learning Curves</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1uf0d2k/the_learning_cliff_and_the_view_from_the_top/">the learning cliff and the View from the Top</a></li>
</ul></li>
<li>Fortunately, we have a strong culture of sharing, starting with the GNU General Public License and continuing through things like literate programming. We have mailing lists, blog posts, videos, meetups, and conferences. One of the best ways to learn Emacs is to learn out loud. Another way is to look over someone's shoulder. It doesn't take a lot of time or money to do the kinds of things that I enjoy doing to connect the Emacs community, and I'd love to see other tech communities experiment with things like that too.
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2025/05/working-on-the-plumbing-in-a-small-web-community/">Working on the plumbing in a small web community</a></li>
</ul></li>
</ul></li>
<li><b>Adaptability:</b> You can customize Emacs to really fit the way you want to work. The more people do this, the easier it gets to adapt Emacs to even more workflows.</li>
<li><b>Incremental improvements:</b> Even small changes add up, and code turns out to be surprisingly reusable. It often pays off beyond the recommendations of <a href="https://xkcd.com/1205/">xkcd: Is It Worth the Time?</a>.</li>
<li><b>Imagination and play:</b> Tweaking Emacs can be lots of fun. Fun is important.</li>
</ul>


<p>
Quick notes on the stuff he mentioned in the description:
</p>

<ul class="org-ul">
<li>How I run my life in Org Mode
<ul class="org-ul">
<li>Capture into an inbox on my computer or on my phone (Orgzly Revived + Syncthing),</li>
<li>Agenda on either Orgzly or my computer.</li>
<li>Several large files that I add a lot of ideas to and slowly chip away at when I have time. I'm still the primary parent for our ten-year-old. Although I have a little bit more focus time now that she (usually) attends virtual school, I still find myself capturing ideas and knowing that I will get to them maybe sometime over the next few years.</li>
</ul></li>
<li>It's a lot of fun to be able to make tiny improvements that add up.</li>
<li>Speech and audio brain dump workflow
<ul class="org-ul">
<li>On my computer
<ul class="org-ul">
<li>I use dictation to quickly grab some snippets.</li>
<li>I can put each sentence on its own line and then use Org Mode to move things around.</li>
<li>For more complicated things, then I'll use Org Mode outlines or maybe start with some kind of sketch.</li>
<li>I also type too. It's nice to have that option, especially when there's code.</li>
<li><a href="https://sachachua.com/blog/2025/07/finding-the-shape-of-my-thoughts/">Finding the shape of my thoughts</a></li>
<li><a href="https://sachachua.com/blog/2026/10/dictating-blog-posts-into-emacs/">Dictating blog posts into Emacs</a></li>
<li><a href="https://sachachua.com/blog/2026/10/emacs-carnival-oct-2026-exploring-keys-and-voice-input-in-emacs/">Emacs Carnival Oct 2026: Exploring keys and voice input in Emacs</a>
<ul class="org-ul">
<li>Voice commands are great when you've run out of keyboard shortcuts or you can't remember them</li>
</ul></li>
</ul></li>
<li>On my phone
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2023/12/audio-braindump-workflow-tweaks-adding-org-mode-hyperlinks-to-recordings-based-on-keywords/">Audio braindump workflow tweaks: Adding Org Mode hyperlinks to recordings based on keywords</a>
<ul class="org-ul">
<li>I prefer this kind of thinking out loud at my computer, though, because being able to read and restructure the text right away helps me.</li>
</ul></li>
<li>My mobile use has shifted to <a href="https://sachachua.com/blog/2026/09/practising-french-pronunciation-on-the-go-experimenting-with-a-bluetooth-phone-controller-ring/">practising French</a> with my tongue twisters and audio recordings.</li>
</ul></li>
</ul></li>
<li>What I think of Linkarzu and Prot's conversations
<ul class="org-ul">
<li>It's totally okay if you want to stick with NeoVim. I'm looking forward to seeing what people come up with!</li>
<li>I think the discussions we can have about workflows can cross editor boundaries. =)</li>
</ul></li>
</ul>
</div>
</div>
<div id="outline-container-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-history" class="outline-3">
<h3 id="upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-history"><a href="https://sachachua.com/blog/feed/index.xml#upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-history">History</a></h3>
<div class="outline-text-3" id="text-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-history">
<p>
Here's a brief overview of my history with Emacs, in case anything sparks curiosity.
</p>

<p>
</p><div class="sketch-full"><a class="photoswipe" href="https://sketches.sachachua.com/filename/2026-10-24-01%2025%20years%20of%20growing%20with%20Emacs%20&#45;&#45;%20community%20emacs%20life%20darkmode.svg" data-src="https://sketches.sachachua.com/static/2026-10-24-01%2025%20years%20of%20growing%20with%20Emacs%20&#45;&#45;%20community%20emacs%20life%20darkmode.svg" data-title="2026-10-24-01 25 years of growing with Emacs &#45;&#45; community emacs life darkmode.svg" data-w="1054" data-h="745"><picture>
      <img src="https://sketches.sachachua.com/static/2026-10-24-01%2025%20years%20of%20growing%20with%20Emacs%20&#45;&#45;%20community%20emacs%20life%20darkmode.svg" width="1054" height="745" alt="2026-10-24-01 25 years of growing with Emacs &#45;&#45; community emacs life darkmode.svg" class="dark" loading="lazy" style="max-height: 90vw; height: auto; width: auto" decoding="async">
      <figcaption>2026-10-24-01 25 years of growing with Emacs &#45;&#45; community emacs life darkmode.svg</figcaption>
    </picture></a></div>
<p></p>

<p>
The details are a little bit fuzzy, but fortunately I've written about some things in previous blog posts. I'd like to flesh this out with an outline and maybe even some sentences or paragraphs later on.
I love the way that different themes recur. I find myself building on things that I started exploring years ago.
For example, my current interest in hybrid speech interfaces echoes all the way back to M-x doctor and Emacspeak from the beginning.
</p>

<ul class="org-ul">
<li>M-x doctor:
<ul class="org-ul">
<li><p>
From "Unix Power Tools":
</p>
<blockquote>
<p>
If you have time to waste (and I mean <i>really</i> waste), Emacs has things to keep you occupied. &hellip; If you think you might be in need of a psychotherapist, save your money and try ESC-x doctor RETURN.
</p>
</blockquote>
<p>
I was not actually looking for a psychotherapist.
I think I was seventeen or eighteen, and I was trying to go through all the interesting computer science books in my university's library in the Philippines. I thought it was funny that someone put in that kind of Easter egg. The more I dug around in the source code, the more I was amazed by the things that people had added to Emacs. Anyway, it's interesting how the fun, inconsequential stuff turned out to be the thing that caught my attention.
</p></li>
</ul></li>
<li>Planner Mode: <a href="https://sachachua.com/blog/2008/01/how-i-got-hooked/">How I got hooked</a>
<ul class="org-ul">
<li>I loved seeing how people customized Emacs in so many different ways to fit the way that their particular brain worked, and getting it to fit my brain too.</li>
<li>One time, when I was the maintainer of Planner Mode, I got an email from someone who said something like: "Thank you for maintaining this. By the way, one of your recent changes lost my data and I didn't have any backups, but that's okay, just please fix it, here are some ideas." That kindness mattered a lot to me.</li>
</ul></li>
<li>Emacspeak:
<ul class="org-ul">
<li>In my third or fourth year of university, my laptop screen started glitching. Sometimes it got really low in brightness and contrast, and you could only read it if you tilted it at an extreme angle and looked very carefully. But the Emacspeak folks had figured out how to make it perfectly usable just with speech synthesis, because they needed that as blind or visually impaired users. This turned out to be pretty handy. I not only used that for a fair chunk of my regular writing and coding, but also for my experiments with wearable computing, and for the <a href="https://sachachua.com/blog/2003/02/emacspeak-and-irc-linux/">occasional alert</a> when I was paying attention to something else. Speech synthesis was a lot more discreet than the <a href="https://sachachua.com/blog/wp-content/uploads/2013/05/sacha-014.jpg">head-mounted display</a> that I experimented with in 2003.</li>
</ul></li>
<li>flashcard.el:
<ul class="org-ul">
<li>The fun part about this was rigging up my flashcard.el so that it would show me funny cat pictures from ICanHasCheezburger when I answered enough questions correctly. Fun matters.</li>
<li><a href="https://sachachua.com/blog/2005/01/japanese-flashcards/">Japanese flashcards</a></li>
<li><a href="https://sachachua.com/blog/2005/01/more-emacs-evangelization-flashcard/">More Emacs evangelization: flashcard</a></li>
</ul></li>
<li>ledger:
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2014/11/keeping-financial-score-ledger/">Keeping (financial) score with Ledger</a></li>
<li><a href="https://sachachua.com/blog/2009/04/my-financial-network-map-and-virtual-envelope-system/">My financial network map and virtual envelope system</a></li>
</ul></li>
<li>Org Mode: <a href="https://sachachua.com/blog/2010/09/new-note-taking-workflow-with-emacs-org-mode/">New note-taking workflow with Emacs Org-mode</a>
<ul class="org-ul">
<li>I started using Org Mode as part of research for a book on Emacs. I didn't finish the book, but I stuck with Org Mode. I like the way it fits the way I think and what I want to do.</li>
</ul></li>
<li>Work: <a href="https://sachachua.com/blog/category/drupal/all/">Drupal</a>, <a href="https://sachachua.com/blog/category/rails/all/">Rails</a>, blogging, data analysis, literate programming</li>
<li>Semi-retirement:
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2017/03/what-did-i-learn-from-this-experiment-with-semi-retirement/">What did I learn from this experiment with semi-retirement?</a></li>
<li><a href="https://sachachua.com/blog/2026/10/continuing-my-experiment-with-semi-retirement/">Continuing my experiment with (semi-)retirement</a></li>
<li><a href="https://sachachua.com/blog/category/experiment/all/">category - experiment</a></li>
</ul></li>
<li><a href="https://emacsconf.org/organizers-notebook/">EmacsConf</a>
<ul class="org-ul">
<li>I helped organize the first one in 2013 in London.
I watched the 2015 one remotely.
Amin Bandali reached out to me in 2019 to get EmacsConf going again, and we've been organizing it yearly since.</li>
<li><a href="https://sachachua.com/blog/2023/12/analyzing-my-emacs-time-over-the-last-11-years-or-so/">Analyzing my Emacs time over the last 11 years or so</a></li>
</ul></li>
<li><a href="https://sachachua.com/blog/category/emacs-chat/all/">Emacs Chat</a></li>
<li><a href="https://sachachua.com/blog/category/emacs-news">Emacs News</a>: Great way to see all the cool things that people are working on
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2026/10/analyzing-emacs-news/">Analyzing Emacs News: 564 posts over 11 years, &gt; 34k items, ~60/post</a></li>
</ul></li>
<li>Parenting:
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2023/12/braindump-from-radiostudent-si-interview-with-lio-novelli-and-jurij-podgorsek-emacs-focused-time/">Braindump from radiostudent.si interview with Lio Novelli and Jurij Podgorsek: Emacs, focused time</a> - parenting, using fragmented time</li>
<li>Orgzly Revived helped me stay sane by capturing ideas and making it easy to postpone them for years.</li>
<li>Incremental improvements in fragments of time</li>
</ul></li>
<li>Captions: I can even use them to edit videos and audio files in Emacs
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2020/12/editing-subtitles-in-emacs-with-subed-with-synchronized-video-playback-through-mpv/">Editing subtitles in Emacs with subed, with synchronized video playback through mpv</a></li>
<li><a href="https://sachachua.com/blog/category/subed/all/">category - subed</a></li>
</ul></li>
<li>SVGs:
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2023/09/emacsconf-backstage-scheduling-with-svgs/">EmacsConf backstage: scheduling with SVGs</a></li>
<li><a href="https://sachachua.com/blog/2026/10/visualizing-the-balance-of-speaking-in-my-french-conversations-with-tutors/">Visualizing the balance of speaking in my French conversations with tutors</a></li>
<li><a href="https://sachachua.com/blog/2026/10/using-emacs-to-visualize-speaking-and-target-words-phrases-in-real-ish-time/">Using Emacs to visualize speaking and target words/phrases in real-ish time</a></li>
</ul></li>
<li>Minecraft, cubing
<ul class="org-ul">
<li>The kiddo wanted to play Minecraft, but she wasn't comfortable enough with typing yet, so I made her some command books so that she could just click on things in order to teleport back to us or give herself equipment. Now she can type very quickly, but it was helpful back then.
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2023/04/updating-my-minecraft-command-book-using-emacs-tramp-and-mcf-el/">Updating my Minecraft command book using Emacs, TRAMP, and mcf.el</a></li>
<li><a href="https://sachachua.com/blog/2023/04/using-org-mode-tables-and-emacs-lisp-to-create-minecraft-java-json-command-books/">Using Org Mode tables and Emacs Lisp to create Minecraft Java JSON command books</a></li>
</ul></li>
<li>Rubik's cubes:
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2023/02/using-org-babel-to-learn-rubik-s-cube-algorithms/">Using Org Babel to learn Rubik's cube algorithms</a></li>
</ul></li>
</ul></li>
<li><a href="https://sachachua.com/blog/category/yay-emacs/">Streaming</a></li>
<li><a href="https://sachachua.com/topic/french/#mes-outils">French</a>, LLMs</li>
<li><a href="https://sachachua.com/blog/category/speech/">Speech</a>: speech recognition, speech synthesis, hybrid speech interfaces
<ul class="org-ul">
<li><a href="https://www.youtube.com/live/HrvyY1x3lg4?t=70">M-x doctor demonstration</a></li>
<li><a href="https://sachachua.com/blog/2026/10/emacs-carnival-oct-2026-exploring-keys-and-voice-input-in-emacs/">Emacs Carnival Oct 2026: Exploring keys and voice input in Emacs</a></li>
</ul></li>
</ul>
</div>
</div>
<div id="outline-container-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-large-language-models-and-artificial-intelligence" class="outline-3">
<h3 id="upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-large-language-models-and-artificial-intelligence"><a href="https://sachachua.com/blog/feed/index.xml#upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-large-language-models-and-artificial-intelligence">Large language models and artificial intelligence</a></h3>
<div class="outline-text-3" id="text-upcoming-chat-with-linkarzu-about-using-emacs-for-25-years-large-language-models-and-artificial-intelligence">
<p>
linkarzu mentioned wanting to talk about artificial intelligence.
I don't know nearly as much as lots of other people do.
Maybe I can just share <a href="https://sachachua.com/blog/category/ai/">the things that I've been experimenting with</a>, and also what I care about from a community perspective.
I would like to help figure out how to deal with this turbulence and come out the other side happier.
</p>

<p>
</p><div class="sketch-full"><a class="photoswipe" href="https://sketches.sachachua.com/filename/2026-10-24-02%20Large%20language%20models%20and%20other%20things%20&#45;&#45;%20llm%20ai%20darkmode.svg" data-src="https://sketches.sachachua.com/static/2026-10-24-02%20Large%20language%20models%20and%20other%20things%20&#45;&#45;%20llm%20ai%20darkmode.svg" data-title="2026-10-24-02 Large language models and other things &#45;&#45; llm ai darkmode.svg" data-w="791" data-h="559"><picture>
      <img src="https://sketches.sachachua.com/static/2026-10-24-02%20Large%20language%20models%20and%20other%20things%20&#45;&#45;%20llm%20ai%20darkmode.svg" width="791" height="559" alt="2026-10-24-02 Large language models and other things &#45;&#45; llm ai darkmode.svg" class="dark" loading="lazy" style="max-height: 90vw; height: auto; width: auto" decoding="async">
      <figcaption>2026-10-24-02 Large language models and other things &#45;&#45; llm ai darkmode.svg</figcaption>
    </picture></a></div>
<p></p>

<details class="code-details"><summary>Text from sketch</summary>
<p>
Large language models and other things
2026-10-24-02
</p>

<ul class="org-ul">
<li>Y'all know much more than I do. You have more at stake.</li>
<li>Me: tiny steps, using it for tightly scoped tools
<ul class="org-ul">
<li>grammar/fixing literal translations, explanations</li>
<li>troubleshooting</li>
<li>prototypes (ex: Python servers)</li>
</ul></li>
<li>Next:
<ul class="org-ul">
<li>help people who want to connect and experiment
<ul class="org-ul">
<li>human-focused</li>
<li>LLM-assisted (only if you want)</li>
</ul></li>
</ul></li>
<li>Keep exploring what I'm curious about: experiments &gt; hype</li>
<li>Yay:
<ul class="org-ul">
<li>more people learning about and customizing things</li>
<li>more capable local models</li>
<li>adding up fragments of time</li>
</ul></li>
<li>Boo:
<ul class="org-ul">
<li>flood of slop, "content", spam</li>
<li>overwhelmed developers</li>
<li>centralization</li>
<li>polarization</li>
<li>externalized costs</li>
<li>non-deterministic</li>
</ul></li>
</ul>


</details>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/10/upcoming-chat-with-linkarzu-about-using-emacs-for-25-years/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F10%2Fupcoming-chat-with-linkarzu-about-using-emacs-for-25-years%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Dictating blog posts into Emacs</title>
		<link>https://sachachua.com/blog/2026/10/dictating-blog-posts-into-emacs/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 19:13:18 GMT</pubDate>
    <category>emacs</category>
<category>speech-recognition</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/10/dictating-blog-posts-into-emacs/</guid>
		<description><![CDATA[<p>
<a href="https://mtwb.blog/posts/2026/blogging/a-different-type-of-blog-post/">Matt is experimenting with dictating his blog posts.</a> He says:
</p>

<blockquote>
<p>
I write really well. I have very good grammatical skills, for the most part, when I’m typing. But when I speak, I don’t speak like that. My grammar is not very good. I say words out of order a lot. I have filler words. And I say things that don’t make any sense.
</p>
</blockquote>

<p>
This is totally me too!
It's one of the reasons why I want to get used to dictation, because it'll give me a lot more practice in saying things, which can only help when I'm making videos or talking to people.
</p>

<blockquote>
<p>
While I’m talking, the text that’s outputted has no punctuation or paragraphs or anything like that.
</p>
</blockquote>

<p>
Oh yeah, no, that's mostly a matter of picking the right speech recognition engine.
For example, I'm using a local instance of <a href="https://sachachua.com/blog/2026/09/experimenting-with-orukeet-for-speech-recognition/">Orukeet</a>, and it seems to do a reasonable job of dividing my thoughts into properly-capitalized and punctuated sentences in both English and French.
In fact, I have some code in Emacs that wraps it to one sentence per line (as part of <a href="https://sachachua.com/dotemacs#multimedia-whisper">sacha-whisper-insert</a> which uses <a href="https://github.com/sachac/whisper.el/">sachac/whisper.el</a>).
This allows me to use Org shortcuts to move lines around in order to reorganize them into something that makes more sense.
</p>

<p>
Some people use large language models to clean up raw transcripts and remove false starts or filler words.
I don't quite trust large language models to leave my wording alone.
I have some code that uses <code>replace-regexp-in-string</code> to take out some of my filler words and fix commonly misrecognized words that I've saved with <code>substitute.el</code>.
</p>

<p>
I'm not sure if I was ever any good at multitasking, but nowadays at 43 years old, I find that talking and typing at the same time has gotten a little bit harder for me.
I type much more slowly if I want to narrate things at the same time,
like when I'm recording a video or live streaming.
When I'm just thinking on my own, I type quickly enough that my computer sometimes jumbles the keystrokes up because it doesn't handle keyboard interrupts well when it's busy.
It's not just my fingers; it sometimes happens even when I was trying to use wdotool to simulate typing.
Speech recognition is surprisingly reliable, even though I have to correct it from time to time.
The broad strokes are there, and I save the recordings so that I can fix misrecognized words.
</p>

<p>
I also love the way that speech recognition opens up so many more possibilities
for commands I would never be able to memorize keyboard shortcuts for. "Remind me today to&hellip;" is now one of my favourite ways to capture an Org Mode task.
</p>

<p>
Besides, I think it's a good idea to plan ahead just in case I can't type very well in the future. All sorts of things can happen: accidents, disease, old age.
I wrote about that a bit more in <a href="https://sachachua.com/blog/2026/10/emacs-carnival-oct-2026-exploring-keys-and-voice-input-in-emacs/">Emacs Carnival Oct 2026: Exploring keys and voice input in Emacs</a>.
</p>

<p>
All that to say: exciting times ahead.
I think it would be pretty amazing if this sort of thing allows more people to write and share.
Looking forward to reading (and possibly listening to) what people have been learning about!
</p>
<div><a href="https://sachachua.com/blog/2026/10/dictating-blog-posts-into-emacs/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F10%2Fdictating-blog-posts-into-emacs%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item>
	</channel>
</rss>