<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de_DE en_UK ru_RU"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.x-tra-designs.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.x-tra-designs.org/" rel="alternate" type="text/html" hreflang="de_DE en_UK ru_RU" /><updated>2026-07-05T10:21:12+02:00</updated><id>https://www.x-tra-designs.org/feed.xml</id><title type="html">x-tra-designs.org</title><subtitle>Private Homepage of X-Tra-Designs. Computers, Linux, World, Marklin, Stuff </subtitle><author><name>Chrissie Brown</name></author><entry xml:lang="de"><title type="html">Gentoo and Mate: Dual-Monitor-Setup</title><link href="https://www.x-tra-designs.org/gentoo-dual-monitors-and-mate-2026.html" rel="alternate" type="text/html" title="Gentoo and Mate: Dual-Monitor-Setup" /><published>2026-04-10T15:37:00+02:00</published><updated>2026-04-10T15:37:00+02:00</updated><id>https://www.x-tra-designs.org/gentoo-dual-monitors-and-mate</id><content type="html" xml:base="https://www.x-tra-designs.org/gentoo-dual-monitors-and-mate-2026.html"><![CDATA[<p>Wenn man Mate nutzt, ein Dual-Monitor mit xrandr hat, bei dem Xinerama an ist, will man sicher, dass beim Maximieren ein Fenster nur auf dem gerade aktiven Monitor maximiert wird, und nicht über beide Monitore; Wenn das nicht klappt, liegts am Use-Flag.
<br /><br /></p>

<ul>
  <li>Monitor-Setup</li>
</ul>

<p><img src="/postimg/mate_multi_setup.png" alt="monitor" /></p>

<p><br /></p>
<ul>
  <li>Das Use-Flag xinerama muss an sein, und marco, der Mate-Window-Manager, mit diesem Use-Flag kompiliert sein.</li>
</ul>

<p>Sonst gehts nicht!</p>

<p><br /></p>
<ul>
  <li>Monitore in xrandr checken</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>xrandr --query
 HDMI-0 connected 1680x1050
 DVI-0 connected primary 1920x1080
</code></pre></div></div>

<ul>
  <li>Use-Flags des Window-Managers checken</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>chrissie@fehmarn ~ $ equery uses x11-wm/marco
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for x11-wm/marco-1.28.1-r2:
 U I
 + + startup-notification : Enable application startup event feedback mechanism
 - - test                 : Enable dependencies and/or preparations necessary
                            to run tests (usually controlled by FEATURES=test
                            but can be toggled independently)
 - - xinerama             : Add support for querying multi-monitor screen
                            geometry through the Xinerama API
</code></pre></div></div>

<ul>
  <li>Zum Beheben: Use-Flag ergänzen
    <ul>
      <li>In /etc/portage/make.conf ergänzen</li>
    </ul>
  </li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>USE="... xinerama"
</code></pre></div></div>

<ul>
  <li>Dann neu kompilieren</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>emerge -1 x11-wm/marco
# oder gleich alle betroffenen MATE-Pakete:
emerge -uDN @world
</code></pre></div></div>

<p>Und danach neu einloggen oder</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>marco --replace &amp; 
</code></pre></div></div>
<p>eingeben</p>]]></content><author><name>Chrissie Brown</name></author><category term="gentoo" /><category term="linux" /><summary type="html"><![CDATA[Wenn man Mate nutzt, ein Dual-Monitor mit xrandr hat, bei dem Xinerama an ist, will man sicher, dass beim Maximieren ein Fenster nur auf dem gerade aktiven Monitor maximiert wird, und nicht über beide Monitore; Wenn das nicht klappt, liegts am Use-Flag.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/gentoo.jpg" /><media:content medium="image" url="https://www.x-tra-designs.org/gentoo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">MySQL/MariaDB: Improve Invoiceplane Speed with Indexes</title><link href="https://www.x-tra-designs.org/mysql-indexes-improve-invoiceplane-speed-2026.html" rel="alternate" type="text/html" title="MySQL/MariaDB: Improve Invoiceplane Speed with Indexes" /><published>2026-03-21T09:00:01+01:00</published><updated>2026-03-21T09:00:01+01:00</updated><id>https://www.x-tra-designs.org/mysql-indexes-improve-invoiceplane-speed</id><content type="html" xml:base="https://www.x-tra-designs.org/mysql-indexes-improve-invoiceplane-speed-2026.html"><![CDATA[<p>InvoicePlane is a self-hosted open source application for managing your quotes, invoices, clients and payments. 
https://github.com/InvoicePlane/InvoicePlane
If you have something like 500 clients in the system and about 6500 invoices, you may notice a remarkable slowdown
when you display clients or invoices overview. The solution: Create indexes in MySQL / Mariad.</p>

<p><br /><br /></p>

<ul>
  <li>create the indexes, try again, enjoy!</li>
  <li>before: 7…8 seconds on viewing clients list, after: 0.5 seconds</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-- clients active
CREATE INDEX idx_clients_active 
  ON ip_clients (client_active);

-- Invoices Clients idx
CREATE INDEX idx_invoices_client_id
  ON ip_invoices (client_id);

-- Join client invoice
CREATE INDEX idx_invoices_client_id
  ON ip_invoices (client_id);

-- Amount
CREATE INDEX idx_invoice_amounts_invoice_id
  ON ip_invoice_amounts (invoice_id);

-- Clients (idx)
CREATE INDEX idx_clients_id ON ip_clients (client_id);

-- Invoices (important!)
CREATE INDEX idx_invoices_user_id
  ON ip_invoices (user_id);

-- Recurring (Subquery!)
CREATE INDEX idx_invoices_recurring_invoice_id
  ON ip_invoices_recurring (invoice_id, recur_next_date);

-- Quotes
CREATE INDEX idx_quotes_invoice_id
  ON ip_quotes (invoice_id);

-- Sumex
CREATE INDEX idx_invoice_sumex_invoice
  ON ip_invoice_sumex (sumex_invoice);
</code></pre></div></div>

<ul>
  <li>bei Chrissies InvoicePlainXtra additionally:</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ALTER TABLE ip_client_extended
  ADD INDEX idx_client_extended_client_id (client_id);
</code></pre></div></div>

<ul>
  <li>How did i find that out?</li>
  <li>insert this in the controller in the correspodending method like status:</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
$this-&gt;output-&gt;enable_profiler(TRUE);

</code></pre></div></div>

<ul>
  <li>make one click: Clients -&gt; View Cliens</li>
  <li>now look on the SQL output at the bottom of the page</li>
  <li>EXPLAIN this output with EXPLAIN SELECT … in mysql / mariabd</li>
  <li>Think, generate indexes</li>
  <li>it is also possible to optimize the sub-query which will bring another major speed upgrade, but thats for another post</li>
</ul>]]></content><author><name>Chrissie Brown</name></author><category term="MySQL" /><category term="Mariadb" /><summary type="html"><![CDATA[InvoicePlane is a self-hosted open source application for managing your quotes, invoices, clients and payments. https://github.com/InvoicePlane/InvoicePlane If you have something like 500 clients in the system and about 6500 invoices, you may notice a remarkable slowdown when you display clients or invoices overview. The solution: Create indexes in MySQL / Mariad.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/mariadb.png" /><media:content medium="image" url="https://www.x-tra-designs.org/mariadb.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Truncate text reasonable in PHP</title><link href="https://www.x-tra-designs.org/php-truncate-text-reasonable-2026.html" rel="alternate" type="text/html" title="Truncate text reasonable in PHP" /><published>2026-03-15T12:37:00+01:00</published><updated>2026-03-15T12:37:00+01:00</updated><id>https://www.x-tra-designs.org/php-truncate-text-reasonable</id><content type="html" xml:base="https://www.x-tra-designs.org/php-truncate-text-reasonable-2026.html"><![CDATA[<p>Um automatisch einen Teaser zu generieren, braucht man eine schlaue Funktion, die Wörter nicht zerhackt. :-)</p>

<ul>
  <li>Quelle: Drupal Project</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;?php
function _truncate($string, $len, $wordsafe = FALSE, $dots = FALSE) 
{
        if (strlen($string) &lt;= $len) {
                return $string;
        }

        if ($dots) {
                $len -= 4;
        }

        if ($wordsafe) {
                $string = substr($string, 0, $len + 1); // leave one more character
                if ($last_space = strrpos($string, ' ')) { // space exists AND is not on position 0
                        $string = substr($string, 0, $last_space);
                } else {
                        $string = substr($string, 0, $len);
                }
        } else {
                $string = substr($string, 0, $len);
        }

        if ($dots) {
                $string .= ' ...';
        }

        return $string;
}
?&gt;
</code></pre></div></div>

<ul>
  <li>Beispielverwendung:
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$t = _truncate($t, 150, true, true);
</code></pre></div>    </div>
  </li>
</ul>]]></content><author><name>Chrissie Brown</name></author><category term="PHP" /><category term="Coding" /><summary type="html"><![CDATA[Um automatisch einen Teaser zu generieren, braucht man eine schlaue Funktion, die Wörter nicht zerhackt. :-)]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/php.jpg" /><media:content medium="image" url="https://www.x-tra-designs.org/php.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Perl: Telnet-Modul installieren</title><link href="https://www.x-tra-designs.org/install-perl-telnet-module-2025.html" rel="alternate" type="text/html" title="Perl: Telnet-Modul installieren" /><published>2025-11-05T14:37:00+01:00</published><updated>2025-11-05T14:37:00+01:00</updated><id>https://www.x-tra-designs.org/install-perl-telnet-module</id><content type="html" xml:base="https://www.x-tra-designs.org/install-perl-telnet-module-2025.html"><![CDATA[<p>Diese Fehlermeldung:<br /><br />
Can’t locate Net/Telnet.pm in @INC (you may need to install the Net::Telnet module)<br /><br />
lässt sich ohne mit der Wimper zu zucken, schnell so beheben:</p>

<ul>
  <li>Perl-Modul via CPAN nachinstallieren</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>root@uni:~# perl -MCPAN -e shell

Starting with version 2.29 of the cpan shell
[...]

cpan[1]&gt; install Net::Telnet
Reading '/root/.cpan/Metadata'
  Database was generated on Tue, 06 May 2025 08:29:01 GMT
[...]

cpan[2]&gt; quit
root@uni:~#
</code></pre></div></div>
<p><br /></p>
<ul>
  <li>Perl-Modul via apt-get installieren
    <ul>
      <li>Bei anderen Distributionen natürlich die distributionseigenen Paketwerkzeuge benutzen :-)</li>
    </ul>
  </li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>root@uni:~# apt-get install libnet-telnet-perl
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  libnet-telnet-perl
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.5 kB of archives.
After this operation, 213 kB of additional disk space will be used.
Get:1 https://updates.software-univention.de ucs525/main amd64 libnet-telnet-perl all 3.05-2 [56.5 kB]
Fetched 56.5 kB in 1s (112 kB/s) 
</code></pre></div></div>]]></content><author><name>Chrissie Brown</name></author><category term="perl" /><category term="linux" /><summary type="html"><![CDATA[Diese Fehlermeldung: Can’t locate Net/Telnet.pm in @INC (you may need to install the Net::Telnet module) lässt sich ohne mit der Wimper zu zucken, schnell so beheben:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/perl.jpg" /><media:content medium="image" url="https://www.x-tra-designs.org/perl.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Basic: ein einfaches Ski-Spiel für den Commodore 64 etc.</title><link href="https://www.x-tra-designs.org/simple-commodore-basic-ski-game-2025.html" rel="alternate" type="text/html" title="Basic: ein einfaches Ski-Spiel für den Commodore 64 etc." /><published>2025-09-06T15:37:00+02:00</published><updated>2025-09-06T15:37:00+02:00</updated><id>https://www.x-tra-designs.org/simple-commodore-basic-ski-game</id><content type="html" xml:base="https://www.x-tra-designs.org/simple-commodore-basic-ski-game-2025.html"><![CDATA[<p>Ich habe mich an ein einfaches Ski-Spiel in Basic erinnert, dass wird damals(tm) im Informatik-Unterricht gespielt haben, wahrscheinlich auf dem CBM-4032. Ich habe es schnell nachprogrammiert, sollte auf allen Commodore-Rechnern mit 40 Zeichen Bildschrirm laufen, ist aber auch einfach für den VC-20 anpassbar.
<br /><br /></p>

<ul>
  <li>Beispiel-Spielverlauf</li>
</ul>

<p><img src="/postimg/basic-ski.png" alt="basic-ski" /></p>

<p><br /></p>
<ul>
  <li>Steuerung</li>
</ul>

<p>Taste A und D bewegen den Skifahrer links/rechts.</p>

<p>Alle 25 Zeilen wird die Piste schmaler, von zuerst 10 bis maximal 5. Der Pistenrand erscheint dann kurz invers.</p>

<p><br /></p>
<ul>
  <li>Basic-Listing</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>4 rem ===
5 rem === ski by chrissie 08.2025 ===
6 rem ===
10 print chr$(147)
15 a=rnd(-ti) : rem zufallsgenerator initialisieren
20 x=10 : rem position spieler
25 a=6  : rem linker pfosten
30 sc=0 : rem score
40 w=10 : rem breite der piste
45 p$="x"
50 print "steuerung: a=links, d=rechts"
60 rem for i=1 to 20 : print : next
80 s$="                                       "
100 rem ===== mainloop =====
110 z=int(rnd(1)*3)-1 : rem  -1 / 0 / -1
115 a=a+z
116 if a &lt; 2 then a = 2
117 if a &gt; 38 then a = 38
130 get k$:if k$="a" and x&gt;2 then x=x-1
140 if k$="d" and x&lt;38 then x=x+1
150 l1$=left$(s$,a-1)+p$+left$(s$,w)+p$
155 p$="x"
160 l$=left$(l1$,x) + "*"+mid$(l1$,x+1)
170 print l$
180 if x&lt;a or x&gt;a+w then goto 300
190 sc = sc+1
200 if int(sc/25) * 25 = sc and w &gt; 4 then w=w-1:p$="{rvon}x{rvof}"
210 goto 110
295 rem ===== Ende ==
300 print : print "crash! game over!"
310 print "end-score:";sc
320 end
</code></pre></div></div>

<ul>
  <li>Makefile</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ski.prg: ski.bas
    petcat -w2 -o ski.prg -- ski.bas
    x64sc ski.prg
</code></pre></div></div>

<ul>
  <li>Download .prg</li>
</ul>

<p><a href="/files/ski.prg">Download prg</a></p>

<p><br /></p>
<ul>
  <li>Links</li>
</ul>

<p><a href="https://techtinkering.com/articles/tokenize-detokenize-commodore-basic-programs-using-petcat/">https://techtinkering.com/articles/tokenize-detokenize-commodore-basic-programs-using-petcat/</a></p>]]></content><author><name>Chrissie Brown</name></author><category term="commodore" /><category term="baseic" /><summary type="html"><![CDATA[Ich habe mich an ein einfaches Ski-Spiel in Basic erinnert, dass wird damals(tm) im Informatik-Unterricht gespielt haben, wahrscheinlich auf dem CBM-4032. Ich habe es schnell nachprogrammiert, sollte auf allen Commodore-Rechnern mit 40 Zeichen Bildschrirm laufen, ist aber auch einfach für den VC-20 anpassbar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/basic.jpg" /><media:content medium="image" url="https://www.x-tra-designs.org/basic.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Postfix: Sender-IP und Username in der E-Mail verstecken</title><link href="https://www.x-tra-designs.org/postfix-hide-sender-ip-and-username-2025.html" rel="alternate" type="text/html" title="Postfix: Sender-IP und Username in der E-Mail verstecken" /><published>2025-04-10T15:37:00+02:00</published><updated>2025-04-10T15:37:00+02:00</updated><id>https://www.x-tra-designs.org/postfix-hide-sender-ip-and-username</id><content type="html" xml:base="https://www.x-tra-designs.org/postfix-hide-sender-ip-and-username-2025.html"><![CDATA[<p>Per default steht der Username und die IP-Adresse des Senders in der E-Mail. Dieses kann man auch verstecken, da diese Information fü Attacken missbraucht wird.</p>

<p><br /><br /></p>

<ul>
  <li>konkrete Attacke im Maillog</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Jan 27 00:10:21 myserver dovecot[87032]: auth-worker(73776): conn unix:auth-worker (uid=143): auth-worker&lt;1&gt;: sql(XtraExterminator,111.xx.xx.xx): Password mismatch
Jan 27 00:10:23 myserver postfix/submission/smtpd[73774]: warning: 111-xx-xx-xx.emome-ip.xx.net[111.xx.xx.xx]: SASL PLAIN authentication failed: (reason unavailable), sasl_username=XtraExterminator
</code></pre></div></div>

<ul>
  <li>Header einer Mail mit dieser Information: Feld Authenticated sender</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[...]
Received: from [10.1.1.100] (pdxxxx.dip0.t-ipconnect.de [217.xxx.xxx.xxx])
        (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
         key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
        (No client certificate requested)
        (Authenticated sender: XtraExterminator)
        by myserver.de (Postfix) with ESMTPSA id 3898248D893
        for &lt;chris.b@example.com&gt;; Sat, 25 Jan 2025 11:44:17 +0100 (CET)
[...]
</code></pre></div></div>
<ul>
  <li>Abhilfe: (Danke, askubuntu.com)</li>
</ul>

<p>The standard solution is to use the header_checks option. This will work, however, if we filter received lines on all mail both incoming and outgoing (as this will do), we could potentially lose Received headers on mail sent to us, which can be important for troubleshooting. To get around this problem, we will apply the header_checks only to the mail that could not possibly have been sent to us-mail that was sent to the submission port (you are using the submission port, aren’t you?).</p>

<p>What we need to do is pass the cleanup_service_name option to the submission service so that we can set up a new cleanup service, “subcleanup.” The relevant section of /etc/postfix/master.cf might look like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o cleanup_service_name=subcleanup
</code></pre></div></div>

<p>Now we can pass the header_checks option to the new cleanup service. That part of /etc/postfix/master.cf might look like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cleanup   unix  n       -       -       -       0       cleanup
subcleanup unix n       -       -       -       0       cleanup
  -o header_checks=regexp:/etc/postfix/submission_header_checks
</code></pre></div></div>

<p>Finally, we need to create the file /etc/postfix/submission_header_checks, which will contain the regex that filters offending Received header lines. Which regex you put in the file depends on whether you have smtpd_sasl_authenticated_header set.</p>

<p>If smtpd_sasl_authenticated_header is yes, then use:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/^Received:.*\(Authenticated sender:/ IGNORE
</code></pre></div></div>

<p>Otherwise, use:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/^Received:.*\(Postfix/ IGNORE
</code></pre></div></div>

<ul>
  <li>Nun wird diese Information versteckt</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[...]
Received: from myserver.de (81.xx.xx.xx by
 DBxxxx.mail.protection.outlook.com (10.xx.xx.xx) with Microsoft
 SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.xx.xx.14
 via Frontend Transport; Mon, 27 Jan 2025 06:32:18 +0000
[...]
</code></pre></div></div>

<ul>
  <li>Es zeigte sich, dass dies leider nur begrenzt hilft.</li>
</ul>]]></content><author><name>Chrissie Brown</name></author><category term="postfix" /><category term="email" /><summary type="html"><![CDATA[Per default steht der Username und die IP-Adresse des Senders in der E-Mail. Dieses kann man auch verstecken, da diese Information fü Attacken missbraucht wird.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/postfix.png" /><media:content medium="image" url="https://www.x-tra-designs.org/postfix.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Global Switch Day</title><link href="https://www.x-tra-designs.org/global-switch-day-2025.html" rel="alternate" type="text/html" title="Global Switch Day" /><published>2025-02-02T08:55:00+01:00</published><updated>2025-02-02T08:55:00+01:00</updated><id>https://www.x-tra-designs.org/global-switch-day</id><content type="html" xml:base="https://www.x-tra-designs.org/global-switch-day-2025.html"><![CDATA[<p>Am 1. Februar 2025 war der “Global Switch Day”. Es wird z. B. aufgefordert, von den großen Plattformen der Tech-Konzerne auf unabhängige, freie Alternativen zu wechseln.</p>

<p><br /></p>

<p>Folgendes wird oft vorgeschlagen:</p>

<p><br /></p>

<ul>
  <li>X (Twitter) → Mastodon</li>
  <li>Instagram → Pixelfed</li>
  <li>WhatsApp → Signal / Matrix</li>
  <li>Facebook → Friendica</li>
  <li>YouTube → Peer Tube</li>
  <li>TikTok → Looks.video</li>
</ul>

<p><br /></p>

<p>Ein Hinweis an der Stelle: Mastodon, Pixelfed, Friendica implementieren alle das ActivityPub-Protokoll im Fediverse. Theoretisch reicht ein Account bei einer dieser Plattformen aus, um auch die Nachrichten aller anderen zu empfangen.</p>

<p><br /></p>

<p>Mir geht das aber nicht weit genug, ich empfehle zusätzlich folgendes zu switchen:</p>

<p><br /></p>

<ul>
  <li>Indesign → Affinity Publisher</li>
  <li>Affinity Publisher → Scribus</li>
  <li>Photoshop → Affinity Photo</li>
  <li>Affinity Photo → Gimp</li>
  <li>Microsoft Office → Softmaker Office</li>
  <li>Softmaker Office → Troff / LaTeX</li>
  <li>Internet Explorer → Firefox</li>
  <li>Firefox → w3m</li>
  <li>Windows → Linux Mint / Debian Linux</li>
  <li>Debian Linux → Gentoo Linux</li>
  <li>Gentoo Linux → FreeBSD</li>
  <li>MS Code Editor → Notepad++</li>
  <li>Notepad++ → Vim</li>
  <li>Typo3 → Wordpress</li>
  <li>Wordpress → Jekyll Static Site Generator</li>
</ul>]]></content><author><name>Chrissie Brown</name></author><category term="Free" /><category term="Software" /><summary type="html"><![CDATA[Am 1. Februar 2025 war der “Global Switch Day”. Es wird z. B. aufgefordert, von den großen Plattformen der Tech-Konzerne auf unabhängige, freie Alternativen zu wechseln.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/zahnraeder.png" /><media:content medium="image" url="https://www.x-tra-designs.org/zahnraeder.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Linux: das Dateidatum von Bildern auf die EXIF-Aufnahmezeit setzen</title><link href="https://www.x-tra-designs.org/exiftool-filedate-2025.html" rel="alternate" type="text/html" title="Linux: das Dateidatum von Bildern auf die EXIF-Aufnahmezeit setzen" /><published>2025-01-20T08:55:00+01:00</published><updated>2025-01-20T08:55:00+01:00</updated><id>https://www.x-tra-designs.org/exiftool-filedate</id><content type="html" xml:base="https://www.x-tra-designs.org/exiftool-filedate-2025.html"><![CDATA[<p>Oft will man das Dateidatum gleich mit dem EXIF-Aufnahmedatum setzen. Z. B. die Anzeige “Photos” in der beliebten Nextcloud kommt aus dem Tritt, wenn dies abweicht.</p>

<p><br /></p>

<ul>
  <li>Mit dem Programm exiftool kann man den Zeitstempel auslesen und als Zeitstempel der Datei erneut setzenl
    <ul>
      <li>für ein Bild</li>
    </ul>
  </li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exiftool '-DateTimeOriginal&gt;FileModifyDate' picture.jpg
</code></pre></div></div>

<ul>
  <li>für alle Bilder im aktuellen Verzeichnis</li>
  <li>soll es auch in Unterverzeichnissen angewandt werden, zusätzlich die Option -r angeben</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exiftool '-DateTimeOriginal&gt;FileModifyDate' .
</code></pre></div></div>

<ul>
  <li>kontrollieren des Ergebnisses</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exiftool IMG_6295.JPG | grep -i date
</code></pre></div></div>

<ul>
  <li>sollte eine Datei wider Erwarten keine EXIF-Datums-Information haben, kann man so eine setzen:</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>exiftool -CreateDate="2015:18:01 12:00:00+01:00" -Overwrite_Original IMG_6295.JPG
exiftool -DateTimeOriginal="2015:18:01 12:00:00+01:00" -Overwrite_Original IMG_6295.JPG
</code></pre></div></div>

<p>HTH!</p>]]></content><author><name>Chrissie Brown</name></author><category term="Linux," /><category term="FreeBSD" /><summary type="html"><![CDATA[Oft will man das Dateidatum gleich mit dem EXIF-Aufnahmedatum setzen. Z. B. die Anzeige “Photos” in der beliebten Nextcloud kommt aus dem Tritt, wenn dies abweicht.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/linux.jpg" /><media:content medium="image" url="https://www.x-tra-designs.org/linux.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Gentoo Linux: Anzahl der LLVM-Targets reduzieren</title><link href="https://www.x-tra-designs.org/gentoo-llvm-targets-2025.html" rel="alternate" type="text/html" title="Gentoo Linux: Anzahl der LLVM-Targets reduzieren" /><published>2025-01-13T08:55:00+01:00</published><updated>2025-01-13T08:55:00+01:00</updated><id>https://www.x-tra-designs.org/gentoo-llvm-targets</id><content type="html" xml:base="https://www.x-tra-designs.org/gentoo-llvm-targets-2025.html"><![CDATA[<p>Mann kann die Anzahl der LLVM-Targets bei Gentoo reduzieren, um die Compile-Time zu beschleunigen.</p>

<p><br /></p>

<ul>
  <li>Diese Datei erstellen:</li>
  <li>/etc/portage/profile/use.force</li>
  <li>Inhalt (Beispiel!)</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-llvm_targets_AArch64 
-llvm_targets_AMDGPU 
-llvm_targets_ARM 
-llvm_targets_AVR 
-llvm_targets_BPF 
-llvm_targets_Hexagon 
-llvm_targets_Lanai 
-llvm_targets_MSP430 
-llvm_targets_Mips 
-llvm_targets_NVPTX 
-llvm_targets_PowerPC 
-llvm_targets_RISCV 
-llvm_targets_Sparc 
-llvm_targets_SystemZ 
#-llvm_targets_WebAssembly 
#-llvm_targets_X86 
-llvm_targets_XCore 
-llvm_targets_ARC 
-llvm_targets_CSKY 
-llvm_targets_M68k 
-llvm_targets_VE 
</code></pre></div></div>

<ul>
  <li>das erwartete Ergebnis :)</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>emerge --pretend =llvm-core/clang-18*

[ebuild  N     ] llvm-core/clang-18.1.8-r6  USE="extra (pie) static-analyzer xml -debug -doc (-ieee-long- ouble) -test -verify-sig" ABI_X86="(64) -32 (-x32)" LLVM_TARGETS="AMDGPU BPF (LoongArch) NVPTX (WebAssemb y) (X86) -AArch64 -ARC -ARM -AVR -CSKY -DirectX -Hexagon -Lanai -M68k -MSP430 -Mips -PowerPC -RISCV -SPIR  -Sparc -SystemZ -VE -XCore -Xtensa" PYTHON_SINGLE_TARGET="python3_12 -python3_10 -python3_11 -python3_13

[...]
</code></pre></div></div>]]></content><author><name>Chrissie Brown</name></author><category term="Linux," /><category term="Gentoo" /><summary type="html"><![CDATA[Mann kann die Anzahl der LLVM-Targets bei Gentoo reduzieren, um die Compile-Time zu beschleunigen.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/gentoo.jpg" /><media:content medium="image" url="https://www.x-tra-designs.org/gentoo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="de"><title type="html">Export mit Ovftool: Error: Failed to open disk: …vmdk</title><link href="https://www.x-tra-designs.org/ovftool-failed-to-open-disk-2025.html" rel="alternate" type="text/html" title="Export mit Ovftool: Error: Failed to open disk: …vmdk" /><published>2025-01-03T08:55:00+01:00</published><updated>2025-01-03T08:55:00+01:00</updated><id>https://www.x-tra-designs.org/ovftool-failed-to-open-disk</id><content type="html" xml:base="https://www.x-tra-designs.org/ovftool-failed-to-open-disk-2025.html"><![CDATA[<p>Folgender Fehler kann einen in den Wahnsinn treiben:<br />
<b>Ovftool: Error: Failed to open disk: …vmdk … Completed with errors</b></p>

<p><br /></p>

<p>Dabei ist der Grund manchmal ganz einfach: Neben Tippfehlern, die immer kontrolliert werden sollten, ist zwingend die virtuelle Maschine im VMWare Player auszuschalten. Nur in diesem Zustand kann zu ovf exportiert werden!</p>

<p><br /></p>

<p><img src="/postimg/vmware-ovf1.png" alt="ovf1" /></p>

<p><em>ovftool, einmal mit Fehler, einmal funktionierend</em></p>

<p><br /></p>

<p><img src="/postimg/vmware-ovf2.png" alt="ovf1" /></p>

<p><em>Kontrollieren bzw. Ausschalten der virtuellen Maschine</em></p>]]></content><author><name>Chrissie Brown</name></author><category term="Linux," /><category term="Windows," /><category term="Server," /><category term="VMWare" /><summary type="html"><![CDATA[Folgender Fehler kann einen in den Wahnsinn treiben: Ovftool: Error: Failed to open disk: …vmdk … Completed with errors]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.x-tra-designs.org/vmware.png" /><media:content medium="image" url="https://www.x-tra-designs.org/vmware.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>