Articles tagged with Howto

  • 🔗3D Drucker automatisch mit Octoprint in KVM VM verbinden.

    Der Gedanke, einen echten PC als zentralen Rechner mit vielen Octoprint-Instanzen zu nutzen, ist naheliegend und preiswert. Dabei will man jedoch nicht zwangsweise auf dem Host selbst installieren, sondern in eine virtuelle Maschine. Das hat zahlreiche Vorteile, wie z.B. Snapshots und vereinfachte Hostmigration, bringt aber auch Komplexität mit sich.

    uml diagram

    Die virtuelle Maschine kann die Drucker nun nicht mehr direkt sehen, weil /dev auf dem Host nicht gleich /dev in der virtuellen Maschine ist. Daher müssen die Drucker dynamisch und möglichst automatisch an die die virtuelle Maschine durch gereicht werden. Unter Linux kein Problem, dank udev.

    Udev-Regel im VM Host erstellen

    Die Regeln für udev sind leicht erstellt. Vorher braucht man aber den Identifikator des Gerätes. Ich nehme meist

    watch -n .1 lsusb

    und verbinde dann das Gerät. So sehe ich schnell, welches Gerät dazu kommt und welchen Identifikator es hat. Mein Drucker sieht dann so aus. Die ID ist die entscheidende Information.

    Bus 003 Device 007: ID 1a86:7523 QinHeng Electronics CH340 serial converter
    

    Nun die Konfigurationsdatei in /etc/udev/rules.d/20_3dprinter.rules erstellen. Meine sieht so aus.

    ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ENV{DEVTYPE}=="usb_device", RUN+="/opt/scripts/attach_wanhaoi3plus.sh"
    

    Damit wird beim Anstecken des Gerätes ein Skript ausgeführt. Udev kann leider keine Argumente an die ausgeführten Skripte weitergeben. Daher braucht …

  • 🔗Syntax Highlighting in Pelican

    Um in Pelican das Syntax-Highlighting zu aktivieren, sind eigentlich nur wenige Schritte notwendig. Die Dokumentation von Pelican ist nicht sehr aussagekräftig und offensichtlich sind auch schon andere an dem Thema gescheitert.

    So geht’s: Die pelicanconf.py muss folgenden Eintrag enthalten, damit das Markdown-Plugin codehilite aktiviert wird.

    # pelicanconf.py
    MARKDOWN = {
        'extension_configs': {
            'markdown.extensions.codehilite': {
                'css_class': 'codehilite',
            },
    }
    

    Es kann vorkommen, dass pygmentize installiert werden muss. Bei der Installation von Pelican mit pip, wird pygmentize als Abhängigkeit mit installiert. Andernfalls erfolgt die Installation mit pip.

    pip install pygmentize
    

    Mit folgendem Befehl kann man sich eine Liste der verfügbaren Stile anzeigen lassen. So lässt sich das Erscheinungsbild der Codeblöcke anpassen.

    pygmentize -L style
    

    Wenn man z.B. den zenburn-Stil aktivieren möchte, kann man mit nachfolgendem Befehl ein entsprechendes Stylesheet erzeugen. Wichtig ist, dass der der Wert von -a, (.codehilite) mit der in der pelicanconf.py angegebenen css_class übereinstimmt und von einem . angeführt wird.

    pygmentize -S zenburn -f html -a .codehilite > themes/simple/static/css/styles.css
    

    Das erzeuge Stylesheet anschließend in der base.html verlinken.

    <link rel="stylesheet" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/styles.css" />
    
  • 🔗MySQL nach CSV exportieren

    In einer Abfrage alle notwendigen Daten aus einer MySQL-Datenbank holen und sofort in eine .csv-Datei schreiben? Kein Problem! Und dabei haben wir wie immer Optionen über Optionen…

    Grundlegend ist die Syntax dieses Mirakels schnell erklärt

    SELECT spalte1,spalte2,spalte3
    FROM tabelle
    INTO OUTFILE '/tmp/mein.csv';
    

    Weiterhin besteht die Möglichkeit, die Feldtrenner, Escapezeichen, die Zeichen für den Beginn und das Ende von zusammenhängenden Zeichenketten und den Zeilenumbruch zu wählen.

    SELECT  spalte1,spalte2,spalte3
    INTO OUTFILE '/tmp/clients.csv'
    FIELDS TERMINATED BY ';' 
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY '\\' 
    LINES TERMINATED BY '\n'
    FROM tabelle;
    

    Heraus kommt eine .csv-Datei, die ; als Feldtrenner, " als Textbegrenzer, \\ als Escapezeichen und \n als Zeichen für den Zeilenumbruch verwendet. Alle Optionen können natürlich auch frei kombiniert werden.