Changes to project structure

This commit is contained in:
Never Gude 2026-02-06 22:45:41 +01:00
parent 7d71c4bfda
commit fb63da2836
51 changed files with 801 additions and 586 deletions

View file

@ -0,0 +1,18 @@
Latex Endeavors
Some unintuitive quirks of Latex
Never
9.1.2026
────────────────────
BIBLATEX AND BIBER
Biber doesnt run
Biber doenst run if the (fedora) package  libxcrypt-compat  is missing.
It will fail with the error message
biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
]8;;\

View file

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<title>Latex Endeavors</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<body>
<canvas id="tv-screen"></canvas>
<header id="page-header">
<ul><li><a href="index.html">Home</a></li></ul>
</header>
<header id="title-block-header">
<h1 class="title">Latex Endeavors</h1>
<p class="subtitle">Some unintuitive quirks of Latex</p>
<p class="author">Never</p>
<p class="date">9.1.2026</p>
</header>
<section id="content">
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#biblatex-and-biber" id="toc-biblatex-and-biber">BibLaTeX
and Biber</a>
<ul>
<li><a href="#biber-doesnt-run" id="toc-biber-doesnt-run">Biber doesnt
run</a></li>
</ul></li>
</ul>
</nav>
<article>
<h1 id="biblatex-and-biber">BibLaTeX and Biber</h1>
<h2 id="biber-doesnt-run">Biber doesnt run</h2>
<p>Biber doenst run if the (fedora) package
<code>libxcrypt-compat</code> is missing. It will fail with the error
message</p>
<pre><code>biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory</code></pre>
</article>
</section>
<footer id="page-footer">
<!-- <embed type="text/html" src="https://cups.teabucket.eu/embed?from=never" style="width:320px; height: 120px; scale: 0.66;"> -->
<p class="cups-light">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous" src="images/cups_left.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo.svg" width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next" src="images/cups_right.svg" width="30" height="30"></a>
</p>
</footer>
</body>
</html>

View file

@ -0,0 +1,21 @@
Random linux utilities
Neat things I picked up along the way
Never
25.7.2025
────────────────────
MERGE PDFS
Using Ghostscript
Ghostscript has a feature to merge multiple pdf files into one. Although
ImageMagick also has this feature, I prefer this one, as it doesnt
rasterize and scales down the pdf files.
gs -dNOPAUSE -sDEVICE=pdfwrite \
 -sOUTPUTFILE=output.pdf \
 -dBATCH 1.pdf 2.pdf
]8;;\

View file

@ -0,0 +1,134 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<title>Random linux utilities</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
}
pre.numberSource { margin-left: 3em; padding-left: 4px; }
div.sourceCode
{ color: #cccccc; background-color: #303030; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ffcfaf; } /* Alert */
code span.an { color: #7f9f7f; font-weight: bold; } /* Annotation */
code span.at { } /* Attribute */
code span.bn { color: #dca3a3; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #f0dfaf; } /* ControlFlow */
code span.ch { color: #dca3a3; } /* Char */
code span.cn { color: #dca3a3; font-weight: bold; } /* Constant */
code span.co { color: #7f9f7f; } /* Comment */
code span.cv { color: #7f9f7f; font-weight: bold; } /* CommentVar */
code span.do { color: #7f9f7f; } /* Documentation */
code span.dt { color: #dfdfbf; } /* DataType */
code span.dv { color: #dcdccc; } /* DecVal */
code span.er { color: #c3bf9f; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #c0bed1; } /* Float */
code span.fu { color: #efef8f; } /* Function */
code span.im { } /* Import */
code span.in { color: #7f9f7f; font-weight: bold; } /* Information */
code span.kw { color: #f0dfaf; } /* Keyword */
code span.op { color: #f0efd0; } /* Operator */
code span.ot { color: #efef8f; } /* Other */
code span.pp { color: #ffcfaf; font-weight: bold; } /* Preprocessor */
code span.sc { color: #dca3a3; } /* SpecialChar */
code span.ss { color: #cc9393; } /* SpecialString */
code span.st { color: #cc9393; } /* String */
code span.va { } /* Variable */
code span.vs { color: #cc9393; } /* VerbatimString */
code span.wa { color: #7f9f7f; font-weight: bold; } /* Warning */
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<body>
<canvas id="tv-screen"></canvas>
<header id="page-header">
<ul><li><a href="index.html">Home</a></li></ul>
</header>
<header id="title-block-header">
<h1 class="title">Random linux utilities</h1>
<p class="subtitle">Neat things I picked up along the way</p>
<p class="author">Never</p>
<p class="date">25.7.2025</p>
</header>
<section id="content">
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#merge-pdfs" id="toc-merge-pdfs">Merge pdfs</a>
<ul>
<li><a href="#using-ghostscript" id="toc-using-ghostscript">Using
Ghostscript</a></li>
</ul></li>
</ul>
</nav>
<article>
<h1 id="merge-pdfs">Merge pdfs</h1>
<h2 id="using-ghostscript">Using Ghostscript</h2>
<p>Ghostscript has a feature to merge multiple pdf files into one.
Although ImageMagick also has this feature, I prefer this one, as it
doesnt rasterize and scales down the pdf files.</p>
<div class="sourceCode" id="cb1"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">gs</span> <span class="at">-dNOPAUSE</span> <span class="at">-sDEVICE</span><span class="op">=</span>pdfwrite <span class="dt">\</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> <span class="at">-sOUTPUTFILE</span><span class="op">=</span>output.pdf <span class="dt">\</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="at">-dBATCH</span> 1.pdf 2.pdf</span></code></pre></div>
</article>
</section>
<footer id="page-footer">
<!-- <embed type="text/html" src="https://cups.teabucket.eu/embed?from=never" style="width:320px; height: 120px; scale: 0.66;"> -->
<p class="cups-light">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous" src="images/cups_left.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo.svg" width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next" src="images/cups_right.svg" width="30" height="30"></a>
</p>
</footer>
</body>
</html>

View file

@ -0,0 +1,116 @@
Using rsync on Android to syncronise my Music library
Never
12.01.2026
────────────────────
SETUP TERMUX
Install Termux using F-Droid.
Update software repos.
pkg update
Grant file access permissions using.
termux-setup-storage
ESTABLISHING AN SSH CONNECTION
If network (such as eduroam) is blocking ssh trafic between machines,
open a Wi-Fi Hotspot on your Linux machine and connect the Android
device to it before using  rsync  or  ssh .
Configuring Android
Install the openssh server on Termux.
pkg install openssh
Start the ssh server daemon.
sshd
Get the ip address of the Android machine (in the Hotspot).
ifconfig
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
 inet 127.0.0.1 netmask 255.0.0.0
 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
rmnet0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1280
 inet 10.200.157.166 netmask 255.255.255.0 destination 10.200.157.166
 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 inet 10.42.0.200 netmask 255.255.255.0 broadcast 10.42.0.210
 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
In this case 10.42.0.200.
The ssh server should now be running and listening on port 8022. You can
check by running
nmap -Pn <ip_address>
For me  <ip_address>  whould be 10.42.0.200.
Get the username.
whoami
u0_a700
Set a password for this user.
passwd
Connecting to Android via ssh
Make sure you have an ssh key pair on the Linux system. If not generate
one using  ssh-keygen .
Now connect to Android by  ssh .
ssh <username>@<ip_address> -p 8022
SYNCRONISING FILES WITH RSYNC
Install  rsync  on Termux and Linux. Make sure to keep your own openssl
config.
pkg install rsync
Now on your Linux machine, syncronise your Music library with rsync.
rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music
Refreshing the Android MediaStore
Android uses a Database to store files. In order to play your music,
this database needs to be refreshed. This can be achieved by a reboot or
by using adb to manually refresh it.
sudo dnf install adb
Connect the Android device via USB and see if it is listed.
adb devices
If it is, restart adb in TCP mode with port 5555
adb tcpip 5555
Connect to the device using its .
adb connect <ip_address>
Refresh MediaStore.
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN -d file:///data/data/com.termux/files/home/storage/music/
]8;;\

View file

@ -0,0 +1,215 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<title>Using rsync on Android to syncronise my Music library</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
}
pre.numberSource { margin-left: 3em; padding-left: 4px; }
div.sourceCode
{ color: #cccccc; background-color: #303030; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ffcfaf; } /* Alert */
code span.an { color: #7f9f7f; font-weight: bold; } /* Annotation */
code span.at { } /* Attribute */
code span.bn { color: #dca3a3; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #f0dfaf; } /* ControlFlow */
code span.ch { color: #dca3a3; } /* Char */
code span.cn { color: #dca3a3; font-weight: bold; } /* Constant */
code span.co { color: #7f9f7f; } /* Comment */
code span.cv { color: #7f9f7f; font-weight: bold; } /* CommentVar */
code span.do { color: #7f9f7f; } /* Documentation */
code span.dt { color: #dfdfbf; } /* DataType */
code span.dv { color: #dcdccc; } /* DecVal */
code span.er { color: #c3bf9f; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #c0bed1; } /* Float */
code span.fu { color: #efef8f; } /* Function */
code span.im { } /* Import */
code span.in { color: #7f9f7f; font-weight: bold; } /* Information */
code span.kw { color: #f0dfaf; } /* Keyword */
code span.op { color: #f0efd0; } /* Operator */
code span.ot { color: #efef8f; } /* Other */
code span.pp { color: #ffcfaf; font-weight: bold; } /* Preprocessor */
code span.sc { color: #dca3a3; } /* SpecialChar */
code span.ss { color: #cc9393; } /* SpecialString */
code span.st { color: #cc9393; } /* String */
code span.va { } /* Variable */
code span.vs { color: #cc9393; } /* VerbatimString */
code span.wa { color: #7f9f7f; font-weight: bold; } /* Warning */
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<body>
<canvas id="tv-screen"></canvas>
<header id="page-header">
<ul><li><a href="index.html">Home</a></li></ul>
</header>
<header id="title-block-header">
<h1 class="title">Using rsync on Android to syncronise my Music
library</h1>
<p class="author">Never</p>
<p class="date">12.01.2026</p>
</header>
<section id="content">
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#setup-termux" id="toc-setup-termux">Setup Termux</a></li>
<li><a href="#establishing-an-ssh-connection"
id="toc-establishing-an-ssh-connection">Establishing an ssh
connection</a>
<ul>
<li><a href="#configuring-android"
id="toc-configuring-android">Configuring Android</a></li>
<li><a href="#connecting-to-android-via-ssh"
id="toc-connecting-to-android-via-ssh">Connecting to Android via
ssh</a></li>
</ul></li>
<li><a href="#syncronising-files-with-rsync"
id="toc-syncronising-files-with-rsync">Syncronising files with rsync</a>
<ul>
<li><a href="#refreshing-the-android-mediastore"
id="toc-refreshing-the-android-mediastore">Refreshing the Android
MediaStore</a></li>
</ul></li>
</ul>
</nav>
<article>
<h1 id="setup-termux">Setup Termux</h1>
<p>Install Termux using F-Droid.</p>
<p>Update software repos.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pkg</span> update</span></code></pre></div>
<p>Grant file access permissions using.</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">termux-setup-storage</span></span></code></pre></div>
<h1 id="establishing-an-ssh-connection">Establishing an ssh
connection</h1>
<p>If network (such as eduroam) is blocking ssh trafic between machines,
open a Wi-Fi Hotspot on your Linux machine and connect the Android
device to it before using <code>rsync</code> or <code>ssh</code>.</p>
<h2 id="configuring-android">Configuring Android</h2>
<p>Install the openssh server on Termux.</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pkg</span> install openssh</span></code></pre></div>
<p>Start the ssh server daemon.</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">sshd</span></span></code></pre></div>
<p>Get the ip address of the Android machine (in the Hotspot).</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">ifconfig</span></span></code></pre></div>
<pre><code>Warning: cannot open /proc/net/dev (Permission denied). Limited output.
lo: flags=73&lt;UP,LOOPBACK,RUNNING&gt; mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
rmnet0: flags=4305&lt;UP,POINTOPOINT,RUNNING,NOARP,MULTICAST&gt; mtu 1280
inet 10.200.157.166 netmask 255.255.255.0 destination 10.200.157.166
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
wlan0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt; mtu 1500
inet 10.42.0.200 netmask 255.255.255.0 broadcast 10.42.0.210
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)</code></pre>
<p>In this case 10.42.0.200.</p>
<p>The ssh server should now be running and listening on port 8022. You
can check by running</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="fu">nmap</span> <span class="at">-Pn</span> <span class="op">&lt;</span>ip_address<span class="op">&gt;</span></span></code></pre></div>
<p>For me <code>&lt;ip_address&gt;</code> whould be 10.42.0.200.</p>
<p>Get the username.</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="fu">whoami</span></span></code></pre></div>
<pre><code>u0_a700</code></pre>
<p>Set a password for this user.</p>
<div class="sourceCode" id="cb10"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="fu">passwd</span></span></code></pre></div>
<h2 id="connecting-to-android-via-ssh">Connecting to Android via
ssh</h2>
<p>Make sure you have an ssh key pair on the Linux system. If not
generate one using <code>ssh-keygen</code>.</p>
<p>Now connect to Android by <code>ssh</code>.</p>
<div class="sourceCode" id="cb11"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="fu">ssh</span> <span class="op">&lt;</span>username<span class="op">&gt;</span>@<span class="op">&lt;</span>ip_address<span class="op">&gt;</span> -p 8022</span></code></pre></div>
<h1 id="syncronising-files-with-rsync">Syncronising files with
rsync</h1>
<p>Install <code>rsync</code> on Termux and Linux. Make sure to keep
your own openssl config.</p>
<div class="sourceCode" id="cb12"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pkg</span> install rsync</span></code></pre></div>
<p>Now on your Linux machine, syncronise your Music library with
rsync.</p>
<div class="sourceCode" id="cb13"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="fu">rsync</span> <span class="at">-av</span> <span class="at">-e</span> <span class="st">&quot;ssh -p 8022&quot;</span> ~/Music <span class="op">&lt;</span>username<span class="op">&gt;</span>@<span class="op">&lt;</span>ip_address<span class="op">&gt;</span>:/data/data/com.termux/files/home/storage/music</span></code></pre></div>
<h2 id="refreshing-the-android-mediastore">Refreshing the Android
MediaStore</h2>
<p>Android uses a Database to store files. In order to play your music,
this database needs to be refreshed. This can be achieved by a reboot or
by using adb to manually refresh it.</p>
<div class="sourceCode" id="cb14"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> dnf install adb</span></code></pre></div>
<p>Connect the Android device via USB and see if it is listed.</p>
<div class="sourceCode" id="cb15"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> devices</span></code></pre></div>
<p>If it is, restart adb in TCP mode with port 5555</p>
<div class="sourceCode" id="cb16"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> tcpip 5555</span></code></pre></div>
<p>Connect to the device using its <ip_address>.</p>
<div class="sourceCode" id="cb17"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> connect <span class="op">&lt;</span>ip_address<span class="op">&gt;</span></span></code></pre></div>
<p>Refresh MediaStore.</p>
<div class="sourceCode" id="cb18"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> shell am broadcast <span class="at">-a</span> android.intent.action.MEDIA_SCANNER_SCAN <span class="at">-d</span> file:///data/data/com.termux/files/home/storage/music/</span></code></pre></div>
</article>
</section>
<footer id="page-footer">
<!-- <embed type="text/html" src="https://cups.teabucket.eu/embed?from=never" style="width:320px; height: 120px; scale: 0.66;"> -->
<p class="cups-light">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous" src="images/cups_left.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo.svg" width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next" src="images/cups_right.svg" width="30" height="30"></a>
</p>
</footer>
</body>
</html>

26
build/index Normal file
View file

@ -0,0 +1,26 @@
Home
────────────────────
Hello World
ARTICLES
Latex Endeavors (latex-endeavors)
Latex undoubtedly has some quirks. Some of them have a rather
unintuitive solution. In this article I cover some quirks and solutions
I have encountered.
Never - 9.1.2026
Random linux utilities (random-linux-utils)
Tricks and tools I learned about, while tweaking my Linux sytem or
trying to do productive things.
Never - 25.7.2025
Using rsync on Android to syncronise my Music
library (rsync-android)
As Spotify is getting enshittified by capitalism, keeping a music
library is kind of essential. Here I use rsync to syncronise my library
with my Android smartphone.
Never - 12.01.2026
]8;;\

154
build/index.html Normal file
View file

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Home</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<body>
<canvas id="tv-screen"></canvas>
<header id="page-header">
<ul><li><a href="index.html">Home</a></li></ul>
</header>
<header id="title-block-header">
<h1 class="title">Home</h1>
</header>
<section id="content">
<article>
<p>Hello World</p>
</article>
<nav id="articles">
<h2>Articles</h2>
<ul>
<li>
<div class="articles-header">
<a href="latex-endeavors.html" class="articles-title">Latex
Endeavors</a>
<p class="articles-author"><em>Never</em></p>
</div>
<p class="articles-summary">Latex undoubtedly has some quirks. Some of
them have a rather unintuitive solution. In this article I cover some
quirks and solutions I have encountered.</p>
<p class="articles-date">9.1.2026</p>
</li>
<li>
<div class="articles-header">
<a href="random-linux-utils.html" class="articles-title">Random linux
utilities</a>
<p class="articles-author"><em>Never</em></p>
</div>
<p class="articles-summary">Tricks and tools I learned about, while
tweaking my Linux sytem or trying to do productive things.</p>
<p class="articles-date">25.7.2025</p>
</li>
<li>
<div class="articles-header">
<a href="rsync-android.html" class="articles-title">Using rsync on
Android to syncronise my Music library</a>
<p class="articles-author"><em>Never</em></p>
</div>
<p class="articles-summary">As Spotify is getting enshittified by
capitalism, keeping a music library is kind of essential. Here I use
rsync to syncronise my library with my Android smartphone.</p>
<p class="articles-date">12.01.2026</p>
</li>
</ul>
</nav>
</section>
<script>
let speed = 10;
let scale = 0.33; // Image scale (I work on 1080p monitor)
let canvas;
let ctx;
let logoColor;
let dvd = {
x: 256,
y: 354,
xspeed: 2,
yspeed: 2,
img: new Image()
};
(function main(){
canvas = document.getElementById("tv-screen");
ctx = canvas.getContext("2d");
dvd.img.src = 'images/shark.png';
//Draw the "tv screen"
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
pickColor();
update();
})();
function update() {
setTimeout(() => {
//Draw the canvas background
ctx.fillStyle = '#00000000';
ctx.clearRect(0, 0, canvas.width, canvas.height);
//Draw DVD Logo and his background
//ctx.fillStyle = logoColor;
//ctx.fillRect(dvd.x, dvd.y, dvd.img.width*scale, dvd.img.height*scale);
ctx.drawImage(dvd.img, dvd.x, dvd.y, dvd.img.width*scale, dvd.img.height*scale);
//Move the logo
dvd.x+=dvd.xspeed;
dvd.y+=dvd.yspeed;
//Check for collision
checkHitBox();
update();
}, speed)
}
//Check for border collision
function checkHitBox(){
if(dvd.x+dvd.img.width*scale >= canvas.width || dvd.x <= 0){
dvd.xspeed *= -1;
pickColor();
}
if(dvd.y+dvd.img.height*scale >= canvas.height || dvd.y <= 0){
dvd.yspeed *= -1;
pickColor();
}
}
//Pick a random color in RGB format
function pickColor(){
r = Math.random() * (254 - 0) + 0;
g = Math.random() * (254 - 0) + 0;
b = Math.random() * (254 - 0) + 0;
logoColor = 'rgb('+r+','+g+', '+b+')';
}
</script>
<footer id="page-footer">
<!-- <embed type="text/html" src="https://cups.teabucket.eu/embed?from=never" style="width:320px; height: 120px; scale: 0.66;"> -->
<p class="cups-light">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous" src="images/cups_left.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo.svg" width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next" src="images/cups_right.svg" width="30" height="30"></a>
</p>
</footer>
</body>
</html>