MEWTWO #000 - Der Start einer Reise

Die aktuelle URL in deinem Browser wurde, hoffentlich in einem Bruchteil einer Sekunde, über das Web Framework bottle.py geroutet und führte zur Ausgabe dieses Textes, welches sich in einer von zwei SQLite3 Datenbanken befindet. Die andere speichert lediglich meinen eigenen Admin Account.

Das Backend dieser (sich in Aufbau befindlicher) Webseite wurde nämlich vollständig in Python, sowie einigen wenigen SQL Anfragen, geschrieben. Mit Ausnahme eines kleines GNU/Linux Shell Befehls, welcher für die Errechnung der Passwort-Hashwerte genutzt wird. Eine kleine systembedingte Ausweichmöglichkeit die dem veralteten Python 3.4.2 meines aktuellen Anbieters verschuldet ist. Denn diese Version kommt ohne wirklich "sichere" kryptographische Hashwert-Berechnung (wie Blowfish) daher, was ein Ausweichen auf die SHA-512 Methode erforderte. Um hier allerdings noch ein wenig mehr Sicherheit zu bieten wird neben einem SALT und PEPPER Wert auch noch zusätzlich die "Geschwindigkeit" über den rounds Parameter gedrosselt, indem die entsprechende Funktion mehrmalig ausgeführt wird. Schon stoßen wir auf das 2. Problem: Das crypt Paket unterstützt erst mit Python 3.5 diesen zusätzlichen Parameter und daher war die Nutzung von mkpasswd schlicht unausweichlich.

Natürlich kratzt diese Sicherheit am Bodensatz des heute möglichen, traurig daran ist allerdings, dass WordPress standardmäßig auch in der aktuellsten Version noch so arbeitet. Immerhin mit der Ausweichmöglichkeit auf Blowfish, wenn man die entsprechende Konstante setzt, und von dieser Tatsache Kenntnis hat.

Der Anbeginn von Python

Warum erzähle ich das? Nun, das System, welches ich nachfolgend einleiten und dessen Entwicklung ich hier auf dieser Webseite auch dokumentieren möchte, fand durch mein kleines Experiment hier den Umweg von PHP zu Python. Diese Webseite wurde aber auch nicht grundlos in der (seit Jahren immer beliebter werdenden) "general-purpose" Sprache geschrieben.

Der Grund liegt eher an meinen bereits zu zahlreichen Experimenten und Projekten welche in PHP und auch JavaScript aufgingen. Andererseits war Python aber auch schon immer eine Sprache mit der ich, Abseits von Automatisierungstools und kleineren tkinter Anwendungen, schon immer einmal etwas Größeres unternehmen wollte. Mein größtes Projekt war bislang lediglich ein kleines Download-Programm für eine russische Musik-Streaming Seite, immerhin mit threading für parallele Downloads.

Kurzerhand beschloss ich einen kleinen Blog in Python zu verwirklichen und da mein Anbieter, neben Perl und PHP, eben auch Python unterstützt war es die perfekte Gelegenheit. Die Suche nach einem "Drag & Drop" artigen CMS (bzw. Web Framework) erwies sich allerdings als schwierig. Nicht nur, dass die Auswahl stark eingeschränkt ist, auch die Tatsache, dass eine Installation des Pakets (oder etwaigen Abhängigkeiten) über einen Package Manager erfolgen (muss | sollte) erschwerte dies ungemein. Mein Webspace über IONOS (meinem Anbieter) bietet diese Möglichkeit, wie pip, nämlich nicht, Abhängigkeiten wie "setuptools" konnten also nicht so einfach aufgespielt werden.

Es gibt sicherlich auch die Möglichkeit Django (CMS) manuell zu installieren und etwaige Strukturierungen zu ändern, soweit habe ich mich mit Python bis dato aber noch nicht befasst. Also suchte ich weiter nach einer einfachen Lösung, die lediglich auf den Webspace gespielt und genutzt werden konnte, was mich auf das "Micro-Framework" bottle.py stießen ließ.

MEW.TWO CMS

Python erwies sich während der Erstellung der Inhalts- und Nutzerverwaltung (die aktuell eher stark rudimentär zusammengeklöppelt ist) als gute und schöne Alternative zu PHP als "Quasi-Standard" in der Web-Welt. So kam mir auch Rasch die Idee mein CMS Projekt von PHP loszulösen und in Python neu aufgehen zu lassen. Denn sind wir mal ehrlich, Content Management Systeme in PHP gibt es wie Sand am Meer. Manche sind zwar wirklich hervorragend geschrieben, sehr übersichtlich, oder auch blitzschnell. Aber im Grunde ist die Auswahl weitaus größer als der Markt dafür verlangen könnte.

Python hingegen bietet zwar einige minimalistische Web Frameworks, wie eben auch bottle.py, CMS technisch findet man hier allerdings recht schnell den Überblick. Zumal dessen Installation ohnehin immer bevorzugt (wenn nicht sogar unausweichlich) über einen entsprechenden Package bzw. Dependency Manager - serverseitig über die CLI - laufen muss. Eine Tatsache, die man sich in PHP nicht mal wirklich vorstellen kann. Dort muss man seit Jahren nicht einmal mehr eine Konfigurationsdatei anpassen, alles läuft direkt über den Web-Installer ohne Ausführung einer äquivalenten setup.py Datei.

Was hat es nun aber mit dem MEW.TWO CMS überhaupt auf sich, und warum sollte es sich von anderen (in PHP oder Python geschriebenen) Systemen unterscheiden?

Mewtwo (PoKéMoN) vs. MEW.TWO

Hierzu ein kurzer Abschweifer in die Welt der Taschenmonster: GameFreaks PoKéMoN. Die 1. Generation kam auf insgesamt 151 der putzigen Viecher, wobei gerade das 151. nicht "von der Natur erschaffen", sondern von den Menschen genetisch entwickelt wurde. Es ist ein Experiment von Mew (Nummer 150 im PoKéMoN Index), welche durch die Anpassung seiner Gene zum ultimativen Kampfmonster werden sollte. Daher auch der Name Mewtwo (oder eben Mewtu im deutschen).

Das Prinzip der Gen-Anpassung soll auch Einzug in das MEW.TWO System halten. Ich möchte die generelle Oberfläche nicht wie bei WordPress vorgeben, sondern durch Schnittstellen und Schemas innerhalb der Umgebung standardisieren und für jeden öffnen. Diese "Gens" bilden also quasi die Grundoberfläche des CMS wie die Datenbankanbindung, Routing und Hilfesysteme (wie Sanitization, Validation, eMail, ...). Definiert durch abstrakte Klassen und Interfaces kann eine Klasse / ein System somit ohne die weiterführende Schädigung des Systems (jederzeit) ausgetauscht werden.

MEW.TWO vs. MEW.TWO CMS

Die Bezeichnung MEW.TWO trifft in diesem Falle also lediglich das grundlegende Interface, welches die Schnittstellen-Registrierung sowie die Schemata Anbindung ermöglicht und vorgibt. Das MEW.TWO CMS hingegen umfasst diesen Kern sowie die entsprechenden, zusammenstellbaren, Gene die vereint das Content Mangement System an sich zusammen mit dem Frontend (und Backend) aufbauen.

Das MEW.TWO CMS soll allerdings kein komplexer Haufen Quellcode werden, sondern eine einfach zu verstehende Umgebung. Während die Entwicklung weiterer "Gens" vermutlich aber dennoch eher "erfahrenen" Entwicklern vorbehalten sein wird, so soll sich zumindest die Plugin Programmierung genauso spielend leicht anfühlen wie bei WordPress. Auch die (administrative) Oberfläche wird sich eine Scheibe dieses CMS (sowie auch von Drupal) abschneiden. Denn ich bin fest der Überzeugung, dass gerade die Vielfalt an einfach zu nutzenden (und erweiterbaren) Systemen PHP zu einer der beliebtesten Sprache heranwachsen ließen. Mit MEW.TWO soll auch Python lukrativ für Einsteiger, Profis und Tüftler werden.

Ob dies gelingt, bleibt aber erst einmal abzuwarten. Vorerst dient diese Webseite erst einmal der Annäherung an Python, als Programmiersprache (explizit für die Web-Entwicklung), und zur Entwicklung der ersten Gene und Hilfesysteme. Bis MEW.TWO spruchreif wird, wird also noch einige Zeit ins Land gehen, hier auf diesem Blog möchte ich allerdings meinen Fortschritt sowie auch meine Erfahrungen und Ideen festhalten und teilen.

Da MEW.TWO auch auf so wenig "externe" Abhängigkeiten wie möglichen setzen soll, wird der Weg zum ersten nutzbaren Alpha vermutlich auch noch relativ steinig und schwer. Aber gerade das macht den Spaß an der Entwicklung ja aus, neue Sprachen und Konstrukte zu entdecken und auf Probleme zu stoßen, die man vorher nicht einmal erahnen konnte. Wobei das ein oder andere meiner PHP Projekte sollte auch relativ einfach in Python konvertiert werden können.

Zum Abschluss bleibt noch zu sagen, dass ich hier auf denypanic.dev nicht nur über meinen Fortschritt bei MEW.TWO berichten, sondern auch PHP und JavaScript (sowie auch TypeScript und Dart) den ein oder anderen Beitrag widmen möchte. Allgemein können aber auch andere Themen die Seite mit Inhalten füllen, die Zeit allein wird es zeigen.