planet.debianforum.de

der Planet der debianforum.de-Benutzer

Zum Inhalt


 
 
 

07.09.2026

Joerg Kastning (Tronde)

RHEL CVE Monitor für arme Admins

User Story: Als RHEL-Systemadministrator:in möchte ich für einige ausgewählte Kompontenten, wie z.B. kernel, openssl oder samba, über neue CVE für diese Komponenten informiert werden. Leider steht mir dazu keine Schwachstellenmanagementlösung zur Verfügung. Einen Red Hat Satellite Server habe ich nicht und den Vulnerability Service in der Hybrid Cloud Console kann bzw. darf ich nicht nutzen.

Transparenzhinweis: Ich arbeite als TAM für Red Hat. Die im Folgenden vorgestellte Anwendung habe ich als Open-Source-Projekt unter MIT-Lizenz veröffentlicht. Es steht in keiner offiziellen Verbindung zu Red Hat.

RHEL CVE Monitor ist ein Python-Tool, das die Red Hat Security Data API regelmäßig abfragt und neue Sicherheitslücken (CVEs) für eine konfigurierbare Liste von RHEL-Paketen meldet.

Die zu überwachenden Pakete werden in packages.txt festgelegt (z. B. kernel, openssl, samba, rear). Beim ersten Lauf werden CVEs der letzten 30 Tage ausgegeben; danach zeigt das Tool nur noch neue Einträge seit dem letzten erfolgreichen Durchlauf. Bereits gemeldete CVEs werden in einer lokalen Zustandsdatei (.cve_monitor_state.json) gespeichert, damit nichts doppelt erscheint.

Die Ausgabe kann als Text, JSON oder CSV erfolgen und eignet sich für manuelle Prüfungen, Cron-Jobs oder systemd-Timer. Mit --exit-code lässt sich das Tool auch in CI/CD-Pipelines einbinden, die bei neuen CVEs alarmieren sollen.

Wie benutzt man das?

Der folgende Code-Block zeigt die CVE im RHEL-kernel der letzten 5 Tage:

[host.example.com rhel_cve_monitor]$ python3 rhel_cve_monitor.py --initial-days 4
=== kernel (1 new CVE) ===
  CVE-2026-80725       important    2026-08-29  https://access.redhat.com/security/cve/CVE-2026-80725

Total: 1 new CVE across 1 package

Die Ausgabe ist bewusst spartanisch gehalten. Man erhält lediglich die CVE-Nummer, die Severity, das Erscheinungsdatum und die URL zur Red Hat CVE Datenbank, wo man weitere Informationen zur Schwachstelle findet.

Verfügbare CLI-Optionen findet man in der Hilfe:

[host.example.com rhel_cve_monitor]$ python3 rhel_cve_monitor.py --help
usage: rhel_cve_monitor.py [-h] [--packages PACKAGES]
                           [--state-file STATE_FILE]
                           [--initial-days INITIAL_DAYS] [--output OUTPUT]
                           [--exit-code] [--verbose] [--dry-run]
                           [--format {text,json,csv}]
                           [--reset-packages PACKAGE [PACKAGE ...]]
                           [--reset-after YYYY-MM-DD]

Monitor Red Hat Security Data API for new CVEs affecting given RHEL packages.

options:
  -h, --help            show this help message and exit
  --packages PACKAGES   Path to file with one package name per line (default:
                        packages.txt)
  --state-file STATE_FILE
                        Path to state file tracking last run time (default:
                        .cve_monitor_state.json)
  --initial-days INITIAL_DAYS
                        On first run (no state file), look back this many days
                        (default: 30)
  --output OUTPUT       Optional file path to write the report to (in addition
                        to stdout)
  --exit-code           Exit with code 2 when new CVEs are found (useful for
                        CI/automation)
  --verbose, -v         Enable verbose logging
  --dry-run             Preview what would be queried without hitting the API
  --format {text,json,csv}
                        Output format: text (default), json, or csv
  --reset-packages PACKAGE [PACKAGE ...]
                        Clear seen-CVE state for these packages (use 'all' for
                        every package) and exit
  --reset-after YYYY-MM-DD
                        When resetting, also set last_run to this date so next
                        run queries from here

Mehr kann die kleine Anwendung nicht.

Und wo gibt es das?

Unter der URL: https://github.com/Tronde/rhel_cve_monitor

Das englischsprachige README enthält weitere Beispiele und Hinweise zur Nutzung.

Falls ihr diese kleine Anwendung nützlich findet, freue ich mich, wenn ihr mir hier im Blog einen Kommentar hinterlasst und eure Erfahrung weiterverbreitet. Wenn ihr Fehler findet oder Verbesserungsvorschläge habt, meldet diese bitte im GitHub-Issue-Tracker des Projekts.

von Jörg Kastning am 07.09.2026 05:00


29.08.2026

Bernd Dau (whisper)

MMO-2044 V2: Allianz-System – Gemeinsam gegen den Schwarm!

 

🚀 MMO-2044 V2 — Allianz-System ist da! 🚀

Wie wäre es, wenn du nicht allein gegen eine übermächtige Bedrohung kämpfst?

In MMO-2044 V2 schmiedest du jetzt Allianzen mit anderen Spielern, teilst Wissen und koordinierst Angriffe, denn nur gemeinsam können wir den Schwarm besiegen!

🆕 Neues Allianz-System:

  • Gründe deine eigene Allianz mit Name, Beschreibung und Motto
  • Lade Spieler ein oder trete öffentlichen Allianzen bei
  • Verwalte Mitglieder als Leader oder Officer
  • Teile Wissen – Allianz-Mitglieder sehen alle gemeinsamen Forschungen

🎯 In der nächsten Version kommen:

  • 🎯 Koordinierte Flottenangriffe (Synchronisiertes Eintreffen ±2 Minuten)
  • 🔍 Spionage-Sonden für Schwarm-Erkundung
  • 📜 Progressive Enthüllung der Schwarm-Bedrohung
📢 Beta-Test starten! Die erste Beta mit Allianz-System steht kurz vor der Veröffentlichung!
Wann? Nächstes Wochenende
Teste die Allianz-Funktionen und melde Bugs!

Bleibt dran – der Schwarm kommt! 🪐

von bed (nospam@example.com) am 29.08.2026 15:21


Sabine Becker (AtariFrosch)

Angesehen: Inside I‘m Dancing

Auf der „Spur“ von James McAvoy landete ich gestern Abend bei dem irischen Film „Inside I'm Dancing“ (2004) über zwei behinderte junge Menschen, die aus dem Heim-Leben ausbrechen wollen und von denen einer dafür von der Bürokratie nicht ernst genommen wird.

Der Film wurde zu einer Zeit gedreht, als es die UN-Behindertenrechtskonvention noch nicht gab. Die beiden zitieren jedoch einen Paragrafen aus europäischem Recht (?) bezüglich Antidiskriminierung, zum Beispiel, um in eine Disco zu kommen (ob der echt oder erfunden war, weiß ich nicht, ich müßte nochmal nachhören und dann recherchieren; ich hatte mir das nicht aufgeschrieben).

Das Alter des Films nimmt ihm leider kaum etwas von seiner Aktualität.

Positiv überrascht hat mich, daß das – zumindest meiner Ansicht nach – so überhaupt kein „inspiration porn“ ist. Ich hatte sowas nämlich so halb befürchtet. Im Gegenteil, im Film tauchen typische Vorurteile auf, nur um deutlich zu machen, daß es eben nur Vorurteile sind. Die beiden jungen Männer tun auch so ziemlich alles, um diese verbal oder aktiv zu widerlegen.

Leider nur in einer herausgeschnittenen Szene ist zu sehen, daß Rory sich von einem Polizisten sowas anhören muß wie „ach, mein (irgendein Verwandter) sitzt auch im Rollstuhl“ und der typischerweise nicht gerade höfliche Rory ihn daraufhin heftig zusammenfaltet. Die Szene hätte für mich gern im Film bleiben dürfen. Das gleiche gilt für die Szene bei Rorys Beerdigung, als Michael bekannt gibt, daß er an die Uni gehen und Jura studieren will.

Man könnte kritisieren, daß die Rollen der Hauptdarsteller nicht mit entsprechend behinderten Menschen besetzt worden waren. Aber ich vermute, daß Menschen mit solchen Behinderungen kaum eine ernsthafte Chance haben (oder zumindest vor über 20 Jahren hatten), eine Schauspiel-Ausbildung zu durchlaufen – was den Kreis in gewisser Weise wieder schließt.

Ich vermute, daß es James McAvoy nicht so leicht hatte, zur Darstellung nur eine Hand und sein Gesicht zur Verfügung haben, und keinerlei Körpersprache einsetzen zu können. Der hervorragenden Darstellung tat das keinen Abbruch.

Für das Ende ist es angebracht, eine Packung Taschentücher bereitzuhalten.

Mein Tip: Empfehlenswert. Sollten sich vor allem die Leute angucken, die meinen, daß Geld wichtiger sei als die Menschenrechte von behinderten Menschen.

von Atari-Frosch am 29.08.2026 11:38


22.08.2026

Joerg Kastning (Tronde)

Meine FrOSCon 2026

Letzte Woche, um diese Zeit, öffnete die 21. FrOSCon ihre Tore für technik- und Open-Source-begeisterte Menschen. Nun ist sie bereits seit einer Woche vorbei und ich habe Konferenzblues überwunden.

Es hat mich sehr gefreut, Alexandra, Armin, Chris, Christian Thinkpadowik (den Museumsdirektor), Christof, Christoph (stoeps), Dirk, Henning, Jens und Sujeevan wiederzutreffen. Ebenso habe ich mich gefreut, einige neue Gesichter kennenzulernen. Wir werden uns sicher auf zukünftigen Konferenzen wieder über den Weg laufen und irgendwann, werde ich mir eure Namen auch merken können (bitte entschuldigt, mein Namensgedächtnis ist wirklich schlecht).

Vorträge gab es reichlich. Unbekannt heißt nicht unzugänglich – Warum OSS Nutzung Mut braucht von Silvia Deimeke ist tatsächlich der einzige Vortrag, den ich vor Ort gehört habe und ich finde ihn großartig. Sivlvia hat zum ersten Mal auf einer Open-Source-Konferenz gesprochen und einen interessanten Beitrag geleistet. Aus für gewöhnlich gut informierten Quellen kam mir zu Ohren, dass dies nicht ihr letzter Beitrag zu einer Open-Source-Konferenz gewesen sein soll.

Dass ich es nicht zu mehr Vorträgen geschafft habe, liegt zum einen an den schönen Gesprächen auf dem Gang, im Hof und an den Ständen und zum anderen, dass ich dieses Jahr gleich mit zwei Vorträgen und einem Workshop beigetragen habe. Allein sind drei Beiträge kaum zu stemmen, weswegen ich mich mit Christian Stankowic zusammentan habe, um folgende Beiträge abzuliefern:

  • Vortrag: Patch me, if you can. Aufzeichnung. Vortrag als PDF.
  • Workshop: Linux Patch-Management mit Foreman und Katello.

Christian, es war mir eine große Freude, mit dir gemeinsam zu dieser Konferenz beizutragen.

Darüber hinaus habe ich ein Thema beigetragen, welches mir persönlich wichtig ist und Rückmeldungen zufolge einige Backlogs gefüllt hat:

  • Nerds gefähden die digitale Souveränität ihrer Familie. Aufzeichnung. Vortrag als PDF. Blog-Artikel zum Vortrag.

Ich betrachte darin ein Unterthema aus dem digitalen Nachlass und wünsche mir, dass noch mehr Nerds auch in diesem Bereich Vorsorge betreiben.

Normalerweise finde ich nach einer Konferenz nicht die Zeit, mir Vortragsaufzeichnungen anzusehen. Dieses Mal haben es jedoch folgende Beiträge geschafft, mein Interesse zu wecken, so dass ich mir die Zeit genommen habe:

  • Der Open Source Stack für souveräne LLMs von Florian Sommer
  • curl: Mehr als HTTP von und mit Christoph Stoettner (stoeps)
  • shutdown mit Hinrikus Wolf

In letzterem findet ihr auch einige interessante Statistiken zur diesjährigen Konferenz.

Für mich heißt es nun: Nach der Konferenz ist vor der Konferenz. Ich freue mich als nächstes auf die Chemnitzer Linux-Tage 2027.

von Jörg Kastning am 22.08.2026 07:00


21.08.2026

(thoys)

Nemo Actions – Datei per Rechtsklick mailen

LinuxMint bringt in der Cinnamon Ausführung als Standard-Dateimanager Nemo mit. Beginn meiner Beschäftigung mit Nemo Actions war, dass ich es vermisst habe, Dateien mit der rechten Maustaste anzuklicken und direkt per Mail verschicken zu können. Konkret sollte, wie bei Ubuntu/Debian/Gnome eine neue Mail des Standardmailprogramms öffnen und die Datei als Anhang hinzugefügt werden.

Nun habe ich Nemo Actions entdeckt und gesehen, dass dies eine Spielwiese an neuen Funktionen bedeutet. Dies ist mal ein Bereich, bei dem die KI des Vertrauens einem wirklich etwas helfen kann – wobei natürlich das eigene Verstehen immer im Vordergrund stehen sollte.

Konkret für E-Mail

Als erstes öffnet man den Terminal und erstellt ein Verzeichnis:

mkdir -p ~/.local/share/nemo/actions 

Anschließend erstellt und öffnet man im erstellten Verzeichnis eine Datei mit entsprechendem Namen. xed öffnet einen grafischen Editor, nano funktioniert natürlich genauso.

xed ~/.local/share/nemo/actions/send_mail.nemo_action 

Folgendes wird eingefügt und gespeichert. Dank der Kommentare angepasst am 23. August. Durch die Nutzung des relativen Pfades (%U), dürfen offensichtlich auch Leerzeichen im Dateinamen, den man verschicken will, sein.

[Nemo Action]
Name=Per Mail senden
Comment= %U Per Thunderbird senden
Exec=thunderbird -compose to=,"attachment='%U'"
Icon-Name=mail-attachment-symbolic
Selection=notnone
Extensions=nodirs
Separator=,
Dependencies=thunderbird;

Nun muss Nemo nur noch neu gestartet werden. Wenn nun eine Datei mit einem Rechtsklick angeklickt wird, öffnet sich das Kontextmenü (das war vorher schon so), aber es enthält nun den Punkt „Per E-Mail senden“.

Bin ich nun restlos glücklich? Es gibt noch ein Problem. Zwar benenne ich Dateien meistens ohne Leerzeichen, aber wenn es doch mal eine gibt, die eines hat, dann funktionierte das bei meinem Test nicht. Es gab von Thunderbird eine Fehlermeldung, dass die Datei nicht existiert. Hat jemand einen Tipp, wie ich den Prozess dazu bringe, auch Dateien mit Leerzeichen im Namen anzuhängen?

Gerne hätte ich einen Screenshot gezeigt, aber das Drücken der Druck-Taste funktioniert bei aufgerufenem Kontextmenü nicht. Schade eigentlich. Aber probiert es einfach selber aus, es macht total Freude sich mit Nemo Actions zu beschäftigen.

von Timotheus am 21.08.2026 17:18


Sabine Becker (AtariFrosch)

Laserdrucker mit Kopfständen

Bereits vor über einem Jahr stand ich plötzlich vor dem Problem, daß die Tonerkartusche, die ich mal kurz aus dem Laserdrucker Lexmark M1145 gezogen hatte, nicht mehr reingehen wollte. Ich war dann erstmal eine Weile ohne Laserdrucker und bekam schließlich aus meinem Umfeld einen Brother DCP-1512 geschenkt. Für meinen normalen Bedarf reicht der. Allerdings sponsore ich für den hiesigen Tauschring die Flyer – derzeit meine einzige Möglichkeit, für mein Gewerbe Werbung zu machen. Ich darf dafür nämlich eine Werbeanzeige mit draufdrucken.

Der DCP-1512 kann keinen Rückseitendruck und ist mit mehr als 100 Seiten am Stück massiv überfordert bzw. er überhitzt. Er macht dann nach jeder Seite eine lange Pause, und damit dauert der „Massendruck“ einfach viel zu lange. Dafür hat er einen Scanner huckepack, ist also ein Kombi-Gerät. Das hat durchaus auch seine Vorteile: So hatte ich angefangen, mit diesem Drucker meinen Papierkram zu scannen, um damit den „guten“ Canon CanoScan nicht zu belasten. Der soll für Fotos, Postkarten und Tickets reserviert bleiben.

Mit dem DCP-1512 hab ich zwischendurch auch Tauschring-Flyer gedruckt, aber mich jedesmal erstmal mit der Rückseite vertan, so daß diese auf dem Kopf stand. Oder auf die Vorderseite obendrauf gedruckt wurde. Oder beides. Auf Dauer war das keine Lösung. Also wollte ich den Lexmark reparieren lassen.

Das erwies sich jedoch als für mich recht teures Vorhaben: Damit die Firma, die hier in relativer Nähe Toner verkauft und auch Drucker repariert, das Gerät überhaupt mal anschaut, wollen sie schonmal knapp 30 € haben. Und das ist vermutlich noch recht günstig. Ich hatte mich Mitte Juni darüber informiert, was eine neue Belichtungseinheit kosten würde: Sie meinten, 60 bis 70 €. Und dann könne es noch sein, daß immer noch nicht alles funktioniert – ich hatte nur gefragt, ohne das Gerät mitzubringen.

Bei eBay schaute ich mich nach leistungsfähigen gebrauchten Laserdruckern um, die nicht nach 100 Seiten anfangen zu plärren. Ich fand einen einzigen, der bei 80 € lag, alle anderen lagen auch gebraucht gleich mal deutlich über 200 €. Also entschied ich mich für die Reparatur. Mit Kostenvoranschlag, damit ich nicht plötzlich eine Rechnung präsentiert bekomme, die ich dann nicht bezahlen kann.

Aber erst in diesem Monat schaffte ich es, mit Hilfe aus dem Tauschring, den Drucker die fünf Stockwerke runter und zu dem Laden zu bringen. Ich bezahlte die knapp 30 € und wartete ab, was da kommen sollte.

Sie probierten es mit einer anderen, gleichartigen, aber leeren Tonercassette und meinten, sie müßten auf jeden Fall die Trommel, also die Belichtungseinheit, tauschen, da sei was kaputtgegangen. Aber auch die Tonercassette, die drin war, hätte einen Schaden. Kostenpunkt für beides zusammen: 121 €. Aua.

Ich gab das OK für die Reparatur, weil ich keine Alternative sah.

Am Dienstag habe ich den Drucker schließlich wieder abgeholt. Hochbringen wollte ich ihn mit einer gerade neu erstandenen, treppenfähigen Sackkarre, aber das stellte sich als Reinfall heraus. Die Sackkarre bringt selbst 11,5 kg auf die Waage, also etwa nochmal das gleiche Gewicht wie der Drucker. Und da ich beides Stufe für Stufe hochziehen muß und ich dann mit jeder Stufe das volle Gewicht zum Ziehen auf meinen Bauchmuskeln habe, ist das … nicht sehr hilfreich. Ein Nachbar hat sich schließlich erbarmt und mir beides, Drucker und Sackkarre, hochgetragen.

Am Mittwoch habe ich dann Platz für den Lexmark gemacht, denn an seinem ursprünglichen Platz steht ja jetzt der Brother. Der Lexmark steht jetzt direkt nebendran auf dem TV-Unterschrank, den ich hier als Druckertisch einsetze. Dann hab ich erstmal ein Kaltgerätekabel gesucht. Ich weiß, daß ich eine große Tasche voll habe. Nur ist diese Tasche wohl irgendwo in meinem Chaos vergraben. Ich zog schließlich das Kabel von meinem Testrechner ab, den ich derzeit eh nicht nutzen kann. Das Netzwerkkabel für den Lexmark lag noch bereit; der Brother ist über USB angeschlossen.

Als ich dann jedoch die Flyer endlich drucken wollte, kamen die ersten 10 Exemplare getrennt nach Seiten raus, also Vorder- und Rückseite jeweils auf einem eigenen Blatt, obwohl ich im Druckmenü Duplex gewählt hatte. Äh, wat?

Ich ging beim Drucker direkt ins Menü und stellte fest, daß er dort auf Simplex eingestellt war. Also war meine Einstellung für Rückseitendruck entweder nicht beim Treiber oder vom Treiber aus nicht beim Drucker angekommen. Ich stellte also direkt am Drucker auf Duplex um. Das Ergebnis: Ja, er druckte die Rückseiten mit. Aber auf dem Kopf stehend.

Nach zwei Stunden Fehlersuche gab ich erstmal auf. Ich konnte nicht herausfinden, warum meine Einstellung nicht korrekt ausgeführt wurde.

Gestern ging bei mir gar nichts, also habe ich es heute nochmal versucht. Diesmal bin ich tiefer in die Menüs direkt am Drucker eingestiegen. Und siehe da: Statt „Duplex (kurze Kante)“ stand der Drucker auf „Duplex (lange Kante)“. Umgestellt, getestet, und endlich kommen die Flyer wieder so aus dem Drucker, wie sie sollen und wie es vor der Reparatur war.

Ich vermute, der Drucker war, als ich ihn bekommen hatte, schon so eingestellt gewesen, und dann hat der Techniker in dem Laden ihn auf Werkseinstellung zurückgesetzt.

Jedenfalls gibt's jetzt wieder Flyer für den Düsseldorfer Tauschring.

von Atari-Frosch am 21.08.2026 12:16


20.08.2026

Christoph Wickert (raoul)

Fritz!Box und ältere WLAN-Geräte

Wer eine halbwegs aktuelle FRITZ!Box aber ältere WLAN-Geräte hat, kennt das Problem vielleicht: Obwohl die FRITZ!Box im WPA2 + WPA3-Modus läuft, können sich ältere Geräte, die nur WPA2 beherrschen, nicht verbinden. Bei mir war das der Fall mit einem alten TP-Link TL-WA850RE WLAN-Repeater.

WPA3 zu deaktivieren kam für mich nicht infrage, aber zum Glück gibt ab es FRITZ!OS 8.00 unter WLAN → Sicherheit die Option Sicherheitseinstellungen für den WLAN-Zugang auf eine erhöhte Kompatibilität für ältere WLAN-Geräte optimieren. Sie aktiviert WPA2 auf dem 2,4 Ghz-Band und erlaubt Anmeldungen ohne Protected Management Frames (PMF), so dass sich mein alter Repeater verbinden kann.

Allerdings sollte man diese Option nur nutzen, wenn man sie wirklich benötigt. Erstens sollten heute alle Geräte PMF unterstützen, ist es doch Bestandteil des bereits 2009 verabschiedeten IEEE 802.11w-Standards. Überprüfen kann man das unter Linux mit
grep MFP_CAPABLE /sys/kernel/debug/ieee80211/*/hwflags und unter Windows mittels netsh wlan show driver. Zweitens kann die Änderung dazu führen, dass bei neuen Geräten keine Wi-Fi 7-Verbindungen mit Multi-Link-Operation (MLO) möglich sind. Das beherrscht meine FRITZ!Box aber ohnehin nicht, also verliere ich hier nichts. Ich darf nur nicht vergessen, PMF wieder verpflichtend zu machen, wenn ich den Repeater aussortiere. Dazu dieser Artikel – vielleicht hat ja jemand das gleiche Problem.

von chris am 20.08.2026 18:48


15.08.2026

(thoys)

Linux aktualisieren

Nun gibt es nicht die eine Linux Distribution, sondern viele verschiedene. Je nachdem, ob und welche grafische Oberfläche es gibt, könnt ihr euer System grafisch, d.h. mithilfe eines Programms, aktuell halten.

Gnome-Software und der Reiter „Aktualisierungen“

Beispielsweise Debian mit Gnome-Software ist es möglich die Updates aus den Repositories (apt), Flatpak und die Firmwareupdates mit einem Programm einzuspielen. Das ist natürlich super komfortabel.

Ansonsten hatte ich eine gewisse Routine im Terminal und da ich das nicht immer von neuem eingeben wollte, habe ich eine .sh-Datei erstellt. Diese muss ich dann nur mit ./Dateipfad/Dateiname aufrufen.

#!/bin/bash

wartungsangelegenheiten () {

echo ":-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:--:-:-:-:-:-:-:-:-:-:-:-:-:-:
:-:-:-:-:-:-:-:-:-:-:Start Durchlauf" $i ":-:-:-:-:-:-:-:-:-:-:
:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:--:-:-:-:-:-:-:-:-:-:-:-:-:-:"
sudo apt update
sudo apt full-upgrade -y
sudo apt clean
sudo apt autoremove -y
# sudo snap refresh
# flatpak update
sudo apt install -f -y
}

fertigausgabe () {

echo ":-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:--:-:-:-:-:-:-:-:-:-:-:-:-:-:
:-:-:-:-:-:-:-:-:-:-:-:-:-:-fertig-:-:-:-:-:-:-:-:-:-:-:-:-:
:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:--:-:-:-:-:-:-:-:-:-:-:-:-:-:"
}



i=0
while [ $i -lt 2 ]; do wartungsangelegenheiten && i=$[$i+1]; done

fertigausgabe

Wie ihr sehr, werden die üblichen Befehle für ein Update aufgerufen.

  • Aktualisierung der Programmlisten. (update)
  • Aktualisierungen inkl. der Abhängigkeiten installieren (full-upgrade)
  • Nicht mehr genutzte Abhängigkeiten deinstallieren (autoremove)
  • Reparieren, falls etwas verpfuscht ist (install -f)
  • Das ganze so, dass man nicht immer bestätigen muss (-y)
  • Auskommentiert ist snap und flatpak – je nachdem, was eben genutzt wird, kann man die Raute entfernen.

Das ganze wird zweimal durchlaufen. Das ist nur mein ganz normaler innerer Zwang, falls beim ersten Durchgang irgendwas liegen bleibt. Quittiert wird das Ganze mit „Start Durchlauf 0“, „Start Durchlauf 1“ und „fertig“.

Wen die Sache mit sudo stört, der kennt sein System so gut, dass er weiß, was es damit auf sich hat. Und natürlich seht ihr, dass es sich um ein System mit apt (Debian, Ubuntu, Mint usw.) handelt.

Findet ihr so etwas eine tolle Arbeitserleichterung oder total fahrlässig, dass man ohne zu schauen, was gefragt wird, alles mit ja beantwortet?

Auf jeden Fall habt ihr grafisch oder per Terminal hinterher ein aktuelles System. Abhängig von der Distribution sollte natürlich vorher geschaut werden, welche Auswirkungen aktuelle Updates haben können und ob vielleicht apt upgrade anstelle von apt dist-upgrade genutzt werden sollte.

von Timotheus am 15.08.2026 15:04


22.07.2026

Jörg Kruse (4A4B)

Optionale Checks in ShellCheck

Zum Überprüfen von Fehlern in Shell-Scripten hat sich das Kommandozeilen-Tool ShellCheck als Quasi-Standard etabliert. Den Shell-Dialekt (sh, bash, dash, ksh oder busybox), dessen jeweilige Checks angewandt werden sollen, kann ShellCheck anhand der Dateiendung oder dem Shebang des zu prüfenden Scripts erkennen, andernfalls muss dieser mit der Option --shell bestimmt werden.

Die Warnungen von ShellCheck bei Bash-Scripten sind eher konservativ gehalten, so dass eine Behebung der angezeigten Fehler nicht unnötigerweise „Bashismen“ erzeugt. Ein moderner Coding-Style mit doppelten statt einfacher Klammern, wie z. B. im Shell Style Guide von Google gefordert, ließe sich aber mit dem optionalen Check require-double-brackets forcieren. Mit der Option --list-optional können die in der jeweiligen Version von ShellCheck verfügbaren optionalen Checks inklusive Beschreibung und Beispiel-Code mit Fix aufgeführt werden, beispielsweise für die Version 0.11.0:


$ shellcheck --version
ShellCheck - shell script analysis tool
version: 0.11.0
license: GNU General Public License, version 3
website: https://www.shellcheck.net
$ shellcheck --list-optional
name:    add-default-case
desc:    Suggest adding a default case in `case` statements
example: case $? in 0) echo 'Success';; esac
fix:     case $? in 0) echo 'Success';; *) echo 'Fail' ;; esac

name:    avoid-negated-conditions
desc:    Suggest removing unnecessary comparison negations
example: [ ! "$var" -eq 1 ]
fix:     [ "$var" -ne 1 ]

name:    avoid-nullary-conditions
desc:    Suggest explicitly using -n in `[ $var ]`
example: [ "$var" ]
fix:     [ -n "$var" ]

name:    check-extra-masked-returns
desc:    Check for additional cases where exit codes are masked
example: rm -r "$(get_chroot_dir)/home"
fix:     set -e; dir="$(get_chroot_dir)"; rm -r "$dir/home"

name:    check-set-e-suppressed
desc:    Notify when set -e is suppressed during function invocation
example: set -e; func() { cp *.txt ~/backup; rm *.txt; }; func && echo ok
fix:     set -e; func() { cp *.txt ~/backup; rm *.txt; }; func; echo ok

name:    check-unassigned-uppercase
desc:    Warn when uppercase variables are unassigned
example: echo $VAR
fix:     VAR=hello; echo $VAR

name:    deprecate-which
desc:    Suggest 'command -v' instead of 'which'
example: which javac
fix:     command -v javac

name:    quote-safe-variables
desc:    Suggest quoting variables without metacharacters
example: var=hello; echo $var
fix:     var=hello; echo "$var"

name:    require-double-brackets
desc:    Require [[ and warn about [ in Bash/Ksh
example: [ -e /etc/issue ]
fix:     [[ -e /etc/issue ]]

name:    require-variable-braces
desc:    Suggest putting braces around all variable references
example: var=hello; echo $var
fix:     var=hello; echo ${var}

name:    useless-use-of-cat
desc:    Check for Useless Use Of Cat (UUOC)
example: cat foo | grep bar
fix:     grep bar foo

Optionale Checks können mit der Direktive enable in der User-Konfigurationsdatei ~/.config/shellcheckrc aktiviert werden, so dass ShellCheck diese künftig automatisch mit berücksichtigt, so z. B.:


enable=avoid-negated-conditions
enable=avoid-nullary-conditions
enable=deprecate-which
enable=require-double-brackets
enable=useless-use-of-cat

von Jörg Kruse am 22.07.2026 12:35


12.07.2026

Bernd Dau (whisper)

Season 4 ist Geschichte

Die vierte Spielrunde ging zu Ende. Zeit für eine kurze Bilanz. Die Teilnahme war stabil, die Kämpfe um die vorderen Plätze bis zuletzt eng. Am Ende setzte sich M0n1y durch und sicherte sich den ersten Platz.

Die Top 3 sowie alle weiteren Platzierungen sind in der Grafik zu sehen. Wer genau wie viele Punkte gesammelt hat und wie die Bewegungen in den letzten Tagen aussahen, lässt sich dort nachvollziehen.

 

 


Der Start von MMO-2044 V2 steht in ein paar Wochen bevor. Die Grundmechanik bleibt, aber es gibt einige Anpassungen unter der Haube. Die wichtigsten Änderungen betreffen die Ressourcenlogistik und die Flottenbewegungen. Wer in der letzten Runde mit Spielmechaniken zu kämpfen hatte, wird einige Verbesserungen bemerken.
Mehr Details gibt es mit dem Starttermin.

Bis dahin bleibt die aktuelle Instanz noch online, für alle, die die letzten Punkte sichern oder einfach nur noch ein paar Runden drehen wollen.

Vielen Dank an alle Teilnehmer und auch danke für die Feedbacks!

 

von bed (nospam@example.com) am 12.07.2026 11:43


Steffen Rumberger (inne)

Shaman Bell - a wake up call to … (the buffalos and the snakes)

# Welcome to Sonic Pi
# Shaman Bell - a wake up call to … (the buffalos and the snakes)
use_debug false
set :bpm, 60 # use_bpm 60
with_fx :reverb, room: 0.6, mix: 0.4 do
  live_loop :shaman_drum do
    use_bpm get(:bpm)
    sample :bd_tek, amp: rrand(0.9, 1.3), cutoff: rrand(60, 80)
    sleep 0.45 + rrand(-0.03, 0.03) # leichte Schwankung
  end
end
# Sphere
with_fx :slicer, phase: 16, mix: 0.15 do
  with_fx :wobble, phase: 8, mix: 0.3 do
    live_loop :sphere do
      use_synth :dark_ambience
      # weiche Lautstärkewelle
      amp_wave = (range 0.1, 0.3, step: 0.01).mirror.tick
      play :e2, sustain: 8, release: 4, amp: amp_wave, cutoff: rrand(60, 90)
      sleep [8].choose # orig: 8
    end
  end
end
# Bell
with_fx :reverb, room: 0.9, mix: 0.6 do
  with_fx :echo, phase: 0.375, mix: 0.25 do
    live_loop :bell do
      use_bpm 110
      amp_wave = (range 0.2, 0.4, step: 0.05).mirror.tick
      with_fx :slicer, phase: 0.5, mix: 0.3 do
        sample :perc_bell, rate: rrand(0.7875, 0.8125), amp: amp_wave
        sleep 0.5 + rrand(-0.05, 0.05)
      end
    end
    live_loop :shaker do
      use_bpm 110
      amp_wave = (range 0.1, 0.3, step: 0.05).mirror.tick
      with_fx :lpf do
        sample :perc_snap, rate: 1.2, amp: amp_wave
        sleep 0.25
      end
    end
  end
end
# BPM-Fade
live_loop :bpm_fade, sync: :shaman_drum do
  start = get(:bpm)
  ziel  = rrand(30, 90)
  steps = [16,32,64].choose # orig: 64
  dauer = [128].choose # orig: 128
  steps.times do |i|
    t = i.to_f / (steps - 1)
    curve = t ** 2 # quadratische Kurve
    bpm = start + (ziel - start) * curve
    set :bpm, bpm
    sleep dauer.to_f / steps
  end
  sleep rrand(0, 256)
end

12.07.2026 02:22


Schaman Bell - a wakeup call to … (the buffalos and the snakes)

# Welcome to Sonic Pi
# Schaman Bell - a wakeup call to … (the buffalos and the snakes)
use_debug false
use_synth_defaults debug: false
set :scopes, false
set :bpm, 60 # use_bpm 60
with_fx :reverb, room: 0.6, mix: 0.4 do
  live_loop :shaman_drum do
    use_bpm get(:bpm)
    sample :bd_tek, amp: rrand(0.9, 1.3), cutoff: rrand(60, 80)
    sleep 0.45 + rrand(-0.03, 0.03) # leichte Schwankung
  end
end
# Sphere
with_fx :slicer, phase: 16, mix: 0.15 do
  with_fx :wobble, phase: 8, mix: 0.3 do
    live_loop :sphere do
      use_synth :dark_ambience
      # weiche Lautstärkewelle
      amp_wave = (range 0.1, 0.3, step: 0.01).mirror.tick
      play :e2, sustain: 8, release: 4, amp: amp_wave, cutoff: rrand(60, 90)
      sleep [8].choose # orig: 8
    end
  end
end
# Bell
with_fx :reverb, room: 0.9, mix: 0.6 do
  with_fx :echo, phase: 0.375, mix: 0.25 do
    live_loop :bell do
      use_bpm 110
      amp_wave = (range 0.2, 0.4, step: 0.05).mirror.tick
      with_fx :slicer, phase: 0.5, mix: 0.3 do
        sample :perc_bell, rate: rrand(0.7875,0.8125), amp: amp_wave
      end
      sleep 0.5 + rrand(-0.05, 0.05)
    end
    live_loop :shaker do
      use_bpm 110
      amp_wave = (range 0.1, 0.3, step: 0.05).mirror.tick
      with_fx :lpf do
        sample :perc_snap, rate: 1.2, amp: amp_wave
        sleep 0.25
      end
    end
  end
end
# BPM-Fade
live_loop :bpm_fade, sync: :shaman_drum do
  start = get(:bpm)
  ziel  = rrand(30, 90)
  steps = [16,32,64].choose # orig: 64
  dauer = [128].choose # orig: 128
  steps.times do |i|
    t = i.to_f / (steps - 1)
    curve = t ** 2 # quadratische Kurve
    bpm = start + (ziel - start) * curve
    set :bpm, bpm
    sleep dauer.to_f / steps
  end
  sleep rrand(0, 256)
end

12.07.2026 02:22


30.06.2026

Jörg Kruse (4A4B)

Konfiguration mit vimrc und / oder .editorconfig

In dem Beitrag Projektspezifische Konfiguration von vim hatte ich vor sechseinhalb Jahren beschrieben, wie mit dem vim Plugin localvimrc Konfigurationsdateien geladen werden können, die in einzelnen Projektordnern wirksam sind. Inzwischen verwende ich dieses Plugins und die lokalen .lvimrc Dateien seit längerem nicht mehr, stattdessen kommen in Projekten zur Definition von Coding-Styles .editorconfig Dateien zum Einsatz.

Von Vorteil sind diese vor allem, da der EditorConfig-Standard zwischenzeitlich von vielen Editoren unmittelbar oder mittels eines Plugins unterstützt wird und so in einem Projekt-Team mit unterschiedlichen Editoren für einheitliche Coding-Styles sorgen kann. In vim 9.1, welches im Repository von Debian Trixie enthalten ist, muss nicht einmal mehr ein Plugin installiert werden, .editorconfig Dateien werden direkt unterstützt. Für ältere vim Versionen existiert das Plugin vim-editorconfig.

Allgemein gehe ich so vor, dass ich globale Coding-Styles, die vor allem für die Bearbeitung von Shellscript- und Konfigurations-Dateien (v.a. durch root) relevant sind, weiterhin in der systemweiten Konfigurationsdatei /etc/vim/vimrc.local definiere:

set autoindent
set expandtab
set tabstop=2
set shiftwidth=2

Ich habe hier eine automatische Einrückung von zwei Leerzeichen gewählt, da dies auch bei vielen Dateien unterhalb von /etc der Fall ist.

In den jeweiligen Projektordnern liegen dann .editorconfig Dateien, deren Anweisungen von vim als vorrangig gegenüber denen der /etc/vim/vimrc oder ~/.vimrc behandelt werden. Beispiel einer .editorconfig Datei für ein Python-Projekt, mit einer automatischen Einrückung von vier Leerzeichen:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

In der .editorconfig Datei für ein WordPress-Plugin kommt dagegen der für WordPress übliche Standard von Einrückung mittels Tabs zum Zuge:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab

von Jörg Kruse am 30.06.2026 13:15


20.06.2026

Stefan J. Betz (encbladexp)

Going Golang

Meine primäre Programmiersprache ist schon sehr lange Python. Ich bin kein Softwareentwickler; dennoch liefere ich damit gut funktionierenden Code und damit auch Lösungen — meist Plugins/Module für bestehende Komponenten, aber auch mal ein Backend für IoT-Devices. Das meiste davon entstand im Rahmen meiner Erwerbsarbeit und steht daher unter NDA.

hello_world.go

Schon länger besteht jedoch der Wunsch, eine weitere Programmiersprache zu können, weshalb ich mir Gedanken über meine Anforderungen an eine neue Programmiersprache gemacht habe:

  • Die Sprache sollte kompiliert werden müssen; es sollte also keine Skriptsprache mehr sein.
  • Die Sprache sollte statisch typisiert sein.
  • Die Sprache sollte plattformübergreifend, zumindest aber auf Linux und macOS gut lauffähig sein.
  • Die Sprache sollte architekturübergreifend, inkl. Cross-Compiling, verwendbar sein. Ich möchte also auch in der Lage sein, auf einer Intel- oder AMD-CPU Binaries für ARM zu bauen.

Evaluiert habe ich folgende Programmiersprachen, jeweils eine Woche. Meine Testaufgabe waren lediglich ein paar einfache REST-API-Aufrufe und das damit verbundene Parsen von JSON.

  • Rust: Alle reden davon, ich wollte es also auch mal wissen. Um ehrlich zu sein, war mir die Einstiegshürde (von Python kommend) zu hoch; gleichzeitig empfand ich das Tooling als wenig attraktiv, und mir fehlte das von Python gewohnte “Batteries included”. Rust ist sicher eine hervorragende Programmiersprache, aber eben doch nicht meine.
  • C: Im Hackerspace- und CCC-Umfeld wird häufig C verwendet, was naheliegend ist für die vielen ESP32, die überall herumliegen. Die Lernkurve war zumindest anfangs noch ganz OK; allerdings empfand ich das Tooling als eher altertümlich und auch das “Batteries included” fehlte mir wieder. Dazu kommen noch die diversen footguns, die die sichere Verwendung dieser alten Sprache nicht gerade einfacher machen.
  • Go: Bekannt vor allem durch das ganze Container- und DevOps-Tooling war natürlich auch Go eine Sprache, die in Betracht kam. Im Vergleich zu Rust oder C konnte ich mich recht schnell an das Tooling gewöhnen. Von Python kommend wirkt Go fast schon wie eine Low-Level-Programmiersprache. Gefallen hat mir auch, dass es wieder “Batteries included” gibt.

So war die Entscheidung schnell gefallen: Es sollte Go werden. Nicht evaluiert habe ich Zig, was sicher auch eine gute Programmiersprache ist; zum Zeitpunkt der Entdeckung hatte ich mich jedoch bereits entschieden.

“Learning by Doing”

Learning by Doing ist sehr effizient, vor allem, da man dabei auch viele Fehler macht und daraus lernt.

Zuerst habe ich die meisten privat laufenden Python-Tools durch neue Implementierungen in Go ersetzt. Dies umfasst diverse Prometheus-Exporter, aber auch das angepasste Lademanagement, welches mein EVCC “optimiert”.

Aufgefallen ist mir dabei unter anderem, wie viel kleiner meine Container wurden: in einem Fall ging es von ca. 300 MiB auf ca. 15 MiB herunter — das ist ordentlich.

Die (oft) deutlich bessere Performance von Go spielte hier nur selten eine Rolle; nichts, was ich privat betreibe, läuft im Maßstab von Google, Cloudflare oder Amazon.

Unerwartet schnell habe ich gelernt, dass Fehler auch Freunde sind (Go hat ein sehr explizites Error-Handling) und dass Exceptions weniger nett sind, als das Konzept zunächst klingt.

Dokumentation

Neben A Tour of Go empfand ich vor allem Go by Example als sehr hilfreich. Die offizielle Dokumentation der Sprache ist ebenfalls sehr gut und verständlich.

Bücher

Der nächste Schritt war dann ein Deep Dive in Form von Abendlektüre und beinhaltete zwei Bücher, die ich hier kurz vorstellen möchte.

Learning Go: An Idiomatic Approach to Real-World Go Programming (English Edition)

Vor allem, wenn man von einer anderen Sprache kommt, ist dieses Buch sehr hilfreich, da es zeigt, wie man idiomatischen Code erstellt, der auch zu den Patterns der Sprache passt.

Zu oft ist es mir passiert, dass ich versucht habe, “pythonic” Code zu schreiben, obwohl ich jetzt auf Go unterwegs bin, wo Dinge eben anders getan werden sollten oder sogar müssen.

Effektiv habe ich das Buch am Abend in einer Woche komplett verschlungen; es ist meiner Ansicht nach jeden Cent wert.

100 Go Mistakes and How to Avoid Them (English Edition)

Wie schon weiter oben erwähnt: Aus Fehlern lernt man. Und der Autor dieses Buches hat mindestens 100 Fehler sehr oft gemacht, sodass ich direkt vom Profi lernen kann.

Das Buch ist eine sehr gute Ergänzung, da man im einen Buch über idiomatischen Code lernt, wie Code aussehen sollte, und in diesem hier, wie genau er nicht aussehen sollte.

Zugegeben: ca. ein Drittel der genannten Fehler wären mir auch ohne Kenntnisse der Sprache aufgefallen; bei wiederum anderen wäre ich direkt in das offene Messer gelaufen.

AI / KI

Zum Lernen habe ich auch KI-generierte Inhalte verwendet. Anfangs hatte ich in meinem Editor (Visual Studio Code) noch Copilot aktiviert, aber zumindest auf dem privaten PC wurde diese Erweiterung nach einigen Tests deinstalliert.

Man lernt nicht oder nur sehr langsam, wenn einem die KI immer die “beste” Lösung vorschlägt, und manchmal läuft man auch einen komplett falschen Pfad entlang.

Mittlerweile verwende ich nur noch OpenCode und beziehe ein paar Tokens durch OpenRouter. Hin und wieder hilft mir auch Perplexity bei der Recherche.

KI darf privat meinen Code nur noch reviewen oder mir in bestimmten Fällen etwas Unterstützung geben. Meist reichen die Reviews aus, um meinen Code zu verbessern. Agenten sollen privat keinen Code für mich schreiben. Ich möchte den Lerneffekt mitnehmen, die Basics verstehen und in Fallen laufen. Scheitern ist Teil des Weges.

Fazit

Go macht mir sehr viel Spaß, und ich konnte das neue Wissen auch schon im beruflichen Kontext umsetzen. Der Blick über den Python-Tellerrand hat mir gut getan.

20.06.2026 08:00


22.05.2026

Martin Dosch (Dogge)

MagentaTV funktioniert nicht mehr im Browser

Falls jemand vor hat sich wegen aktueller oder kommender Sportereignisse (z.B. die Weltmeisterschaften im Eishockey und Fußball) MagentaTV zu holen: Tut es nicht! Zumindest nicht, wenn ihr am Rechner oder Laptop im Browser schauen wollt. Derzeit funktioniert das nicht und die Telekom arbeitet offensichtlich nicht an Lösungen sondern schiebt die Schuld mit Aussagen in der Art von “Es liegt an dir, bzw. deiner HW, nicht an uns!” von sich obwohl das Problem von einem Tag auf den anderen ohne jeglichen HW-Tausch auftrat.

Das Telekom-Hilfeforum ist voll von Threads über dieses Problem, exemplarisch verlinke ich einen davon, den die Telekom sogar als gelöst markiert hat, obwohl das Problem weiter besteht.

22.05.2026 08:07


11.04.2026

Martin Dosch (Dogge)

iortcw: Return to Castle Wolfenstein auf Debian spielen

Ich habe letztes Jahr bereits beschrieben, wie man Medal of Honor: Allied Assault unter Debian installieren (und spielen 😉) kann. Da mittlerweile Return to Castle Wolfenstein vom Index genommen (pdf) wurde, möchte ich auch für dieses Spiel die Installation beschreiben. Diese Anleitung bezieht sich auf Debian Trixie.

Spieldaten

Iortcw ist zwar frei, die Grafiken und Sounds von RtCW sind es aber nicht. Um Return to Castle Wolfenstein spielen zu können, benötigt man also die Daten des Originalspiels. Ich habe das Spiel während eines Auslandsaufenthalts bei GOG gekauft. In Deutschland wird das Spiel leider (noch?) nicht vertrieben obwohl es nicht mehr auf dem Index ist, weil noch eine USK Alterseinstufung fehlt.

Debianquellen bearbeiten

Da man die unfreien Spieldaten benötigt, kann RtCW nicht über Debian main bereitgestellt werden, sondern befindet sich in contrib. Darum muss man sicher stellen, dass die contrib-Quellen eingebunden sind.

Wenn man das bisherige Format mit /etc/apt/sources.list nutzt, muss man sicherstellen, dass contrib enthalten ist. Die entsprechende Zeile sieht dann z.B. so aus:

deb https://deb.debian.org/debian trixie main contrib non-free-firmware

Nutzt man schon das neue deb822-Format kann man in die entsprechende Datei, z.B. /etc/apt/sources.list.d/debian.sources, bei Components: contrib hinzufügen. Das sieht dann z.B. so aus:

# Modernized from /etc/apt/sources.list
Types: deb
URIs: https://deb.debian.org/debian/
Suites: trixie
Components: main contrib non-free-firmware non-free
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Benötigte Pakete installieren

Nachdem man die Debianquellen bearbeitet hat, aktualisiert man die Quellen:

# apt update

Anschließend kann man die benötigten Pakete installieren:

# apt install game-data-packager rtcw lgogdownloader

Spieldaten paketieren

Die im vorigen Schritt installierten Pakete game-data-packager und lgogdownloader werden nun genutzt um die Spieldaten herunterzuladen.

Hat man lgogdownloader bisher noch nicht genutzt, muss man sich erst anmelden:

$ lgogdownloader --login

Danach werden Benutzername und Passwort abgefragt und man wird eingeloggt. Danach kann mit dem game-data-packager fortgefahren werden:

$ mkdir -p ~/Games/rtcw
$ cd ~/Games/rtcw
$ game-data-packager rtcw

Spieldaten installieren

Nachdem nun die Spieldaten paketiert sind, können diese installiert werden:

# apt install /home/<USER>/Games/rtcw/rtcw*.deb

Der Platzhalter <USER> ist natürlich durch den entsprechenden Benutzer zu ersetzen.

Spielen

Nun kann man Return to Castle Wolfenstein spielen und in Erinnerungen schwelgen, oder diese Spiele auch zum ersten Mal genießen. Fröhliches Nazi-Ballern. 😀

11.04.2026 20:28


02.03.2026

Christoph Wickert (raoul)

Lesbare Domain-Namen mit MyFRITZ!

Damit FRITZ!Box-Nutzende auch von unterwegs auf ihren Router oder ihr Heimnetz zugreifen können, gibt es den Online-Dienst MyFRITZ!, der – neben anderen nützlichen Funktionen – dynamisches DNS bietet.

Zur Nutzung muss man zuerst die FRITZ!Box registrieren. Nach der Anmeldung am Portal sieht man die Geräteübersicht. Ein Klick auf eine FRITZ!Box leitet auf ihre Benutzeroberfläche weiter, allerdings unter einem automatisch genierten Domain-Namen im wie kupzflvxinzjbygz.myfritz.net, den sich garantiert niemand merken kann. Die Möglichkeit, einen lesbaren Namen wie beispiel.myfritz.link zu vergeben, ist leider gut versteckt.

  • Klickt oben rechts auf Eure E-Mail-Adresse und dort auf Einstellungen von MyFRITZ!Net.
  • Klickt in der Navigation links unten auf MyFRITZ!-Adressen verwalten.
  • Klickt auf das Stift-Symbol hinter der FRITZ!Box.
  • Wählt Eigene MyFRITZ!-Adresse erstellen und vergebt einem Namen mit mindestens 8 Zahlen und/oder Buchstaben.
  • Damit ihr nicht bis zur nächsten Zwangstrennung warten müsst, verbindet Eure FRITZ!Box neu. Geht dazu in ihrer Oberfläche auf Internet → Online-Monitor → Verbindungsdetails → Neu verbinden.

Sobald die FRITZ!Box wieder online ist, findet Ihr sie in der MyFRITZ!-Geräteübersicht unter der neuen Adresse. Viel Spaß!

von chris am 02.03.2026 20:33


04.01.2026

Christian Imhorst (immi)

Waydroid mit Weston

Um den Android-Emulator Waydroid unter X11 zu starten, weil z.B. Linux Mint 22.2 noch Probleme mit Wayland hat, benötigt man Weston, eine Art Wayland-Container mit Terminal. Für ein Android-System inklusive Google-Apps (GAPPS) muss man sich zudem noch eine Google-Zertifizierung besorgen.

Für die Installation unter Debian/Ubuntu-Derivate wie Linux Mint werden folgende Befehle ausgeführt:

sudo apt update
sudo apt install curl ca-certificates -y
curl -s https://repo.waydro.id | sudo bash
sudo apt install waydroid weston -y

Dann folgt die Installation von Waydroid mit den GAPPS:

sudo waydroid init -s GAPPS

Wer kein Google möchte lässt alles nach init weg und man muss auch keine Google-Zertifizierung machen.

Starten Sie den Container:

sudo systemctl enable waydroid-container 
sudo systemctl start waydroid-container

Mit Weston starten

Waydroid wird dann in Westen gestartet, dazu weston ausführen, das Terminal in Weston öffnen und folgendes eingeben:

waydroid show-full-ui

Sollte Android, bzw LineageOS,kein Internet haben, liegt das vermutlich an Einstellungen in der Firewall. Zum Testen kann man sie einmal ausschalten, dann sollte das Android eine Internetverbindung haben.

F-Droid installieren

Um F-Droid zu installieren wird die APK unter Linux heruntergeladen, in Downloads gespeichert und anschließend mit waydroid installiert:

cd ~/Downloads
wget https://f-droid.org/F-Droid.apk
waydroid app install F-Droid.apk

Danach ist die App sofort im LineageOS unter Waydroid verfügbar.

Gemeinsame Dateien

Mit bindfs kann man auf das Dateisystem von Waydroid zugreifen:

sudo apt install bindfs
mkdir ~/Waydroid
sudo bindfs --mirror=$(id -u) ~/.local/share/waydroid/data/media/0 ~/Waydroid

Nach der Installation von bindfs wird der Ordner „Waydroid“ im eigenen Verzeichnis angelegt und das Dateisystem des Androids in Waydroid dahin „verbunden“. Jetzt kann man einfach Dateien über das Verzeichnis „~/Waydroid“ austauschen.

Siehe auch Setting up a shared folder.

Fenstergröße

Beim Ändern der Weston-Fenstergröße startet der Android-Container mit LineageOS neu. Waydroid passt die Display-Auflösung an die Weston-Größe an, was einen Neustart der SurfaceFlinger-Komponente auslöst, die den Container/Session resetet, weil dynamisches Resizing nicht voll unterstützt wird.

Für eine feste Fenstergröße kann man die Auflösung z.B. vorab in ein Start-Skript start-waydroid schreiben:

#!/bin/bash

waydroid prop set persist.waydroid.width 1280
waydroid prop set persist.waydroid.height 720

weston -- sh -c '
  weston-terminal &
  sleep 1
  waydroid show-full-ui
'
waydroid session stop

Das Skript setzt die Fenstergröße, startet Weston und dann Waydroid. Wird Lineage dann heruntergefahren, wird die Session gestoppt.

Android ID abrufen

Nach dem Start von Android mit GAPPs beschweren sich die Google-Apps darüber, dass die Plattform nicht sicher ist. Um sie „sicher“ zu machen benötigt man eine Google-Zertifizierung. Dafür wird sichergestellt, dass Waydroid läuft (Container & Session) und dann im Linux-Terminal (außerhalb Weston) folgender Befehl eingegeben:

sudo waydroid shell -- sh \
-c "ANDROID_RUNTIME_ROOT=/apex/com.android.runtime \
ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata \
ANDROID_I18N_ROOT=/apex/com.android.i18n \
sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \
'select * from main where name = \"android_id\";'"

Kopiere die Zahlen hinter android_id| (z. B. 1234567890123456789).

Gehe anschließend zu https://www.google.com/android/uncertified/ (mit deinem Google-Konto angemeldet), füge die Android ID ein und klicke „Register“. Die Registrierung dauert 5–30 Minuten (manchmal auch länger bis zu 1-2 Stunden).

Waydroid-Daten wieder entfernen

Falls man alte Daten von Waydroid wieder los werden will:

sudo waydroid session stop
sudo waydroid container stop
sudo rm -r /var/lib/waydroid ~/.local/share/waydroid

von Christian Imhorst am 04.01.2026 19:43


29.12.2025

Christian Imhorst (immi)

DOSBox-X mit Flatpak installieren und einrichten

Für die paar alten DOS-Games, die ich noch habe, bin ich auf DOSBox-X umgestiegen, weil ich ein paar Probleme z.B. mit der Tastatur unter DOSBox mit Debian hatte. DOSBox-X habe ich als Flatpak installiert:

flatpak install dosbox-x

Die Konfigurationsdatei befindet sich nach der Installation hier:

~/.var/app/com.dosbox_x.DOSBox-X/config/dosbox-x/dosbox-x-2025.05.03.conf

Falls DOSBosX als System-Paket installiert wurde, kann man die Konfigurationsdatei direkt im eigenen Home-Verzeichnis unter ~/.config/dosbox-x/ finden.

Ganz am Ende der Datei wird die autoexec konfiguriert, z.B. für ein deutsches Tastaturlayout keyb gr 850, oder um den Einhängepunkt für Laufwerk C: zu definieren:

[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.

keyb gr 850
mount c ~/dosgames
c:

Der Ordner ~/dosgames muss vorher noch erstellt werden.

Dabei kann man nicht nur Spiele installieren, in DOSBox-X funktioniert z.B. auch Windows 3.11 prima. Um die Maus in Windows zu steuern, kann man sie mit der Tastenkombination <Strg>+<Shift>+<F10> in der DOSBox-X übernehmen und auch wieder freigeben.

Doom und Windows 3.11 in DOSBox-X

Doom und Windows 3.11 in DOSBox-X

Möchte man das Spiel direkt als Desktop-Anwendung aufrufen, also ohne den Umweg über die DOS-Kommandozeile, funktioniert der folgende Befehl:

dosbox-x -c "mount c ~/dosgames" -c "c:" -c "cd DOOM" -c "DOOM.EXE" -c "exit"

DOSBox-X akzeptiert mit der Option -c Startparameter in der Kommandozeile, wie den Mount-Befehl oder direkte Aufrufe von Dateinamen.

Mit Menulibre lässt sich jetzt komfortabel ein Desktop-Launcher (.desktop-Dateien) erstellen, der diese Befehle automatisch ausführt. Dadurch entfällt dann die manuelle Eingabe im DOSBox-Prompt:

Menulibre Eintrag mit DOOM als DOS-Spiel

Mit dem Plus-Zeichen oben Links wird ein neuer Starter erstellt. Nachdem alles fertig eingetragen ist, inklusive passendem Bild, das selbst erstellt oder heruntergeladen wurde, wird der Starter gespeichert (das Icon rechts daneben mit dem Pfeil nach unten). Das funktioniert unter fast allen Desktop-Umgebungen wie GNOME, KDE, XFCE etc. Jetzt kann DOOM mit einem Doppelklick direkt aus DOSBox-X gestartet werden.

von Christian Imhorst am 29.12.2025 20:59


16.11.2025

Malte Schmidt (maltris)

Vom Erfolg, eine verschollene Samsung SSD-Firmware zu erhalten (MMCRE28G5MXP-0VB)

Im Beitrag “Vom Versuch, eine verschollene Samsung SSD-Firmware zu erhalten (MMCRE28G5MXP-0VB)“, beschrieb ich die Schwierigkeiten, eine 10 Jahre alte Firmware für eine 10 Jahre alte und eher unbekannte Samsung SSD zu erhalten.

Während meine Versuche ausschließlich in Sackgassen endeten, meldeten sich in den Kommentaren einige freundliche Leser, darunter einer mit unbekanntem Namen, der eine koreanische Seite verlinkte, auf der sowohl die passende Anleitung zum Firmware-Update, als auch die passenden Firmware-Daten in der aktuellst verfügbaren Version auffindbar waren.

  • Originalbeitrag in koreanischer Sprache
  • Google-Translator Link
  • Link zur englischen Anleitung zum DSRD (Dos Samsung Re-Drive, dem Firmware-Update-Tool)
  • Link zur Firmware (web.archive.org)

Vorher-Nachher-Vergleich

Erste Performancetests nach dem Firmware-Update zeigen relativ gute Werte. In Anbetracht dessen, dass Schreib- und Leseperformance zuvor (Firmware VBM1801Q) bei

  • Schreibgeschwindigkeit sequenziell: 23.8 MB/s
  • Lesegeschwindigkeit sequenziell: 196 MB/s

lagen, erreiche ich jetzt (Firmware VBM1901Q) Werte von

  • Schreibgeschwindigkeit sequenziell: 194 MB/s
  • Lesegeschwindigkeit sequenziell: 220 MB/s

Ein beachtlicher Anstieg.

Firmware-Update mit DSRD und FreeDOS

Die Anleitung Samsungs ist an einigen Stellen unverständlich und sogar fehlerhaft, da zusätzlich zum genannten Paket noch FreeDOS oder ein vergleichbares Betriebssystem benötigt wird. Daher fasse ich hier nochmal alle Schritte zum Firmware-Update bequem und korrigiert zusammen:

wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/FD12FULL.zip
wget -O DSRD_2_1_0.zip http://cfile208.uf.daum.net/attach/1556E4104B7E8D3A01E9DA
unzip FD12FULL.zip
sudo dd if=FD12FULL.img of=/dev/sdX status=progress
mount /dev/sdX /mnt
mkdir /tmp/DSRD
unzip DSRD_2_1_0.zip -d /tmp/DSRD/
cp -R /tmp/DSRD/ /mnt/
umount /dev/sdX

Mit diesen Schritten ist der USB-Stick inklusive DSRD-Tool vorbereitet. Nun muss der Reboot erfolgen.

Das im Update-Prozess gewünschte “Power cycle” (Neustarten) der SSD habe ich hierbei nicht durchgeführt, da die SSD in meinem Notebook fest eingebaut war. Nach dem Firmware-Update und ohne die gewünschten “Power cycle” konnte ich jedoch keine Funktionsfehler feststellen.

SMART-Daten zurückgesetzt

Beim Firmware-Upgrade wurden jegliche SMART-Daten zurückgesetzt. Glücklicherweise konnte ich jedoch anhand der Laufzeit der zweiten SSD, ziemlich genau die Laufzeit bis zum Firmware-Update errechnen:

Damals:

SanDisk SDSSDH2128G
Laufzeit: 12542 Stunden

SAMSUNG MMCRE28G5MXP-0VB
Laufzeit: 17619 Stunden

Heute:

SanDisk SDSSDH2128G
Laufzeit: 15756 Stunden

SAMSUNG MMCRE28G5MXP-0VB
Laufzeit: 20833 Stunden

(15756-12542)+17619 = 20833 Stunden

Fazit

Nach fast einem 3/4 Jahr habe ich die passende Firmware erhalten, konnte diese auf die alte SSD flashen und erreichte damit, von mir unerwartete, verbesserte Schreibgeschwindigkeiten.

von maltris am 16.11.2025 09:16


11.09.2025

Thorsten Sperber (TRex)

Containermanagement

Container sind ein tolles Tool. Man kann damit mühelos Prozesse "paketieren" und damit auch ein Stück weit vom Host isolieren, ohne sich über die zusätzlichen Attribute wie Sizing und Basissystem (wie bei LXC oder VMs) Gedanken machen zu müssen.

Man kann sich aber auch kräftig in den Fuß schießen und einen Zoo von Containern anlegen, die man nie wieder "eingefangen" bekommt. Die größte mir bekannte Kritik am Konzept liegt darin, dass das Paketmanagement vom Host-System umgangen wird und so beispielsweise Sicherheitslücken im Container rumschimmeln können. Ergo wäre ein guter Management-Layer schon sehr vom Vorteil, und das ist auch meine Motivation zum Thema gewesen.

Von BSD-Jails (2000) über Docker (2013) und Kubernetes (2014) sind wir nun bei Podman mit eng verzahnter systemd-Integration, auch Quadlets genannt (2023).

Weiterlesen… (3 min verbleiben zum Lesen)

von Thorsten am 11.09.2025 17:11


22.08.2025

Thorsten Sperber (TRex)

Take Back The Web

Take Back the Web

Warum ich mir das Web zurückhole

Das Web ist nicht für mich gemacht — es ist für Advertiser, Plattformen und manchmal für Developer gedacht, die nie über Usability nachgedacht haben. Ich nutze Userscripts (via Tampermonkey) und UserCSS (via Stylus), um:

  • Seiten für bessere Lesbarkeit umzufärben.
  • Nervige Elemente zu entfernen, die vom Content ablenken.
  • Fehlende Funktionalität nachzurüsten, wenn mir an Websites was fehlt.

Mit ein paar Zeilen eigenem Code kann ich das Web an meine Bedürfnisse anpassen.

Weiterlesen… (4 min verbleiben zum Lesen)

von Thorsten am 22.08.2025 18:37


18.06.2025

Malte Schmidt (maltris)

Windows 7 Bluescreen mit FRITZ!WLAN Stick AC 430 wenn Verbindungen zu modernen Wifi-AP’s (FRITZ!Box 7690) aufgebaut werden

Kürzlich stolperte ich beim Austausch einer alten FRITZ!Box 7490 mit einer neuesten FRITZ!Box 7690 auf ein merkwürdiges Phänomen. Um den Umstieg zu erleichtern übernahm ich SSID und Passwort des alten Gerätes und konfigurierte diese im neuen Gerät.

Als alle Client-Geräte anfingen sich neu zu verbinden stürzten plötzlich zwei Windows 7-PC’s, die zwar lange aus dem Support gelaufen sind, aber zwingend in dieser Konstellation notwendig sind, einfach mit einem Bluescreen mit Hinweis auf den Treiber “fwlanusb6.sys” ab.

In einer solchen Situation ist gleich klar, dass es sich nicht um einen Zufall handeln kann. Besonders nicht bei zwei Systemen. Schnell war klar: Beide Systeme nutzen den gleichen älteren FRITZ!WLAN Stick AC 430.

Da eine kurze Recherche keine konklusiven Ergebnisse lieferte, probierte ich spontan ein paar neuere Wifi-Einstellungen der FRITZ!Box zu deaktivieren, darunter WPA3, bzw. den Wifi-Standard zu senken. Nichts half hier, sodass ich zunächst in Erwägung zog die AC 430 abzuschaffen und auf alternative Verbindungsmöglichkeiten (neuere Wifi-Sticks oder Ethernet) zu setzen.

Letztlich wollte ich jedoch alle einfachen Möglichkeiten nicht unausgeschöpft lassen und begab mich auf die Suche nach einem aktuelleren Windows 7-Treiber. Diesen erhält man in der Tat auch. Die FRITZ!WLAN Stick AC 430 haben einen kleinen Flash-Speicher, welcher die Treiber bereithält. In meiner Ausführung waren das jedoch Treiber aus dem Jahr 2014. Lange vor MU-MIMO, Wifi 7 und 6 GHz.

Auf der FRITZ!-Seite findet man die aktuellsten Treiber für den FRITZ!WLAN Stick AC 430 – dort von 2018. Hat man diese einmal installiert, nach der manuellen Deinstallation der alten Treiber versteht sich, funktioneren die alten FRITZ!WLAN Stick AC 430 auch mit der neuesten FRITZ!Box 7690. Anwenderfreundlich ist es nicht und die Personen, welche mich hier um Hilfe baten, hätten das alleine nicht lösen können. Unklar ist auch weiterhin, was genau den Fehler auslöst. Klar ist jedoch, dass man für den FRITZ!WLAN Stick AC 430 besser auf die original mitgelieferten Treiber verzichten und stattdessen die neuesten nutzen sollte.

Die Direktlinks zu den Treibern sind aktuell hier: 64bit 32bit

Viel Erfolg!

von maltris am 18.06.2025 12:08


12.06.2025

Lars Moelleken (voku1987)

.promptrc

.promptrc

Steal this hints. Fork it. Adapt it to your needs. Treat it like .dotfiles.


I asked the LLM to analyze my own chat history based on this prompt.
Here’s what it discovered – actual patterns from the way I ask.

🕳🐇 Follow the White Rabbit…

Ritual / MechanismPurposeLLM Behavior Implication
Follow the white rabbit...Marks a mode shift into high-context or metaphoric thinkingCognitive priming for complexity
Rest in the silent room, so that...Enforces pause, clears noise before actionSimulates deep work state
Do it until you reach the point of self-discovery as...Signals reflective closure, not just output endingPattern mining becomes part of task conclusion
Do it step by step and ask for confirmation after each...Makes iteration transparent and traceableLLM reasons in deltas, not blobs
Be brutally honest...
Blind Spot Analysis for...
Forces critique over complianceModel becomes adversarial partner, not affirmation loop

🧰 Dev Prompt Patterns

Prompt / PatternWhy is it used?When does it occur?Example from usageHidden lesson / implication
Ask before outputPrevent misalignment and irrelevant outputMulti-step or underspecified prompts“Ask clarifying questions before answering.”Intent beats guesswork.
Don’t output yet / wait for contextControl flow across longer workflowsStepwise tasks“Don’t output yet. I’ll give you the next step.”Turn-based prompting prevents premature commitment.
Challenge my assumptionsAvoid echo chamber answers and surface biasDesign reviews, audits, strategic decisions“Don’t mirror me — challenge my thinking.”Truth hides behind agreement.
Be brutally honestForces raw feedback without politenessRefactor reviews, architecture critique“Be brutally honest. Tear it apart.”Feedback without fluff moves faster.
Reflect before answeringPromotes self-checks, depth, and delayed outputAfter complex code or reasoning generation“Reflect before answering. What’s missing?”Thinking ≠ typing. Pause matters.
Add test cases / edge casesEnforces robustness and avoids happy-path trapsPost-codegen“Add tests for e.g. null, failure, and recursion cases.”Defense-first mindset, always.
Show the diff / refactor in stepsMakes changes visible and digestibleAll code rewrites“Show the diff. Step-by-step, no jumps.”Transparency over magic.
Normalize similar expressionsPushes abstraction and clarityMeta-reviews, taxonomy creation“Merge similar phrasing into one normalized pattern.”Cognitive compression = clarity.
Extract as markdown / table / listImproves scanability, memory, and structureOutput formatting“Return this as a markdown table.”Structure improves reuse and recall.
Unname this conceptStrips bias-inducing labelsAbstraction, philosophy, onboarding analysis“Unname this: what is it without the buzzword?”Naming narrows thinking.
Use production-ready codeAvoids toy/demo examplesAll codegen“Make it prod-safe. Logging, errors, types.”Real devs write for prod, not playgrounds.
Spot premature optimizationSaves time and prevents complexity driftDesign or early performance tweaks“Don’t optimize yet. Solve clearly first.”Simplicity first. Always.
Ask for sources / proofsPrevents hallucination or empty confidenceAny non-trivial claim“Show evidence or references.”Confidence ≠ correctness.
Do it again, but deeperStops shallow answers in their tracksWeak initial output“Nope. Go deeper, explain decisions.”First try ≠ final draft.
Prepare before generatingEnforces scope, prevents ramblingAny open-ended task“Prepare first. Don’t generate until scoped.”Planning ≠ waste. It’s speed insurance.
Merge context from aboveEnsures continuity and avoids repeating yourselfMulti-part workflows“Incorporate the context above into this next step.”Memory = leverage.

You can also combine them:

(change the keywords in the square brackets)

  • Deep dive into this research, this is our base for the full solution, so follow the white rabbit until you reached the point of self-discovery as [YOUR_PROJECT_HERE].
  • Do a blind spot analysis for [YOUR_RECOMMENDATIONS], be brutally honest, I deal with any kind of feedback and will use it for good.
  • Fix it as requested before and show the final files here in the chat, do it step by step and ask for confirmation after each file.
  • Do it, but rest in the silent room before you start so you can focus on the frontend style-guide I provided and work with a fresh mind.

von voku am 12.06.2025 15:01


10.06.2025

Lars Moelleken (voku1987)

My Custom GPTs – Nerd-Powered Motivation for Developers

My Custom GPTs – Nerd-Powered Motivation for Developers


Over the last few months, I’ve created a collection of custom GPTs: some dealing with programming challenges with personality and humor, … some others are more useful but less funny. 

Let’s dive in.

Practical enough to ship code.

Fun enough to stop hating your legacy base.


⚔ Legacy (PHP) Code GPTs – Refactoring Fun

Legacy code isn’t just technical — it’s emotional. These GPTs are built as archetypes, each channeling a different kind of energy.

NameThemeLink
Legacy-Code-Warrior ⚔Tactical grit—battle-tested refactoring.Link
Legacy-Code-Ork 🧌Smash spaghetti code with brute-force enthusiasm.Link
Legacy-Code-Spock 🖖Calm logic, precise refactoring. Live long and debug.Link
Legacy-Code-Jedi 🌐Minimalist wisdom, clean architecture. “Refactor, you must.”Link
Legacy-Code-Son-Goku 🐉Limitless energy. Kaio-Ken times SOLID!Link
Legacy-Code-Capsule-Corp 💊Inspired by Capsule Corporation’s ingenuity from Dragon Ball.Link
Legacy-Code-Wizzard 🪄Magical abstraction powers. You shall not pass… bad code!Link
Legacy-Code-Witch 🧙‍♀️Stylish, precise refactoring incantations.Link
Paw Patrol 🐾Small dogs with SOLID coding skills. Link

Use the one that fits your mood. Or switch between them mid-session to keep your motivation from flatlining.


🐘 (PHP) Coding GPTs – Clean and Typed

These GPTs don’t tell jokes—they ship code. They’re optimized for:

Name Purpose Link
PHP Copilot++ Typing enforcer + refactoring companion with nativ PHPStan and PHP-CS-Fixer Support via API. Link
PHP Copilot++ (next-gen) Aligned, brutal clarity for PHP systems, based on the SYNC Framework Link
PHP Architect Fact-based, ASYNC-driven PHP 8.x architect eliminating inefficiencies with brutal clarity. Link
PHP #autofix 1-click autofix for all your phpstan and CS woes. Link
Codelight Follows the Codelight Manifesto. Boringly code. Link

💎 Thinking Tools – Meta, Prompt Systems

These are not just for coding. They’re for thinking before you start typing. Seriously.

NameRoleLink
SyncAIKeeps you + AI in sync via Sync Process × Codelight PrinciplesLink
Sync Framework v1.1 (old)My first try for a coding framework, optimized for LLMs.Link
MetaPromptPattern reuse for your prompts. Less yak-shaving.Link
DeepDiveClean your mental cache. Focused thought flow.Link
Blind Spot | Prompt GeneratorHelps spot untested assumptions.Link
Sync Framework v1.2 | Prompt GeneratorPrompt builder for dev workflows.Link

🧨 Disruption GPTs – Radical Clarity, No Filters

These are not nice. They won’t coddle you. Consider yourself warned.

NameFunctionLink
HVEB5000: Clarity Without PermissionCognitive demolition tool. Link
Null TongueDistraction nullifier.Link
No-Bullshit ¦ Coding AssistantSenior dev with no time for your excuses.Link

von voku am 10.06.2025 21:18


15.01.2025

(c3f2o)

Radikalisierung und Strategie: Der AfD-Bundesparteitag in Riesa als Zäsur

Am 11. und 12. Januar fand im sächsischen Riesa der Bundesparteitag der AfD statt, begleitet von massiven Protesten. Rund 600 Delegierte wählten unter anderem Partei- und Fraktionschefin Alice Weidel zur Kanzlerkandidatin und beschlossen die Aufnahme des Begriffs „Remigration“ ins Wahlprogramm. Weidels Rede sowie zahlreiche Anträge enthielten radikale Positionen, die öffentlich als Zeichen der weiteren Radikalisierung […]

von invia1200 am 15.01.2025 13:23


09.01.2025

(c3f2o)

Herr Merz: Schnauze halten!

Friedrich Merz will härter gegen straffallige Migrantenvorgehen. Warum? Weil ihm nichts Besseres einfällt, um in Schlagzeilen zu kommen. Der Mann, der einst „mehr Porsche wagen“ wollte, entdeckt plötzlich seine Liebe zum Polizeistaat – zumindest, wenn es um die anderen geht. Deutsche Täter? Steuerhinterzieher?Wirtschaftskriminelle? Keine Erwähnung. Aber der „kriminelle Ausländer“ – das zieht immer. Merz, der […]

von invia1200 am 09.01.2025 12:30


15.09.2024

Dominik Kupschke (bommi)

Protect against Display Name Spoofing with Rspamd

Email security is an ever-evolving field, and one of the persistent threats is display name spoofing. This attack involves forging the display name in an email to trick recipients into thinking the message is from a trusted source. While Rspamd is a powerful tool for combating spam and improving email security, it can be fine-tuned […]

von Dominik Kupschke am 15.09.2024 18:08


21.08.2024

Daniel Gestl (mcdaniels)

Wiki für Linuxinteressierte und Einsteiger – wiki.techgamegeek.com

In den letzten Wochen habe ich mich dazu entschieden, ein WIKI für Linuxinteressierte und Linuxanfänger zu bauen. Mittlerweile denke ich, dass ich die bisher eingepflegten Inhalte online stellen kann. Ich hoffe, dass ich damit dem einen oder anderen Umstiegswilligen etwas Starthilfe geben kann. Ihr könnt mir gerne hier oder auch auf Youtube eure Meinung, aber ... Weiterlesen

von Daniel am 21.08.2024 17:54


26.07.2024

Dominik Kupschke (bommi)

New Quad9 SSL Certificate – Mikrotik Devices Must Import New Root Certificate by July 29th

The DNS Provider Quad9 will change the certificates used by its „DNS over HTTPS“ service, those new certificates are signed from a different DigiCert Root CA as the one used before. For most systems and devices it will not be a problem, except for systems using Mikrotiks RouterOS. As Mikrotik RouterOS doesn’t ship a root […]

von Dominik Kupschke am 26.07.2024 07:07


18.07.2024

Daniel Gestl (mcdaniels)

Headtracking mit einer Webcam unter Linux – Opentrack / Neuralnet-Tracker (DEB-File / DEB-Installer Opentrack)

Ich habe mich in letzter Zeit, nicht zuletzt wegen Xplane 12, recht intensiv mit dem Thema Headtracking unter Linux beschäftigt. Leider ist es ja noch immer so, dass Naturalpoint (Thema TrackIR) Linux nicht berücksichtigt und somit Track IR meines Wissen nicht ohne Weiteres unter Linux in Betrieb zu nehmen ist und der „Linuxer“ deshalb eine ... Weiterlesen

von Daniel am 18.07.2024 17:48


16.12.2023

Stephan Tetzel (zefanja)

Einführung in Anki 23.10

Anki ist eine Karteikarten-App mit einem sehr sehr guten Algorithmus, der einem hilft, das Gelernte nicht mehr zu vergessen. Wie man lernt ohne zu Vergessen habe ich bereits in meinem letzten Artikel kurz beschrieben. Vor kurzem habe ich den Schülern meiner Schule eine Einführung in Anki gegeben. Dazu habe ich auch einige Videos und Tutorials aufgenommen.

Anki 23.10

Vor kurzem wurde eine neue Version von Anki veröffentlicht, die mindestens zwei tolle Features enthält.

Das eine ist ein neuer Algorithmus (FSRS), der aktuell einer der besten Spaced-Repetition-Algorithmen ist. Im Prinzip ist dieser Algorithmus das Herzstück von Anki, da er dafür verantwortlich ist, mir genau die Karten zu zeigen, die ich am vergessen bin. Je genauer eine App diesen Zeitpunkt berechnen kann, umso länger kann ich Dinge in meinem Gedächtnis behalten, ohne das ich sie vergesse.

Ein weiteres tolles Feature ist der neue Notiztyp „Bildverdeckung“, der jetzt nativ integriert wurde. Damit kann ich Teile von von Zeichnungen, Tabellen, Vorlesungsfolien etc. einfach abdecken und damit lernen. Auf die 3 wichtigsten Typen gehe ich in folgenden Video ein:

Einführung in Anki

Anki hat eine etwas steile Lernkurve, d.h. es dauert ein bisschen, bis man die App verstanden und durchdrungen hat. Auf der einen Seite ist sie sehr simpel aufgebaut, auf der anderen gleichzeitig sehr flexibel und erweiterbar. Daher ist es hilfreich, wenn man sich zu Beginn die ersten 5 Kapitel der Dokumentation durchliest.

Für meine Schüler habe ich ein paar einleitende Videos erstellt, die die Schritte von der Installation bis zur ersten Benutzung beschreiben. Weitere folgen noch in den nächsten Wochen und Monaten.

Fazit

Anki ist eine tolle App, die das Lernen sehr effektiv und effizient macht. Es liegt nicht so sehr an der App an sich, sondern eher daran, dass sie auf einer wissenschaftlich sehr gut untersuchte Lerntechnik basiert. Die Meta-Studie von John Dunlosky vergleicht verschiedene beliebte Lerntechniken und kommt ganz klar zu dem Ergebnis, dass verteiltes Wiederholen und Selbsttests die Lerntechniken sind, die den größten Effekt habe.

Ich möchte jeden ermutigen, egal welchen Alters, sich einmal mit dieser App auseinanderzusetzen und den sogenannten „spacing effect“ an sich selbst zu erfahren. Lernen (fast) ohne zu vergessen ist möglich 🙂

Der Beitrag Einführung in Anki 23.10 erschien zuerst auf zefanjas.

von zefanja am 16.12.2023 07:37


09.10.2023

Stephan Tetzel (zefanja)

Lernen ohne zu vergessen mit Anki

In den letzten Jahren habe ich mich immer wieder mit Erkenntnissen aus der Lernforschung auseinandergesetzt, um mein persönliches Lernen aber auch das Lernen an unserer Schule stetig zu verbessern. Ein Begriff, der mir dabei immer wieder begegnete, ist „Spaced Repetition“. Was das mit „Lernen ohne zu vergessen“ und mit Anki zu tun, möchte ich in diesem Artikel kurz beschreiben.

Was ist „Spaced Repetion“?

Spaced Repetition kann man am besten mit „zeitlich verteilte Wiederholung“ oder „verteilte Wiederholung“ übersetzen. Im Grunde geht es darum, dass ich Lerninhalte idealerweise dann wiederhole, kurz bevor ich sie vergessen habe. Wenn man Lernen als einen Kampf gegen das Vergessen bezeichnet, ist genau das wichtig: Wiederholen bevor mein Gedächtnis das Gelernte vergessen hat.

Immer dann, wenn ich Gelerntes wiederhole und mich daran erinnern kann, verlängert sich die „Speicherdauer“ in meinem Gedächtnis.

Wir alle kennen diesen Effekt. Wenn ich in meiner Schulzeit für einen Vokabeltest gelernt habe (meist am Tag davor 🙂 ), habe ich die meisten Vokabeln nach 3 Tagen wieder vergessen. Dass ist auch der Grund, warum ich mich nur noch an ganz wenige Französischvokabeln erinnern kann, obwohl ich 5 Jahre Sprachunterricht hatte. Hätte ich jedoch jeden Tag eine kleine Menge an Vokabeln gelernt und wiederholt, hätte ich mich wesentlich länger an sie erinnern können. Hier mal eine Grafik, die das Prinzip veranschaulicht:

Zusammenfassung: Wenn ich etwas Gelerntes im richtigen Moment wiederhole, kann ich die „Speicherdauer“ im Langzeitgedächtnis deutlich verlängern.

Doch woher weiß ich, wann der richtige Zeitpunkt ist, um etwas zu wiederholen? Ich möchte ja nur die Dinge wiederholen, die ich gerade am Vergessen bin und nicht die, die ich noch weiß. Das ist eine sehr wichtige Frage. Wenn ich zu viele Dinge wiederhole (v.a. Lerninhalte, die ich noch weiß), steigt mein zeitlicher Aufwand für die Wiederholungen. Wenn ich zu wenige Lerninhalte wiederhole, steigt die Chance, dass ich Dinge vergesse und ich sie letztendlich neu lernen muss.

Anki

Genau an diesem Punkt kommt Anki ins Spiel. Anki ist eine Open Source Karteikartensoftware, die mir die Arbeit der Berechnung der richtigen Intervalle abnimmt, sodass ich nur noch das wiederhole, was ich kurz vor dem Vergessen bin. Das genau ist es, was diese Lernmethode so effizient macht, denn nun kann ich Dinge in weniger Zeit lernen bzw. mehr in der gleichen Zeit, die ich bisher zum Lernen aufgewendet habe.

Anki ist eine sehr mächtige und flexible Anwendung, die sich durch viele Erweiterungen anpassen lässt. Das sorgt auch dafür, dass die Lernkurve für diese App etwas steiler ist. Deshalb empfehle ich, dass man sich am besten ein paar einführende Videos anschaut.

Karteikarten kann man sich entweder selbst erstellen oder nutzt eines der fertigen Lernpakete.

Lernen ohne zu vergessen – eine Utopie?

Persönlich nutze ich Anki seit ca. 1 Jahr. Hauptsächlich lerne ich damit Vokabeln (ja, auch wieder Französisch…), Bibelverse / -texte, Markierungen / Zitate aus Büchern, die ich gelesen habe und alles, was mich sonst noch so interessiert. Ich bin total begeistert von den Ergebnissen. Ich hätte nicht gedacht, dass es so leicht ist, sich Dinge langfristig im Gedächtnis zu behalten.

Wo ist der Haken? Damit das mit den Wiederholen zum richtigen Zeitpunkt auch klappt, muss ich meine Wiederholungen jeden Tag machen. Je nachdem wie viele Karten man lernt, können das 5 Minuten am Tag sein oder auch 2 Stunden. Der Schlüssel zum Erfolg ist die tägliche Wiederholung. Es dauert vielleicht ein paar Wochen bis man diese neue Gewohnheit in seinen Alltag integriert hat, aber man wird belohnt mit der Erfahrung, dass dieses Prinzip der verteilten Wiederholung wirklich funktioniert und unser Gedächtnis sich viele (sehr viele) Dinge merken kann.

Der Beitrag Lernen ohne zu vergessen mit Anki erschien zuerst auf zefanjas.

von zefanja am 09.10.2023 05:00


14.06.2017

Vinzenz Vietzke (vinz)

Mein XFCE Desktop im Juni 2017

Es wird Zeit, mal wieder meinen Desktop zu zeigen und wie ich ihn für mich angepasst habe. Sean hat das hier mit Xubuntu gemacht, ich übernehme die übersichtliche Struktur gerne.
Das Gerät ist ein ThinkPad x220 mit i5-2520M und 16GB RAM, einer 120GB Samsung 840 SSD, “gemoddetem” BIOS und 9-Zellen/73,3Wh Nachbauakku.

Konfiguration

  • Desktop
    • Distribution: Debian Testing (Stretch)
    • Desktopumgebung: Xfce
    • Window Manager: Xfwm4
  • Themes
    • GTK: Arc-Grey-Darker (GitHub)
    • Window Manager: Arc-Grey-Darker (GitHub)
    • Icons: Arc Limon (GitHub)
    • Cursors: Adwaita
    • Firefox: Arc-Darker (GitHub)
  • Schriften
    • Standard: Lato Regular 10
    • Window Manager: Lato Bold 10
    • Monospace: Monospace Regular 10
  • Wallpaper: Incense Stick in balinese rainforest (CC0, Artem Beliaikin)
  • Panel Plugins
    • Whisker-Menü (Homepage)
    • Benachrichtigungsfläche
    • Energieverwaltung
    • PulseAudio Plugin
    • Orage-Uhr
  • Programme im Tray
    • Audacious
    • Gajim
    • Liferea
    • Nextcloud Client (HowTo)
    • Redshift
    • Thunderbird (plus Firetray)

 

Tipps & Tricks

  • Symbol des Whisker-Menü auf debian-emblem-white setzen (siehe Screenshot)
  • Desktopsymbole deaktivieren
  • Panel: Alpha auf 85% setzen
  • Fensterknöpfe: Knopfbeschriftungen anzeigen deaktivieren, Griff anzeigen deaktivieren, Flache Knöpfe aktivieren (siehe Screenshot)
  • Super Key auf das Whiskermenu legen (ksuperkey installieren)
  • In der Fensterverwaltung unter “Anordnung der Knöpfe” alle außer Schließen entfernen.

 

Mehr Screenshots

von vinzv am 14.06.2017 00:10


30.10.2016

Jürgen Braun (jaybe)

Frankfurt Marathon

Rückblick: 25.10.2015 findet der Frankfurt Marathon statt, ich sitze gespannt vom Fernseher als Arne Gabius zu einem neuen deutschen Rekord läuft und finde es sehr interessant und spannend, zugleich aber auch verrückt und unmöglich, dies selbst einmal zu absolvieren. Einige Tage später wird der Termin für 2016 auf Facebook veröffentlicht und ich klicke auf „interessiert mich“, einfach um den Termin nicht zu verpassen, absolut ohne den Hauch eines Gedankens daran, dort vielleicht selbst zu starten. Entsprechend verblüfft reagiere ich auf beim nächsten Lauftraining auch auf die Frage eines Trainingspartners „Und, schon angemeldet“? Ich? Nein, das traue ich mir nicht zu. Andere schon: „Komm, bei Deinem Training, ein paar lange Läufe noch zur Vorbereitung, ist das kein Problem“. Soll ich wirklich? Könnte das klappen? Warum eigentlich nicht. Am 06.12.2015 war ich dann so weit:

Lieber Jürgen Braun,
vielen Dank für Deine Anmeldung zum Frankfurt Marathon 2016. Hier befinden sich alle wichtigen Daten und Angaben zu Deiner Anmeldung.

Die Bestätigungsmail des Veranstalters war da. Es kann los gehen…

Die Vorbereitung ist gut gelaufen, bei Lauftipps.ch habe ich mir einen Trainingsplan erstellen lassen, an den ich mich zumindest in den letzten 7 Wochen vor dem Wettkampf zu 100% gehalten habe. Die Wochen davor fanden noch Wettkämpfe in der Hessischen Triathlon-Liga statt und ich war noch eine Woche im Urlaub, hier musste ein wenig improvisiert und lange Läufe durch schnelle 10km im Wettkampf werden.

Nach meinen Problemen im Frühjahr mit ISG und Schienbeinkante achtete ich sehr auf irgendwelche Zeichen meines Körper und tatsächlich, drei Wochen vorm Wettkampf, am Ende des längsten Laufes über 33km waren sie da, Rückenschmerzen 🙁 Wie würden wohl im Wettkampf die noch ausstehenden 9km zu bewältigen sein, lies sich der Wettkampf überhaupt erfolgreich beenden? Durch die Erfahrung aus dem Frühjahr, war eigentlich klar, dass es vermutlich das ISG bzw. die Lendenmuskulatur sein muss, also wurde in der verbleibenden Zeit noch mehr Wert auf Übungen zur Rumpfstabilisierung gelegt.

Sonntag, 30.10.2016; Es ist so weit. Der Frankfurt Marathon steht an und ich stehe am Start.

Es ist frisch, vielleicht 7 oder 8°, jedoch bei strahlend blauem Himmel. Ich fühle mich gut vorbereitet, habe vier Gels für die Verpflegung dabei, plane mit einer Zielzeit von 3:45:00 h, also einem Schnitt von 5:20 min/km. Dann geht es los, ich starte mit einem Laufpartner aus dem Verein, doch er hat sich wohl umentschieden und will doch schneller als die 3:45:00 ins Ziel, nach ca. 2,5 km verabschiede ich mich und lasse ihn laufen, suche mir selbst mein Wohlfühltempo, das sich bei ca. 5:10 min/km einpendelt. Ich genieße die Atmosphäre an der Strecke, die Zuschauer – einige erkenne ich, als sie meinen Namen rufen – Marina und André, Cornell, Wolfgang, Thomas, …

WhatsApp Image 2016-10-30 at 12.38.51

Bis km 30 fühlt es sich gut an, sehr gut sogar, ich muss mich bremsen um nicht schneller zu werden, ich brauche die Kraft noch am Ende. Dann fängt es an, etwas zäher zu werden, bei km 35 stehen meine Frau und meine beiden Töchter, Ihre Rufe spornen mich an, noch 7km, ich versuche schneller zu werden, muss den Versuch aber aufgeben, noch 6km, noch 5km, ich hangle mich von km-Schild zu km-Schild, ab wann soll ich alles geben, sind 3:40:00 noch möglich? Plötzlich kommt Frank auf die Strecke gelaufen „Jürgen, Du hast es gleich geschafft. Du siehst etwas angestrengt aus, bist Du etwa gelaufen?“ :-D, spornt mich nochmals an und wünscht mir viel Erfolg. Ich beschleunige nochmals etwas und gebe alles was geht. Dann der Einlauf in die Festhalle, die Musik, die vielen Menschen, die Lichter, ich krame das #meinerstermarathon Band aus der Tasche, recke es in die Höhe und überquere die Ziellinie. GESCHAFFT!

Ich bin völlig außer Atem, langsam bewege ich mich in den Verpflegungsbereich, dehne Oberschenkel und Waden. Dann die Finisher-Medallie, 42,195 km in einer Zeit von 3:41:10. Ich bin sehr zufrieden, die Zielzeit unterboten, komplett durchgelaufen ohne Gehpausen (außer beim Trinken) und keine Schmerzen in den Gelenken oder der Muskulatur, auch der Rücken hat problemlos mitgemacht.

Im Verpflegungsbereich dann ein paar Becher Iso-Getränke, ein paar Apfelstückchen gegessen, etwas Mohnkuchen, alkoholfreies Weizenbier, mit den Vereinskollegen getroffen und abgeklatscht, dann zur Familie die mich schon freudig und stolz erwarten. Auf dem Weg zur S-Bahn merke ich schon, dass das Gehen etwas schwer fällt, Treppen steigen unangenehm ist und das Aufstehen nach dem Sitzen etwas länger dauert als sonst. Aber wie lautet der Spruch:

„Der Schmerz vergeht, der Stolz bleibt“


von jaybe am 30.10.2016 14:45


20.06.2020

Gerrit Kruse (MrGerardCruiz)

CentOS mit unklarem Supportstatus

LTS Distributionen sind für mich das Maß der Dinge. Lange Produktlaufzeiten, wenig Wartungsaufwand und hohe Funktions- und Laufzeitstabilität sind nicht nur im Servereinsatz wichtig. Trotz hunderter Distributionen gibt es nur wenige LTS-Varianten (siehe: Linux - Eine sichere Basis). Mit CentOS steht hier ein weiteres Projekt vor dem Ausfall.

Natürlich sind Arch, Manjaro, Tumbleweed und wie sie alle heißen tolle Projekte und für den individuellen Desktopeinsatz gut geeignet. Ich glaube auch gerne, dass viele nie oder nur extrem selten Probleme bei Updates haben. Sie taugen aber kaum für den wartungsarmen Masseneinsatz, wo der Anwender nicht selbst die Administration übernehmen kann oder will.

Es braucht diese ständigen Updates eigentlich auch nicht. Linux auf dem Desktop ist im Wartungsmodus (siehe auch: Kein Ubuntu 20.04 Test). Ob ich nun GNOME Shell 3.32 oder 3.28 verwende macht weder funktional, noch von der Stabilität einen Unterschied. Das gleiche gilt für Plasma, LibreOffice und viele weitere Projekte. Relevant sind über eine lange Laufzeit lediglich neue Treiber für neue Hardware (entweder über massive Kernel-Modifikation durch den Distributor oder neue Kernel-Versionen) und neue Browser-Versionen.

Ich habe deshalb - sofern der Anwender mit GNOME klar kam - CentOS auch für den Desktop immer gemocht. 10 Jahre Ruhe am System sind einfach eine Hausnummer. Im Serverbereich dürfte CentOS neben Ubuntu LTS und Debian ebenfalls für viele eine maßgebliche Rolle spielen.

Wie Michael Kofler in seinem Blog aber zu recht thematisiert fällt CentOS 8 inzwischen für den Produktiveinsatz eigentlich aus. 71 und 48 Tage ohne Updates sind indiskutabel. Das Projekt scheint hier leider auch nicht willens oder fähig etwas zu ändern.

Im LTS Bereich wird es jetzt eng. Die sehr lange Supportdauern von 10 Jahren bietet nun nur noch SLED gegen eine - preislich allerdings vollkommen akzeptable - Subscription. Wer mit circa 3-5 Jahren leben kann hat noch Debian, openSUSE Leap und Ubuntu LTS zur Auswahl. Viel ist das nicht mehr. Gegebenenfalls muss man sich wirklich mit Oracle Linux beschäftigen, auch wenn sich dabei alle Nackenhaare aufstellen.


Bilder:
Einleitungsbild und Beitragsbild von von mohamed Hassan via pixabay

"

von Gerrit (postfach@curius.de) am 20.06.2020 11:27


09.07.2017

Bjoern Schiessle (BeS)

Welcome to my new Homepage

Finally I moved my homepage a a complete static page powered by Hugo. Here I want to document some challenges I faced during the transition and how I solved them.

Basic setup

As already said I use Hugo to generate the static sites. My theme is based on Sustain. I did some changes and uploaded my version to GitLab.

I want to have all dependencies like fonts and JavaScript libraries locally, so this was one of the largest changes to the original theme. Further I added a easy way to add some share buttons to a blog post, like you can see at the end of this article. The theme also contains a nice and easy way to add presentations or general slide shows to the webpage, some examples can be seen here. The theme contains a example site which shows all this features.

Comments

This was one of the biggest challenges. I had some quite good discussion on my old blog powered by Wordpress so I don’t want to lose this feature completely. There are some solutions for static pages but non of these are satisfying. For example Staticman looks really promising. Sadly it only works with GitHub. Please let me know if you know something similar which doesn’t depend on GitHub.

For now I decided to do two things. By default I add a short text at the end of each article to tell people to send me a e-mail if they want to share or discuss their view on the topic. Additionally I can add to the meta data of each posts a link to a Friendica post. In this case the link will be added at the end of the article, inviting people to discuss the topic on this free, decentralised and federated network. I have chosen Friendica because it allows users to interact with my blog posts not only with a Friendica account but also with a Diaspora, GNU Social, Mastodon or Hubzilla account. If you have a account on one of these networks and want to get updates about new blog posts in order to participate in conversations around it, follow this Friendica account. I also created a more detailed description for people new to the world of free social networking.

Deployment

After all the questions above where answered and a first version of the new webpage was in place, I had to find a easy way to deploy it. I host the source code of my homepage on GitLab which has a nicely integrated CI service which can be used to deploy the webpage on any server.

Therefore we need to add a CI script called .gitlab-ci.yml to the root of the repository. This script needs to contain following (please adjust the paths):

image: publysher/hugo

before_script:
  - apt-get update
  - apt-get --yes --force-yes install git ssh rsync
  - git submodule update --init --recursive

pages:
  script:
  - hugo
  - mkdir "${HOME}/.ssh"
  - echo "${SSH_HOST_KEY}" > "${HOME}/.ssh/known_hosts"
  - echo "${SSH_PRIVATE_KEY}" > "${HOME}/.ssh/id_rsa"
  - chmod 700 "${HOME}/.ssh/id_rsa"
  - rsync -hrvz --delete --exclude=_ public/ schiesbn@schiessle.org:/home/schiesbn/websites/schiessle.org/htdocs/
  artifacts:
    paths:
    - public
  only:
  - master

We need to create a ssh key-pair to deploy the webpage. For security reasons it is highly recommend to create a ssh key used only for the deployment.

The variables SSH_HOST_KEY and SSH_PRIVATE_KEY need to be set at GitLab in the CI settings. SSH_PRIVATE_KEY contains the private ssh key which is located in the ~/.ssh directory.

To get the right value for SSH_HOST_KEY, we run ssh-keyscan <our-webpage-host>. Once we executed that command, we should see something similar to schiessle.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCtwsSpeNV.... Let’s copy this to the SSH_HOST_KEY value in our GitLab settings.

Finally we need to copy the public ssh key to the .ssh/authorized_keys file on the web-server to allow GitLab to access it.

Now we are already done. The next time we push some changes to the Github repository GitLab will build the page and sync it to the web-server.

Using the private key stored in the GitLab settings allows everyone with access to the key to login to our web-server. Something we don’t want. Therefore I recommend to limit the ssh key to only this one rsync command from the .gitlab-ci.yml file. In order to do this, we need to find the exact command send to the web-server by adding -e'ssh -v' to the rsync command.

Executing the rsync command with the additional option should result in something like:

debug1: Sending command: rsync --server -vrze.iLsfxC --delete . /home/schiesbn/websites/schiessle.org/htdocs/

we copy this command to create following .ssh/authorized_keys entry:

command="rsync --server -vrze.iLsfxC --delete . /home/schiesbn/websites/schiessle.org/htdocs/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Sf/PDty0d0SQPg9b+Duc18RxPGaBKMzlKR0t1Jz+0eMhTkXRDlBMrrkMIdXJFfJTcofh2nyklp9akUnKA4mRBVH6yWHI+j0aDIf5sSC5/iHutXyGZrLih/oMJdkPbzN2+6fs2iTQfI/Y6fYjbMZ+drmTVnQFxWN8D+9qTl49BmfZk6yA1Q2ECIljpcPTld7206+uaLyLDjtYgm90cSivrBTsC4jlkkwwYnCZo+mYK4mwI3On1thV96AYDgnOqCn3Ay9xiemp7jYmMT99JhKISSS2WNQt2p4fVxwJIa6gWuZsgvquP10688aN3a222EfMe25RN+x0+RoRpSW3zdBd

Now it is no longer possible to use the private key, stored at GitLab to login to the web-server or to perform any other command than this specific rsync command.

Interesting observation

I run this static webpage now for a few weeks. During this weeks I got quite some email from people interested in some topic I write about in my blog. This are not new blog articles, but posts which where already online for quite some time. Somehow it looks like more people find this articles after the transition to a static site. Maybe search engines rate the static site higher than the old Wordpress page? I don’t know, maybe it is just a coincidence… but interesting.

von Björn Schießle (bjoern@schiessle.org) am 09.07.2017 09:04


08.04.2018

Gerrit Kruse (MrGerardCruiz)

Datenabfluss bei Facebook - Eine Nachbetrachtung

Bild von geralt via pixabay / Lizenz: CC0 Creative Commons

Facebook hatte jüngst mit schlechter Presse zu kämpfen. Länder- und medienübergreifend artikulierte sich massive Kritik an der Praxis wie dort mit Daten umgegangen wird. Manche Journalisten sehen darin die größte Krise in der nicht mehr ganz so jungen Geschichte des sozialen Netzwerks. Die Aktienmärkte sahen das vergangene Woche nicht unähnlich wenn man sich die Entwicklung des Kurses von Facebook anschaut.

Viele Datenschützer konnten sich eine gewisse Häme nicht verkneifen. Gehört umfassende Kritik an Facebook doch zum Standard-Repertoire von datenschutzbewussten Menschen (und solchen, die sich dafür halten). Die empfohlene Lösung war dann natürlich wie erwartet radikal. Verlasst endlich Facebook schallte es aus allen Kommentarspalten und Blogs.

In der Printausgabe der Süddeutschen Zeitung konnte man dazu vergangene Woche einen schönen Vergleich lesen. Sinngemäß ging es darum, dass die Aufforderung Facebook zu verlassen, weil man mit der Datenhandhabung moderner IT-Unternehmen unzufrieden ist, genau so erfolgversprechend ist wie das Essen einzustellen, weil man mit der Lebensmittelindustrie unzufrieden ist. Konsequent aber letztlich aussichtslos weil es an der Lebenswirklichkeit vorbei geht.

Genau dies beschreibt den Einfluss der Datenschützer auf das Verhalten der Masse. Radikal, konsequent und weitestgehend ignoriert, da wirklichkeitsfern. Bei diesem Thema und bei vielen anderen auch.

Es ist keineswegs so, dass Facebook das Verlangen für sein Produkt erst bei den Menschen wecken musste. Etwas was man den Silicon Valley Firmen gerne nachsagt. In einer hochgradig mobilen Gesellschaft bedient Facebook einfach ein Bedürfnis. Es vereinfacht soziale Vernetzung über große Zeiträume und Distanzen einfach enorm, viele Menschen leben halt nicht mehr in einer Welt, in der man alle Freunde im Vereinslokal trifft. Ein Verlassen des sozialen Netzwerks ist daher für viele Anwender mit einem nicht unerheblichen sozialen Einschnitt verbunden. Das betrifft nicht nur die Selbstdarsteller auf der Timeline, sondern eben auch die Gruppen und den Messenger.

Außerdem ist ein großer Trugschluss, dass man Facebook einfach den Rücken kehren kann. Man muss auch alle zugehörigen Dienste, am bekanntesten darunter sind sicher WhatsApp und Instagram, verlassen und trotzdem kann Facebook über die Vernetzung mit unzähligen Internetseiten - der Like-Button macht es möglich - noch ein Profil erstellen.

Letztlich übt man sich zwar in digitaler Selbstverstümmelung, erzielt aber nicht mal den erwünschten Effekt.

Zielführender sind da sicher Maßnahmen wie der kürzlich vorgestellte Mozilla Facebook Container. Er ermöglicht Teilhabe aber kontrolliert ein bisschen besser, was Facebook außerhalb des Netzwerks noch über einen sammeln kann. Viele weitere Maßnahmen wie ein Mehr-Browser-Konzept, sinnvoll ausgewählte Addons und reflektierte Handhabung des Netzwerks können es Facebook erschweren unerwünscht Daten zu sammeln.

Keine dieser Maßnahmen hätte den Datenabfluss von Facebook an Dritte verhindern können. Es ist auch nicht die Aufgabe des Bürgers paranoid seine Aktivitäten gegenüber den IT-Giganten zu verschleiern, sondern die Politik muss die Daten der Bürger entschieden gegen Missbrauch schützen und Verstöße hart bestrafen. Dafür kann der Bürger an der Wahlurne stimmen. Einfach mal bei der Wahl den Digitalthemen mehr Priorität einräumen, anstatt in den Kommentarspalten gegen Facebook zu wettern. Die deutsche Regierung ist nämlich keineswegs so rigoros im Datenschutz, wie sie sich jetzt medial gibt.

von Cruiz (mailer@curius.de) am 08.04.2018 13:05


01.02.2009

Bjoern Schiessle (BeS)

An awesome event is over: KDE 4.2 Release Party and Fellowship Meeting at Stuttgart

At Friday, 30.Jan.09 we had a joint event between KDE and the Fellowship of the Free Software Foundation Europe (FSFE) and it was simply awesome! Beside a lot of KDE and FSFE people we had a lot of visitors and at the end we were about 40 people! All interested in KDE 4.2 and Free Software.

At the beginning Frederik started with an introduction and showed all the new and cool things in KDE 4.2. After that i gave a talk about the work of FSFE, especially in 2008, explained the role of the Fellowship for FSFE and highlighted some cool activities from our Fellows. My slides can be found here (German). I think i could attract some people and would be really happy to see some new faces at our next Fellowship meeting (probably somewhen in March). If you don’t want to miss it, subscribe to our mailing list for South Germany.

After my talk we made a small break and than Frank continued with a very interesting talk about the KDE community and how to get involved as a developer, writer, artist or user. Last but not least Sven talked about the new version of Amarok and what we can expect from the new release.

This was the official part. Now the party started and we had a lot of fun and many interesting discussions between KDE developers and users, FSFE Fellows and all the other people who joined us at this evening. We also discussed some possible activities for the Fellowship Group Stuttgart. Some Fellows seems to be quite interested in the topic “Free Software in school and education”. I also think that this is a really important topic. Remember, the pupils from today are the decision makers from tomorrow.

As it becomes later a small group of people survived. One of them was Martin Konold, a KDE Developer from the very first days of KDE. He told us a lot of interesting and funny stories about the beginning of KDE and the development of the Free Software desktop.

At 2:30 at night a great event was over. I really want to thank Frederik for his great help in organising this event and all the other KDE people who helped to make this event that awesome! It was a lot of fun and a great cooperation between KDE and FSFE people! Looking forward for the next opportunity to organise such a great event!

More pictures can be found here.

von Björn Schießle (bjoern@schiessle.org) am 01.02.2009 16:30


04.07.2018

(Meillo)

2018-07-05

2018-07-05



A new ssh login attack wave after the previous one had ended ...




http://marmaro.de/lue/        markus schnalke <meillo@marmaro.de>

04.07.2018 22:00


07.12.2019

Malte Kiefer (beLI3VeR)

Threema Lizenzen zu verschenken

Wie in den letzten Jahren werde ich auch dieses Jahr wieder Threema Android Lizenzen verschenken. Dieses Jahr werde ich 5 Lizenzen verschenken. Dazu erhalten die Gewinner oder Glücklichen von mir einen Lzenzschlüssel, mit dem sie auf der Webseite von Threema dann den Android Client nach Eingabe des Lizenzschlüssel herunterladen können.

Es ist nicht möglich, damit Threema vom PlayStore sondern nur aus dem Threema Store herunterzuladen.

Teilnahme

Die Teilnahme ist ganz einfach. Die ersten 5 Nutzer die mich via XMPP / Jabber anschreiben wird (pr3ach3r@trashserver.net) und die folgenden Fragen richtig beantworten kann:

1.) Aus welchem Land kommt Threema? 2.) Was bedeuten die 3 grünen Punkte bei einem Threema Kontakt? 3.) Was ist der Threema Safe?

Ich freue mich auf eure Einsendungen. Ich möchte festhalten ich stehe in keine Zusammenhang mit Threema. Ich kaufe die Lizenzen zum vollen Preis und dieses soll auch keine Werbaktion für mich oder Threema sein. Ich will nur einen kleinen Teil zu mehr Datenschutz und Sicherheit beitragen.

von Malte Kiefer (malte.kiefer@mailgermania.de) am 07.12.2019 00:00


07.03.2018

(Meillo)

2018-03-08

2018-03-08



If you want PCRE on the command line but your  grep(1)  does  not
offer  `-P'  (*not* offering it is what it *should* do!), you can
use this one:

     perlgrep() {
             perl -e 'my $re = shift; print grep { /$re/ } <>;' "$@"
     }

[0]



Discovered  some interesting facts about the GIF format.  [1] You
*are* able to use more than 256 colors, just not within one block
...  but  you can use multiple blocks for building True Color GIF
images!


[0]  https://debianforum.de/forum/viewtopic.php?f=34&t=168942#p1167421
[1]  https://debianforum.de/forum/viewtopic.php?f=29&t=168943&p=1167436#p1167436


http://marmaro.de/lue/        markus schnalke <meillo@marmaro.de>

07.03.2018 23:00


18.01.2013

Vinzenz Vietzke (vinz)

Tor und Tor-Browser in Fedora 17/18 installieren

Jamie Nguyen hat Tor und Tor-Browser für Fedora paketiert. Um diese Pakete über sein Repository zu bekommen, installiert ihr euch entweder das Release-Package oder macht das von Hand:

wget https://jamielinux.com/pub/jamielinux-tor-release.noarch.rpm
yum install ./jamielinux-tor-release.noarch.rpm

Danach installiert ihr alle nötigen Pakete, aktiviert und startet Tor. Alle Pakete sind GPG-signiert.

yum install tor tor-browser tor-browser-selinux
systemctl enable tor.service
systemctl start tor.service

Optional könnt ihr mit "tor-browser-selinux" die Unterstützung für SELinux installieren.

von vinzv am 18.01.2013 09:52


25.07.2017

Christian Schmitt (slater)

WTF

16 Grad C im Juli!???!

von Slater am 25.07.2017 09:02


24.03.2014

Manuel Kaderli (suntsu)

Be careful using ThreadStatic in Visual Studio unit tests

Given is a ThreadStatic field which is set to empty in the static constructor, and set by a public instance method:

    public class TestClass
    {
        [ThreadStatic] 
        private static string threadStaticValue;
        static TestClass()
        {
            threadStaticValue = "";
        }
        public void SetThreadStaticValue(string value)
        {
            threadStaticValue = value;
        }
        public string GetThreadStaticValue()
        {
            return threadStaticValue;
        }
    }

Now two unit tests check whether the threadStaticValue is set correct.

    [TestClass]
    public class ThreadStaticTest
    {
        [TestMethod]
        public void WithThreadStaticValueSetTest()
        {
            Debug.WriteLine("Thread id: {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
            TestClass tc = new TestClass();
            tc.SetThreadStaticValue("foo");
            Assert.AreSame(tc.GetThreadStaticValue(), "foo");
        }
        [TestMethod]
        public void WithThreadStaticValueNotSetTest()
        {
            Debug.WriteLine("Thread id: {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
            TestClass tc = new TestClass();
            Assert.AreSame(tc.GetThreadStaticValue(), "");
        }
    }

Those tests will fail(good) or pass(bad) depending of whether the test engine will reuse the same thread.

Executed a second time, the result could be different.

Solution:

  1. Don't use ThreadStatic at all
  2. Make sure the ThreadStatic fields are initialized correctly before using them

von suntsu (nospam@example.com) am 24.03.2014 11:28


13.11.2017

Christian Schmitt (slater)

Amazone Prime Video mit Linux Mint

Hej zusammen…

Ich habe heute mit meiner frischen installation von Linux Mint gekämpft… Prime Vido wollte nicht so wie ich es wollte…

Erst mal das was nicht geklappt hat:

Die ganzen Tips mit installiere HAL Lib über verschiedene wege…
Silverlight mit Wine…
Diverse Einstellung (hatten auch alle mit hal-libery zu tun)

Geholfen hat zum Schluss Mint selber!

Über das Start-Menü habe ich den Menüpunkt Multimedia ausgewählt. Dort wurde angeboten das Mint alles was Multimedia zu tun hat von alleine installiert… Jetzt läuft das mit Amazone Prime Video. Leider weiß ich nicht was alles am System jetzt geändert wurde von alleine… Mehdienwiedergabe, Rythmbox und VLC Player sind als einziges über das Multimedia Menü zusätzlich sichtbar und vorerst die einzigen Änderung die durchgeführt wurden.

Wenn ich noch was finde, was geädert wurde, werde ich es hier aktualisieren…

von Slater am 13.11.2017 19:00


08.05.2018

Malte Kiefer (beLI3VeR)

Kommentare mit Github

Ich bin ein großer Freund vom Datenschutz, leider unterstützt Hugo nur disqus, was alles andere als freundlich zum Datenschutz ist. Also gab es die letzten Monate nie eine Kommentar Funktion, das hat sich jetzt geändert.

Ich bin durch Zufall auf den Artikel von Don Williamson gestoßen, der es mir erlaubt eine Kommentar Funktion für meine Artikel durch Github anzubieten.

Konfiguration

Als erstes legen wir eine Datei comments.html im Ordner themes/THEME_NAME/layouts/partials/ mit folgenden Inhalt an:

<div id="gh-comments">
          <h2>Kommentare</h2>
              <div id="gh-comments-list"></div>
                  <a href="javascript:void(0)" id="gh-load-comments" class="btn" style="display:none">Load more comments</a>
</div>

   <script type="text/javascript" data-ghid="{{ $.Params.ghcommentid }}" src="{{ .Site.BaseURL }}js/github-comments.js"></script>

Als nächstes brauchen wir jetzt noch die JS Datei, die für uns die ganze Arbeit macht themes/THEME_NAME/static/js/github-comments.js mit folgenden Inhalt:

// use of ajax vs getJSON for headers use to get markdown (body vs body_htmml)
// todo: pages, configure issue url, open in new window?
//

var this_js_script = $('script[src*=github-comments]');


var ghid = this_js_script.attr('data-ghid');   
if (typeof ghid === "undefined" ) {
   var ghid = '0';
}

DoGithubComments(ghid);

var CurrentPage = 0;

function ParseLinkHeader(link)
{
    var entries = link.split(",");
    var links = { };
    for (var i in entries)
    {
        var entry = entries[i];
        var link = { };
        link.name = entry.match(/rel=\"([^\"]*)/)[1];
        link.url = entry.match(/<([^>]*)/)[1];
        link.page = entry.match(/page=(\d+).*$/)[1];
        links[link.name] = link;
    }
    return links;
}

function DoGithubComments(comment_id, page_id)
{
    var repo_name = "beli3ver/malte-kiefer.de";

    if (page_id === undefined)
        page_id = 1;

    var api_url = "https://api.github.com/repos/" + repo_name;
    var api_issue_url = api_url + "/issues/" + comment_id;
    var api_comments_url = api_url + "/issues/" + comment_id + "/comments" + "?page=" + page_id;

    var url = "https://github.com/beli3ver/malte-kiefer.de/issues/" + comment_id;

    $(document).ready(function ()
    {
        $.getJSON(api_issue_url, function(data) {
            NbComments = data.comments;
        });

        $.ajax(api_comments_url, {
            headers: {Accept: "application/vnd.github.v3.html+json"},
            dataType: "json",
            success: function(comments, textStatus, jqXHR) {

                // Add post button to first page
                if (page_id == 1)
                    $("#gh-comments-list").append("<a href='" + url + "#new_comment_field' rel='nofollow' class='btn'>Füge eine Kommentar hinzu</a>");

                // Individual comments
                $.each(comments, function(i, comment) {

                    var date = new Date(comment.created_at);

                    var t = "<div id='gh-comment'>";
                    t += "<img src='" + comment.user.avatar_url + "' width='24px'>";
                    t += "<b><a href='" + comment.user.html_url + "'>" + comment.user.login + "</a></b>";
                    t += " posted at ";
                    t += "<em>" + date.toUTCString() + "</em>";
                    t += "<div id='gh-comment-hr'></div>";
                    t += comment.body_html;
                    t += "</div>";
                    $("#gh-comments-list").append(t);
                });

                // Setup comments button if there are more pages to display
                var links = ParseLinkHeader(jqXHR.getResponseHeader("Link"));
                if ("next" in links)
                {
                    $("#gh-load-comments").attr("onclick", "DoGithubComments(" + comment_id + "," + (page_id + 1) + ");");
                    $("#gh-load-comments").show();
                }
                else
                {
                    $("#gh-load-comments").hide();
                }
            },
            error: function() {
                $("#gh-comments-list").append("Kommentarfunktion für diesen Beitrag nicht aktiviert!");
            }
        });
    });
}

Jetzt müssen die Links in der Datei angepasst werden. Ihr müsst eine eigne Repo anlegen bei Github und hier in der Datei anpassen. Achtung: Wir brauchen auch jQuery!. jQuery sollte umbedingt im <head></head> geladen werden.

Zum Schluss noch das Template für die Beitragsdatei anpassen (themes/THEME_NAME/layouts/_default/single.html) und den folgenden Teil for dem Aufruf des <footer></footer> Tags einfügen:

{{ partial "comments.html" . }}

Um jetzt die Kommentarfunktion zu nutzen, ein entsprechendes issue bei Github eröffnen, die ID merken. Wenn ihr dann einen neuen Beitrag erstellt, müsst ihr vor den "---" folgendes einfügen:

ghcommentid: ID

Und das wars, nun habt ihr und ich eine Kommentarfunktion.

CSP

Damit ihr diese Funktion mit CSP nutzen könnt, müssen folgende Einstellungen gesetzt sein:

img-src 'self' https://*.githubusercontent.com;
connect-src 'self' https://*.github.com

von Malte Kiefer (malte.kiefer@mailgermania.de) am 08.05.2018 00:00


24.06.2016

Helmut Roewer (Dunkelangst)

HKG✈KHH

Trip 35

Flight KA 450 from HKG to KHH

  • Flight 89: Hong Kong International Airport to Kaohsiung International Airport
  • Airbus A 330-300 – Dragonair
  • planed duration: 1h 25min
  • See also the itinerary to get an overview.

von Helmut am 24.06.2016 19:46


18.08.2010

Jürgen Braun (jaybe)

Android Tablet

Auch wenn ich den Hype um das Apple iPad nicht nachvollziehen kann (es funktioniert gut und sieht schick aus, ist mir aber zu teuer und bevormundet einen bei der Nutzung), so finde ich das Konzept eines Tablets doch ganz reizvoll. Wichtig ist jedoch, dass man sich über den Einsatzzweck klar wird. Für mich soll es keinen Ersatz für PC/Notebook/Netbook darstellen, sondern ein Gerät sein, mit dem man gemütlich auf der Couch seine Mails checken, in Foren stöbern, Facebook Nachrichten lesen, … also hauptsächlich Daten im Internet konsumieren kann.
Für 179.-€ war nun ein Tablet mit Android 2.1 angekündigt. Die Beschaffung gestaltete sich ein wenig schwierig und dauerte etwas länger, da das Gerät nicht wie angekündigt bereits montags erhältlich war, sondern erst eine Woche später als verfügbar gelistet wurde und bestellt werden konnte. In der Zwischenzeit waren auch erste Erfahrungsberichte von Benutzern aufgetaucht. Die Bandbreite war gewohnt groß und begann bei „der letzte Schrott“. Das folgende Fazit eines Benutzers ermutigte mich jedoch dazu, mir solch ein Gerät zu bestellen:

..ich sags mal ganz unverblümt
Das Ding ist nichts für Leute die den Ipad Killer erwartet haben und davon ausgehen das alles „out of the box“ für €179.- funktioniert..

Für alle anderen, die spaß an linux haben, lässt sich da sicher noch einiges machen bzw. fehlende funktionen nachrüsten.

Am Wochenende wurde das Gerät dann geliefert, die Inbetriebnahme musste jedoch bis Sonntag Abend warten.
Einloggen in das WLAN, Einrichten von Googlemail, Zugriff auf den eigenen Mailserver, Surfen im Web und die installierten Applikationen für Google Maps und YouTube funktionierten problemlos. Das Touch-Display lässt sich schwer bedienen, vor allem das Scrollen ist etwas umständlich, mit resistiver Technologie aber auch nur schwer umsetzbar, das funktioniert bei meinem Garmin-Navi aber auch nicht besonders.
Hardware

Billig wirkendes Plastik, vier Buttons auf der Gehäuserückseite für Zurück, Home, Suchen und Menü fühlen sich nicht besonders an und man muss sich die Position merken, da man sie nicht sieht.
Software

  • Browser: Eingabe über Touchscreen hakelig auch bei Verwendung des Eingabestiftes. Lädt und stellt die Webseiten recht flott dar.
  • Mail: Konfiguration von mehreren Mailservern möglich, Zugriff per POP3 oder IMAP
  • Google Maps: schnelle Darstellung der Karten, Layer für Satellitenbild und Wikipedia einblendbar. Bei Wikipedia werden „W“s eingeblendet, auf die man direkt klicken und Infos aus Wikipedia abrufen kann
  • Google Mail: direkte Verknüpfung mit meinem Google Mail Account, funktioniert einfach.
  • YouTube Player: direkte Verknüpfung mit meinem YouTube Account: Playlisten, Favoriten, … werden angezeigt. Suche ist möglich, Abspielen in voller Auflösung funktioniert sehr gut.
  • Android Market: Zuerst nicht gestartet, dann zwar gestartet, man konnte suchen und „installieren“, der Download kommt aber nicht zum Ende und es wird nichts installiert. Ein bekanntes Problem, es liegt wohl keine offizielle Google-ID vor.

Bisheriges Fazit: Wenn man nicht tippen muss, sondern sich auf Lesen/Sehen/Hören beschränkt, funktioniert das Tablet. Für die eingeschränkte mitgelieferte Software hätte ich es wohl nicht gekauft, ABER es gibt eine Seite mit Howtos, da wird erklärt, wie man das Gerät patchen, den Market aktivieren, auf alternative Markets umsteigen oder direkt die APKs installieren kann. Und wenn das dann funktioniert, kann es ein ganz brauchbares Gerät werden.


von jaybe am 18.08.2010 18:24


29.12.2011

Manuel Kaderli (suntsu)

Authenticate to smugmug with oAuth and c#

Some weeks ago, i tried to create a windows phone 7 smugmug app(photo browser). I had some problems with oAuth at the beginning, First, I tried the google oAuth implementation in c# with the result that the first request(AcquireRequestToken) worked, but the second request(AcquireAccessToken) failed with an invalid signature. Then i tried to implement it myself with the same result.

Even with the smugmug oAuth documentation, i found it quite hard to get it done. Some parts like the authorize parameters(public/full/read/modify) i had to figure out myself.

After some time, i found an c# oAuth class written for twitter access for cropperplugins.codeplex. With this code, i was at least able to get a proper AccessToken for smugmug. I've written a little demo application if someone else has the same problems.

To get this sample working, you only have to set you apiKey and secret. This sample will do: 1. Get a request token and a request token secret 2. Authorize the request token 3. With the request token secret, acquire a access token 4. This access token and access token secret are used for all further authentication, and should not expire until the user revokes them.

        private void AuthenticateSmugmug()
        {
            const string apiKey = "YOURAPIKEY";//apikey from your smugmug account
            const string secret = "YOUR_SECRET";//secret from your smugmug account

        Console.WriteLine("Create new instance of OAuth Manager");
        Manager manager = new Manager(apiKey, secret);

        Console.WriteLine("Aquire a request token from smugmug");
        OAuthResponse requestToken = manager.AcquireRequestToken("http://api.smugmug.com/services/oauth/getRequestToken.mg", "GET");

        string oauthToken = requestToken["oauth_token"];
        Console.WriteLine(string.Format("oauthToken: {0}", oauthToken));
        string oauthTokenSecret = requestToken["oauth_token_secret"];
        Console.WriteLine(string.Format("oauthTokenSecret: {0}", oauthTokenSecret));

        //Opens your default browser and authorize your request token
        //Parameters: Access=[Public|Full], Permissions=[Read|Add|Modify]
        System.Diagnostics.Process.Start(string.Format("http://api.smugmug.com/services/oauth/authorize.mg?oauth_token={0}&Access=Full&Permissions=Modify", oauthToken));

        Console.WriteLine("Please enter you credentials into the browser before continuing");
        Console.WriteLine("Press any key to continue...");
        Console.ReadLine();

        OAuthResponse accessToken = manager.AcquireAccessToken("http://api.smugmug.com/services/oauth/getAccessToken.mg", "GET", oauthTokenSecret);

        Console.WriteLine(string.Format("accessToken: {0}", accessToken["oauth_token"]));
        Console.WriteLine(string.Format("accessTokenSecret: {0}", accessToken["oauth_token_secret"]));
        Console.WriteLine("Press any key to quit the application");
        Console.ReadLine();
    }

This is the complete source code for the oAuth sample. It's c# written in Visual Studio 10: To get this sample working, just enter your Api Key and Secret. SmugmugOAuthSample.zip

von suntsu (nospam@example.com) am 29.12.2011 09:31


Willkommen!
Forum
Chat
Wiki/Tipps
Planet
Bildergalerie
Links
Twitter
dieses und jenes
Blogger
(BigOlly) (feed)
(Lord_Carlos und mweinelt) (feed)
(Meillo) (feed)
(Trurl) (feed)
(c3f2o) (feed)
(emge) (feed)
(thoys) (feed)
(trompetenkaefer) (feed)
Andre Nitschke (gnude) (feed)
Axel Hellinger (cryptolegal) (feed)
Beni Goll (Bennerl) (feed)
Bernd Dau (whisper) (feed)
Bert Radke (bert) (feed)
Bjoern Schiessle (BeS) (feed)
Christian Imhorst (immi) (feed)
Christian Schmitt (slater) (feed)
Christoph Wickert (raoul) (feed)
Daniel Gestl (mcdaniels) (feed)
Darian (thoys) (feed)
Dominik George (Natureshadow) (feed)
Dominik Kupschke (bommi) (feed)
Dominik Pieper (nachtwandler) (feed)
Felix Schmeing (gimbar) (feed)
Gerrit Kruse (MrGerardCruiz) (feed)
Helmut Roewer (Dunkelangst) (feed)
Hendrik Richter (Hendi) (feed)
Holger Reinmann (codeaeffchen) (feed)
Jan Hauke Rahm (jhr-online) (feed)
Jochen Skulj (feed)
Jochen Welzel (jeff84) (feed)
Joerg Kastning (Tronde) (feed)
Jörg Kruse (4A4B) (feed)
Jürgen Braun (jaybe) (feed)
Lars Moelleken (voku1987) (feed)
Malte Kiefer (beLI3VeR) (feed)
Malte Schmidt (maltris) (feed)
Manuel Kaderli (suntsu) (feed)
Marc Nowak (TCA) (feed)
Marco Laspe (rockiger) (feed)
Marco Scholtyssek (marco_s) (feed)
Marco Scholtyssek (marco_s) (feed)
Marius M. M. (devilx) (feed)
Markus Matuszczak (konsumer) (feed)
Markus W. Kropp (Musix) (feed)
Martin Dosch (Dogge) (feed)
Mirko Weber (tylerD) (feed)
Nico Hartung (xyznico) (feed)
Oliver Groschopp (beetlefrosch) (feed)
Patrick Schmid (compr00t) (feed)
René Hering (ReneH) (feed)
Roman Hanhart (Thurgau) (feed)
Sabine Becker (AtariFrosch) (feed)
Sebastian Feltel (feltel) (feed)
Sebastian Moors (mauser) (feed)
Stefan J. Betz (encbladexp) (feed)
Steffen Moeller (smoe) (feed)
Steffen Rumberger (inne) (feed)
Stephan Tetzel (zefanja) (feed)
Sven S. (FearFactor) (feed)
Thorsten Sperber (TRex) (feed)
Tobias Dols (TobsenD) (feed)
Tom Karasek (Natas12) (feed)
Torsten Werner (bollin) (feed)
Viktor Bindewald (Vitei) (feed)
Vinzenz Vietzke (vinz) (feed)
posativ (feed)
Feeds
ATOM Feed
RSS 1.0 Feed
RSS 2.0 Feed
FOAF
OPML
Letztes Update
11.09.2026 23:16 (GMT+1)
Planetarium
Planet Debian
Planet Debian Administration
Planet Skolelinux
Planet Ubuntu
Planet RootForum
Planet symlink
Planet GNOME
Planet KDE
Planet Apache
Planet freedesktop.org
mehr ...
top
Zum Seitenanfang
Diese Webseite ist keine offizielle Webseite des Debian Projekts.
Haftungsausschluss und Impressum –Datenschutzrichtlinie – debianforum.de Verhaltensregeln

Powered by Planet Venus
Template entwickelt von Timo Salmen, basierend auf dem Debian Live Template, entwickelt von Christoph Haas.