Jekyll2019-01-02T19:32:15+01:00https://blog.timschroeder.net/feed.xmlblog.timschroeder.netTragt ihn raus. Schafft ihn weg.Schund und Sühne2019-01-02T18:00:00+01:002019-01-02T18:00:00+01:00https://blog.timschroeder.net/2019/01/02/schund-und-suehne<p>Wer uns Klassiker wie “Heftromane schreiben und veröffentlichen” und “Als die Omma den Huren noch Taubensuppe kochte” gebracht hat, von dem liest man auch über Schund und Sühne. Ab dem 31. Januar 2019.</p>TimWer uns Klassiker wie “Heftromane schreiben und veröffentlichen” und “Als die Omma den Huren noch Taubensuppe kochte” gebracht hat, von dem liest man auch über Schund und Sühne. Ab dem 31. Januar 2019.Bestseller berechnen2019-01-01T18:00:00+01:002019-01-01T18:00:00+01:00https://blog.timschroeder.net/2019/01/01/bestseller-berechnen<p>Die Süddeutsche Zeitung berichtet über ein Hamburger Start-up-Unternehmen, das automatisiert ausrechnet, mit welcher Wahrscheinlichkeit ein literarischer Text ein Bestseller werden wird. In der SZ wird die Gründerin mit einer Trefferquote von 77% zitiert, im April 2018 waren es noch nur <a href="https://www.igdigital.de/wp-content/uploads/2018/04/QualiFiction_PitchDeck.pdf">70,3%</a>, im Oktober 2017 waren es auch schon mal <a href="https://www.boersenblatt.net/artikel-die_sonntagsfrage.1378618.html">80%</a>.</p>
<p>Erstens: Die Trefferquote überzeugt mich nicht, solange ich nicht mehr Details kenne. Wenn ich 1000 Texte analysiere, von denen 800 tatsächlich Bestseller waren, erreiche ich 80% Trefferquote schon dann, wenn ich einfach alle Texte als Bestseller bewerte.</p>
<p>Zweitens: Ich glaube schon, dass automatisierte Textanalysen Korrelationen zwischen Textstruktur und kommerziellem Erfolg offenlegen können. Ich glaube aber nicht, dass es jenseits der Bedürfnisse einzelner Autorinnen und Autoren einen Markt dafür gibt, zumal nicht im Verlagssektor. Eine Lektorin oder ein Lektor wird nach Durchsicht der ersten paar Seiten eines Manuskripts beurteilen können, ob der Text etwas taugt. Eine Fehlerquote wird es geben, aber die hat der Algorithmus auch.</p>
<p>Weiterführend:</p>
<ul>
<li>Wie so eine Textanalyse praktisch funktioniert, zeigt <a href="http://www.archerjockers.com/">die Konkurrenz</a>.</li>
<li>Die hat auch <a href="https://static1.squarespace.com/static/5648bac6e4b0e1362b34c0e7/t/5b23f46803ce6488fcbf3d76/1529082989786/Big_Apple_Strippers_Alexandra_Velika.pdf">ein Beispiel</a> veröffentlicht.</li>
<li>Der New Yorker meint: <a href="https://www.newyorker.com/books/page-turner/the-bestseller-code-tells-us-what-we-already-know">“The Bestseller Code” Tells Us What We Already Know</a></li>
</ul>
<p><img src="/images/2019/01/grosses-versprechen.jpg" alt="Großes Versprechen" /></p>TimDie Süddeutsche Zeitung berichtet über ein Hamburger Start-up-Unternehmen, das automatisiert ausrechnet, mit welcher Wahrscheinlichkeit ein literarischer Text ein Bestseller werden wird. In der SZ wird die Gründerin mit einer Trefferquote von 77% zitiert, im April 2018 waren es noch nur 70,3%, im Oktober 2017 waren es auch schon mal 80%.Lens Shift2018-12-16T17:00:00+01:002018-12-16T17:00:00+01:00https://blog.timschroeder.net/2018/12/16/lens-shift<p><img src="/images/2018/12/lens-shift.jpg" alt="Lens Shift" /></p>TimWinterkorrelationen2018-12-16T15:00:00+01:002018-12-16T15:00:00+01:00https://blog.timschroeder.net/2018/12/16/winterkorrelationen<p>Die Frankfurter Allgemeine Sonntagszeitung berichtet heute auf S. 64 darüber, wie Korrelationen (“Telekonnektionen”) meteorologischer Ereignisse die Wettervorhersage verbessern.</p>
<p><img src="/images/2018/12/telekonnektionen.jpg" alt="Telekonnektionen" /></p>TimDie Frankfurter Allgemeine Sonntagszeitung berichtet heute auf S. 64 darüber, wie Korrelationen (“Telekonnektionen”) meteorologischer Ereignisse die Wettervorhersage verbessern.AGB auf GitHub2018-12-16T02:00:00+01:002018-12-16T02:00:00+01:00https://blog.timschroeder.net/2018/12/16/agb-auf-github<p>Ich bin davon überzeugt, dass es sinnvoll ist, rechtliche Texte in Versionskontrollsystemen zu verwalten. Basecamp hat angekündigt, alle seine Vertragsbedingungen in GitHub zu veröffentlichen und zu pflegen.</p>TimIch bin davon überzeugt, dass es sinnvoll ist, rechtliche Texte in Versionskontrollsystemen zu verwalten. Basecamp hat angekündigt, alle seine Vertragsbedingungen in GitHub zu veröffentlichen und zu pflegen.Docker VPS2018-12-15T00:00:00+01:002018-12-15T00:00:00+01:00https://blog.timschroeder.net/2018/12/15/docker-vps<p>Wie üblich: Es ist offensichtlich, sobald man es weiß: Virtuelle Serverlösungen (VPS) sind virtualisiert, und darum kann es Einschränkungen dabei geben, in ihnen Virtualisierungssoftware wie Docker einzusetzen. Große deutsche Anbieter wie Strato und <a href="https://www.hosteurope.de/faq/server/virtual-server/unterschied-virtual-server-dedicated-server/">HostEurope</a> unterstützen Docker in ihren VPS-Angeboten nicht. <a href="https://contabo.com/?show=vps">Andere Anbieter</a> nutzen KVM zur Virtualisierung und da funktioniert Docker.</p>TimWie üblich: Es ist offensichtlich, sobald man es weiß: Virtuelle Serverlösungen (VPS) sind virtualisiert, und darum kann es Einschränkungen dabei geben, in ihnen Virtualisierungssoftware wie Docker einzusetzen. Große deutsche Anbieter wie Strato und HostEurope unterstützen Docker in ihren VPS-Angeboten nicht. Andere Anbieter nutzen KVM zur Virtualisierung und da funktioniert Docker.VMware kryptisch2018-02-17T00:00:00+01:002018-02-17T00:00:00+01:00https://blog.timschroeder.net/2018/02/17/vmware-kryptisch<p>Seufz. Nach einem Kernel-Update auf 4.15 startet VMware nicht mehr. Über meine Schwierigkeiten mit VMware nach Kernel-Updates <a href="/2018/01/13/config-stack-validation/">hatte ich ja bereits einmal berichtet</a>. Notgedrungen fange ich an, das Problem zu analysieren. Dieses Mal sind die Fehlermeldungen besonders kryptisch. Eher durch Zufall kriege ich VMware wieder zum Laufen.</p>
<p>Der grafische Updater von VMware, der nach jedem Kernel-Upgrade anspringt und manchmal funktioniert, tut es diesmal nicht, sondern sagt:</p>
<blockquote>
<p>Unable to stop services</p>
</blockquote>
<p>Das Log-File enthält Einträge, die mit der Vorbereitung der beiden Kernel-Module, vmmon und vmnet, zu tun haben, und bricht so ab:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Invoking modinfo on "vmmon".
"/sbin/modinfo" exited with status 256.
Invoking modinfo on "vmnet".
"/sbin/modinfo" exited with status 256.
</code></pre></div></div>
<p>Status 256 ist eigentlich Status 1, also ein allgemeiner Fehler-Code. Offenbar sind die Kernel-Module nicht geladen, aber das ist nach einem Kernel-Update eigentlich immer so, denke ich.</p>
<p>Probiere ich das in der Kommandozeile mit <code class="highlighter-rouge">sudo vmware-modconfig --console --install-all</code> aus, ist es ähnlich krpytisch:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[AppLoader] GLib does not have GSettings support.
Stopping VMware services:
VMware Authentication Daemon done
VM communication interface socket family failed
Virtual machine communication interface done
Virtual machine monitor done
Blocking file system done
Unable to stop services
</code></pre></div></div>
<p>Ich klaube mir die Kernel-Module aus ihren Tar-Archiven, die in <code class="highlighter-rouge">/usr/lib/vmware/modules/sources</code> liegen, und versuche, sie mit <code class="highlighter-rouge">insmod</code> einzufügen. Das klappt nicht:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>insmod: ERROR: could not insert module vmmon.ko: Invalid module format
</code></pre></div></div>
<p>Ich kompiliere die Kernel-Module neu und schiebe die kompilierten Module nach <code class="highlighter-rouge">/lib/modules/4.15.3-53.current/misc</code>. Ein <code class="highlighter-rouge">sudo depmod -a</code> und einen Neustart später funktioniert es dann wieder. Das ist wohl ein Fehler in <code class="highlighter-rouge">vmware-modconfig</code>, das irgendwie durcheinander kommt.</p>TimSeufz. Nach einem Kernel-Update auf 4.15 startet VMware nicht mehr. Über meine Schwierigkeiten mit VMware nach Kernel-Updates hatte ich ja bereits einmal berichtet. Notgedrungen fange ich an, das Problem zu analysieren. Dieses Mal sind die Fehlermeldungen besonders kryptisch. Eher durch Zufall kriege ich VMware wieder zum Laufen.Solus-Paket-Architektur2018-02-16T00:00:00+01:002018-02-16T00:00:00+01:00https://blog.timschroeder.net/2018/02/16/solus-paket-architektur<p>Hah. Kaum fange ich an, mich mich der Paketverwaltung von Solus zu beschäftigen, und kaum habe ich das ansatzweise verstanden, wird im Blog des Solus-Projekts ein exzellenter Artikel veröffentlicht, der sich genau mit diesem Thema beschäftigt.</p>
<p>Der Artikel zeichnet weniger die Details als vielmehr die großen Linien nach, was mir entgegen kommt: Das Verständnis der Zusammenhänge fällt mir am schwersten. Gleichzeitig streift der Artikel genügend Mosaiksteine, die ich noch nicht kann oder noch nicht verstanden habe.</p>
<p><a href="https://solus-project.com/2018/02/15/exploring-solus-architecture/">Hier lesen</a>.</p>TimHah. Kaum fange ich an, mich mich der Paketverwaltung von Solus zu beschäftigen, und kaum habe ich das ansatzweise verstanden, wird im Blog des Solus-Projekts ein exzellenter Artikel veröffentlicht, der sich genau mit diesem Thema beschäftigt.Pakete erzeugen in Solus2018-02-14T00:00:00+01:002018-02-14T00:00:00+01:00https://blog.timschroeder.net/2018/02/14/pakete-erzeugen-in-solus<p>Im zweite Teil meiner Recherche (dieser Beitrag) habe ich rausgekriegt, wie ich in Solus Software-Pakete erzeugen kann. Im Prinzip ist es alles einfach, sobald man das mit den Software-Paketen einmal verstanden hat. Für mich war es eine gewisse Lernkurve.</p>
<p>Also: Ein Software-Paket ist in Solus eine Datei mit .eopkg-Endung, letztlich eine Archiv-Datei. .eopkg-Pakete sind strukturell nicht viel anders als Debians .deb-Pakete. Ein solches Paket enthält genau die Software, die auf dem Zielsystem installiert werden muss. Das sind in der Regel binäre Programm-Dateien, ggf. mit Konfigurationsdateien. Das können aber auch Bash-Skripte, Python-Skripte usw. sein, wenn denn das die Software ist. Pakete generiert man in Solus auf verschiedene Weisen:</p>
<ul>
<li>mit solbuild;</li>
<li>mit eopkg;</li>
<li>mit ypkg und ypk-build.</li>
</ul>
<h2 id="solbuild">solbuild</h2>
<p>Vorzugsweise soll ich <a href="https://github.com/solus-project/solbuild">solbuild</a> verwenden. solbuild erwartet den Quelltext eines Programms als tar-Archiv und erzeugt nach Maßgabe einer Steuerungs- und Konfigurationsdatei namens <a href="https://solus-project.com/articles/packaging/package.yml/en/">package.yml</a> ein eopkg-Paket aus dem tar-Archiv. Das ist im Detail ein wenig kompliziert, aber <a href="https://solus-project.com/articles/packaging/">gut</a> erklärt. Ich muss also solbuild installieren, meine Software als tar-Archiv mit einer package.yml-Datei vorbereiten und schon habe ich ein eopkg-Paket.</p>
<p>solbuild verwendet ein Image eines Solus-Basis-Systems, das in einer <a href="https://wiki.ubuntuusers.de/Archiv/chroot-jail/">chroot-Umgebung</a> ausgeführt wird. Das ist gut, weil dadurch eine ‘saubere’ Build-Umgebung vorhanden ist und etwaige lokale Besonderheiten des Systems, auf dem ich solbuild ausführe, unberücksichtigt bleiben. Das garantiert, dass das erzeugte Paket später auch auf allen anderen Solus-Systemen installiert werden kann. Gut ist auch, dass man nicht unbedingt Solus braucht, um mit solbuild zu arbeiten, sondern dass solbuild auch auf anderen Linux-Systemen laufen kann.</p>
<p>Da eine chroot-Umgebung aber nur ein klein wenig von dem System abstrahiert, in dem sie ausgeführt wird, muss das System, auf dem solbuild läuft, dieselbe Systemarchitektur haben, die Solus voraussetzt. Andernfalls würde bereits das Solus-Image, das verwendet wird, nicht ausführbar sein. Das bedeutet praktisch, dass ich solbuild nicht auf einem Raspberry Pi ausführen kann, weil der keine x86-Architektur hat und in aller Regel mit 32 Bit betrieben wird.</p>
<h2 id="ypkg-und-ypk-build">ypkg und ypk-build</h2>
<p><a href="https://github.com/solus-project/ypkg">ypkg</a> (und darüber indirekt ypkg-build) soll ich laut der Man-Page von ypkg nicht verwenden:</p>
<blockquote>
<p>Note that you should not use ypkg(1) directly unless completely unavoidable. Instead, you should be using solbuild(1) for isolated build environments.</p>
</blockquote>
<h2 id="eopkg">eopkg</h2>
<p>Das Generieren von eopkg-Paketen mit eopkg ist, wenn ich das richtig verstehe, ein historisches Überbleibsel aus früheren Zeiten. Dieser Weg wird verwendet, wenn eopkg-Pakete aus Software erzeugt werden sollen, <a href="https://solus-project.com/articles/software/third-party/en/">die nicht als Quelltext vorliegen</a>. Pro Paket gibt es eine XML-Datei und meistens auch eine Python-Datei, die die package.yml-Datei der eopkg-Pakete ersetzen. Dieser Weg soll durch Snaps/Flatpaks/wasauchimmer ersetzt werden, ist also nicht besonders zukunftssicher.</p>
<p>Ich installiere also jetzt mal solbuild auf meinem Zenbook und versuche, eines meiner einfachen Projekte in eine eopkg-Datei zu verwandeln. Ich werde berichten.</p>TimIm zweite Teil meiner Recherche (dieser Beitrag) habe ich rausgekriegt, wie ich in Solus Software-Pakete erzeugen kann. Im Prinzip ist es alles einfach, sobald man das mit den Software-Paketen einmal verstanden hat. Für mich war es eine gewisse Lernkurve.Pakete ausliefern in Solus2018-02-07T00:00:00+01:002018-02-07T00:00:00+01:00https://blog.timschroeder.net/2018/02/07/pakete-ausliefern-in-solus<p>Ich beginne mein Unterfangen mit einer Recherche, wie das mit der Paketverwaltung in Solus im Detail funktioniert. Mir ist klar, dass ich zwei Komponenten des Systems verstehen muss: Zum einen muss ich in der Lage sein, Pakete zusammenzustellen, zum anderen muss ich meine Pakete so bereitstellen, dass die Paketverwaltung von Solus sie erkennt. Ich beginne mit dem zweiten Teil und schaue mir an, wie Pakete in Solus verteilt werden.</p>
<h2 id="eopkg">eopkg</h2>
<p><code class="highlighter-rouge">eopkg</code> ist das Kommandozeilen-Tool für die Paketverwaltung in Solus. Es zeigt mir mit dem Befehl <code class="highlighter-rouge">eopkg list-repo</code> das eine Standard-Repository<sup id="fnref:1"><a href="#fn:1" class="footnote">1</a></sup> an, über das Solus aktualisiert wird:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>https://packages.solus-project.com/shannon/eopkg-index.xml.xz
</code></pre></div></div>
<p><a href="https://github.com/solus-project/package-management">eopkg</a> ist in Python implementiert und soll durch <a href="https://github.com/solus-project/sol">sol</a> ersetzt werden, das ist aber wohl noch nicht so weit. Ich kann <a href="https://solus-project.com/articles/package-management/repo-management/en/">zusätzliche Repositories zu eopkg hinzufügen</a>. Gut. eopkg kann auch mit Repositories umgehen, die einen Zugriffsschutz in Form einer HTTP-Authentifizierung haben. Gut. Allerdings muss ich die <a href="https://github.com/solus-project/package-management/blob/master/pisi/cli/command.py">Zugangsdaten immer als Parameter mitgeben</a>. Nicht gut.</p>
<h2 id="software-center">Software-Center</h2>
<p>In der GUI gibt es mit dem <a href="https://github.com/solus-project/solus-sc">Software-Center</a> auch eine grafische Oberfläche. Wenn ich zu eopkg zusätzliche Repositories hinzufüge, sind die dann, wenn ich das richtig verstehe, auch im Software-Center verfügbar. Wenn ich nichts übersehen habe, kann das Software-Center nicht mit so etwas wie HTTP-Authentifizierung umgehen. Nicht gut.</p>
<h2 id="appstream">appstream</h2>
<p>Im Software-Center werden bestimmte Pakete hübscher angezeigt als andere Pakete, nämlich mit einem schönen Icon und Vorschaubildern. Diese Metadaten kommen nicht aus den jeweiligen Paketen, sondern sind Teil einer separaten Informationsquelle namens <a href="https://dev.solus-project.com/source/solus-appstream-data/">appstream</a><sup id="fnref:2"><a href="#fn:2" class="footnote">2</a></sup>. Das ignoriere ich mal im Folgenden.</p>
<h2 id="ferryd">ferryd</h2>
<p>Das Solus-Projekt benutzt server-seitig zur Generierung des Paket-Repositories <a href="https://github.com/solus-project/ferryd">ferryd</a>. Das ist ein Dienst, der <a href="https://solus-project.com/2017/10/06/accelerated-cadence-and-faster-infrastructure/">seit Herbst 2017 in Betrieb ist</a> und aus hochgeladenen Paketen das offizielle Repository erzeugt. Das hört sich schon mal relevant an.</p>
<p>Allerdings will ich vermeiden, einen eigenen Server für meine paar Pakete aufzusetzen. Stattdessen würde ich das Repository gerne nur bei Bedarf neu generieren und dann statisch hosten. Hier muss ich mir etwas überlegen.</p>
<div class="footnotes">
<ol>
<li id="fn:1">
<p>Im Software-Center sind einige Third-Party-Apps verfügbar, die nicht über das offizielle Solus-Repository ausgeliefert werden, siehe <a href="https://solus-project.com/articles/software/third-party/en/">hier</a> und <a href="https://github.com/solus-project/3rd-party">hier</a>. Das ist mehr oder weniger hart im Quelltext des Software-Centers kodiert. <a href="#fnref:1" class="reversefootnote">↩</a></p>
</li>
<li id="fn:2">
<p>Es gibt dann noch ein <a href="https://dev.solus-project.com/source/appstream-data/">ganz ähnliches Repository</a>, das aber nur Paket-Icons enthält. Nicht so ganz klar, wo der Unterschied ist. Für appstream gibt es die drei Kommandozeilen-Tools appstream-util, appstream-builder und appstream-compose. <a href="#fnref:2" class="reversefootnote">↩</a></p>
</li>
</ol>
</div>TimIch beginne mein Unterfangen mit einer Recherche, wie das mit der Paketverwaltung in Solus im Detail funktioniert. Mir ist klar, dass ich zwei Komponenten des Systems verstehen muss: Zum einen muss ich in der Lage sein, Pakete zusammenzustellen, zum anderen muss ich meine Pakete so bereitstellen, dass die Paketverwaltung von Solus sie erkennt. Ich beginne mit dem zweiten Teil und schaue mir an, wie Pakete in Solus verteilt werden.