trying to fix
This commit is contained in:
parent
fa407dfeb6
commit
e013d7569e
22945 changed files with 447936 additions and 0 deletions
|
@ -0,0 +1,91 @@
|
|||
<h2>Automating the Repetetive while also Learning a Bit More about My Editor</h2>
|
||||
<p>In <time datetime="2021-10-04" title="2021-10-04">October</time> I joined Forem as the lead engineer for the content experience team. I’ve been contributing to open source software for 9 years; Hello <a href="https://samvera.org">Samvera.org</a>; I miss you but I promise I’m in a good place.</p>
|
||||
<p>Coming from one open source community to another, I brought with me different workflows. I favor writing verbose commit messages. I like to use that as the text for my pull requests. The benefits are that commit messages travel with the code-base. I can use <code>git annotate</code> to help me understand the situation around a chunk of code.</p>
|
||||
<p>But, in an open source community with over 600 contributors, the commit message as pull request strategy is inadequate. We could use <a href="https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks">git hooks</a> to provide commit message templating, but that’s not enough for conversations around the pull request.</p>
|
||||
<p>Forem provides a <a href="https://github.com/forem/forem/blob/main/.github/PULL_REQUEST_TEMPLATE.md">pull request template</a> to guide contributors through all of the considerations that go into the pull request review and acceptance.</p>
|
||||
<p>The template provides a nice pre-amble comment to help new contributors. Then provides clear sections and instructions for a contributor to fill out:</p>
|
||||
<ul>
|
||||
<li>What type of Pull Request</li>
|
||||
<li>Description</li>
|
||||
<li>Related Tasks & Documents</li>
|
||||
<li>QA Instructions, Screenshots, and Recordings</li>
|
||||
<li>Accessibility Concerns</li>
|
||||
<li>Added/updated Tests</li>
|
||||
<li>How will this change be communicated? (A Forem Core Team only section)</li>
|
||||
<li>Any post deployment tasks to complete</li>
|
||||
<li>A GIF that Expresses How You Feel About this Contribution</li>
|
||||
</ul>
|
||||
<p>As a new contributor to Forem, I love this guidance. And as I began reviewing other pull requests, I appreciated the structure even more.</p>
|
||||
<h2 id="my-current-pull-request-workflow">My Current Pull Request Workflow</h2>
|
||||
<p>When I’m working on the code, I continue to write verbose commit messages. Then, when I’m ready, I push up my branch and push the button to create a pull request for the branch.</p>
|
||||
<p>By default, Github prepends the last commit message to the text of the pull request template. I focus my browser into that text area and use the <a href="https://github.com/dmgerman/editWithEmacs.spoon">editWithEmacs.spoon</a> to copy that text and paste it into a new Emacs buffer on my machine.</p>
|
||||
<p>In that Emacs buffer, I then go about editing the pull request text.</p>
|
||||
<p>When I’m done, I type <kbd>Ctrl</kbd>+<kbd>c</kbd> then <kbd>Ctrl</kbd>+<kbd>c</kbd> (e.g., <code>C-c C-c</code> in Emacs parlance) to copy the text from my Emacs buffer and paste it back into the browser’s text area. <small><a href="http://magit.vc">Magit</a> and <a href="http://orgmode.org">Org Mode</a> use that key combination for confirmation of commands.</small></p>
|
||||
<p>And I submit my pull request.</p>
|
||||
<h3 id="automating-my-workflow">Automating My Workflow</h3>
|
||||
<p>Once I started editing these pull requests in Emacs, I started to see the clean-up work that I was regularly doing before I started filling out the checkboxes. And because I was now in my text editor, I chose to write a script to do that clean-up.</p>
|
||||
<p>Without reading the elisp code, it:</p>
|
||||
<ul>
|
||||
<li>Removes the comment preamble</li>
|
||||
<li>It adds the last commit message as the description</li>
|
||||
<li>It tidies up the comments of two sections</li>
|
||||
</ul>
|
||||
<p>Below is the lisp code to do the tidying up:</p>
|
||||
<pre><code class="language-lisp">(defun jnf/forem-tidy-pull-request ()
|
||||
"Perform some quick tidying of the Forem PR template."
|
||||
(interactive)
|
||||
;; Start from the beginning.
|
||||
(beginning-of-buffer)
|
||||
|
||||
;; The text before the first HTML/Markdown
|
||||
;; comments is the commit message. Cut that
|
||||
;; text...
|
||||
(search-forward "<!--")
|
||||
(kill-region 1 (- (point) 4))
|
||||
|
||||
;; ...and paste it inside the description
|
||||
;; section.
|
||||
(replace-string
|
||||
"## Description\n\n"
|
||||
(concat "## Description\n\n"
|
||||
(format "%s" (car kill-ring))))
|
||||
|
||||
;; We've moved point (e.g., the cursor) so let's
|
||||
;; jump back to the beginning of the buffer.
|
||||
(beginning-of-buffer)
|
||||
|
||||
;; Remove HTML/Markdown comments
|
||||
(replace-regexp
|
||||
"\\(\n\\)*<!--\\(.\\|\n\\)*-->\\(\n\\)*"
|
||||
"")
|
||||
|
||||
;; Clean out the comments for QA instructions;
|
||||
;; I'll write them, but the notes are
|
||||
;; unnecessary.
|
||||
(replace-regexp
|
||||
"QA Instructions, Screenshots, Recordings\\([^#]\\)*"
|
||||
"QA Instructions, Screenshots, Recordings\n\n")
|
||||
|
||||
;; Clean out accessibility concerns; I'll write
|
||||
;; them, but the notes are unnecessary.
|
||||
(replace-regexp
|
||||
"UI accessibility concerns?\\([^#]\\)*"
|
||||
"UI accessibility concerns?\n\n"))
|
||||
</code></pre>
|
||||
<p>Then comes the keyboard bindings to make this easier.</p>
|
||||
<p>When copying from browser to Emacs, the <code>editWithEmacs.spoon</code> toggles on the <code>hammerspoon-edit-minor-mode</code> for the buffer. <a href="https://github.com/dmgerman/editWithEmacs.spoon/blob/45d44f4ecbeedd0959ac07c2a41d30bd2633ddc1/hammerspoon.el#L55-L64">See the code for those details</a>. The following code adds a new key binding <kbd>Ctrl</kbd>+<kbd>c</kbd> then <kbd>t</kbd> to the keyboard mappings.</p>
|
||||
<pre><code class="language-lisp">(define-key
|
||||
hammerspoon-edit-minor-map
|
||||
(kbd "C-c t")
|
||||
#'jnf/forem-tidy-pull-request)
|
||||
</code></pre>
|
||||
<p>Kind of nice. Load the content into an Emacs buffer, type <kbd>Ctrl</kbd>+<kbd>c</kbd> then <kbd>t</kbd> and I’m a few steps closer to completing my pull request.</p>
|
||||
<h3 id="what-remains">What remains?</h3>
|
||||
<p>I wrote a script to <a href="https://github.com/ndlib/commandline-tools/blob/cd09d035cf00ff428d5a5a9f6fa986343597fa54/bin/build-pull-request-message">build a pull request message</a> from commit messages. <small>Note, at my previous employer they chose to keep using—and keep choosing to use—the branch name <code>master</code> hence the code defaults to that.</small></p>
|
||||
<p>I would like to better incorprate that conceptual script into my workflow.</p>
|
||||
<p>And if I’m feeling up for the challenge, I’ll grab any Github links from the commit messages and add those to the related tasks and documents.</p>
|
||||
<h2 id="conclusion">Conclusion</h2>
|
||||
<p>Since joining Forem, I’ve issued 32 pull requests. And as I started doing this task more, I started wondering, “How might I tweak my tooling to address some repetetive tasks?”</p>
|
||||
<p>I let that question linger as I wrote several pull request messages in Emacs. And then, with a bit of time, I chose to spend a bit of time writing the above script. I don’t know how many pull requests I’ll need to write to “make up” for the time spent on the script.</p>
|
||||
<p>But that is a lesser concern. I’m more concerned with getting comfortable understanding the interplay of the various systems I use and how I can mold them to assist in the tasks at hand.</p>
|
||||
<p>When I start to create a pull request, I can quickly run the clean up task so that I can then focus on writing the pull request. In other words, I automated away a “distraction” so I could stay closer to the area of focus.</p>
|
|
@ -0,0 +1 @@
|
|||
<p><a href="https://thebibleproject.com/podcast/trees-ancients/?utm_medium=podcast&utm_source=podcast_shownotes&utm_campaign=tree_of_life&utm_content=description_link">View full show notes and images from this episode →</a></p><p>Resources</p><ul><li><i>Bruce Waltke, </i><a href="https://amzn.to/309XR9z"><i>An Old Testament Theology: An Exegetical, Canonical, and Thematic Approach</i></a><i>, 257</i></li><li><i>William Osborne, </i><a href="https://amzn.to/35E412P"><i>Trees and Kings: A Comparative Analysis of Tree Imagery in Israel’s Prophetic Tradition and the Ancient Near East. </i></a></li><li><i>Terje Stordalen, </i><a href="https://amzn.to/2QH2d51"><i>Echoes of Eden Genesis 2-3 and Symbolism of the Eden Garden in Biblical Hebrew Literature.</i></a></li><li><i>Charles Taylor, </i><a href="https://amzn.to/307SB6q"><i>A Secular Age</i>.</a></li></ul><p>Music</p><ul><li>Defender Instrumental by Tents</li></ul><p>Show produced by Dan Gummel.</p><p>Powered and distributed by Simplecast.</p>
|
|
@ -0,0 +1 @@
|
|||
<!-- SC_OFF --><div class="md"><p>Wine doesn't seem to work. It just creates the wine prefix directory and hangs.<br/> Backlog: <a href="https://pastebin.com/08jjt531">https://pastebin.com/08jjt531</a></p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/TheRealKizu"> /u/TheRealKizu </a> <br/> <span><a href="https://www.reddit.com/r/archlinux/comments/r1stx8/wine_doesnt_work/">[link]</a></span>   <span><a href="https://www.reddit.com/r/archlinux/comments/r1stx8/wine_doesnt_work/">[comments]</a></span>
|
|
@ -0,0 +1 @@
|
|||
<p>The flood is one of the most well-known stories in the Bible, yet this story of judgment seems to be missing something important: God’s anger. In the Bible, God’s anger and judgment are not always associated. Listen in as Tim, Jon, and Carissa review a familiar story with insight that helps us understand God’s anger and judgment.</p><p><a href="https://bibleproject.com/podcast/the-first-time-god-gets-angry/">View full show notes from this episode →</a></p><p>Timestamps </p><ul><li>Part one (0:00–9:30)</li><li>Part two (9:30–31:00)</li><li>Part three (31:00–40:00)</li><li>Part four (40:00–53:20)</li><li>Part five (53:20–end)</li></ul><p>Additional Resources</p><ul><li>L. Daniel Hawk, <a href="https://amzn.to/2H6Ufjo"><i>The Violence of the Biblical God</i></a></li></ul><p>Show Music </p><ul><li>“Defender Instrumental” by Tents</li><li>“Vinho Verde” by Clap Cotton</li><li>“Imagination” by Montell Fish</li><li>“So Unnecessary” by Dotlights</li><li>“Lisbon” by Ason ID</li></ul><p>Show produced by Dan Gummel and Camden McAfee. </p><p>Powered and distributed by Simplecast.</p>
|
|
@ -0,0 +1 @@
|
|||
This is Toby Sumpter with your CrossPolitic Daily News Brief for Friday, July 2, 2021. Plug: Fight Laugh Feast University is offering two new online classes starting this July! Get the whole family involved and participate in live online classes via Zoom. Hangout with fellow friends of the network, and learn together with the whole […]
|
|
@ -0,0 +1,58 @@
|
|||
<p><iframe loading="lazy" title="Destination Linux EP43 - Noah J. Chelliah" width="800" height="450" src="https://www.youtube.com/embed/wpz8klcOmQQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
|
||||
<p><span style="font-weight: 400;">Welcome to Destination Linux for 10-30-17</span></p>
|
||||
<p><span style="font-weight: 400;">This week we will be covering………….</span></p>
|
||||
<ul>
|
||||
<li style="font-weight: 400;"><span style="font-weight: 400;">Ubuntu 18.04</span></li>
|
||||
<li style="font-weight: 400;"><span style="font-weight: 400;">LXqt</span></li>
|
||||
<li style="font-weight: 400;"><span style="font-weight: 400;">Xubuntu</span></li>
|
||||
<li style="font-weight: 400;"><span style="font-weight: 400;">Antix</span></li>
|
||||
<li style="font-weight: 400;"><span style="font-weight: 400;">Linux Mint and the latest gaming news</span></li>
|
||||
</ul>
|
||||
<p>But first, we have a viewer email</p>
|
||||
<p><span style="font-weight: 400;">“I bought a second hand hdd from a sale the local school had. It’s a 2tb western digital blue I installed it, got it mounted and used it for about an hour before it became inaccessible. Reformatting at this point left me w a chunk of inaccessible data. Now either hdparm or disks put its status as frozen. From my understanding this can be fixed by power cycling the hdd without power cycling the computer? I’m wondering if this will be a continuous problem on this drive? Would the easiest solution be to put it in an external case?”</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">Eric</span></p>
|
||||
<p><b>Noah J. Chelliah from the “Ask Noah Show”</b></p>
|
||||
<p><a href="https://twitter.com/kernellinux?lang=en"><span style="font-weight: 400;">Twitter</span></a></p>
|
||||
<p><span style="font-weight: 400;">A business owner of </span><a href="http://www.altispeed.com/home.html"><span style="font-weight: 400;">Altispeed</span></a><span style="font-weight: 400;"> a company that provides network infrastructure, backend, client-side front-end, and tech support. </span></p>
|
||||
<p><span style="font-weight: 400;">Former host of the insanely popular “Linux Action Show”</span></p>
|
||||
<p><span style="font-weight: 400;">Jupiter Broadcasting </span><a href="http://www.jupiterbroadcasting.com/hosts/noah-chelliah-linux-action-show/"><span style="font-weight: 400;">Bio Page</span></a></p>
|
||||
<p><span style="font-weight: 400;">And now with your own show. You are the host of the </span><a href="https://asknoah.fireside.fm/hosts/kernellinux"><span style="font-weight: 400;">“Ask Noah Show”</span></a></p>
|
||||
<p><b>News</b></p>
|
||||
<p><a href="http://www.omgubuntu.co.uk/2017/10/ubuntu-18-04-lts-called-bionic-beaver"><span style="font-weight: 400;">Ubuntu 18.04 LTS is Called ‘Bionic Beaver’</span></a></p>
|
||||
<p><a href="https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-18.04-LTS-Linux-4.15"><span style="font-weight: 400;">Ubuntu 18.04 LTS Will Likely Ship With Linux 4.15</span></a></p>
|
||||
<p><span style="font-weight: 400;">30th November: Feature Definition Freeze</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">4th January: Alpha 1 release</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">1st February: Alpha 2 release</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">1st March: Feature Freeze</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">8th March: First beta release</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">5th April: Final beta release</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">19th April: Final Freeze</span><span style="font-weight: 400;"><br />
|
||||
</span><span style="font-weight: 400;">26th April: Stable Ubuntu 18.04 LTS release</span></p>
|
||||
<p><a href="https://www.phoronix.com/scan.php?page=news_item&px=LXQt-0.12-Released"><span style="font-weight: 400;">LXQt 0.12 released With Better HiDPI Support, More Robust</span></a></p>
|
||||
<p><a href="http://lxqt.org/release/2017/10/21/lxqt-0120/"><span style="font-weight: 400;">Release LXQt 0.12.0</span></a></p>
|
||||
<p><a href="https://xubuntu.org/news/xubuntu-17-10-release/"><span style="font-weight: 400;">Xubuntu 17.10 released!</span></a></p>
|
||||
<p><a href="https://antixlinux.com/antix-17-released/"><span style="font-weight: 400;">antiX-17 released</span></a></p>
|
||||
<p><a href="http://www.omgubuntu.co.uk/2017/10/linux-mint-18-3-adding-full-support-flatpak"><span style="font-weight: 400;">Linux Mint Throws Its Weight Behind Flatpak</span></a></p>
|
||||
<p><a href="https://www.phoronix.com/scan.php?page=news_item&px=Linux-Mint-Dropping-KDE"><span style="font-weight: 400;">Linux Mint Will Discontinue Its KDE Edition</span></a></p>
|
||||
<p><a href="https://blog.linuxmint.com/?p=3418"><span style="font-weight: 400;">Official Announcement</span></a></p>
|
||||
<p><a href="https://www.fossmint.com/coffee-news-and-weather-app-for-linux/"><span style="font-weight: 400;">Coffee – A News and Weather App for Linux</span></a></p>
|
||||
<p><b>Gaming</b></p>
|
||||
<p><span style="font-weight: 400;">What Have I Been Playing:</span></p>
|
||||
<p><span style="font-weight: 400;">TF2 w/ Rocco Jungle Inferno Update & CS Go w/ Dustin Krysak (Ubuntu Budgie)</span></p>
|
||||
<p><span style="font-weight: 400;">If you thought we were bad at Rocket League – you ain’t seen nothing yet. </span></p>
|
||||
<p><a href="https://www.tuxformat.com/2017/10/14/hand-of-fate-2-release-on-november-7th/"><span style="font-weight: 400;">Hand of Fate 2 Release on November 7th</span></a></p>
|
||||
<p><a href="https://www.gamingonlinux.com/articles/the-next-three-major-steam-sale-dates-have-been-leaked.10586"><span style="font-weight: 400;">The next three major Steam sale dates have been leaked</span></a></p>
|
||||
<p><a href="https://www.gamingonlinux.com/articles/close-combat-fps-return-to-planet-x-is-now-on-linux-its-actually-not-bad-at-all.10578"><span style="font-weight: 400;">Close-combat FPS ‘Return to Planet X’ is now on Linux, it’s actually not bad at all</span></a></p>
|
||||
<p><a href="http://linuxgamingnews.org/2013/01/13/euro-truck-simulator-2-coming-to-gnulinux-soon/"><span style="font-weight: 400;">Euro Truck Simulator 2 Coming To GNU/Linux Soon!</span></a></p>
|
||||
<p><a href="https://www.fanatical.com/"><span style="font-weight: 400;">Bundle Stars is becoming Fanatical</span></a></p>
|
||||
<p><b>Admin</b></p>
|
||||
<p><a href="https://teespring.com/destinationlinuxpodcast?utm_swu=29&utm_source=Seller_mktauto_us&utm_campaign=seller_campaign_launch_2&utm_medium=email#pid=522&cid=101894&sid=front"><span style="font-weight: 400;">Destination Linux Apparel</span></a></p>
|
||||
<p><b>Where Can You Find Us This Week</b></p>
|
||||
<ul>
|
||||
<li style="font-weight: 400;"><span style="font-weight: 400;">Rocco and Ryan will be playing Rocket League live this week on DasGeek Channel</span></li>
|
||||
<li style="font-weight: 400;"><span style="font-weight: 400;">Friday Night Live on the BigDaddyLinux Channel</span></li>
|
||||
</ul>
|
||||
<p><span style="font-weight: 400;">Twitter @dasgeekchannel @bigdaddylinux</span></p>
|
||||
<p><span style="font-weight: 400;">A big thank you to each and every one of you for supporting us and Thank you For Watching Destination Linux</span></p>
|
||||
<p><span style="font-weight: 400;">Have a great week and remember the Journey ITSELF is just as important as the Destination</span></p>
|
|
@ -0,0 +1,2 @@
|
|||
<p>It’s Wes & the Beard this week as we cover tons of stories. TopIcons is officially unmaintained, KDE launches the XFree kwin project in an attempt to rid themselves of XWayland, Synergy goes closed source, Microsoft & Canonical build a custom linux kernel & more!</p><p><a href="https://jupitersignal.memberful.com/checkout?plan=52946" rel="payment">Support LINUX Unplugged</a></p>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<div class="date">23 Dec 2020</div>
|
||||
|
||||
<p>
|
||||
Outside of editing a buffer, one of the most common user interface in Emacs is <code>completing-read</code>, which allows you to select an item from a list of choices. I thought I would expand on it with a bit of Lisp code to explain how to give your interactive functions a bit more interaction.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://www.howardism.org/Technical/Emacs/alt-completing-read.html">Read more...</a>
|
||||
</p>
|
||||
|
|
@ -0,0 +1 @@
|
|||
<table> <tr><td> <a href="https://www.reddit.com/r/unixporn/comments/r9zunk/dwm_dwm_has_been_getting_popular_recently/"> <img src="https://preview.redd.it/y8yj65qq0v381.png?width=640&crop=smart&auto=webp&s=6f41aa55c5885c8bd9694b1c53676c4db5b46420" alt="[dwm] dwm has been getting popular recently" title="[dwm] dwm has been getting popular recently" /> </a> </td><td>   submitted by   <a href="https://www.reddit.com/user/Gaffclant"> /u/Gaffclant </a> <br/> <span><a href="https://i.redd.it/y8yj65qq0v381.png">[link]</a></span>   <span><a href="https://www.reddit.com/r/unixporn/comments/r9zunk/dwm_dwm_has_been_getting_popular_recently/">[comments]</a></span> </td></tr></table>
|
|
@ -0,0 +1,41 @@
|
|||
<p>SHOW NOTES: </p>
|
||||
|
||||
<p>- All the info you need to START is on our <a href='http://www.thebiblerecap.com'>website</a>!
|
||||
</p>
|
||||
|
||||
<p>- Join our <a href='https://www.patreon.com/thebiblerecap'>PATREON</a> family for bonus perks!</p>
|
||||
|
||||
<p>- Get your <a href='https://www.theconnextion.com/tlcdgroup/index.cfm'>TBR merch</a></p>
|
||||
|
||||
<p>- <a href='http://thebiblerecap.com/contact'>Show credits</a></p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p>FROM TODAY’S PODCAST: </p>
|
||||
|
||||
<p>- Article 1 of 2: <a href='https://www.gotquestions.org/144000.html'>Who Are The 144,000?</a></p>
|
||||
|
||||
<p>- Article 2 of 2: <a href='https://www.thegospelcoalition.org/blogs/kevin-deyoung/who-are-the-144000-in-revelation/'>Who are the 144,000 in Revelation?</a></p>
|
||||
|
||||
<p>- <a href='https://www.biblegateway.com/passage/?search=isaiah+14%3A12&version=ESV'>Isaiah 14:12</a></p>
|
||||
|
||||
<p>- <a href='https://www.biblegateway.com/passage/?search=luke+18%3A10&version=ESV'>Luke 18:10</a></p>
|
||||
|
||||
<p>- Video: <a href='https://www.youtube.com/watch?v=QpnIrbq2bKo'>Revelation Overview (Part Two)</a></p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p>SOCIALS:</p>
|
||||
|
||||
<p>The Bible Recap:<a href='https://instagram.com/thebiblerecap'> Instagram</a> |<a href='https://www.facebook.com/thebiblerecap'> Facebook</a> |<a href='https://twitter.com/thebiblerecap'> Twitter</a></p>
|
||||
|
||||
<p>D-Group:<a href='https://instagram.com/mydgroup/'> Instagram</a> |<a href='https://www.facebook.com/ilovemydgroup'> Facebook</a> |<a href='https://mobile.twitter.com/mydgroup'> Twitter</a></p>
|
||||
|
||||
<p>TLC:<a href='https://instagram.com/taraleighcobble'> Instagram</a> |<a href='https://www.facebook.com/taraleighcobble'> Facebook</a> |<a href='https://twitter.com/taraleighcobble'> Twitter</a></p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p>D-GROUP:
|
||||
The Bible Recap is brought to you by<a href='https://www.mydgroup.org/'> D-Group</a> - an international network of discipleship and accountability groups that meet weekly in homes and churches:<a href='https://www.mydgroup.org/map'> Find or start one near you today</a>!</p>
|
||||
|
||||
<p> </p>
|
|
@ -0,0 +1 @@
|
|||
<p><img src="https://thumbnails.lbry.com/5wZtz8wx34g" width="480" alt="thumbnail" title="Shure SM7B: I've Reached Microphone End Game" /></p>I've been meaning to upgrade my microphone for quite a while and I've now bought the last microphone I'll ever buy, sure there are other use cases but the shure sm7b is the lst desk mic I'll ever need.<br /><br />==========Support The Channel==========<br />► $100 Linode Credit: https://brodierobertson.xyz/linode<br />► Patreon: https://brodierobertson.xyz/patreon<br />► Paypal: https://brodierobertson.xyz/paypal<br />► Liberachat: https://brodierobertson.xyz/liberachat<br />► Amazon USA: https://brodierobertson.xyz/amazonusa<br /><br />==========Resources==========<br />Buy Shure SM7B: https://amzn.to/3F6tTHO<br /><br />=========Video Platforms==========<br />🎥 Odysee: https://brodierobertson.xyz/odysee<br />🎥 Podcast: https://techovertea.xyz/youtube<br />🎮 Gaming: https://brodierobertson.xyz/youtube<br /><br />==========Social Media==========<br />🎤 Discord: https://brodierobertson.xyz/discord<br />🎤 Matrix Space: https://brodierobertson.xyz/matrix<br />🐦 Twitter: https://brodierobertson.xyz/twitter<br />🌐 Mastodon: https://brodierobertson.xyz/mastodon<br />🖥️ GitHub: https://brodierobertson.xyz/github<br /><br />==========Time Stamps==========<br />0:00 Introduction<br />1:33 First Impressions<br />3:18 Proximity Effect<br />5:09 Shure Switches<br />6:27 Awesome Minor Features<br />8:03 Sound Comparison<br />9:09 Pricing and Comparison<br />10:53 Should You Buy One<br /><br />==========Credits==========<br />🎨 Channel Art:<br />All my art has was created by Supercozman<br />https://twitter.com/Supercozman<br />https://www.instagram.com/supercozman_draws/<br /><br />#ShureSM7B #YouTubeStudio #Microphone<br /><br />🎵 Ending music<br />Music from https://filmmusic.io<br />"Basic Implosion" by Kevin MacLeod (https://incompetech.com)<br />License: CC BY (http://creativecommons.org/licenses/by/4.0/)<br /><br />DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.<br />...<br />https://www.youtube.com/watch?v=5wZtz8wx34g
|
|
@ -0,0 +1 @@
|
|||
<p><img src="https://thumbnails.lbry.com/tIvdLeeW6pM" width="480" alt="thumbnail" title="Gramma: Fixing YoUr Grammar right In The Terminal" /></p>Do you ever find that your grammar is horrible, well I do so lucky there's a tool to address that and that tool is Gramma so you can fix it right from the terminal<br /><br />==========Support The Channel==========<br />► $100 Linode Credit: https://brodierobertson.xyz/linode<br />► Patreon: https://brodierobertson.xyz/patreon<br />► Paypal: https://brodierobertson.xyz/paypal<br />► Liberapay: https://brodierobertson.xyz/liberapay<br />► Amazon USA: https://brodierobertson.xyz/amazonusa<br /><br />==========Resources==========<br />Gramma Github: https://github.com/caderek/gramma<br />Language Tool: https://languagetool.org/<br /><br />=========Video Platforms==========<br />🎥 Odysee: https://brodierobertson.xyz/odysee<br />🎥 Podcast: https://techovertea.xyz/youtube<br />🎮 Gaming: https://brodierobertson.xyz/youtube<br /><br />==========Social Media==========<br />🎤 Discord: https://brodierobertson.xyz/discord<br />🎤 Matrix Space: https://brodierobertson.xyz/matrix<br />🐦 Twitter: https://brodierobertson.xyz/twitter<br />🌐 Mastodon: https://brodierobertson.xyz/mastodon<br />🖥️ GitHub: https://brodierobertson.xyz/github<br /><br />==========Credits==========<br />🎨 Channel Art:<br />All my art has was created by Supercozman<br />https://twitter.com/Supercozman<br />https://www.instagram.com/supercozman_draws/<br /><br />#Grammar #Linux #Terminal<br /><br />🎵 Ending music<br />Music from https://filmmusic.io<br />"Basic Implosion" by Kevin MacLeod (https://incompetech.com)<br />License: CC BY (http://creativecommons.org/licenses/by/4.0/)<br /><br />DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.<br />...<br />https://www.youtube.com/watch?v=tIvdLeeW6pM
|
|
@ -0,0 +1,62 @@
|
|||
|
||||
|
||||
<p>Starting with commit <code>171de3eee4</code> to the Emacs <code>master</code> branch, users
|
||||
can now opt-in to a feature that automatically renames EWW buffers to
|
||||
something more usable than the default <code>*eww*</code>.</p>
|
||||
|
||||
<p>The point of entry is the customisation option <code>eww-auto-rename-buffer</code>.
|
||||
When given a <code>title</code> value, it will use the web page’s title as the name
|
||||
of the buffer. When the value is <code>url</code>, the page’s URL shall be used
|
||||
instead. Otherwise it is possible to give it the symbol of a function
|
||||
that runs without parameters and returns a string. So users can
|
||||
configure this however they like.</p>
|
||||
|
||||
<p>Detail of the commit:</p>
|
||||
|
||||
<pre><code> commit 171de3eee459ed64388a8ced7d07fa031ea025a6
|
||||
Author: Protesilaos Stavrou <info@protesilaos.com>
|
||||
Date: Fri Oct 15 14:12:32 2021 +0200
|
||||
|
||||
Add new option to rename eww buffers
|
||||
|
||||
* etc/NEWS: Document the new user options.
|
||||
|
||||
* lisp/net/eww.el (eww-auto-rename-buffer, eww-buffer-name-length):
|
||||
Add new user options.
|
||||
(eww--rename-buffer): Introduce new function that performs the
|
||||
renaming of buffers.
|
||||
(eww--after-page-change): Add new wrapper function which calls
|
||||
'eww-update-header-line-format' and 'eww--rename-buffer'.
|
||||
(eww, eww-render, eww-tag-title, eww-readable, eww-restore-history):
|
||||
Include eww--after-page-change.
|
||||
|
||||
Fix bug#51176.
|
||||
|
||||
Co-authored-by: Abhiseck Paira <abhiseckpaira@disroot.org>
|
||||
Co-authored-by: Protesilaos Stavrou <info@protesilaos.com>
|
||||
|
||||
doc/misc/eww.texi | 8 +++++++
|
||||
etc/NEWS | 10 +++++++++
|
||||
lisp/net/eww.el | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
|
||||
3 files changed, 78 insertions(+), 5 deletions(-)
|
||||
</code></pre>
|
||||
|
||||
<p>Thanks to everyone who participated in <a href="https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg01314.html">the discussion around
|
||||
bug#51176</a>.
|
||||
Thanks to the Emacs co-maintainer, Lars Ingebrigtsen, for the feedback
|
||||
and for merging the patch. And special thanks to Abhiseck Paira, my
|
||||
co-author for this patch, for all the work in making this happen.</p>
|
||||
|
||||
<p>I am very happy to see this merged into core. I have been using a
|
||||
variant of it for several months now. It had been one of the most
|
||||
useful additions of mine in making EWW my main web browser.</p>
|
||||
|
||||
<p>[ Watch: <a href="https://protesilaos.com/codelog/2021-03-25-emacs-eww/">EWW and my extras (text-based Emacs web
|
||||
browser)</a>
|
||||
(2021-03-25) ]</p>
|
||||
|
||||
<p>Going forward, the plan is to extract more out of my <code>prot-eww.el</code>,
|
||||
refine it, and push it to emacs.git. Same principle for everything else
|
||||
that goes into <a href="https://protesilaos.com/emacs/dotemacs">my dotemacs</a>.</p>
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
<p><img src="https://thumbnails.lbry.com/7E-6j6VTZgM" width="480" alt="thumbnail" title="System Crafters Live! - Community Chat and Config Hacking" /></p>In this stream, I'll be working on a couple of projects for the channel while we chat together. Ask me anything!<br /><br />SUPPORT THE CHANNEL:<br /><br />👕 https://store.systemcrafters.net<br />👍 https://systemcrafters.net/support-the-channel<br />🌐 Buy a domain with Namecheap: https://namecheap.pxf.io/NK0yXK<br /><br />SHOW NOTES:<br /><br />https://systemcrafters.net/live-streams/december-10-2021/<br /><br />MY CONFIGURATION:<br /><br />https://config.daviwil.com<br />https://config.daviwil.com/emacs<br />https://config.daviwil.com/systems (Guix)<br /><br />JOIN THE COMMUNITY:<br /><br />http://systemcrafters.chat (IRC and Discord)<br />https://twitter.com/SystemCrafters<br /><br />OTHER SERIES:<br /><br />- Emacs Essentials: https://www.youtube.com/watch?v=48JlgiBpw_I&list=PLEoMzSkcN8oPZvSdewHG8uApD7THlLLCV<br />- Emacs From Scratch: https://www.youtube.com/watch?v=74zOY-vgkyw&list=PLEoMzSkcN8oPH1au7H6B7bBJ4ZO7BXjSZ<br />- Emacs Tips: https://www.youtube.com/watch?v=wKTKmE1wLyw&list=PLEoMzSkcN8oMHJ6Xil1YdnYtlWd5hHZql<br />- Emacs Desktop Environment: https://www.youtube.com/watch?v=f7xB2fFk1tQ&list=PLEoMzSkcN8oNPbEMYEtswOVTvq7CVddCS<br />- Emacs IDE: https://www.youtube.com/watch?v=E-NAM9U5JYE&list=PLEoMzSkcN8oNvsrtk_iZSb94krGRofFjN<br />- Emacs Mail: https://www.youtube.com/watch?v=yZRyEhi4y44&list=PLEoMzSkcN8oM-kA19xOQc8s0gr0PpFGJQ<br />- Learning Emacs Lisp: https://www.youtube.com/watch?v=RQK_DaaX34Q&list=PLEoMzSkcN8oPQtn7FQEF3D7sroZbXuPZ7<br />- Craft Your System with GNU Guix: https://www.youtube.com/watch?v=iBaqOK75cho&list=PLEoMzSkcN8oNxnj7jm5V2ZcGc52002pQU<br /><br />CREDITS:<br /><br />Coriolis Effect by logos feat. stefsax, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/mseq/26296<br />reNovation by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/60674<br />ukeSounds by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/32655<br />Between Worlds (Instrumental) by Aussens@iter, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/tobias_weber/56664<br /><br /><br />Powered by Restream https://restream.io/<br />...<br />https://www.youtube.com/watch?v=7E-6j6VTZgM
|
|
@ -0,0 +1 @@
|
|||
<!-- SC_OFF --><div class="md"><p>Hej fellow guixers,</p> <p>TLDR: <code>guix gc</code> claims to be unable to repair some corrupt/nonworking store items. Result of many crashes (that problem is solved). What can I do to resolve the issue?</p> <p>I believe to have finally resolved an issue where my pc would crash very frequently (basically, automatic, BIOS-enabled overclocking).</p> <p>However, this has resulted in - you can guess it - a great many crashes, or rather, hard resets. Obviously, the system doesn't like being treated like that. I am on a rather performant machine with a samsung ssd, guix system and btrfs. Because I was afraid that those crashes might irrevocably damage my machine, I got into the habit of regularly running btrfs- and guix-specific commands for storage device maintenance after a hard reset (<code>btrfs check</code>, <code>btrfs scrub</code>, <code>btrfs balance</code>; <code>guix gc --verify=contents,repair</code>).</p> <p>Now, as of late, there is an increasing number of items in the store that <code>guix gc</code> claims unable to repair. Is this a problem? Should I be worried about this? What can I do about this? Will a "normal" <code>guix gc</code> (without arguments, that is) collect all of these?</p> <p>To be able to resolve that issue is important to me, because I believe that those corrupt items actually clog my cpu performance. Yesterday, I timed a <code>guix upgrade</code>, just to see how long the creation of a profile with ~10 packages takes: about 5 minutes! For comparison, I just created a new profile with 10 packages of different origin (music production stuff), which took about 1 minute to complete.</p> <p>Have a good day, fellow good humans :)</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/olivuser"> /u/olivuser </a> <br/> <span><a href="https://www.reddit.com/r/GUIX/comments/qdb04j/what_to_do_about_unrepairable_store_items_guix_gc/">[link]</a></span>   <span><a href="https://www.reddit.com/r/GUIX/comments/qdb04j/what_to_do_about_unrepairable_store_items_guix_gc/">[comments]</a></span>
|
382
var/elfeed/db/data/7d/7dca81365d05f22609700cc19475f806cc8d0e42
Normal file
382
var/elfeed/db/data/7d/7dca81365d05f22609700cc19475f806cc8d0e42
Normal file
|
@ -0,0 +1,382 @@
|
|||
<p>
|
||||
With a 9.5 release highlight post last month, and the month before skipped, it's
|
||||
now <i>three months</i> since the last regular instalment of TMIO. Let's get back up
|
||||
to date on some of the latest happenings with Org.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Org as markup
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Looking at the wider ecosystem, it certainly appears that there is a growing
|
||||
appetite for Org markup outside org-mode. More projects like <a href="https://gohugo.io/">Hugo</a> and <a href="https://logseq.com/">Logseq</a>
|
||||
seem to be interested in supporting Org markup, and there has been a recent
|
||||
growth in editor extensions like Neovim's <a href="https://github.com/nvim-orgmode/orgmode/">orgmode.nvim</a> (started in March this
|
||||
year) and Sublime Text's <a href="https://packagecontrol.io/packages/OrgExtended">OrgExtended</a> (started in June this year).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Interest in Org as a general-usage markup format can also be seen within the Org
|
||||
project. Primarily lead by Nicolas Goaziou, there is an ongoing attempt to
|
||||
codify the Org syntax in a formal specification in the Worg document <a href="https://orgmode.org/worg/dev/org-syntax.html">Org Syntax
|
||||
(draft)</a>. Other members of the Org mailing list have directed their effort to
|
||||
creating non-elisp parsers for Org, both to help Org tools be created in other
|
||||
languages, and as put in the README for Tom Gillespie's <a href="https://github.com/tgbugs/laundry">laundry</a> parser
|
||||
</p>
|
||||
<blockquote>
|
||||
<p>
|
||||
The long term goal of this work is to provide a reference that can be used to
|
||||
standardize Org syntax and behavior and to specify various levels of compliance
|
||||
for an implementation of Org mode.
|
||||
</p>
|
||||
</blockquote>
|
||||
|
||||
<p>
|
||||
Earlier this week Karl Voit, the author of the rather well-known document <a href="https://karl-voit.at/2017/09/23/orgmode-as-markup-only/">Org
|
||||
Mode Is One of the Most Reasonable Markup Languages to Use for Text</a>, surprised
|
||||
the mailing list by announcing his independent creation of a multi-leveled
|
||||
standard for Org syntax subsets called "Orgdown" (the name is a blend of
|
||||
"Org-mode" and "markdown", but the standard is only a subset of Org). Each level
|
||||
defines a compliance score given by a mix of parsing and editing support, with
|
||||
example compliance scores for the first (and currently only) level of the
|
||||
standard given for common tools.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
At this stage, it isn't clear exactly how the Org-outside-Emacs landscape will
|
||||
evolve, but the swelling interest is very encouraging.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
An Org parser in Julia
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Speaking of parsers, I may be somewhat biased but I'm quite happy that a Org
|
||||
parser for <a href="https://julialang.org/">Julia</a> now exists 🎉.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
//github.com/tecosaur/OrgMode.jl
|
||||
</p>
|
||||
|
||||
<p>
|
||||
OrgMode.jl is a parser, but also intended as a general-purpose Org library for
|
||||
Julia. It's only been a week since development started, but it currently
|
||||
supports most of the <a href="https://orgmode.org/worg/dev/org-syntax.html">Org Syntax</a> draft specification, along with the rendering of
|
||||
a parsed Org AST to a TTY or back to Org text. A few utility functions are also
|
||||
included, such as <code>filtermap</code> which operates similarly to <code>org-element-map</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Autoloading citation backends
|
||||
</p>
|
||||
|
||||
<p>
|
||||
One small but impactful change is autoloading of citation backends. Until
|
||||
recently before say using the <kbd>csl</kbd> backend, one needed to
|
||||
<code class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">require</span> <span class="org-highlight-quoted-quote">'</span><span class="org-constant">oc-csl</span><span class="org-rainbow-delimiters-depth-1">)</span></code> or face error messages.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Now, if you have a line like:
|
||||
</p>
|
||||
<pre class="example" id="org4a465c0"> #+cite_export: FORMAT ...
|
||||
</pre>
|
||||
<p>
|
||||
org-mode will try to load the file <kbd>oc-FORMAT</kbd> before trying to process citations.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This should make getting started with citations in Org just a bit easier.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A nicer <kbd>:tangle-mode</kbd> syntax
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The standard way of setting a <kbd>:tangle-mode</kbd> has typically been by providing a
|
||||
closure that makes use of Elisp's octal syntax, such as <kbd>(identity #o755)</kbd>. This
|
||||
is unnecessarily verbose, and certainly doesn't feel natural.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
With the addition of a small mode-interpreting function
|
||||
(<code>org-babel-interpret-file-mode</code>) It is now possible to specify <kbd>:tangle-mode</kbd> using
|
||||
three different forms of shorthand
|
||||
octal <kbd>o755</kbd> is equivalent to <kbd>(identity #o755)</kbd>
|
||||
chmod <code>chmod</code>-style inputs like <kbd>u+x</kbd> are now parsed to a file mode[fn1] with the
|
||||
the base/default mode set by <code>org-babel-tangle-default-file-mode</code>.
|
||||
ls -l strings of the form given by <code>ls -l</code> like <kbd>rwxr-xr-x</kbd> are also accepted
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This means the following forms are now all equivalent:
|
||||
</p>
|
||||
<pre class="example" id="orgbb3d0e1"> :tangle-mode (identity #o755)
|
||||
:tangle-mode o755
|
||||
:tangle-mode a=rx,u+w
|
||||
:tangle-mode rwxr-xr-x
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
It has also been noted on the mailing list that the <kbd>:tangle-mode (identity
|
||||
#o755)</kbd> form works by being transformed to <kbd>:tangle-mode 493</kbd> during parsing.
|
||||
Similarly <kbd>:tangle-mode 755</kbd> is equivalent to <kbd>:tangle-mode (identity #o1363)</kbd>. For
|
||||
some values the decimal and octal interpretation are <i>both</i> valid file modes. Due
|
||||
to the clear potential for confusion, and since file permissions are an
|
||||
important security consideration, it has been suggested on the mailing list that
|
||||
these forms should be depreciated with a warning in future. No decision has been
|
||||
made yet though.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Org element parser cache
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Ihor Radchenko has done some fantastic work over the past few months by
|
||||
overhauling parts of <kbd>org-element.el</kbd> to introduce extensive caching. <kbd>org-element</kbd>
|
||||
is <i>the</i> Org markup parser inside org-mode. This allows for a huge jump in speed,
|
||||
and also provides a few functions which fetch information without updating the
|
||||
cache --- allowing for particularly speedy lookups with a small sacrifice to
|
||||
correctness guarantees on one or two properties in particular cases.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Several org-mode API<small>s</small> now make use of the cache to dramatically improve speed.
|
||||
Aside from improvements to typically slow operations, this is ideal for
|
||||
situations involving frequent buffer edits.
|
||||
It's no understatement to say that this work is transformative.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
One potential beneficiary from this work is actually fontification. It has
|
||||
become increasingly apparent that the current regex-based method for buffer
|
||||
fontification is imperfect, and can actually differ from the true structure of
|
||||
the document as parsed (authoritatively) by <kbd>org-element</kbd>. This has lead to the
|
||||
well-received suggestion on the mailing list to rewrite the fontification code
|
||||
to be built on <kbd>org-element</kbd> instead.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Inline source block fontification
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I think <a href="https://orgmode.org/manual/Structure-of-Code-Blocks.html">inline source code blocks</a> are an underappreciated feature of Org. I
|
||||
don't think it's helped that they have not been visually treated at all
|
||||
differently from plain text. Now though, they have a new dedicated face
|
||||
(<code>org-inline-src-block</code>) <i>and</i> in the same manner as source blocks, based on
|
||||
<code>org-src-fontify-natively</code> can be fontified using the language's major mode.
|
||||
</p>
|
||||
|
||||
|
||||
<figure id="orgc9faff1">
|
||||
<img alt="inline-src-block-fontified-vs-code.png" src="https://blog.tecosaur.com/tmio/figures/inline-src-block-fontified-vs-code.png" />
|
||||
|
||||
<span class="figure-number">Figure 1: </span>Side-by-side comparison of a identical paragraphs using code (<code>~</code>) markup and inline source blocks (<code>src_</code>).
|
||||
</figure>
|
||||
|
||||
<p>
|
||||
If you aren't familiar with inline source blocks, you're missing out. They are
|
||||
very much the inline cousin of source blocks, and so support all your favourite
|
||||
Babel features like code execution and header arguments. This provides a
|
||||
fantastic capacity to inline dynamically computed expressions, and optionally
|
||||
show the code that produces them.
|
||||
</p>
|
||||
|
||||
|
||||
<figure id="org21ac268">
|
||||
<img alt="inline-src-block-julia-demo.png" src="https://blog.tecosaur.com/tmio/figures/inline-src-block-julia-demo.png" />
|
||||
|
||||
<span class="figure-number">Figure 2: </span>A paragraph making use of <i>evaluated</i> inline source blocks. Note that the <kbd>⟨11⟩</kbd> is a prettified results macro (using a potential future org-mode patch).
|
||||
</figure>
|
||||
|
||||
<p>
|
||||
Functions as default heading arguments
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Matt Huszagh has contributed a patch that allows functions to be used as values
|
||||
for default header arguments. This is great for arguments where a sensible
|
||||
default can be provided by evaluating a function on-the-fly.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Consider for example the arguments required to produce a simple image using R
|
||||
with Babel:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-org"><span class="org-org-block-begin-line"> #+begin_src R :results graphics file :file myimage.svg</span>
|
||||
<span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-modifiers">library</span></span><span class="org-org-block"><span class="org-ess-paren">(</span></span><span class="org-org-block">ggplot2</span><span class="org-org-block"><span class="org-ess-paren">)</span></span>
|
||||
<span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-function-call">ggplot</span></span><span class="org-org-block"><span class="org-ess-paren">(</span></span><span class="org-org-block">mpg, </span><span class="org-org-block"><span class="org-ess-function-call">aes</span></span><span class="org-org-block"><span class="org-ess-paren">(</span></span><span class="org-org-block">displ, hwy, colour </span><span class="org-org-block"><span class="org-ess-operator">=</span></span><span class="org-org-block"> class</span><span class="org-org-block"><span class="org-ess-paren">))</span></span><span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-operator">+</span></span><span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-function-call">geom_point</span></span><span class="org-org-block"><span class="org-ess-paren">()</span></span>
|
||||
<span class="org-org-block-end-line"> #+end_src</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
In a Jupyter-style (<kbd>.ipynb</kbd>) or throwaway document, we likely don't care about
|
||||
the file name at all. With these new capabilities, we can provide a file name
|
||||
dynamically as a default argument!
|
||||
</p>
|
||||
|
||||
<p>
|
||||
First we must write a function that when run at the source block will give us a
|
||||
suitable file name, like so
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-emacs-lisp"> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">my/org-src-sha-to-image</span> <span class="org-rainbow-delimiters-depth-2">()</span>
|
||||
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">concat</span> <span class="org-string">"generated-"</span>
|
||||
<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-constant">substring</span>
|
||||
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">sha1</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:value</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-function-name">org-element-at-point</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span>
|
||||
<span class="org-highlight-numbers-number">0</span> <span class="org-highlight-numbers-number">8</span><span class="org-rainbow-delimiters-depth-3">)</span>
|
||||
<span class="org-string">".svg"</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Let's also write a function to guess whether the source block produces a plot by
|
||||
checking if there's a plot command on the last line.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-emacs-lisp"> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">my/org-src-guess-results-type</span> <span class="org-rainbow-delimiters-depth-2">()</span>
|
||||
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">if</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-function-name">string-match-p</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">plot</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">ggplot</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-negation-char">^</span></span><span class="org-string">\n]+\n?\\'"</span>
|
||||
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:value</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-function-name">org-element-at-point</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>
|
||||
<span class="org-string">"graphics file"</span> <span class="org-string">"replace"</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Then we can just use these function in place of a static value in the default
|
||||
header arguments variable --- that's all it takes.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-emacs-lisp"> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-babel-default-header-args:R
|
||||
<span class="org-highlight-quoted-quote">'</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-builtin">:results</span> . my/org-src-guess-results-type<span class="org-rainbow-delimiters-depth-3">)</span>
|
||||
<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-builtin">:file</span> . my/org-src-sha-to-image<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
This means for most cases we can now get away without any header arguments at all.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-org"><span class="org-org-block-begin-line"> #+begin_src R</span>
|
||||
<span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-modifiers">library</span></span><span class="org-org-block"><span class="org-ess-paren">(</span></span><span class="org-org-block">ggplot2</span><span class="org-org-block"><span class="org-ess-paren">)</span></span>
|
||||
<span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-function-call">ggplot</span></span><span class="org-org-block"><span class="org-ess-paren">(</span></span><span class="org-org-block">mpg, </span><span class="org-org-block"><span class="org-ess-function-call">aes</span></span><span class="org-org-block"><span class="org-ess-paren">(</span></span><span class="org-org-block">displ, hwy, colour </span><span class="org-org-block"><span class="org-ess-operator">=</span></span><span class="org-org-block"> class</span><span class="org-org-block"><span class="org-ess-paren">))</span></span><span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-operator">+</span></span><span class="org-org-block"> </span><span class="org-org-block"><span class="org-ess-function-call">geom_point</span></span><span class="org-org-block"><span class="org-ess-paren">()</span></span>
|
||||
<span class="org-org-block-end-line"> #+end_src</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
It's always lovely to see more ways of reducing boilerplate.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Proportional image widths
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Previously, as long as <code>org-image-actual-width</code> was <code>nil</code> or a list of the form
|
||||
<code>(default-value)</code>, <kbd>org-mode</kbd> would display images according to a <kbd>:width</kbd> attribute
|
||||
(e.g. <kbd>#+attr_html: :width 400px</kbd>) by simply looking for the first <kbd>#+attr_</kbd>
|
||||
affiliated keyword and reading the numeric component of the <kbd>:width</kbd> as the number
|
||||
of pixels wide the image should be.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This has now become somewhat fancier. The image-width determining logic has been
|
||||
extracted to a new function (<code>org-display-inline-image--width</code>) which will now
|
||||
extract floating-point values like <kbd>0.7</kbd> and interpret them as that portion of the
|
||||
accessible text width in the buffer.
|
||||
</p>
|
||||
|
||||
|
||||
<figure id="org069307b">
|
||||
<img alt="proportional-image-width.png" src="https://blog.tecosaur.com/tmio/figures/proportional-image-width.png" />
|
||||
|
||||
<span class="figure-number">Figure 3: </span>A containing with an image set to half of the accesible text width
|
||||
</figure>
|
||||
|
||||
<p>
|
||||
This means that a width parameter like <kbd>#+attr_latex: :width 0.7\linewidth</kbd> the
|
||||
image will displayed as 70% of the buffer text width.
|
||||
This also supports percentage value, like <kbd>#+attr_html: :width 80%</kbd> by dividing
|
||||
the number before the <kbd>%</kbd> by 100 as a floating-point value.
|
||||
As always, if you don't like the way display width is inferred here you can
|
||||
override it by putting a <kbd>#+attr_org: :width X</kbd> statement first.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Support for proportional image widths extends to the <code>(default-value)</code> form of
|
||||
<code>org-image-actual-width</code>, as now if you set it to say <code>(0.9)</code> which will cause
|
||||
images <i>without</i> any width specification to be displayed at 90% of the buffer text
|
||||
width.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you want to have some images displayed as their actual width you can use the
|
||||
new special width parameter <kbd>t</kbd> to set this on a per-image basis with <kbd>#+attr_org:
|
||||
:width t</kbd>. Now all you need to do is remember to put this first. Based on current
|
||||
discussions on the mailing list though, soon <kbd>#+attr_org</kbd> will be prioritised when
|
||||
determining display image width, no matter which order you put the attributes
|
||||
in. I do like having one less thing to remember 🙂.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Other improvements
|
||||
Allow citations immediately following an item bullet <span class="underline">TEC</span>
|
||||
Allow citations immediately following a footnote definition <span class="underline">Nicolas Goaziou</span>
|
||||
Update some obsolete function references <span class="underline">Marco Wahl</span>
|
||||
<kbd>ob-gnuplot</kbd> is now maintained by Ihor Radchenko
|
||||
Improve makescript support for <kbd>ORGVERSION</kbd> in tag-less mirrors <span class="underline">Nicholas Vollmer</span>
|
||||
New <kbd>ob-julia</kbd>, now maintained by Pedro Bruel
|
||||
Allow for no indentation, but preserving current indentation by setting
|
||||
<code>org-indent-indentation-per-level</code> to <code>0</code> <span class="underline">David Lukes</span>
|
||||
Eliminate some byte-compile warnings <span class="underline">Nicholas Vollmer</span> <span class="underline">Bastien</span>
|
||||
Support Greek smart quotes <span class="underline">Juan Manuel Macías</span>
|
||||
<kbd>org-mouse</kbd> support for intermediate-state checkboxes <span class="underline">Jim Porter</span>
|
||||
Allow nested parenthesis in <code>org-compile-prefix-format</code> <kbd>%(sexp)</kbd> expressions <span class="underline">Ihor Radchenko</span>
|
||||
<kbd>oc-csl</kbd> / citeproc improvements <span class="underline">András Simonyi</span>
|
||||
Move more unmaintained/overly niche <kbd>ob-*</kbd> files to the contrib repo, reducing
|
||||
the maintainer burden <span class="underline">Bastien</span>
|
||||
Allow use of a function for <code>org-agenda-overriding-header</code> for dynamic headers
|
||||
<span class="underline">Christopher League</span>
|
||||
Improve <kbd>org-protocol</kbd> URI decoding <span class="underline">Max Nikulin</span>
|
||||
Remove some obsolete LaTeX packages from the default packages list <span class="underline">TEC</span>
|
||||
Add support for text and year citation styles to <kbd>oc-csl</kbd> <span class="underline">András Simonyi</span>
|
||||
Produce lower-case keywords in <kbd>ox-org</kbd> <span class="underline">TEC</span>
|
||||
Improve <kbd>ob-gnuplot</kbd> argument processing <span class="underline">Ihor Radchenko</span>
|
||||
A collection of <kbd>oc-*</kbd> improvements <span class="underline">Nicholas Goaziou</span>
|
||||
Support bare author citations in <kbd>oc-csl</kbd> <span class="underline">TEC</span>
|
||||
Add <kbd>:options</kbd> LaTeX attribute to tables <span class="underline">Juan Manuel Macías</span>
|
||||
Fix display error with <kbd>ob-plantuml</kbd> and html export <span class="underline">Su Lin</span>
|
||||
More tests! <span class="underline">Ihor Radchenko</span>
|
||||
Documentation improvements! <span class="underline">Marco Wahl</span> <span class="underline">Stefan Kangas</span> <span class="underline">Daniel Fleischer</span> <span class="underline">Wiliam
|
||||
Denton</span> <span class="underline">Thomas Dye</span> <span class="underline">Bastien</span> <span class="underline">Bruce D'Arcus</span> <span class="underline">Kyle Meyer</span> <span class="underline">Nicolas Goaziou</span>
|
||||
Bugfixes
|
||||
Fix heading insertion in a case where point is before any heading <span class="underline">Marco Wahl</span>
|
||||
Prevent stringp error when tangling Org from an org-src edit buffer <span class="underline">Mark Dawson</span>
|
||||
Prevent <code>indent-tabs-mode</code> from messing with justification in ASCII exports
|
||||
<span class="underline">Morgan Willcock</span>
|
||||
Fix form of default Babel haskell header args <span class="underline">Ihor Radchenko</span>
|
||||
No more duplicated logbook entries for repeated tasks <span class="underline">Ihor Radchenko</span>
|
||||
A headline fontification edge case <span class="underline">Sébastien Miquel</span>
|
||||
Refactor code that needed Emacs 28 <span class="underline">Kyle Meyer</span>
|
||||
Make sure a terminating emphasis marker can't be used as a beginning emphasis
|
||||
marker in fontification <span class="underline">Ihor Radchenko</span>
|
||||
Allow footnotes at footnote definition start <span class="underline">Nicholas Goaziou</span>
|
||||
Footnotes
|
||||
</p>
|
||||
|
||||
<p>
|
||||
[fn1] This is performed easily thanks to <code>file-modes-symbolic-to-number</code>, which
|
||||
is used as the basis for both the <code>chmod</code> and <code>ls -l</code> shorthand interpretations.
|
||||
</p>
|
|
@ -0,0 +1,31 @@
|
|||
<p>
|
||||
Grading sucks. Even for a well crafted assignment it takes time and
|
||||
rarely does it give you the same insights into your students as you
|
||||
can get from just observing them and working with them, at least when
|
||||
the environment supports you doing so.
|
||||
</p>
|
||||
<p>
|
||||
This leads lots of teachers to go to auto graders. I can't bring
|
||||
myself going along with that. While assignments are imperfect and
|
||||
tedious to grade, they do provide some insight to your students and
|
||||
that's an important part about being a teacher.
|
||||
</p>
|
||||
<p>
|
||||
So, I always keep my eye out for ways to improve my project gradiing
|
||||
workflow.
|
||||
</p>
|
||||
<p>
|
||||
In the video below, I step through my process. It's mostly Emacs but I
|
||||
also use GitHub classroom and the terminal along the way.
|
||||
</p>
|
||||
<p>
|
||||
If you're here as for the Emacs, I'd any thoughts on alternatives or
|
||||
improvements.
|
||||
</p>
|
||||
<p>
|
||||
If you're here as a teacher, I'd love to hear what your flow is like
|
||||
and what tools you use.
|
||||
</p>
|
||||
<p>
|
||||
Enjoy
|
||||
</p>
|
|
@ -0,0 +1 @@
|
|||
<p><img src="https://thumbnails.lbry.com/oZz69eXG_Kk" width="480" alt="thumbnail" title="The Jordan B. Peterson Podcast - Season 4 Episode 9: Juliette Fogra - Illustrator of Beyond Order" /></p>Juliette Fogra and I discuss the stunning art that she created for my new book Beyond Order, her life story, artistic composition, her muse when creating, photoshop, fine art, music, living in chronic pain, and more.<br /><br />Juliette Fogra is an artist that created the art for my new book, Beyond Order: 12 More Rules for Life. She is an immigrant to New York after growing up in both Riga, Latvia, and Israel. She has worked as an art director in New York City for thirteen years and is now full-time self-employed. <br /><br />My team and I held a contest to find an illustrator for the new book Beyond Order and we were blown away by Juliette’s submissions.<br /><br />If you enjoy her illustrations, please reach out to Juliette to purchase some of her work - and support this incredibly talented artist.<br /><br />Find more Juliette Fogra on her website www.juliettefogra.me and see her beautiful illustrations in my new book Beyond Order: 12 More Rules for Life jordanbpeterson.com/beyond-order<br /><br />Please do not forget to subscribe to the channel in order to enjoy weekly videos. We thank you for your continued support.<br /><br />Other ways to connect with Dr. Peterson:<br /><br />New - TikTok: https://vm.tiktok.com/ZMejKSC6d/<br /><br />Website: https://jordanbpeterson.com/<br />Donations: https://www.jordanbpeterson.com/donate<br />Podcast: https://jordanbpeterson.com/podcast/<br />Twitter: https://twitter.com/jordanbpeterson<br />Instagram: https://www.instagram.com/jordan.b.peterson<br />Facebook: https://www.facebook.com/drjordanpeterson<br /><br />This episode was recorded on January 29th, 2021<br />...<br />https://www.youtube.com/watch?v=oZz69eXG_Kk
|
|
@ -0,0 +1 @@
|
|||
<!-- SC_OFF --><div class="md"><p>I am quite new to Emacs and orgmode.</p> <p>When I use <code>org-insert-link</code> I am asked for a link and a description. I want to past the link or the description in there from my clipboard because I simply copied the URL from my browser window.</p> <p>But how can I do that? By default I use evil-mode. But the evil keybindings not working in that org-insert-link buffer. What would be a good and emacsoid solution here?</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/wWA5RnA4n2P3w2WvfHq"> /u/wWA5RnA4n2P3w2WvfHq </a> <br/> <span><a href="https://www.reddit.com/r/orgmode/comments/r46wv5/orginsertlink_how_to_paste_text_or_use/">[link]</a></span>   <span><a href="https://www.reddit.com/r/orgmode/comments/r46wv5/orginsertlink_how_to_paste_text_or_use/">[comments]</a></span>
|
|
@ -0,0 +1 @@
|
|||
<!-- SC_OFF --><div class="md"><p>Hi,</p> <p>As many others i have decided to switch to linux and more specifically Arch linux. I followed the guide by LearnLinuxTV and after couple of attempts I managed to install it. There was internet connection at the start of the installation process, but when I was about to download and install gnome, the WiFi connection was gone.</p> <p>So I switched to ethernet and finished installing Gnome.</p> <p>When I booted the system I can access the internet only via cable, no wifi options what, so ever.</p> <p>Things I tried, so far:</p> <p>The following was installed:</p> <p><strong>pacman -S networkmanager wpa_supplicant wireless_tools netctl</strong> </p> <p>Additionally I installed: <strong>iwctl</strong></p> <p>Also tried to <strong><em>rfkill unblock wifi</em></strong>, <em>restart</em> <strong>iwctl.</strong></p> <p>The <strong>wlan0</strong> is simply not showing as it did during the installation.</p> <p>The only thing I haven't used, but saw it as possible solution was DCHP setup, but I am not sure how to execute it.</p> <p>I know there are other threads about this (multiple), but nothing worked or it did not feed the issue I was having.</p> <p>Any help is much appreciated!</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/iSwear_iAm_working"> /u/iSwear_iAm_working </a> <br/> <span><a href="https://www.reddit.com/r/archlinux/comments/q7bxte/wifi_gone_after_installation_help/">[link]</a></span>   <span><a href="https://www.reddit.com/r/archlinux/comments/q7bxte/wifi_gone_after_installation_help/">[comments]</a></span>
|
|
@ -0,0 +1,6 @@
|
|||
<p>Are boutique distributions a bag of hurt for new users? </p>
|
||||
|
||||
<p>We love a good underdog, but sometimes our excitement gets the best of us and we recommend something that’s not appropriate for a switcher to land on.</p>
|
||||
|
||||
<p>Plus some quick thoughts on the beating open source is taking as fallout from the Heartbleed bug.</p><p><a href="https://jupitersignal.memberful.com/checkout?plan=52946" rel="payment">Support LINUX Unplugged</a></p>
|
||||
|
|
@ -0,0 +1 @@
|
|||
<!-- SC_OFF --><div class="md"><p>Is there a way to set this variable in the properties or options of the file header?</p> <p>I know I can set it in file-local variables, with:</p> <pre><code># -*- mode: org; org-confirm-babel-evaluate: nil -*- </code></pre> <p>Or in a <code>.dir-locals.el</code>. However, when opening the file, I get prompted whether to allow setting the variable, which I don't want. If I press <code>!</code> at that prompt, to allow setting it in the future, too, it allows <em>any</em> file to set the variable without prompting, not just the one I opened (or others in the dame directory).</p> <p>Is there some way to set this in the file's Org headers instead?</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/ieure"> /u/ieure </a> <br/> <span><a href="https://www.reddit.com/r/orgmode/comments/r8x3fq/set_orgconfirmbabelevaluate_with_property_or/">[link]</a></span>   <span><a href="https://www.reddit.com/r/orgmode/comments/r8x3fq/set_orgconfirmbabelevaluate_with_property_or/">[comments]</a></span>
|
110
var/elfeed/db/data/7d/7dfbcddb2befd70b6a46f9de7c1c3cc9aec67724
Normal file
110
var/elfeed/db/data/7d/7dfbcddb2befd70b6a46f9de7c1c3cc9aec67724
Normal file
|
@ -0,0 +1,110 @@
|
|||
<figure>
|
||||
<img src="https://f000.backblazeb2.com/file/bsag-blog-imgs/corne%5Fboth%5Fhalves.jpeg"/>
|
||||
</figure>
|
||||
<p>I managed to build my own keyboard!</p>
|
||||
<h3 id="the-backstory">The backstory</h3>
|
||||
<p>As you may know, I’ve been using an <a href="https://www.rousette.org.uk/archives/ergodox-ez-keyboard/">ErgoDox EZ</a> keyboard for a while now, and I
|
||||
have come to love both the ortholinear split layout of the keys and the ability to
|
||||
completely customise the key layout. They recently also enabled you to set up a
|
||||
layer to work with the open source stenography software called <a href="http://plover.stenoknight.com">Plover</a>. This was
|
||||
fabulous, and I have been playing with learning stenography using this layer.
|
||||
I’m sure I’ll be writing much more about this at a later date, but — briefly — stenography
|
||||
requires you to hit multiple keys together (like a chord on a piano) in order to
|
||||
output words phonetically. This means that it is easier to do if your keys are close
|
||||
together and don’t require too much force to press, otherwise your fingers are
|
||||
effectively bench-pressing a couple of kilograms every paragraph! Since my
|
||||
ErgoDox has hot-swappable keyswitches, I did a little experimentation, buying
|
||||
some Gateron Clear switches (linear, 35g switches). They definitely solved the
|
||||
force problem, and I was surprised to find how much I enjoyed typing on them for
|
||||
ordinary typing. As an aside, I think my love for the Happy Hacking Keyboard
|
||||
switches made me think that I could only love tactile switches, but now I think
|
||||
that they have their own special properties, and that I generally prefer linear
|
||||
switches.</p>
|
||||
<p>Going down a bit of a rabbit hole while on holiday (as I am prone to doing), I started looking
|
||||
around to see if there might be some low-profile keyboards with key
|
||||
arrangements which might be better for stenography so that I could play with it
|
||||
further. Luckily, stenography requires very few keys, and I quickly found the
|
||||
<a href="https://github.com/foostan/crkbd">Corne or crkbd</a> keyboard, which is split, ortholinear, and has a layout well
|
||||
suited to stenography (as well as conventional QWERTY layouts). You can buy them
|
||||
assembled from various places, but it is much cheaper to buy a kit or components
|
||||
and make your own. This obviously requires soldering. I had never so much as
|
||||
picked up a soldering iron before this point, but I had always wanted to learn.
|
||||
As another aside, one of the consequences of coming out the other side of the
|
||||
menopause seems to be that I am much less worried about failure. I feel much
|
||||
more confident about trying things, even if they might be a bit challenging, and
|
||||
I might crash and burn. Perhaps I worry less about what other people think. I’m
|
||||
finding this new state of mind hugely enjoyable (which is good, because going
|
||||
<em>through</em> the menopause was hell, physically and mentally, so it’s nice to find
|
||||
something positive on the other side). So, why not learn how to solder and go
|
||||
for it?</p>
|
||||
<h3 id="the-practice-project">The practice project</h3>
|
||||
<p>I was feeling confident, but I didn’t want to waste money or get frustrated by
|
||||
going straight into a complex/more expensive project like building a keyboard. Instead (after
|
||||
watching a lot of YouTube videos of soldering tutorials, and buying a £15
|
||||
basic soldering kit), I got <a href="https://thepihut.com/products/adafruit-conways-game-of-life-kit">this cheap kit</a> to build a little game demonstrating
|
||||
Conway’s Game of Life. It was fun to put together, and I was amazed when it
|
||||
<a href="https://micro.rousette.org.uk/2021/08/24/guess-who-taught.html">worked first time</a>.</p>
|
||||
<p>I enjoyed the soldering a lot, and since I had already succeeded in the kinds of
|
||||
techniques I would need to build the keyboard (like ‘through-the-hole’
|
||||
soldering), I had the confidence I needed to go ahead with the bigger project,
|
||||
without worrying that I would mess it up completely.</p>
|
||||
<h3 id="the-corne-keyboard">The Corne keyboard</h3>
|
||||
<p>After getting hold of all the components I needed, I got stuck in. There are a
|
||||
lot of ‘build logs’ out there where people document what they have done and problems
|
||||
they have encountered, so I had a reasonable idea about where the difficult
|
||||
spots might be. I took my time, trying not to spend too long soldering in one
|
||||
stretch, because it’s when you get tired that you tend to make mistakes (as I
|
||||
have found repeatedly while sewing).</p>
|
||||
<p>I used a Corne Light v2.0 PCB, which enables you to use a wide variety of
|
||||
switches, but doesn’t support LCD lighting or hotswap sockets for the key
|
||||
switches. Both of those would be nice to have, but doing without them made the
|
||||
project much simpler and cheaper. I did however choose to use two OLED displays
|
||||
and two Elite C micro-controllers (which are USB C) rather than the standard Pro
|
||||
Micro controllers which are micro USB. I went for Kailh Choc Blue
|
||||
switches, which are low-profile 25g linear switches. The case is a simple FR4
|
||||
plate case, and the keycaps are <a href="https://keycapsss.com/keyboard-parts/keycaps/169/mbk-choc-low-profile-blank-keycaps">MBK Choc low profile key caps</a>.</p>
|
||||
<figure>
|
||||
<img src="https://f000.backblazeb2.com/file/bsag-blog-imgs/corne%5Fswitches.jpeg"/>
|
||||
</figure>
|
||||
<p>The whole thing went remarkably smoothly. I decided to socket the micro
|
||||
controllers and the OLED units so that I could remove and replace them if they
|
||||
went wrong, or if I wanted to salvage them for another project. I was a bit
|
||||
worried about doing this for the OLEDs: they had header pins already soldered
|
||||
on, which meant doing some desoldering, which I hadn’t practised. Again, it
|
||||
turned out to be a bit easier than I feared, so I was able to make longer header
|
||||
pins from the diode legs I had already trimmed, and plug it into the socket
|
||||
header I soldered in to the board.</p>
|
||||
<p>Once you have the diodes, the controllers, and the reset switches and TRRS jacks
|
||||
soldered, you can try shorting out the sockets of each of the keyswitches in
|
||||
turn to make sure everything is connected up properly. I was holding my breath
|
||||
for this step, but it was a great feeling when all the keys reported back
|
||||
properly. From there, all I needed to do was insert all the keyswitches and
|
||||
solder them, then assemble the case and keycaps and try it all out.</p>
|
||||
<figure>
|
||||
<img src="https://f000.backblazeb2.com/file/bsag-blog-imgs/corne%5Fdiodes%5Fcontrollers.jpeg"/>
|
||||
</figure>
|
||||
<h3 id="the-end-result">The end result</h3>
|
||||
<p>I’m so happy with the end result. The keyboard feels comically tiny compared the
|
||||
ErgoDox, but with the reduced number of keys, every key is only one unit away
|
||||
from your fingers on the home row. They Kailh Chocs feel lovely, and the whole
|
||||
thing has a solid and good quality feel. It has probably taken me longer to
|
||||
wrestle with <a href="https://docs.qmk.fm/#/">QMK</a> to get the layout right (and the Plover stenography layer
|
||||
working) than it did to physically build the keyboard, but having done so, I am
|
||||
really enjoying typing on it.</p>
|
||||
<figure>
|
||||
<img src="https://f000.backblazeb2.com/file/bsag-blog-imgs/corne%5Fright%5Fhalf.jpeg"/>
|
||||
</figure>
|
||||
<p>When using QWERTY, it takes a little while to get used to the fact that there is
|
||||
no number row, so you need to use one of the layers to enter numbers and
|
||||
use function keys. However, once you have adjusted to this, it is no more
|
||||
inconvenient than using a shift key, and means that you can arrange characters
|
||||
wherever feels most ergonomic. I have learned from using the ErgoDox what
|
||||
arrangement of symbols etc. works best for me, so that influenced my choices
|
||||
heavily. I thought I would miss all those extra keys, but
|
||||
actually it doesn’t feel limiting.</p>
|
||||
<p>Now that I have got my Plover layer working, it is a joy to be practising
|
||||
stenography on this board. The finger placement and the lighter keys make it
|
||||
much easier to type the chords needed accurately. For some sounds, you need to
|
||||
press several adjacent keys with one finger, and that’s much more comfortable on
|
||||
this board. I’ve got it set up so that I can activate the Plover layer from my
|
||||
‘Adjust’ layer, then exit Plover back to QWERTY by pressing another key.</p>
|
Loading…
Add table
Add a link
Reference in a new issue