this-month-in-org/2021-05-31-async.html
Timothy 787b24749c
DRAFT update (52 files changed)
Last source commit: 7958caa
Local time: 2024-09-08 15:20:47 (UTC+0800)
2024-09-08 15:20:47 +08:00

425 lines
23 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<!-- 2024-09-08 Sun 15:20 -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>May 2021</title>
<meta name="author" content="TEC" />
<meta name="generator" content="org mode" />
<meta name="theme-color" content="#77aa99" />
<meta property="og:type" content="article" />
<meta property="og:title" content="May 2021" />
<meta property="og:description" content="Asynchronous code execution" />
<meta property="og:image" content="https://blog.tecosaur.net/tmio/org-icon.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="464" />
<meta property="og:image:height" content="512" />
<meta property="og:image:alt" content="Org unicorn logo" />
<meta property="og:article:author:first_name" content="TEC" />
<meta property="og:article:published_time" content="2021-05-31T00:00:00+0800" />
<meta property="og:article:modified_time" content="2021-12-01T17:35:20+0800" />
<link rel="alternate" type="application/atom+xml" title="This Month in Org" href="rss.xml" />
<link rel="icon" type="image/ico" href="favicon.ico?v=3">
<link rel="stylesheet" type="text/css" href="org-style.css">
<link rel="stylesheet" type="text/css" href="blog.css">
<script src="org-style.js"></script>
</head>
<body>
<input type='checkbox' id='theme-switch'><div id='page'><label id='switch-label' for='theme-switch'></label><div id="preamble" class="status">
<header>
<h4><a href="https://orgmode.org" class="orgicorn"><img src="org-icon-monochrome.svg" class="invertible"></a>
<a href="https://blog.tecosaur.net/tmio/" class="title">
This Month in Org</a>
<a href="rss.xml" title="RSS Feed" type="application/rss+xml" class="rss">
<img src="rss.svg" alt="RSS icon" />
</a></h4>
</header>
</div>
<div id="content">
<header class="page-header"><div class="page-meta">2021-05-31, <span class='acr'>TEC</span></div>
<h1 class="title">May 2021</h1>
<p class="subtitle" role="doc-subtitle">Asynchronous code execution</p>
</header><div id="outline-container-async-babel-sessions" class="outline-2">
<h2 id="async-babel-sessions">Async Babel sessions have landed<a aria-hidden="true" href="#async-babel-sessions">#</a> </h2>
<div class="outline-text-2" id="text-async-babel-sessions">
<p>
Jack Kamm has made a fantastic contribution to Org: <kbd>ob-comint.el</kbd> now supports
asynchronous output from source blocks <i>with full support for sessions</i> 🎉.
</p>
<p>
If you haven&rsquo;t used sessions before, you&rsquo;re in for a treat! By simply assigning
a named session to a source code block, e.g. <kbd>:session foo</kbd>, the same process will
be reused for any other code blocks that specify the <kbd>foo</kbd> session. To do this for
a certain language across the entire document, you can set the header argument
property, i.e.
</p>
<details id='async-babel-sessions,code--1' class='code' open><summary><span class="lang">Org mode</span></summary>
<div class='gutter'>
<a href='#async-babel-sessions,code--1'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-org"><span class="org-org-meta-line">#+property: header-args:lang :session foo</span>
</pre>
</div>
</details>
<p>
Along with the asynchronous process communication in <kbd>ob-comint.el</kbd>, we have an
implementation for <b>Python</b>, and we should see support for <b>R</b> and <b>Ruby</b> in the
not-too-distant future 😍.
</p>
<p>
To use this, just add the <kbd>:async</kbd> parameter to a python block. Instead of Emacs
freezing until it completes execution, you&rsquo;ll see a placeholder inserted which is
replaced by the result when it is ready.
</p>
<figure>
<video width="100%" height="auto" autoplay loop muted class="doom-one">
<source src="figures/org-async-python-demo.mp4" type="video/mp4" />
</video>
<figcaption>
<span class="figure-number">Figure 0:</span>
A demonstration of the new asyncronous Python execution capabilities.
</figcaption>
</figure>
<p>
<a href="https://github.com/nnicandro/emacs-jupyter">emacs-jupyter</a> allowed for asynchronous code execution (with sessions), but it&rsquo;s
great to have a solution that doesn&rsquo;t require Jupyter kernels, and is part of
Org.
</p>
</div>
</div>
<div id="outline-container-font-lock-inline" class="outline-2">
<h2 id="font-lock-inline">Font lock for inline export snippets<a aria-hidden="true" href="#font-lock-inline">#</a> </h2>
<div class="outline-text-2" id="text-font-lock-inline">
<p>
Now, this isn&rsquo;t necessarily a significant change, but I don&rsquo;t think many people
know about this feature so I&rsquo;ll take the opportunity to go over it 🙂.
</p>
<p>
If you want to include a snippet of <span class='acr'>HTML</span>/LaTeX etc. when exporting to that
format, you can use a <kbd>#+begin_export html</kbd> block which simply includes the
enclosed content verbatim. This doesn&rsquo;t really work for small inline snippets
though &#x2014; but never fear, Org has <i>inline</i> export snippets which simply follow the
form <code class="src src-org"><span class="org-comment">@@</span><span class="org-org-tag">format:</span>content<span class="org-comment">@@</span></code>. For example:
</p>
<details id='font-lock-inline,code--1' class='code' open><summary><span class="lang">Org mode</span></summary>
<div class='gutter'>
<a href='#font-lock-inline,code--1'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-org">I love using Org to export to <span class="org-comment">@@</span><span class="org-org-tag">html:</span>&lt;abbr title="Hyper Text Markup Language"&gt;HTML&lt;/abbr&gt;<span class="org-comment">@@</span> <span class="org-comment">@@</span><span class="org-org-tag">latex:</span>\LaTeX{}<span class="org-comment">@@</span> documents.
</pre>
</div>
</details>
<p>
which will export to <span class='acr'>HTML</span> as,
</p>
<details id='font-lock-inline,code--2' class='code' open><summary><span class="lang">HTML</span></summary>
<div class='gutter'>
<a href='#font-lock-inline,code--2'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-html">I love using Org to export to &lt;<span class="org-function-name">abbr</span> <span class="org-variable-name">title</span>=<span class="org-string">"Hyper Text Markup Language"</span>&gt;HTML&lt;/<span class="org-function-name">abbr</span>&gt; documents.
</pre>
</div>
</details>
<p>
and then in LaTeX will be,
</p>
<details id='font-lock-inline,code--3' class='code' open><summary><span class="lang">LaTeX</span></summary>
<div class='gutter'>
<a href='#font-lock-inline,code--3'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-LaTeX">I love using Org to export to <span class="org-keyword">\LaTeX</span>{} documents.
</pre>
</div>
</details>
<p>
isn&rsquo;t that neat!
</p>
<p>
Now you&rsquo;ll find the <kbd>@@</kbd> parts using the comment face and the <kbd>format:</kbd> bit using the
Org tag&rsquo;s face. It&rsquo;s a small change, but it makes it easier to see what&rsquo;s going on.
</p>
<p>
No mode-specific syntax highlighting yet, but that may come in the future 😉.
</p>
</div>
</div>
<div id="outline-container-plot-your-results" class="outline-2">
<h2 id="plot-your-results"><kbd>#+plot</kbd> your <kbd>#+results</kbd><a aria-hidden="true" href="#plot-your-results">#</a> </h2>
<div class="outline-text-2" id="text-plot-your-results">
<p>
Org-plot has been getting some more love as of late (see <a href="2021-04-30-export-plot.html">last month&rsquo;s post</a>), and
that hasn&rsquo;t stopped yet. This month there&rsquo;s been a fairly minor change that I&rsquo;m
quite a fan of. If you have a source block that produces a table of <kbd>#+results</kbd>, you
can now put a <kbd>#+plot</kbd> statement immediately above to get a visualisation of those
results!
</p>
<details id='plot-your-results,code--1' class='code' open><summary><span class="lang">Org mode</span></summary>
<div class='gutter'>
<a href='#plot-your-results,code--1'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-org"><span class="org-org-block-begin-line">#+begin_src python</span>
<span class="org-org-block"><span class="org-comment-delimiter"># </span></span><span class="org-org-block"><span class="org-comment">pretend this is some profound source of information</span></span>
<span class="org-org-block"><span class="org-keyword">return</span></span><span class="org-org-block"> [[i, i</span><span class="org-org-block"><span class="org-operator">^</span></span><span class="org-org-block">3 </span><span class="org-org-block"><span class="org-operator">-</span></span><span class="org-org-block"> 4</span><span class="org-org-block"><span class="org-operator">*</span></span><span class="org-org-block">i</span><span class="org-org-block"><span class="org-operator">^</span></span><span class="org-org-block">2 </span><span class="org-org-block"><span class="org-operator">-</span></span><span class="org-org-block"> 2</span><span class="org-org-block"><span class="org-operator">*</span></span><span class="org-org-block">i] </span><span class="org-org-block"><span class="org-keyword">for</span></span><span class="org-org-block"> i </span><span class="org-org-block"><span class="org-keyword">in</span></span><span class="org-org-block"> </span><span class="org-org-block"><span class="org-builtin">range</span></span><span class="org-org-block">(5)]</span>
<span class="org-org-block-end-line">#+end_src</span>
<span class="org-org-meta-line">#+plot: ind:1</span>
<span class="org-org-meta-line">#+RESULTS:</span>
<span class="org-org-table">| 0 | 1 |</span>
<span class="org-org-table">| 1 | -2 |</span>
<span class="org-org-table">| 2 | 7 |</span>
<span class="org-org-table">| 3 | 8 |</span>
<span class="org-org-table">| 4 | 13 |</span>
</pre>
</div>
</details>
<p>
As usual, this relies on <kbd>gnuplot</kbd> being present. You can read more
about it in the <a href="https://orgmode.org/manual/Org-Plot.html">manual</a>.
</p>
</div>
</div>
<div id="outline-container-fancier-latex-verses" class="outline-2">
<h2 id="fancier-latex-verses">Fancier LaTeX verses<a aria-hidden="true" href="#fancier-latex-verses">#</a> </h2>
<div class="outline-text-2" id="text-fancier-latex-verses">
<p>
With the use of <kbd>verse.sty</kbd> you can now export fancier verses from Org, as verse
blocks now support four new attributes:
</p>
<ul class="org-ul">
<li><kbd>:lines</kbd> for the numbering interval.</li>
<li><kbd>:center</kbd> which can be set to <kbd>t</kbd> and works as long as,
<ul class="org-ul">
<li><kbd>:versewidth</kbd>, the longest line in the verse as a text string is set.</li>
</ul></li>
<li>You can also easily add arbitrary LaTeX code to be included with <kbd>:latexcode</kbd>.</li>
</ul>
<details id='fancier-latex-verses,code--1' class='code' open><summary><span class="lang">Org mode</span></summary>
<div class='gutter'>
<a href='#fancier-latex-verses,code--1'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-org"><span class="org-org-meta-line">#+latex_header: \usepackage{verse}</span>
<span class="org-org-meta-line">#+latex: \poemtitle{A Dream Within a Dream}</span>
<span class="org-org-meta-line">#+attr_latex: :lines 3 :center t</span>
<span class="org-org-meta-line">#+attr_latex: :versewidth Through my fingers to the deep,</span>
<span class="org-org-block-begin-line">#+begin_verse</span>
Take this kiss upon the brow!
And, in parting from you now,
Thus much let me avow &#8212;
You are not wrong, who deem
That my days have been a dream;
Yet if hope has flown away
In a night, or in a day,
In a vision, or in none,
Is it therefore the less <span class="org-italic">/gone?/</span>
<span class="org-italic">/All/</span> that we see or seem
Is but a dream within a dream.
I stand amid the roar
Of a surf-tormented shore,
And I hold within my hand
Grains of the golden sand &#8212;
How few! yet how they creep
Through my fingers to the deep,
While I weep &#8212; while I weep!
O God! Can I not grasp
Them with a tighter clasp?
O God! can I not save
<span class="org-italic">/One/</span> from the pitiless wave?
Is <span class="org-italic">/all/</span> that we see or seem
But a dream within a dream?
<span class="org-org-block-end-line">#+end_verse</span>
</pre>
</div>
</details>
<figure id="orgb79c657">
<img src="figures/org-verses-example-poem-dream-within-dream.png" alt="org-verses-example-poem-dream-within-dream.png" class="invertible">
<figcaption><span class="figure-number">Figure 1: </span>A short Poe-em</figcaption>
</figure>
</div>
</div>
<div id="outline-container-easy-zero-width" class="outline-2">
<h2 id="easy-zero-width">Easy zero-width spaces with Org<a aria-hidden="true" href="#easy-zero-width">#</a> </h2>
<div class="outline-text-2" id="text-easy-zero-width">
<p>
Occasionally you may run into annoyances when you wish to have two different Org
elements right next to each other (no space) &#x2014; for example, <b>emph</b>asising part of
a word or putting a currency symbol immediately before an inline source block.
</p>
<p>
The best solution to this in Org is zero-width spaces. As such, I&rsquo;ve found it
rather nice adding insertion of a zero-width space to the <code>org-mode-map</code> in my
config. Perhaps some of you might find this solution useful too 🙂.
</p>
<details id='easy-zero-width,code--1' class='code' open><summary><span class="lang">Emacs Lisp</span></summary>
<div class='gutter'>
<a href='#easy-zero-width,code--1'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-emacs-lisp">(define-key org-mode-map (kbd <span class="org-string">"M-SPC M-SPC"</span>)
(<span class="org-keyword">lambda</span> () (<span class="org-keyword">interactive</span>) (insert <span class="org-string">"\u200b"</span>)))
</pre>
</div>
</details>
<p>
Should you want to keep zero-width spaces out of exports, that&rsquo;s easy enough to
accomplish with an <a href="https://orgmode.org/manual/Advanced-Export-Configuration.html">export filter</a>.
</p>
<details id='easy-zero-width,code--2' class='code' open><summary><span class="lang">Emacs Lisp</span></summary>
<div class='gutter'>
<a href='#easy-zero-width,code--2'>#</a>
<button title='Copy to clipboard' onclick='copyPreToClipbord(this)'></button></div>
<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">+org-export-remove-zero-width-space</span> (text _backend _info)
<span class="org-doc">"Remove zero width spaces from TEXT."</span>
(<span class="org-keyword">unless</span> (org-export-derived-backend-p 'org)
(replace-regexp-in-string <span class="org-string">"\u200b"</span> <span class="org-string">""</span> text)))
(add-to-list 'org-export-filter-final-output-functions #'+org-export-remove-zero-width-space t)
</pre>
</div>
</details>
</div>
</div>
<div id="outline-container-orgs-repos-have" class="outline-2">
<h2 id="orgs-repos-have">Org&rsquo;s repos have moved<a aria-hidden="true" href="#orgs-repos-have">#</a> </h2>
<div class="outline-text-2" id="text-orgs-repos-have">
<ul class="org-ul">
<li><kbd>contrib/</kbd> is now at <a href="https://git.sr.ht/~bzg/org-contrib">https://git.sr.ht/~bzg/org-contrib</a> for Org 9.5, and it will
be available on Non-<span class='acr'>GNU</span> <span class='acr'>ELPA</span>.</li>
<li>Worg is now at <a href="https://git.sr.ht/~bzg/worg">https://git.sr.ht/~bzg/worg</a></li>
<li>Org itself is moving to Savannah</li>
</ul>
</div>
</div>
<div id="outline-container-other-improvements" class="outline-2">
<h2 id="other-improvements">Other improvements<a aria-hidden="true" href="#other-improvements">#</a> </h2>
<div class="outline-text-2" id="text-other-improvements">
<ul class="org-ul">
<li>Add support for <kbd>HHhMM</kbd> date formats (e.g. <kbd>13h20</kbd>) <span class="underline">Gustavo Barros</span></li>
<li>Make tangling faster <i>and</i> more robust <span class="underline">Sébastien Miquel</span></li>
<li>Allow importing tables from files that <i>don&rsquo;t</i> end in <kbd>.txt</kbd>, <kbd>.tsv</kbd>, or <kbd>.csv</kbd>
<span class="underline">Utkarsh Singh</span></li>
<li>Add an <span class='acr'>SVG</span>-specific post-export <kbd>ob-plantuml</kbd> step:
<code>org-babel-plantuml-svg-text-to-path</code> for running Inkscape text-to-path
replacement <span class="underline">Nick Daly</span></li>
<li>Refactor JavaScript in <kbd>ox-html</kbd> <span class="underline">Anthony Carrico</span></li>
<li>Set <code>org-html-head-include-scripts</code> to <code>nil</code> by default (was <code>t</code>) <span class="underline">Bastien Guerry</span></li>
<li>Remove LaTeX-environment type <kbd>#+results</kbd> <span class="underline"><span class='acr'>TEC</span></span></li>
<li>New capture templates parameter, <kbd>:refile-targets</kbd> <span class="underline">Richard Garner</span></li>
<li>Merge <code>org-speed-commands-default</code> and <code>org-speed-commands-user</code> into a new
variable, <code>org-speed-commands</code> <span class="underline">Bastien Guerry</span></li>
<li><span class='acr'>URL</span> recognition regex now handles up to two levels of nested brackets, and is
tested <span class="underline">Ihor Radchenko</span></li>
<li>Cache parent heading positions for faster movement up buffers. Significantly
improves Org queries involving inheritance (~15-50x improvement) <span class="underline">Ihor Radchenko</span></li>
<li>New command <code>org-refile-reverse</code> bound to <kbd>C-c C-M-w</kbd> <span class="underline">Adam Spiers</span></li>
<li>Allow inline tasks to be dragged up/down <span class="underline">Bastien Guerry</span></li>
<li>LaTeX export, allow arbitrary <kbd>:float</kbd> values <span class="underline">Thomas S. Dye</span></li>
<li>Org attach git, new option <code>org-attach-git-dir</code> to use the attachment dir as a
git repository <span class="underline">Juan Manuel Macías</span></li>
<li>Use a write-back buffer in Org src <span class="underline">Sébastien Miquel</span></li>
<li>Add the <kbd>:environment</kbd> and <kbd>:options</kbd> LaTeX attributes to Quote blocks <span class="underline">Juan Manuel Macias</span></li>
<li>Surround LaTeX <kbd>:options</kbd> attribute with curly braces when it contains square
braces <span class="underline">Markus Huber</span></li>
<li>Recognise the specific contributions of Kyle Meyer, Ihor Radchenko, and <span class='acr'>TEC</span> in
the manual <span class="underline">Bastien Guerry</span></li>
<li>Improve test coverage <span class="underline">Ihor Radchenko, Kévin Le Gouguec</span></li>
<li>A bikeshed of new maintainers
<ul class="org-ul">
<li>New maintainer for <kbd>ox-html</kbd> &#x2014; <span class='acr'>TEC</span></li>
<li>New <kbd>ob-ledger</kbd> maintainer &#x2014; Eric S Fraga</li>
<li>New <kbd>ob-awk</kbd> maintainer &#x2014; Tyler Smith</li>
<li>New <kbd>ob-calc</kbd> maintainer &#x2014; Tom Gillespie</li>
<li>New <kbd>ob-asymptote</kbd> and <kbd>ob-coq</kbd> maintainer &#x2014; Luc Pellissier</li>
</ul></li>
<li>General code cleanup <span class="underline">Bastien Guerry</span></li>
<li>Documentation improvements <span class="underline">Bastien Guerry, Eric S Fraga, Samim Pezeshki,
Nicolar Goaziou</span></li>
</ul>
</div>
</div>
<div id="outline-container-bugfixes" class="outline-2">
<h2 id="bugfixes">Bugfixes<a aria-hidden="true" href="#bugfixes">#</a> </h2>
<div class="outline-text-2" id="text-bugfixes">
<ul class="org-ul">
<li>Make <kbd>ob-gnuplot</kbd> work on remote systems <span class="underline">Ihor Radchenko</span></li>
<li>Stop <kbd>M-x org-toggle-link-display</kbd> from affecting emphasis markers <span class="underline">Bastien Guerry</span></li>
<li>Inserting a heading before a headline <span class="underline">Bastien Guerry</span></li>
<li>Perform <code>org-entry-put</code> in a read-only buffer <span class="underline">Ihor Radchenko</span></li>
<li>Emacs 24 compatibility for <kbd>ob-C</kbd> and <code>org-agenda-show-new-time</code> <span class="underline">Kyle Meyer</span></li>
<li>Maintain Org&rsquo;s keybindings when <code>visual-line-mode</code> active <span class="underline">Bastien Guerry</span></li>
<li>Keep track of start of region beginning in <code>org-table-wrap-region</code> <span class="underline">Bastien Guerry</span></li>
<li>Ensure correct visibility when unfolding subtree <span class="underline">Bastien Guerry</span></li>
<li>Corner case in <code>org--backwards-paragaph-once</code> <span class="underline">Bastien Guerry</span></li>
<li>Some byte compiler silencing <span class="underline">Kyle Meyer</span></li>
<li>Make tags filtering case-sensitive <span class="underline">Bastien Guerry</span></li>
<li><kbd>C-c C-c</kbd> on a <kbd>#+plot</kbd> line can no longer cause an error <span class="underline">Bastien Guerry</span></li>
<li>Ensure consistent position-translation in <kbd>org-src</kbd> by using point for position
instead of column <span class="underline"><span class='acr'>TEC</span></span></li>
<li>Prevent <kbd>ob-sql</kbd> from getting stuck on an error <span class="underline">Ivan Sokolov</span></li>
<li>Make <kbd>org-columns</kbd> respect <code>global-visual-line-mode</code>, and simplify tag scanning
<span class="underline">Nick Savage</span></li>
<li>Don&rsquo;t fontify <kbd>::</kbd> in headlines as description item <span class="underline">Ihor Radchenko</span></li>
<li>Handle a few corner-cases in <kbd>ob-R</kbd> <span class="underline">Jeremie Juste</span></li>
<li>Many fixes to <code>org-indent-line</code> <span class="underline">Bastien Guerry</span></li>
<li>Make headline numbering consistent with <span class='acr'>TOC</span> <span class="underline">Mingkai Dong</span></li>
<li>Allow read-only tangling again, and ensure the correct filename is used <span class="underline">Sébastien Miquel</span></li>
<li>Fix edge case when converting durations to minutes <span class="underline">Nicolas Goaziou</span></li>
<li>Make org-refile work in non-file-visiting buffers <span class="underline">Bastien Guerry</span></li>
<li>Be more rigorous in <code>org-sort-remove-invisible</code> <span class="underline">Nicolas Goaziou</span></li>
<li>Don&rsquo;t update checkbox stats when heading has <kbd>todo</kbd> <kbd>COOKIE_DATA</kbd> <span class="underline">Bastien Guerry</span></li>
<li>Don&rsquo;t recognise a lone <kbd>:END:</kbd> to be forming a drawer <span class="underline">Nicolas Goaziou</span></li>
<li>Allow new footnotes in empty table cells <span class="underline">Nicolas Goaziou</span></li>
</ul>
</div>
</div>
</div>
<div id="postamble" class="status">
<footer>
<p xmlns:dct="http://purl.org/dc/terms/" xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#">
<a rel="license" class="external" rel="nofollow" href="http://creativecommons.org/publicdomain/zero/1.0/">
<img src="cc0.svg" alt="CC0" class="invertible" style="position:relative;bottom:-0.2em"/>
</a>
To the extent possible under law,
<a rel="dct:publisher"
href="https://blog.tecosaur.net/">
<span property="dct:title">TEC</span></a>
has waived all copyright and related or neighboring rights to
<span property="dct:title" style="font-style:italic">This Month in Org</span>.
</p>
</footer>
<script src="theme-switcher.js"></script>
</div>
</div>
</body>
</html>