<rss version="2.0"><channel>
<title>~dan's blog index</title>
<link>https://dan.envs.net</link>
<description>Experiences on the envs.net pubnix</description>
<item>
  <title>2026-04-13 - PBEasy | PrivateBin Helper Dialog Script</title>
  <link>https://dan.envs.net/blog/2026/2026-04-13-pbeasy---privatebin-helper-dialog-script</link>
  <pubdate>Mon, 13 Apr 2026 0:00:00+02:00</pubdate>
  <description><![CDATA[
		<div class="block">
            <h1 id="top" class="p-name">PBEasy | PrivateBin Helper Dialog Script</h1>
            <b>Blog post from</b>: Mon, 13 Apr 2026
		</div>

<p class="p-summary">I created a PrivatePasteBin Helper tool
<a href="https://git.envs.net/dan/pbeasy">PBEasy</a> (ppb, for short)
based on <a href="https://github.com/Mydayyy/pbcli">pbcli</a> for easy use of
Pastes and Comments/Replies without the need to remember the Link (paste/key).<br/>
<br/>
You can add Pastes to your favorite <a href="https://privatebin.info/">PrivateBin</a>,
or make comments to it for the first time using the 'ppb' tool, which
automatically adds the new paste to the cache.<br/>
<br/>
There is also a <a href="https://profanity-im.github.io/">Profanity XMPP client (cli)</a>
plugin for easy integration with the /ppb command. Profanity MUST run inside a
TMUX session to open the interactive mode window.<br/>
<br/>

<a class="p-category" href="https://pleroma.envs.net/tag/privatebin">#PrivateBin</a>
<a class="p-category" href="https://pleroma.envs.net/tag/pastebin">#PasteBin</a>
<a class="p-category" href="https://pleroma.envs.net/tag/paste">#paste</a>
<a class="p-category" href="https://pleroma.envs.net/tag/cli">#CLI</a>
<a class="p-category" href="https://pleroma.envs.net/tag/tools">#tools</a><br/>

<span class="hidden">Blogpost</span>
</p>

<h2>The PBEasy PrivateBin CLI helper</h2>
<p>The PBEasy tool (or 'ppb' for short) is a PrivateBin helper tool, which
caches used pastes for easy access, and shows a list of comments on a paste (if
enabled) as a dialog with preview. You can reply to a comment or create a new
comment with your favorite $EDITOR.</p>

<p>If you install the Profanity Plugin, you can directly reply to a paste from
within Profanity. &lt;TAB&gt; is enabled to scroll through URLs. Usage: '/ppb
[url]' or '/ppb' in the console window for interactive choose of a paste.</p>

<p>I won't show the installation instructions here, because you can have a look
at the <a href="https://git.envs.net/dan/pbeasy">PBEasy Repository</a> for
instructions.</p>

<h2>Features</h2>
<p><b>Interactive use</b> of the ppb command, when used without parameters and pipe<br/>
<b>Create new PrivateBin pastes</b> from files or stdin. These are automatically
added to a local cache for easy access.<br/>
<b>Upload attachments</b> (images, files) with optional comments. Also
automatically added to the cache.<br/>
<b>Interactive comment/reply selection</b> using dialog.<br/>
<b>Reply to nested comments</b> with preview and editing.<br/>
<b>Clipboard integration:</b> Automatically copies resulting URLs using xclip.<br/>
<b>Uses your $EDITOR</b> for editing comments and replies.<br/>
<b>Customizable defaults</b> via a config file.</p>

<h2>Dependencies:</h2>
<p><a href="https://github.com/Mydayyy/pbcli">pbcli</a>,
<a href="https://jqlang.org/">jq</a>,
<a href="https://invisible-island.net/dialog/">dialog</a>,
<a href="https://github.com/astrand/xclip">xclip</a>,<br/>
'fold', 'mktemp', 'diff', 'cat', 'tee' (coreutils),<br/>
A text editor set in your <code>$EDITOR</code> environment variable (eg.
<code>nvim</code>, <code>vim</code>, <code>nano</code>)</p>

<h2>Short Usage:</h2>
<p><code>ppb [-i] | [-u &lt;FILE&gt;|-c &lt;URL&gt;] [-d|-D] [-f
&lt;FORMAT&gt;] [-s &lt;HOST URL&gt;] [-n &lt;NAME&gt;] | [-h]</code><br/>
<br/>
<b>[-i]</b>: Create default configuration file<br/>
<b>[-u &lt;FILE&gt;]</b>: Upload file as an attachment. Images will be shown.<br/>
<b>[-c &lt;URL&gt;]</b>: Comment or reply to a comment of the Paste<br/>
<b>[-d| -D]</b>: Enable/Disable comments on a paste<br/>
<b>[-s &lt;HOST URL&gt;]</b>: Specify PrivateBin Host (default: https://pb.envs.net/)<br/>
<b>[-n &lt;NAME&gt;]</b>: Specify NAME for Paste URL to better find in list of pastes<br/>
<b>[-h]</b>: Show help</p>

<h2>Use Issue Tracker</h2>
<p>If you have any problems with <code>ppb</code>, use one of the Issue trackers:</p>

<ul>
    <li><a href="https://git.envs.net/dan/pbeasy/issues">https://git.envs.net/dan/pbeasy/issues</a></li>
    <li><a href="https://github.com/dan-envs/pbeasy/issues">https://github.com/dan-envs/pbeasy/issues</a></li>
</ul>

<h2>License</h2>
<p>This script is licensed under the <b>GPL-3.0-only</b> license. See
<a href="https://git.envs.net/dan/pbeasy/src/branch/main/LICENSE">LICENSE</a>
for details.</p>

<h2>Final Words</h2>
<p>I hope, that at least some people use these scripts, including the Profanity
plugin and find it useful. Its a good help if you're often using PrivateBin
paste bins from the command line. So please try it out.</p>

<p>Best wishes,<br/>
~dan</p>

<a href="https://brid.gy/publish/mastodon"/>

<div id="webmentions"/>
]]></description>
</item>

<item>
  <title>2026-03-05 - Our new XMPP MUC BanBot</title>
  <link>https://dan.envs.net/blog/2026/2026-03-05-our-new-xmpp-muc-banbot</link>
  <pubdate>Thu, 05 Mar 2026 0:00:00+01:00</pubdate>
  <description><![CDATA[
		<div class="block">
            <h1 id="top" class="p-name">Our new XMPP MUC BanBot</h1>
            <b>Blog post from</b>: Thu, 05 Mar 2026
		</div>

<p class="p-summary"><a href="https://pleroma.envs.net/creme">@creme@pleroma.envs.net</a> has
built a nice <a href="https://git.envs.net/envs/muc_banbot">MUC BanBot</a>
for XMPP with a lot of neat features to keep the Multi-User-Chat rooms
in order. This bot is certainly useful for other XMPP server admins
too. So we have more control and generally more safety in the <a href="https://envs.net/chat/xmpp/">envs.net XMPP</a> chat rooms.<br/>
<br/>
<a class="p-category" href="https://pleroma.envs.net/tag/envs">#envs</a>
<a class="p-category" href="https://pleroma.envs.net/tag/xmpp">#xmpp</a>
<a class="p-category" href="https://pleroma.envs.net/tag/muc">#muc</a>
<a class="p-category" href="https://pleroma.envs.net/tag/bot">#bot</a>
<a class="p-category" href="https://pleroma.envs.net/tag/chat">#chat</a>

<span class="hidden"><br/><br/>Blogpost</span>
</p>

<h2>Keeping your visitors safe!</h2>

<p>The <a href="https://git.envs.net/envs/muc_banbot">XMPP MUC BanBot</a>
allows centralized administration from a designated admin room and protects
multiple chat rooms from unwanted users.</p>

<h3>Admin commands from the admin room</h3>

<p>These commands are issued by the room admins in the designated admin room for
the bot.</p>

<table class="blog-table">
<tbody>
<tr><th><b>Command</b></th><th><b>Description</b></th><th><b>Example</b></th></tr>
<tr>
    <td><b>!help</b> </td>
    <td>- Shows help text for the bot</td>
    <td><code>!help</code></td>
</tr>
<tr>
    <td><b>!ban</b> &lt;nick|JID&gt; [comment] </td>
    <td>- permanently ban user from protected rooms</td>
    <td><code>!ban fab You're out!</code></td>
</tr>
<tr>
    <td><b>!tempban</b> &lt;nick|JID&gt; &lt;10m|2h|1d&gt; [comment] </td>
    <td>- temporarily ban a user from protected rooms</td>
    <td><code>!tempban fab 5m Cool Down!</code></td>
</tr>
<tr>
    <td><b>!unban</b> &lt;nick|JID&gt; </td>
    <td>- unban a permanently or temporarily banned user from protected rooms</td>
    <td><code>!unban fab</code></td>
</tr>
<tr>
    <td><b>!bansearch</b> &lt;query&gt; </td>
    <td>- search bans by nick, domain or JID</td>
    <td><code>!bansearch envs.net</code></td>
</tr>
<tr>
    <td><b>!banlist</b> </td>
    <td>- show list of temporarily active and permanent bans</td>
    <td><code>!banlist</code></td>
</tr>
<tr>
    <td><b>!reloadconfig</b> </td>
    <td>- Reload config.py and update settings like 'SHOW_BAN_IN_MUC'.</td>
    <td><code>!reloadconfig</code></td>
</tr>
<tr>
    <td><b>!room</b> add &lt;room&gt; </td>
    <td>- Add room to the protected list and DB</td>
    <td><code>!room add room@muc.example.com</code></td>
</tr>
<tr>
    <td><b>!room</b> remove &lt;room&gt; </td>
    <td>- Remove room from protected list and DB</td>
    <td><code>!room remove room@muc.example.com</code></td>
</tr>
<tr>
    <td><b>!room</b> list </td>
    <td>- List all currently protected rooms.</td>
    <td><code>!room list</code></td>
</tr>
<tr>
    <td><b>!sync</b> </td>
    <td>- Let the bot rejoin rooms and enforce active bans</td>
    <td><code>!sync</code></td>
</tr>
<tr>
    <td><b>!syncadmins</b> </td>
    <td>- Update list of admins</td>
    <td><code>!syncadmins</code></td>
</tr>
<tr>
    <td><b>!syncbans</b> </td>
    <td>- Sync bans from/to rooms with the bot's database</td>
    <td><code>!syncbans</code></td>
</tr>
<tr>
    <td><b>!status</b> </td>
    <td>- Show bot status</td>
    <td><code>!status</code></td>
</tr>
<tr>
    <td><b>!whoami</b> </td>
    <td>- Shows your affiliation</td>
    <td><code>!whoami</code></td>
</tr>
<tr>
    <td><b>!why</b> &lt;nick|JID&gt; </td>
    <td>- Show the reason for a ban</td>
    <td><code>!why fab</code></td>
</tr>
</tbody>
</table>

<h3>Public commands for participants</h3>

<p>These commands can be executed by the participants of protected rooms.</p>

<table class="blog-table">
<tbody>
<tr><th><b>Command</b></th><th><b>Description</b></th><th><b>Example</b></th></tr>
<tr>
    <td><b>!help</b> </td>
    <td>- Shows help text for the bot</td>
    <td><code>!help</code></td>
</tr>
<tr>
    <td><b>!banlist</b> </td>
    <td>- show list of temporarily active bans</td>
    <td><code>!banlist</code></td>
</tr>
<tr>
    <td><b>!why</b> &lt;nick|JID&gt; </td>
    <td>- Show the reason for a ban</td>
    <td><code>!why fab</code></td>
</tr>
</tbody>
</table>

<h2>Description</h2>

<p>As you see, with these commands you can permanently or temporarily ban
people who can't behave, are bothering other room participants or generally
don't follow the room rules in all protected rooms.</p>

<p>Temporary bans will automatically be lifted when the time set for the ban
has passed.</p>

<p>All bans, temporary and permanent can be lifted by the channel admins of
protected channels at any time. There are also the different <b>!sync</b>
commands to keep the bot's database in sync with the rooms, bans and
admins.</p>

<h2>Conclusion</h2>

<p>With the <a href="https://git.envs.net/envs/muc_banbot">MUC BanBot</a>
we have an excellent tool to keep trolls out of our chatrooms. And also
especially the <b>!tempban</b> function can be used to take some speed out
of heated discussions. All in all, an excellent piece of software for XMPP
server administrators.</p>

<p>Best wishes,<br/>
~dan</p>

<a href="https://brid.gy/publish/mastodon"/>

<div id="webmentions"/>
]]></description>
</item>

<item>
  <title>2026-02-24 - My Raspberry Pi Incus Cluster</title>
  <link>https://dan.envs.net/blog/2026/2026-02-24-my-raspberry-pi-incus-cluster</link>
  <pubdate>Tue, 24 Feb 2026 0:00:00+01:00</pubdate>
  <description><![CDATA[
		<div class="block">
            <h1 id="top" class="p-name">My Raspberry Pi Incus Cluster</h1>
            <b>Blog post from</b>: Tue, 24 Feb 2026
		</div>

<h2>4 RasPi's in a metal case</h2>
<img class="u-photo" src="https://dan.envs.net/images/unsorted/raspi-cluster-1.jpg" alt="RasPi Cluster"/>

<p class="p-summary">This is my 4x Raspberry
Pi 4 (8GB) Incus cluster I wrote about in my <a href="https://dan.envs.net/selfhosted#4x_raspberry_pi_4_incus_cluster">"selfhosted"</a>
page. I built it for tinkering in a nice metal case.</p>

<p>The cluster consists of 4x Raspberry Pi 4 with 8GB RAM and has a 500GB SSD
attached to each of them. Inside the case at the bottom is a 5-port 1GBit switch
which connects the Pis to the network.</p>

<h3><a href="https://linuxcontainers.org/incus/">Incus
Container/VM Manager</a></h3>
<p>The cluster runs the <b>Incus Container/VM Manager</b> in a cluster setup
running on <a href="https://en.wikipedia.org/wiki/Raspberry_Pi_OS">Raspberry
Pi OS (Trixie)</a>. Incus uses the arm64 apt repository for Debian "Trixie",
so I always have the most recent version of Incus running.</p>

<p>I update the whole cluster with <a href="https://docs.ansible.com/">Ansible</a>. I mainly use it to learn
and tinker with an Incus cluster, but the updates can be a little unstable,
so I use my <a href="https://www.proxmox.com/en/">Proxmox Cluster</a> for
services which need to be more reliable on two x86_64 (amd64) nodes.</p>

<p>Best wishes,<br/>
~dan</p>

<div class="center"><b>Categories:</b>
<a class="p-category" href="https://pleroma.envs.net/tag/raspberrypi">#raspberrypi</a>
<a class="p-category" href="https://pleroma.envs.net/tag/incus">#incus</a>
<a class="p-category" href="https://pleroma.envs.net/tag/cluster">#cluster</a>
<a class="p-category" href="https://pleroma.envs.net/tag/network">#network</a></div>
<a href="https://brid.gy/publish/mastodon"/>

<div id="webmentions"/>
]]></description>
</item>

<item>
  <title>2026-02-20 - This blog now fully supports webmentions</title>
  <link>https://dan.envs.net/blog/2026/2026-02-20-this-blog-now-fully-supports-webmentions</link>
  <pubdate>Fri, 20 Feb 2026 0:00:00+01:00</pubdate>
  <description><![CDATA[
		<div class="block">
            <h1 id="top" class="p-name">This blog now fully supports webmentions</h1>
            <b>Blog post from</b>: Fri, 20 Feb 2026
		</div>

<p class="p-summary">My website now fully supports webmentions. This is a test
in sending them automatically from my posts.</p>

<h2>Testing Webmentions</h2>
<p>My website on the <a href="https://envs.net/">envs</a> pubnix now fully
supports sending and receiving webmentions automatically. I've made h-card and
h-entry markup on all of my blog pages, but you can send webmentions to all my
webpages except the the image gallery.</p>

<p>I'm still new to all this and I just set it up this night with all the
microformats and scripting I did on my page in Javascript to show received
mentions and my envs-blog management script to send them to the pages and this
is my first test!</p>

<p>I had to put some JavaScript on my pages to view the received webmentions,
but you can still read the post without Javascript. You just can't read the
webmentions. I went the easy way at first with using <a href="https://webmention.io/">webmention.io</a>, but I'll maybe come up with my
own solution later (if ever needed).</p>

<h2>Sites I link to for testing</h2>
<p>I've just looked up how to create <b>rel="in-reply-to"</b>
links at <a rel="in-reply-to" class="u-in-reply-to" href="https://barryfrost.com/2015/01/how-to-comment">Barry Frosts
page</a> about "how-to-comment". Let's see, if my blogging script will
successfully send him a webmention. In addition I'll send a webmention to
my <a href="https://dan.envs.net/contact">contact</a> page as a non-reply
webmention, just to see, if receiving works right. I've also a <a href="https://indieweb.org/User:Dan.envs.net">page on indieweb.org</a>, but I
guess, it doesn't receive webmentions?</p>

<h2>Last words before sending this post</h2>
<p>My script may fail to do everything right and this is just a first test. So I
maybe need to delete or update this post. I hope Barry isn't that angry on me,
if my post isn't as permanent as it should be. But I <i>pray</i> that all works
well.</p>

<p>Best wishes,<br/>
~dan</p>

<div class="center"><b>Categories:</b>
<a class="p-category u-category" href="https://pleroma.envs.net/tag/indieweb">#indieweb</a>
<a class="p-category u-category" href="https://pleroma.envs.net/tag/webmentions">#webmentions</a>
<a class="p-category u-category" href="https://pleroma.envs.net/tag/envs">#envs</a>
<a class="p-category u-category" href="https://pleroma.envs.net/tag/test">#test</a></div>

<a href="https://brid.gy/publish/mastodon"/>

<div id="webmentions"/>

]]></description>
</item>

<item>
  <title>2026-02-19 - I moved my Fediverse account</title>
  <link>https://dan.envs.net/blog/2026/2026-02-19-i-moved-my-fediverse-account</link>
  <pubdate>Thu, 19 Feb 2026 0:00:00+01:00</pubdate>
  <description><![CDATA[
<p>I just moved my Fediverse account to <a href="https://pleroma.envs.net/dan">@dan@pleroma.envs.net</a>.</p>

<h2>My new Fediverse account</h2>
<p>I moved my Fediverse account from <b>@fab@pleroma.envs.net</b> to
<a href="https://pleroma.envs.net/dan">@dan@plermoma.envs.net</a>.</p>

<p>So if you want to follow me on Mastodon/ActivtyPub, use this new address. I
moved the accounts to make it the same name as on my whole <a href="https://envs.net">envs.net</a> pubnix account (dan@envs.net).</p>

<p>Best wishes,<br/>
~dan</p>
]]></description>
</item>

<item>
  <title>2026-02-15 - envs-blog works good for me already!</title>
  <link>https://dan.envs.net/blog/2026/2026-02-15-envs-blog-works-good-for-me-already</link>
  <pubdate>Sun, 15 Feb 2026 0:00:00+01:00</pubdate>
  <description><![CDATA[
<p>The <b>envs-blog</b> is actually in a usable state already.</p>

<h2>I revised the whole deferring process code</h2>
<p>When I start the blogging shell script, a dialog is shown to me, with all
deferred post, from which I can choose to continue editing or I choose "cancel"
and a new draft is created from the template. If there are no deferred drafts, a
new one is created automatically.</p>

<h2>Metadata is filled in only when really posting</h2>
<p>The metadata is read from the commandline, after I chose to "publish"
instead of "defer". Then the placeholder variables (which shouldn't be
changed in the header) are replaced with the actual data and the post is
named accordingly and placed in the "blog" directory (configurable) under my
"/home/dan/public_html/" folder and my post is online! Maybe I'll create
some more <b>dialog</b> boxes to enter the metadata and for selecting
options. This is the first time I use the "dialog" tool in my scripts and
it's really a good tool.</p>

<h2>The RSS feed file is now limited to 10 entries</h2>
<p>I limited the generation of the <a href="https://dan.envs.net/rss.xml">rss.xml</a> feed file to contain only the 10
latest entries (configurable) with full content, so it won't grow to large over
time.</p>

<h2>Make it usable for other envs.net users</h2>
<p>I've already made a lot of changes to make <b>envs-blog</b> configurable,
because I want to make it available for other envs.net users. There's already a
git repository where you can have an early look at it at <a href="https://git.envs.net/dan/envs-blog/">https://git.envs.net/dan/envs-blog/</a>.
</p>

<h2>Documentation</h2>
<p>Be warned: There isn't much documentation yet. That's the next thing I'm doing.
The installation process will still be a little complicated, but maybe I'll
create a tool for it. The README.md in the repository is still empty, because I
concentrated on creating the <b>php</b> and <b>bash</b> scripts to make them
usable. But so far, they're working. So now I can work on documenting the
installation/usage process.</p>

<h2>So far, so good!</h2>
<p>I'm mainly developing these blogging scripts for myself and they seem to work
for me. I'll use these scripts even if no one cares. But I would be happy if
there is some interest. Then I'll continue to work on it <b>until it's
ready</b>, which will hopefully be the case one day.</p>

<p>If you're interested and have questions or comments, you can contact me with
an email or chat with me over XMPP. Here you'll find the <a href="https://dan.envs.net/contact">contact information</a>.</p>

<p>Best wishes,<br/>
~dan</p>
]]></description>
</item>

<item>
  <title>2026-02-14 - Second revision of my blog engine</title>
  <link>https://dan.envs.net/blog/2026/2026-02-14-second-revision-of-my-blog-engine</link>
  <pubdate>Sat, 14 Feb 2026 0:00:00+01:00</pubdate>
  <description><![CDATA[
<p>I'm still working on my blogging script. It also needs some testing.</p>

<h2>Added function to defer for later editing</h2>
<p>I added a function to defer an article for postoning to edit it further. It's
not complete yet, because it doesn't update the dates to the later date in the
post yet. I'll add this feature later.</p>

<h2>Added RSS feed file generation</h2>
<p>I added a feed file generator which generates a rss.xml file, which contains
the last 10 entries in full. As far as I can tell, it works for now.</p>

<h2>Not ready for other users</h2>
<p>For now it's too complicated to make this blog engine usable for other users,
although I would really like to do that. Maybe I'll work on it if it works for
me flawlessly.</p>

<p>Best wishes,<br/>
~dan</p>
]]></description>
</item>

<item>
  <title>2026-02-14 - My first Blog Entry</title>
  <link>https://dan.envs.net/blog/2026/2026-02-14-my-first-blog-entry</link>
  <pubdate>Sat, 14 Feb 2026 0:00:00+01:00</pubdate>
  <description><![CDATA[
<p class="p-summary">This is just a test post for my brand new blog on <a href="https://envs.net/">
envs.net</a>. I'm just testing my script for creating the template an then
editing it and automatically publishing it.</p>

<h2>What still misses</h2>
<p>There are a few things still missing which I'll add later to my script:</p>

<ul>
    <li>Postponing messages</li>
    <li>Creating an RSS feed</li>
    <li>MAYBE: making it available to other users</li>
    <li>Complete testing</li>
    <li>And some more things...</li>
</ul>

<h2>That's all for today</h2>
<p>I'm pretty tired, and I'll stop development for today. At least I can
already post and show a list of the blog index. I'll continue tomorrow</p>

<p>Best wishes,<br/>
~dan</p>
]]></description>
</item>

</channel>
</rss>

