User Tools

Site Tools


projects:start

Projekte

Software

  • ipinfo: Schlanke Webseite mit der Nutzer ihre IP-Adresse ermitteln können
    • ip.malte70.de: Aktuellste Version von ipinfo als meine persönliche IP-Info-Seite
    • gitolite-Repository als Web-Ansicht via gitweb aktueller Stand der Entwicklung von ip.malte70.de
    • Auch wenn es schon etliche Webseiten gibt, die einem die eigene globale IP-Adresse anzeigen, wollte ich für mich selbst eine deutlich einfachere, aber nicht zu minimalistische Variante einer solchen Seite.
      Neben der Startseite mit nicht viel mehr als der aktuellen IP-Adresse (entweder IPv4 oder IPv6, je nachdem was der Client bevorzugt), werden auf der Detail-Seite zusätzliche Infos angezeigt:
      • IP-Adresse und falls vorhanden der Hostname
      • User-Agent
      • Browser und Betriebssystem
        (selbst gebaute Erkennung via RegExp, unterstützt auch einige mehr oder weniger exotische Browser wie Pale-Moon, K-Meleon, Otter, NetSurf und ELinks)
      • Bevorzugte Sprache
      • Aktuell funktioniert die Abfrage des Standortes der IP aus einer GeoIP-Datenbank nicht. Durch die Verwendung von eingeschränkten, kostenlos verfügbaren Datenbanken war der Standort jedoch noch nie wirklich genau; dafür müsste ich als Server-Betreiber für viel Geld Zugang zu einer genaueren/aktuelleren GeoIP-Datenbank mieten.
    • Diese Informationen können zudem über eine einfache HTTP-GET-API abgefragt werden.
    • Zum Einbinden in eine andere Webseite gibt es ein Widget, genauer gesagt ein dynamisch erzeugtes PNG-Bild: widget.png Aktuell werden nur IPv4-Adressen korrekt dargestellt, die teilweise erheblich längeren IPv6-Adressen sind zu lang und werden am Bildrand abgeschnitten.
    • Für die gleichzeitige Abfrage der IPv4- und IPv6-Adressen auf der Detailseite, und um über die API gezielt eine der beiden abzufragen, ist ipinfo über drei verschiedene Subdomains erreichbar:
  • Flying Paste: Ein Nopaste-Service
  • OSDetect: Python-Modul für grundlegende Infos zum aktuellen Betriebssystem
  • DNS-Tools: DNS-Einträge im Browser abfragen
    • Fragt für einen Hostnamen den angegebenen DNS-Record-Typ ab.
      Es gibt einige Online-Tools für DNS-Abfragen; aber ich wollte weder eine überladene Seite, noch zu detaillierte Infos (dafür würde ich statt einer Webseite eh host oder dig nutzen), sondern einfach nur genau einen DNS-Record-Typ für einen Hostnamen abfragen.
    • Das Ergebnis der Abfrage wird als einzelne Zeile angezeigt, ähnlich wie von host -v ausgegeben.
  • Discogs Random Vinyl: Zeigt eine zufällige Schallplatte aus der eigenen Discogs-Sammlung an
    • PHP-Skripte, die über die Discogs-API die eigene Sammlung abfragen
    • Verzichtet auf OAuth, da für den Eigengebrauch entwickelt
      • verwendet für den Zugriff auf die API ein User-Token, mit dem man nur auf seine eigene Sammlung sowie allgemeine Informationen wie Release-Infos anfragen kann
    • Die angezeigten Alben-Cover werden herunter geladen, sodass sie in meinem Fall nur von einem Rechner im LAN statt aus dem Internet geladen werden
    • Die Sammlungs-Daten werden für eine in der config.inc.php angegebene Dauer zwischengespeichert, um die API nicht bei jedem Aufruf der Seite neu abzufragen
  • Elektronik-Tools: Kleine Rechen-Helfer für Elektronik-Bastler
    • Eine kleine nicht mehr aktiv gepflegte Sammlung von Helfern für Elektronik-Projekte, wie z.B. ein Farbcode-Rechner für Widerstände.
    • Die Berechnungen erfolgen ausschließlich via JavaScript im Browser
  • startseite: Generierung einer Browser-Startseite mit Links zu den wichtigen Webseiten
    • Ein kleines Python-Skript, dass aus einer Liste von Links eine HTML-Seite mit als Kacheln angeordneten Links generiert.
    • Kann z.B. auch als minimalistisches Homelab-Dashboard genutzt werden, über das auf in Docker-Containern laufende Web-Apps zugegriffen werden kann
    • Wurde schon lange nicht mehr aktualisiert; ich arbeite aktuell aber daran das Skript zu überarbeiten, u.a. mit Unterstützung von verschiedenen Themes, und mit deutlich weniger Hard-Coding …
    • Wurde als von mir genutzte Browser-Startseite von startseite.malte70.de (siehe nächster Eintrag) abgelöst
  • startseite.malte70.de
    • Im Gegensatz zu startseite basiert meine aktuelle Startseite auf PHP
    • Features:
      1. Anzeige von Webseiten-Links (Konfiguration via config.inc.php)
      2. Suchleiste (unterstützt entweder Google oder eine beliebige SearXNG-Instanz)
      3. Überschrift im Format <user>@<fqdn> oder \\HOST\User
        Speicherung von Benutzername, Hostname und Format Client-seitig in LocalStorage; beim ersten Aufruf der Seite werden diese Einstellungen mittels window.prompt() abgefragt.
      4. Über einen Button im Footer kann ein Einstellungsdialog geöffnet werden.
      5. Ein eingebauter kleiner Notiz-Zettel, dessen Inhalt ebenfalls in LocalStorage gespeichert wird.
    • Langfristig soll die Seite und alle Features Teil von startseite werden
  • error-document: Minimale Fehler-Seiten für die häufigsten Webserver-Fehler
    • Fehler-Seiten mit einfach gehaltenem Design als Ersatz für die nicht wirklich schönen Standard-Fehlerseiten des Apache&nbsp;HTTPd
    • Enthält Fehlerseiten für die HTTP-Status-Codes 401, 403, 404 und 500
    • Die Fehlerseiten informieren den Nutzer auch, wieso der Fehler möglicherweise aufgetreten ist, statt nur den Status-Code und -Namen zu zeigen
    • Verwendet Icons des Tango-Projekts (Public Domain/gemeinfrei)
  • Apache VHost Generator: Erzeugt Konfigurationsdateien für Apache VirtualHosts aus Templates
    • Da die meisten meiner VirtualHost - Ordered List Item-Konfigurationen sich nur beim Hostnamen und DocumentRoot unterscheiden, wollte ich neue VHosts aus Templates generieren, statt eine vorhandene Konfiguration zu duplizieren und abzuändern.
    • Als Template-Engine kommt das Python-basierte Jinja2 zum Einsatz
    • Das Projekt dient für mich auch dazu, mich mit Jinja2 vertraut zu machen
    • Geplant ist auch unterschiedliche Arten von VHosts zu unterstützen, indem das Haupt-Template je nach Bedarf das Template für ein lokales DocumentRoot oder einen Reverse-Proxy einbindet.
  • MAPID: „Maltes Arduino-powered Info Display“
    • Mein Blog-Beitrag zu MAPID Erklärt das Ziel des Projekts und Schritt für Schritt den Quellcode
    • Zeigt mithilfe eines Arduinos auf einem 16×2-Zeichen-LCD wichtige Benachrichtigungen an (z.B. nach Fertigstellung eines lange laufenden Shell-Skripts)
    • Besteht aus mehreren Komponenten:
      1. Der Arduino-Sketch MAPID/CP (CP steht für „Control Program“) steuert einen seriell angesteuerten LCD basierend auf Befehlen, die er über eine einfache Kommandozeile auf der seriellen Konsole erhält
      2. Auf dem angeschlossenen PC stellt das Python-Skript fifo_bridge.py eine Verbindung zur seriellen Schnittstelle des Arduino her, und stellt eine Brücke zwischen einer FIFO-Datei und der seriellen Konsole her.
        Während einzelne Zugriffe auf die Gerätedatei des seriellen Terminals jedes Mal den Arduino neu starten, bleibt durch die durch diese Proxy-Lösung die serielle Schnittstelle durchgehend geöffnet; außerdem können so aus Shell-Skripten ganz einfach Befehle an MAPID/CP auf dem Arduino gesendet werden.
      3. Das Skript notification.sh sendet über die FIFO-Bridge die notwendigen Befehle, um zwei von STDIN gelesene Zeilen auf dem Display anzuzeigen, eine LED kurz aufblitzen zu lassen und nach einiger Zeit den Display wieder auszuschalten.
  • bbs: Einige Oldschool-Netzwerk-Dienste wie Telnet oder Finger
    • Gestartet als Fake-Shell mit einigen eingebauten Befehlen, die über inetd via Telnet erreichbar ist
    • Später kamen (ebenfalls über inetd gestartete) Dienste für QOTD und Finger dazu
    • Der QOTD-Dienst nutzt fortune zum Anzeigen eines zufälligen Spruchs. Dieser wird Standardmäßig aus einer Auswahl von deutschsprachigen Datenbanken (fortunes-de) ausgewählt, und Umlaute und Sonderzeichen sogar wie möglich ersetzt (die aktuelle Implementierung über inetd erlaubt nur US-ASCII, kein UTF-8 oder ISO 8859-15)
    • Der Finger-Dienst zeigt statt potentiell sensibler Daten zu realen Nutzern nur Einträge aus einer Datenbank an, die dort vorher eingetragen wurden.
      • Als Datenbank wird der Key-Value-Speicher pickleDB verwendet
      • Neben Einträgen für die Benutzer (oder andere Informationen, mein GnuPG-Key kann z.B. im Text-Format via Finger abgefragt werden) gibt es ein paar besondere Datenbank-Einträge:
        1. @: Da pickleDB keine leeren Keys erlaubt, wird stattdessen dieser Eintrag angezeigt, wenn der Client keinen Benutzernamen sendet (finger @rt3x.de)
        2. 404: Enthält eine Fehlermeldung, die zurückgegeben wird falls der abgefragte Benutzer nicht existiert
      • Um die Datenbankeinträge einfach zu verwalten kann das Skript fingerinfo-admin genutzt werden. Es kann in der Datenbank vorhandene Benutzernamen auflisten, und einzelne Einträge Löschen; und ihren Inhalt auf STDOUT anzeigen oder einen vorhandenen/neu erstellten Eintrag mit Daten von STDIN überschreiben (Damit Einträge z.B. mit sed überarbeitet werden können)
projects/start.txt · Last modified: by malte70