<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>markpenner.space - Home</title>
    <link>https://markpenner.space/</link>
    <description>Recent content in Home on markpenner.space</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>mrp@markpenner.space (Mark Penner)</managingEditor>
    <webMaster>mrp@markpenner.space (Mark Penner)</webMaster>
    <copyright>© 2026 Mark Penner. This site is licensed under [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/).</copyright>
    <lastBuildDate>Mon, 06 Jan 2025 22:25:00 -0600</lastBuildDate><atom:link href="https://markpenner.space/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Kwave Nightly Flatpak</title>
      <link>https://markpenner.space/blog/2025-01-06-kwave-flatpak/</link>
      <pubDate>Mon, 06 Jan 2025 22:25:00 -0600</pubDate>
      <author>mrp@markpenner.space (Mark Penner)</author>
      <guid>https://markpenner.space/blog/2025-01-06-kwave-flatpak/</guid>
      <description>&lt;p&gt;If you want to keep up with the latest Kwave updates, you can now try out the nightly flatpak. It
gets published each time code is pushed to the master branch, so it may sometimes have bugs, but
also new features. To try it out, add the repository by running &lt;code&gt;flatpak remote-add kwave-nightly https://cdn.kde.org/flatpak/kwave-nightly/kwave-nightly.flatpakrepo&lt;/code&gt; and install Kwave with &lt;code&gt;flatpak install kwave-nightly org.kde.kwave&lt;/code&gt;. If you use &lt;a href=&#34;https://apps.kde.org/discover/&#34;&gt;Discover&lt;/a&gt;, go to
Settings, click Add Source and paste
&lt;code&gt;https://cdn.kde.org/flatpak/kwave-nightly/kwave-nightly.flatpakrepo&lt;/code&gt; in to add the repo, and then
search for Kwave.&lt;/p&gt;
&lt;p&gt;The process for publishing stable versions to Flathub has also
&lt;a href=&#34;https://github.com/flathub/flathub/pull/5993&#34;&gt;started&lt;/a&gt;. The current plan is to wait for the next
stable version (25.04) to publish Kwave on Flathub.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Kwave Update - October 2024</title>
      <link>https://markpenner.space/blog/2024-10-28-kwave-update/</link>
      <pubDate>Mon, 28 Oct 2024 00:00:00 +0000</pubDate>
      <author>mrp@markpenner.space (Mark Penner)</author>
      <guid>https://markpenner.space/blog/2024-10-28-kwave-update/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://apps.kde.org/kwave&#34;&gt;Kwave&lt;/a&gt; is an audio editor based on the KDE Frameworks. It was started
in 1998 by Martin Wilz, and Thomas Eschenbacher has been the main developer since 1999. In recent
years development has slowed. I wanted to do some software development and contribute to KDE, and
I&amp;rsquo;m interested in audio, so towards the end of 2023 I started working on Kwave.&lt;/p&gt;
&lt;p&gt;Kwave had not been ported to Qt 6 and KDE Frameworks 6 yet, so that&amp;rsquo;s what I started working towards.
My first merge requests were to update deprecated code. (MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/15&#34;&gt;Convert plugin desktop files to
json&lt;/a&gt;, MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/16&#34;&gt;Port away from deprecated Qt
API&lt;/a&gt;, MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/17&#34;&gt;port away from deprecated
I18N_NOOP macros&lt;/a&gt;, MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/18&#34;&gt;bump
KF5_MIN_VERSION and update where KMessageBox API has been
deprecated&lt;/a&gt;, MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/21&#34;&gt;port QRegExp to
QRegularExpression&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;With that preparatory work done, I worked at porting Kwave to Qt 6 and KDE Frameworks 6. Most of
that work was straight-forward. The biggest changes were in Qt Multimedia, which Kwave can use for
playback and recording. I finally got that done and merged in August 2024, just after version 24.08
was branched, so that change will get released in version 24.12 in December 2024. (MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/22&#34;&gt;port to Qt6
and KF6&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Next I did some code cleanup. (MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/23&#34;&gt;use
ECMGenerateExportHeader&lt;/a&gt;, MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/25&#34;&gt;add
braces to avoid ambiguous else&lt;/a&gt;, MR
&lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/26&#34;&gt;call KCrash::initialize() after
KAboutData::setApplicationData()&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Laurent Montel added the FreeBSD job to the Continuous Integration configuration, but the build
failed initially. I&amp;rsquo;ve never ran FreeBSD, but with a few tries and pushing changes to trigger CI, I
managed to get the CI to pass. I&amp;rsquo;m glad Laurent took the initiative here, because the FreeBSD job
uses clang, so with the existing Linux job using gcc, CI makes sure Kwave builds with both compilers
now. (MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/24&#34;&gt;Add freebsd&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I applied for a &lt;a href=&#34;https://community.kde.org/Infrastructure/Get_a_Developer_Account&#34;&gt;KDE Developer
account&lt;/a&gt; and got approved on
August 24, 2024. Now I could commit changes myself instead of having to remind others to do it.&lt;/p&gt;
&lt;p&gt;Carl Schwan cleaned up some code and updated the zoom toolbar to use standard icons, which enabled
removing the built-in zoom icons. (MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/27&#34;&gt;Modernize
ZoomToolbar&lt;/a&gt;) That was the incentive I
needed to remove the rest of the built-in icons and use standard icons instead, which helps Kwave
fit the users theme better. (MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/29&#34;&gt;use icons from current
theme&lt;/a&gt;) I also reordered the playback
toolbar in a way that seemed more logical to me. (MR &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/30&#34;&gt;update player
toolbar&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I investigated a bug: &lt;a href=&#34;https://bugs.kde.org/show_bug.cgi?id=439543&#34;&gt;Kwave Playback settings dialog loads incorrectly until you switch playback
methods&lt;/a&gt; and fixed it in MR: &lt;a href=&#34;https://invent.kde.org/multimedia/kwave/-/merge_requests/33&#34;&gt;make sure a valid method
gets selected when PlayBackDialog
opens&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have some more work in progress, and I plan to continue working on Kwave. I will try to blog about
what I&amp;rsquo;m doing, but I&amp;rsquo;m not going to commit to any regular schedule.&lt;/p&gt;
&lt;h3 id=&#34;get-involved&#34;&gt;Get Involved&lt;/h3&gt;
&lt;p&gt;Kwave depends on the rest of KDE. It is built on the
&lt;a href=&#34;https://develop.kde.org/products/frameworks/&#34;&gt;Frameworks&lt;/a&gt;, and the KDE sysadmin team keeps the
infrastructure running. You can help KDE by &lt;a href=&#34;https://community.kde.org/Get_Involved&#34;&gt;getting
involved&lt;/a&gt;, or at least &lt;a href=&#34;https://kde.org/donate/&#34;&gt;donate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you would like to help improve Kwave, use it and try out its features! If you have questions or
ideas, &lt;a href=&#34;https://discuss.kde.org/tag/kwave&#34;&gt;discuss&lt;/a&gt; them. If you find bugs, &lt;a href=&#34;https://bugs.kde.org/enter_bug.cgi?product=kwave&amp;amp;component=general&#34;&gt;report
them&lt;/a&gt;. If you want to get
involved with development, download the &lt;a href=&#34;https://invent.kde.org/multimedia/kwave&#34;&gt;source code&lt;/a&gt; and
start hacking!&lt;/p&gt;
&lt;p&gt;If you think my own work on Kwave is worth something and you can afford it, you can donate to me
through &lt;a href=&#34;https://liberapay.com/mrp/donate&#34;&gt;Liberapay&lt;/a&gt;,
&lt;a href=&#34;https://donate.stripe.com/eVa29p7JZ9xydRCbII&#34;&gt;Stripe&lt;/a&gt;, or &lt;a href=&#34;https://paypal.me/mrpenner&#34;&gt;PayPal&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How to build a Debian metapackage for personal use</title>
      <link>https://markpenner.space/blog/2023-09-23-howto-build-debian-metapackage/</link>
      <pubDate>Sat, 23 Sep 2023 00:00:00 +0000</pubDate>
      <author>mrp@markpenner.space (Mark Penner)</author>
      <guid>https://markpenner.space/blog/2023-09-23-howto-build-debian-metapackage/</guid>
      <description>&lt;h3 id=&#34;why-build-your-own-metapackage&#34;&gt;Why build your own metapackage?&lt;/h3&gt;
&lt;p&gt;I don&amp;rsquo;t like having lots of manually installed packages that I&amp;rsquo;m not sure I need on my Debian system. One way I get such packages is when I&amp;rsquo;m compiling software such as FreeCad, and I install the build dependencies with a command like the one that is listed &lt;a href=&#34;https://wiki.freecad.org/Compile_on_Linux#Single_command_for_Python_3_and_Qt5&#34;&gt;here&lt;/a&gt;. (That command doesn&amp;rsquo;t actually work on Debian unstable, I got my list of packages to install from &lt;a href=&#34;https://salsa.debian.org/science-team/freecad/-/blob/master/debian/control?ref_type=heads&#34;&gt;here&lt;/a&gt;.) When you run a command like that, all those packages are marked as manually installed. I had the idea to build a metapackage that depends on those packages, so if I decide I won&amp;rsquo;t be building FreeCad again I can uninstall the metapackage and if nothing else depends on those packages they can be removed with &lt;code&gt;sudo apt autoremove&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Most of this is based on the &lt;a href=&#34;https://wiki.debian.org/Packaging/Intro&#34;&gt;packaging intro tutorial&lt;/a&gt; on the Debian wiki. Check that out if you want more details. This howto will give just enough information to get this metapackage built, because that is the extent of my experience so far. ;-)&lt;/p&gt;
&lt;h3 id=&#34;install-the-packages-you-will-need&#34;&gt;Install the packages you will need&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo apt install build-essential devscripts debhelper&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;(Here you might think about building a metapackage for building metapackages. Very meta.)&lt;/p&gt;
&lt;h3 id=&#34;make-the-directory-structure-and-switch-into-it&#34;&gt;Make the directory structure and switch into it&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;mkdir -p ~/deb/build-dependencies/debian/; cd ~/deb/build-dependencies/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In this structure, &lt;code&gt;deb/&lt;/code&gt; will be where the final .deb file will end up. Under that, &lt;code&gt;build-dependencies/&lt;/code&gt; is the package directory, which since this is a metapackage, will be empty except for the &lt;code&gt;debian/&lt;/code&gt; directory, where the package metadata files will go.&lt;/p&gt;
&lt;h3 id=&#34;generate-a-changelog-in-the-right-format&#34;&gt;Generate a changelog in the right format&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;dch --create -v 1 --package build-dependencies&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;-v 1&lt;/code&gt; switch sets the package version to 1. This will make a &lt;code&gt;debian/changelog&lt;/code&gt; file. I got a warning &lt;code&gt;neither DEBEMAIL nor EMAIL environment variable is set&lt;/code&gt;. Press Enter to accept the warning and your editor will pop up to edit the created file. You can delete the &lt;code&gt;(Closes: #XXXXXX)&lt;/code&gt; bit and edit the last line that has your name and email address if you want. The email address does not need to be valid (since I won&amp;rsquo;t be uploading this to Debian), but there does need to be something there else the package won&amp;rsquo;t build.&lt;/p&gt;
&lt;h3 id=&#34;the-copyright-file-needs-to-exist-but-it-can-be-empty&#34;&gt;The copyright file needs to exist, but it can be empty&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;touch debian/copyright&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;now-the-interesting-file-debiancontrol&#34;&gt;Now the interesting file: &lt;code&gt;debian/control&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The first part, &lt;code&gt;Source: build-dependencies&lt;/code&gt;, is the source package metadata. The second part, &lt;code&gt;Package: freecad-dependencies&lt;/code&gt;, is the binary package metadata. The binary package is what you actually install, and you can make more than one binary package from one source package by providing several &lt;code&gt;Package: binary-package-name&lt;/code&gt; sections.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;21
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;22
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;23
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;24
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;25
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;26
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;27
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;28
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;29
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;30
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;31
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;32
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;33
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;34
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;35
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;36
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;37
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;38
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;39
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;40
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;41
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;42
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;43
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;44
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;45
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;46
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;47
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;48
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;49
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;50
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;51
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;52
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;53
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;54
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;55
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;56
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;57
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;58
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;59
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;60
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;61
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;62
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;63
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;64
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;65
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Source&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;build-dependencies&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Maintainer&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Mark Penner&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Section&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;misc&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Priority&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;optional&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Build-Depends&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;debhelper-compat (= 13)&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Package&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;freecad-dependencies&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Architecture&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;any&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Depends&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;cmake,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-date-time-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-filesystem-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-graph-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-iostreams-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-program-options-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-python-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-regex-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-serialization-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libboost-thread-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libcoin-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libdouble-conversion-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libglew-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;liblz4-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libopencv-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libeigen3-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libgts-bin,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libgts-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libkdtree++-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libmedc-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libmetis-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libocct-data-exchange-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libocct-ocaf-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libocct-visualization-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libpyside2-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libqt5opengl5-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libqt5svg5-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libqt5xmlpatterns5-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libqt5x11extras5-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libshiboken2-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libspnav-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libvtk9-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libx11-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libxerces-c-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;libzipios++-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;lsb-release,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;occt-draw,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;pybind11-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;pyqt5-dev-tools,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;pyside2-tools,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-matplotlib,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-ply,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-pyside2.qtcore,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-pyside2.qtgui,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-pyside2.qtsvg,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-pyside2.qtuitools,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-pyside2.qtwidgets,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-pyside2.qtxml,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;python3-requests,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;qtbase5-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;qttools5-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;qtwebengine5-dev,&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;         &lt;/span&gt;swig&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;Description&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;FreeCad build dependencies&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Metapackage to install dependencies for building FreeCad.&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;debianrules-is-a-makefile-with-instructions-to-build-the-package&#34;&gt;&lt;code&gt;debian/rules&lt;/code&gt; is a Makefile with instructions to build the package&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Makefile&#34; data-lang=&#34;Makefile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/make -f
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;%&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	dh &lt;span style=&#34;color:#19177c&#34;&gt;$@&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Remember Makefiles use tabs not spaces!&lt;/p&gt;
&lt;h3 id=&#34;build-the-package&#34;&gt;Build the package&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;debuild&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The package will be built and placed in the directory above the one you&amp;rsquo;re in. (&lt;code&gt;deb/freecad-dependencies_1_amd64.deb&lt;/code&gt; is the built binary package on my machine.)&lt;/p&gt;
&lt;h3 id=&#34;install&#34;&gt;Install&lt;/h3&gt;
&lt;p&gt;Now if all the dependencies are already installed, you can run &lt;code&gt;sudo debi&lt;/code&gt; to install the package. It will find the package in the directory above and install it with dpkg. However, dpkg will not install dependencies for you. Since I made this package specifically to install dependencies, I ran &lt;code&gt;sudo apt install ../freecad-dependencies_1_amd64.deb&lt;/code&gt;. That installed all the dependencies, and also the dependencies of dependencies.&lt;/p&gt;
&lt;h3 id=&#34;celebrate-a-cleaner-manually-installed-packages-list&#34;&gt;Celebrate a cleaner manually installed packages list!&lt;/h3&gt;
&lt;p&gt;If any of those packages were already installed, you can mark them as automatically installed with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-mark auto cmake libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin-dev libdouble-conversion-dev libglew-dev liblz4-dev libopencv-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libmetis-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libpyside2-dev libqt5opengl5-dev libqt5svg5-dev libqt5xmlpatterns5-dev libqt5x11extras5-dev libshiboken2-dev libspnav-dev libvtk9-dev libx11-dev libxerces-c-dev libzipios++-dev lsb-release occt-draw pybind11-dev pyqt5-dev-tools pyside2-tools python3-dev python3-matplotlib python3-ply python3-pyside2.qtcore python3-pyside2.qtgui python3-pyside2.qtsvg python3-pyside2.qtuitools python3-pyside2.qtwidgets python3-pyside2.qtxml python3-requests qtbase5-dev qttools5-dev qtwebengine5-dev swig&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;next&#34;&gt;Next&lt;/h3&gt;
&lt;p&gt;Now if when I try to compile FreeCad I need other packages installed, I can just add them to &lt;code&gt;debian/control&lt;/code&gt;, build the package again, and reinstall.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Blogging With Hugo and Org-mode</title>
      <link>https://markpenner.space/blog/2023-08-02-blogging-hugo-org-mode/</link>
      <pubDate>Wed, 02 Aug 2023 00:00:00 +0000</pubDate>
      <author>mrp@markpenner.space (Mark Penner)</author>
      <guid>https://markpenner.space/blog/2023-08-02-blogging-hugo-org-mode/</guid>
      <description>&lt;p&gt;This blog is generated with &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;. The source is currently &lt;a href=&#34;https://git.sr.ht/~mrp/markpenner.space&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I set it up a bit differently than many tutorials, so I thought I would describe what I did and why. I did not use a &lt;a href=&#34;https://themes.gohugo.io&#34;&gt;theme&lt;/a&gt;; I just wrote a few layouts and a short CSS file for a &lt;a href=&#34;https://brutalist-web.design&#34;&gt;brutalist design&lt;/a&gt;. I wanted to be able to understand and control my design rather than try to figure out how to get what I wanted out of an existing theme.&lt;/p&gt;
&lt;p&gt;I like the &lt;a href=&#34;https://karl-voit.at/2017/09/23/orgmode-as-markup-only/&#34;&gt;expressivity and clarity&lt;/a&gt; of &lt;a href=&#34;https://orgmode.org/&#34;&gt;Org mode&lt;/a&gt; syntax rather than Markdown. Thankfully, Hugo &lt;a href=&#34;https://gohugo.io/content-management/formats/#list-of-content-formats&#34;&gt;can read Org files&lt;/a&gt; good enough for me. &lt;a href=&#34;https://github.com/niklasfasching/go-org&#34;&gt;go-org&lt;/a&gt;, the library Hugo uses to parse Org files, is intended &amp;ldquo;to support a reasonable subset of Org mode&amp;rdquo;. There is also &lt;a href=&#34;https://ox-hugo.scripter.co&#34;&gt;ox-hugo&lt;/a&gt;, an Org exporter to Hugo Markdown, but I have not tried it yet.&lt;/p&gt;
&lt;p&gt;(Update 2024-10-26: I&amp;rsquo;ve been using Markdown also. Org mode is nice, but Markdown is more common, and since I&amp;rsquo;ve been using Markdown in other places where org mode can&amp;rsquo;t be used, I find it easier to stick with one syntax. Hugo handles both fine, so there&amp;rsquo;s no need to convert files.)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure how much I will blog, but probably not a lot. My main motivation for starting a blog is to write down things I have learned. Hopefully some of what I write will be helpful to others, but I also want something for myself to refresh my memory later. I have learned a lot from people that write down things they have learned, whether they are experts or not. I want to do my part to keep that tradition strong.&lt;/p&gt;
&lt;p&gt;Of course, it&amp;rsquo;s also possible there will be long periods of silence occasionally interrupted by posts about my intentions to start blogging again. ;)&lt;/p&gt;
&lt;p&gt;(Update 2023-11-24: I switched to using &lt;a href=&#34;https://srht.site/&#34;&gt;srht.site&lt;/a&gt; to host this. &lt;a href=&#34;https://git.sr.ht/~mrp/markpenner.space&#34;&gt;Source here&lt;/a&gt;, including the &lt;a href=&#34;https://git.sr.ht/~mrp/markpenner.space/tree/main/item/.build.yml&#34;&gt;.build.yml file&lt;/a&gt; to build and deploy the site using &lt;a href=&#34;https://builds.sr.ht/&#34;&gt;builds.sr.ht&lt;/a&gt;. Below is how I was hosting it at first, which I&amp;rsquo;ll leave up in case it&amp;rsquo;s useful to someone. I decided to save the money I was spending on a VPS since I wasn&amp;rsquo;t using it for much.)&lt;/p&gt;
&lt;p&gt;I am using a &lt;a href=&#34;https://linode.com&#34;&gt;Linode&lt;/a&gt; VPS (virtual private server) to host the website (among other things). I have the source in a git repository with this post-receive hook to deploy the site after a successful &lt;code&gt;git push&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;21
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;22
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;23
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;24
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;25
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;26
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;27
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;28
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;29
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;30
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;GIT_REPO&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;/var/lib/git/markpenner.space.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;WORK_DIR&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;/tmp/work_dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;TARGET&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;/var/www/html
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;BACKUP&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;/tmp/backup_html
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Post receive hook starting&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf &lt;span style=&#34;color:#19177c&#34;&gt;$WORK_DIR&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$BACKUP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Making temporary directories.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p &lt;span style=&#34;color:#19177c&#34;&gt;$WORK_DIR&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$BACKUP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync -aqz &lt;span style=&#34;color:#19177c&#34;&gt;$TARGET&lt;/span&gt;/ &lt;span style=&#34;color:#19177c&#34;&gt;$BACKUP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;trap&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;echo &amp;#39;A problem occurred.  Reverting to backup.&amp;#39;; rsync -aqz --del &lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$BACKUP&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;/ &lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$TARGET&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;; rm -rf &lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$WORK_DIR&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$BACKUP&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt; EXIT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Pulling into temporary directory.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone &lt;span style=&#34;color:#19177c&#34;&gt;$GIT_REPO&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$WORK_DIR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Removing existing site.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf &lt;span style=&#34;color:#19177c&#34;&gt;$TARGET&lt;/span&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;building new site&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo -s &lt;span style=&#34;color:#19177c&#34;&gt;$WORK_DIR&lt;/span&gt; -d &lt;span style=&#34;color:#19177c&#34;&gt;$TARGET&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Removing temporary directories.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf &lt;span style=&#34;color:#19177c&#34;&gt;$WORK_DIR&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$BACKUP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;trap&lt;/span&gt; - EXIT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Arcadia Valley</title>
      <link>https://markpenner.space/arcadiavalley/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>mrp@markpenner.space (Mark Penner)</author>
      <guid>https://markpenner.space/arcadiavalley/</guid>
      <description>&lt;h3 id=&#34;lodging&#34;&gt;Lodging&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.arcadiavalleybungalows.com/&#34;&gt;Arcadia Valley Bungalows&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;geo:37.587281,-90.627648?q=37.587281,-90.627648&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;restaurants&#34;&gt;Restaurants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://theeabbeykitchen.com/&#34;&gt;Thee Abbey Kitchen&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;geo:37.582774,-90.628805?q=37.582774,-90.628805&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://maps.app.goo.gl/oaF79pWz9UC4cNTu5&#34;&gt;Checo&amp;rsquo;s Mexican Restaurant&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;geo:37.597322,-90.627968?q=37.597322,-90.627968&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://theironmule.com/&#34;&gt;The Iron Mule&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;geo:37.613311,-90.636818?q=37.613311,-90.636818&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://avcoffeeco.square.site/&#34;&gt;Arcadia Valley Coffee Company&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;geo:37.598600,-90.627591?q=37.598600,-90.627591&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;history&#34;&gt;History&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.arcadiaacademy.com/&#34;&gt;Arcadia Academy&lt;/a&gt;&lt;/strong&gt; Historic school, now an event venue, bed and breakfast, and restaurant. History tours. - &lt;a href=&#34;geo:37.582774,-90.628805?q=37.582774,-90.628805&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://mostateparks.com/historic-site/battle-pilot-knob-state-historic-site&#34;&gt;Battle of Pilot Knob State Historic Site&lt;/a&gt;&lt;/strong&gt; Civil War battlefield, ruins of Fort Davidson, and museum. - &lt;a href=&#34;geo:37.620801,-90.638964?q=37.620801,-90.638964&#34;&gt;Location&lt;/a&gt; - &lt;a href=&#34;https://en.wikipedia.org/wiki/Battle_of_Fort_Davidson&#34;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;hiking&#34;&gt;Hiking&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://mostateparks.com/park/elephant-rocks-state-park&#34;&gt;Elephant Rocks State Park&lt;/a&gt;&lt;/strong&gt; Area of exposed granite with large granite boulders sitting on it. Two abandoned quarries. 1 mile paved trail, or just wander among the boulders. - &lt;a href=&#34;geo:37.652355,-90.689403?q=37.652355,-90.689403&#34;&gt;Location&lt;/a&gt; - &lt;a href=&#34;https://en.wikipedia.org/wiki/Elephant_Rocks_State_Park&#34;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://mostateparks.com/park/johnsons-shut-ins-state-park&#34;&gt;Johnson&amp;rsquo;s Shutins State Park&lt;/a&gt;&lt;/strong&gt; The East Fork of the Black River is &amp;lsquo;shut-in&amp;rsquo; by the hard rhyolite bedrock into numerous channels and pools. Short paved trail to the shutins, and options for longer hikes. - &lt;a href=&#34;geo:37.540188,-90.843576?q=37.540188,-90.843576&#34;&gt;Location&lt;/a&gt; - &lt;a href=&#34;https://en.wikipedia.org/wiki/Johnson%27s_Shut-Ins_State_Park&#34;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.hikingproject.com/trail/7044228/scour-trail&#34;&gt;Scour Trail&lt;/a&gt;&lt;/strong&gt; Trailhead to access the scour left by the &lt;a href=&#34;https://en.wikipedia.org/wiki/Taum_Sauk_Hydroelectric_Power_Station#2005_upper_reservoir_failure&#34;&gt;Upper Taum Sauk Reservoir breach&lt;/a&gt; on December 14, 2005. 1.8 mile lollipop loop - &lt;a href=&#34;geo:37.556211,-90.839261?q=37.556211,-90.839261&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://mostateparks.com/park/taum-sauk-mountain-state-park&#34;&gt;Taum Sauk Mountain State Park&lt;/a&gt;&lt;/strong&gt; Short hike on a paved trail to the highest point in Missouri, &lt;a href=&#34;https://www.hikingproject.com/trail/7055362/mina-sauk-falls-trail&#34;&gt;2.8 mile loop&lt;/a&gt; to Mina Sauk Falls. - &lt;a href=&#34;geo:37.572797,-90.728232?q=37.572797,-90.728232&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://nhlr.org/lookouts/us/mo/taum-sauk-lookout/&#34;&gt;Taum Sauk Mountain Lookout Tower&lt;/a&gt;&lt;/strong&gt; 72&amp;rsquo; fire lookout tower built in 1949. Stairs to below the deck, but no public access to the cab. - &lt;a href=&#34;geo:37.568475,-90.718693?q=37.568475,-90.718693&#34;&gt;Location&lt;/a&gt; - &lt;a href=&#34;https://centraluslookouts.weebly.com/taum-sauk.html&#34;&gt;History&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://mdc.mo.gov/discover-nature/places/millstream-gardens-conservation-area&#34;&gt;Millstream Gardens Conservation Area&lt;/a&gt;&lt;/strong&gt; Picnic pavilion and trail beside the St. Francis River. Access to Tiemann Shutins, the site of the &lt;a href=&#34;https://missouriwhitewater.org/competition/mwc/&#34;&gt;Missouri Whitewater Championships&lt;/a&gt; - &lt;a href=&#34;geo:37.571446,-90.466719?q=37.571446,-90.466719&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.fs.usda.gov/r09/marktwain/recreation/silver-mines-recreation-area&#34;&gt;Silver Mines Recreation Area&lt;/a&gt;&lt;/strong&gt; Hiking along the St. Francis River. Abandoned mine and remnants of the dam used to power the mining operation. Parking costs $5 per vehicle per day, cash or check only. - &lt;a href=&#34;geo:37.555193,-90.438537?q=37.555193,-90.438537&#34;&gt;Location&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Places to Go</title>
      <link>https://markpenner.space/onsr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>mrp@markpenner.space (Mark Penner)</author>
      <guid>https://markpenner.space/onsr/</guid>
      <description>&lt;p&gt;This is a map showing places to hike in the Ozark National Scenic Riverways and Eleven Point National Wild and Scenic River areas.
Driving routes (in blue) are starting from the Alley Spring Campground.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
