Mat-O-Wahl - Eine W-O-M Alternative

  • ein bisschen Webspace (ein günstiges Shared-Hosting-Paket reicht vollkommen aus)
  • kein PHP oder MySQL / MariaDB nötig (nur optional für Statistik)
  • kein npm oder eine andere Paketverwaltung nötig
  • Wissen, wie man eine Textdatei und/oder eine Tabellenkalkulation öffnet

Allgemeines

Die Wahl-O-Mat-Redaktion zur Bundestagswahl 2009 bestand aus rund 20 Personen, welche die Parteiprogramme miteinander verglichen haben und daraus die Fragen formulierten. Zur Europawahl 2014 wurden die Fragebögen von 25 Jungwählern erarbeitet. Ihnen zur Seite stehen jeweils verschiedene Wissenschaftler um eine hohe Qualität zu gewährleisten.

Mitstreiter

Um die richtigen Fragen zu finden, empfiehlt es sich, solch ein Projekt nicht allein durchzuziehen, sondern die Last auf mehrere Schultern zu verteilen. Vertreter von Presse, interessierte Bürger aber auch Politiker wären z.B. eine solide Basis dafür.

Fragenauswahl

Auch sollte man auf eine breite Vielfalt der Fragen achten. Auf lokaler Ebene sollte sich z.B. nicht jede Frage um das neue Feuerwehrhaus, die Einsatzzeiten der Feuerwehr und die Finanzierung des Feuerwehrfests drehen. Ebenso wichtig wären Kinderbetreuung, Schulen, Mieten, Straßenbau, Industrie, Umweltschutz und Tourismus.

Fragensystem

Außerdem müssen die Fragen mit "stimme zu" / "stimme nicht zu" beantwortet werden können. Die Frage "Was halten Sie vom Flughafenausbau?" lässt sich also weder mit dem Wahl-O-Mat noch mit dem Mat-O-Wahl beantworten.
Richtig müsste es heißen: "Die Stadt soll den Flughafen ausbauen" oder "Die Stadt soll den Flughafen nicht ausbauen". Beide Fragen lassen sich nun beantworten.

Bilder

Viele Bilder sind urheberrechtlich geschützt. Wenn Sie ein Parteilogo oder ein Kandidatenfoto benutzen, achten Sie darauf die Besitzer um Erlaubnis zu fragen. Bilder für die freie Benutzung sind oft an einer Creative-Commons-Lizenz (z.B. CC:BY oder CC:BY-SA) zu erkennen.

Allgemeine Hinweise

Allgemein

Alle wichtigen Einstellungen werden in einer Textdatei namens "definition.js" im Verzeichnis "/data" gemacht. Diese kann mit einem Texteditor (Notepad, Wordpad, ...) bearbeitet werden.
Hier kann man Kontaktinformationen für das Impressum angeben und erklärende Texte wer und was gewählt wird. Außerdem werden hier die Dateien mit den Parteien und den Fragen definiert.

Hinweis zu CSV-Dateien

Alle Fragen und Parteipositionen sind in einfachen CSV-Dateien abgespeichert. Das sind normale Textdateien, die man sowohl mit einem Texteditor (z.B. Notepad, Wordpad, ...) als auch mit einer Tabellenkalkulation (MS Excel, OO Calc, ...) bearbeiten kann. Die Spalten sind voneinander mit einem einfachen Trennzeichen getrennt, z.B. ein Komma oder ein Semikolon. Die Namen dieser CSV-Dateien kann man selbst in der "definition.js"-Datei angeben.

Beispiel einer CSV-Datei

Ansicht einer kommagetrennten CSV-Datei im Texteditor ...

Flughafenausbau ,"Der Flughafen soll ausgebaut werden."
Gymnasium, Das Alfred E. Neumann Gymnasium soll geschlossen werden.
Radweg,Der Bau des Radwegs in den Märchenwald ist wichtiger als die Sanierung der Altstadt-Sackgasse.    
"Schulden" , Die Stadt soll keine neuen Schulden mehr aufnehmen.

... und in der Tabellenkalkulation (Excel, Calc, ...)

Flughafenausbau Der Flughafen soll ausgebaut werden.
Gymnasium Das Alfred E. Neumann Gymnasium soll geschlossen werden.
Radweg Der Bau des Radwegs in den Märchenwald ist wichtiger als die Sanierung der Altstadt-Sackgasse.
Schulden Die Stadt soll keine neuen Schulden mehr aufnehmen.

Details und Beispiel

Notation / Schreibweise

Alle Texte auf einer Zeile (also alle Werte außer den Zahlen) müssen mit Anführungszeichen (") umschlossen werden.
Texte über mehrere Zeilen (z.B. im Impressum) dürfen mit einem Akzent (`) umschlossen werden. Alle modernen Browser verstehen diese Syntax. Alte Versionen des Internet Explorer haben damit Probleme.

Bei den Dateinamen sollte man keine Leerzeichen und Sonderzeichen wie Umlaute oder ß verwenden und man muss außerdem auf Groß- und Kleinschreibung achten! Eine "datei.txt" ist keine "Datei.txt".

Einstellungen am Beispiel Obsthausen

Mat-O-Wahl öffnen - Definition.js öffnen

Allgemeine Einstellungen

Variable Wert Beschreibung
fileQuestions Obsthausen_Fragen.csv Die Datei mit den Fragen an die Parteien. In diesem Fall gibt es sechs Fragen. Die erste Spalte der CSV-Datei enthält eine Kurzzusammenfassung der Frage, die zweite Spalte enthält die eigentliche Frage.
intQuestions 6 Anzahl der Fragen an die Parteien. (seit Version 0.5)
fileAnswers Obsthausen_Parteien.csv

Die Datei mit den Antworten der Parteien und Informationen zur Partei / zum Kandidat. (seit Version 0.5)

Die Datei hat folgenden Aufbau:

  • 0;Parteiname kurz (z.B. APPD)
  • 0;Parteiname lang (z.B. Appelpartei Deutschlands)
  • 0;Partei-Beschreibung (optional, z.B. Die Apfelpartei steht seit vielen Jahren für alle Angelegenheiten des Apfels.)
  • 0;Partei-Webseite (z.B. https://www.appelpartei.ap)
  • 0;Partei-Logo / Bilddatei (z.B. images/appel.png)
  • Danach kommen die Positionen und Antworten der Parteien, z.B.
    • -1;Wir sind dagegen weil ...
    • 0;Hier gibt es keine Meinung von uns oder neutral, weil ...
    • 1;Wir sind dafür weil ...
  • 0;Zum Schluss kommt noch ein Leerzeile ohne Funktion, nur für die Übersicht. Danach geht es mit der nächsten Partei weiter.
intParties 4 Anzahl der Parteien / Kandidaten. (seit Version 0.5)
arPartyFiles ...

Diese Variable wird seit Version 0.5 (08/2020) nicht mehr benötigt.

Eine Liste mit Dateien der Parteipositionen.
In diesem Fall gibt es vier Parteien, die zu jeder der sechs Fragen geantwortet haben. Die erste Spalte der CSV-Datei enthält die Position der Partei in Form einer Zahl. -1 steht für "stimme nicht zu", 0 für "Enthaltung" und 1 für "stimme zu". Die zweite Spalte enthält eine ausformulierte Begründung der Position.
arPartyNamesShort, arPartyNamesLong, arPartyLogosImg, arPartyInternet ...

Diese Variable wird seit Version 0.5 (08/2020) nicht mehr benötigt.

Listen mit den Parteinamen in kurzer und langer Form, eine Liste mit Bildern zu den Parteilogos und eine Liste mit Links zu den Parteiseiten im Internet.
intPartyLogosImgWidth, intPartyLogosImgHeight ... Einstellung für die Bildgröße (in Pixel) der Partei-Logos / Kandidaten-Logos in der Ergebnisliste.
Die Breite und Höhe kann in Pixel oder Prozent angegeben werden.
intPartyDefaultShow 3

Diese Variable wird seit Version 0.3 (11/2018) nicht mehr benötigt.

Anzahl der Parteien, die beim Einblenden der detaillierten Ergebnisliste sofort angezeigt werden sollen. Im Beispiel werden die ersten drei von den vier vorhanden Parteien angezeigt. Um alle Parteien anzeigen zu lassen, gibt man eine 0 ein.
heading1, heading2, explainingText ... Texte mit Überschriften und einer kurzen Erklärung zur Wahl.
imprintLink "system/imprint.html" oder "https://www.seite-von-meinem-kleinen-verein.de/impressum.html" Impressum - Option A): Standard-Link auf das Impressum. Sie können hier aber auch auf Ihr eigenes Impressum verweisen.
Falls Sie ein eigenes Impressum nutzen, können Sie Option B einfach ignorieren.
Außerdem wäre ein Hinweis auf den Mat-o-Wahl günstig, z.B. "Der XXXXX-o-Mat basiert auf dem www.Mat-O-Wahl.de von Mathias Steudtner und ist freie Software unter GPL 3 Lizenz."
imprintGeneral, imprintContact, imprintVATid, imprintDisputeResultion, imprintEditors, imprintProgramming, imprintPictures, imprintPrivacyUrl ... Impressum - Option B): Angaben für das Standard-Mat-o-Wahl-Impressum.
Die Angaben spiegeln die rechtliche Situation in Deutschland 2020 wider. Der Fokus liegt dabei auf eingetragenen Vereinen (e.V.).
Achtung: Dies ist keine Rechtsberatung. Ein eigenes Impressum ist meistens besser.

Wenn Sie eine Einstellung frei lassen wollen, löschen Sie bitte nicht die ganze Zeile, sondern nur den Inhalt. Ein Wert ohne Datenschutzerklärung sieht z.B. so aus: var imprintPrivacyUrl = "";

Erweiterte Einstellungen

Variable Wert Beschreibung
separator ";" oder "," Das Trennzeichen mit welchem die CSV-Dateien voneinander getrennt sind. Microsoft Excel speichert zumeist mit Semikolon und OpenOffice Calc mit Komma ab. Alle CSV-Dateien müssen das gleiche Trennzeichen benutzen.
design ... Eine StyleSheet-Datei (CSS) mit Formatvorlagen im Ordner /STYLES/
language ... Eine Sprachdatei mit den Texten im Ordner /i18n/

Profi-Einstellungen

Variable Wert Beschreibung
statsRecord true oder 1, false oder 0 (optional - für Experten) Bietet die Möglichkeit die Ergebnisse des Nutzers an einen Server zu senden. Dafür muss jedoch eine Datenschutzerklärung vorhanden sein und der Nutzer muss der Übermittlung seiner Daten aktiv zustimmen ("OptIn-Verfahren").
statsServer http://localhost/Test/vote.php (optional - für Experten) Die Adresse und der Name des Skripts, welche die Daten empfängt. Es werden zwei Variablen übertragen - mowpersonal und mowparties.
"mowpersonal" enthält die persönliche Auswahl des Nutzers in der Form Zustimmung/Ablehnung/Enthaltung/Übersprungen. Also z.B.: 1,-1,0,99
"mowparties" enthält die Anzahl der Übereinstimmungen mit den Parteien in der angegebenen Reihenfolge, z.B. 5,1,0,2
Ein Aufruf für 6 Fragen und 4 Parteien könnte dann also so aussehen: /vote.php?mowpersonal=1,1,-1,1,0,-1&mowparties=1.5,2,4,3.5

Testen der Einstellungen

Im Stammverzeichnis befindet sich eine QUICKTEST.HTML-Datei. Diese prüft die wichtigsten Einstellungen und sagt Ihnen, ob es einen schwerwiegenden Fehler in der Konfiguration gibt.

Der Mat-O-Wahl funktioniert (theoretisch) nicht beim Starten von lokaler Festplatte aus. Dies liegt am Sicherheits-Konzept aller modernen Browser. Diese verbieten das Ausführen von lokalen Dateien.
"Lokal" bedeutet die interne Festplatte oder SSD, die externe USB-Festplatte oder auch einen USB-Stick. Der Browser öffnet diese Dateien intern mit dem "file://"-Protokoll.

Der Mat-O-Wahl läuft aber:

  • auf einem internen Webserver, wie Apache, nginx oder mit einem einfachen localhost-Aufruf, z.B. in Java oder python (http(s)://-Protokoll)
  • auf einem externen Webserver / Webspace Ihrer Wahl (http(s)://-Protokoll)
  • auf der lokalen Festplatte mit Google Chrome / Chromium mit dem Startparameter --allow-file-access-from-files
  • auf der lokalen Festplatte mit Mozilla Firefox mit der Einstellungen (Adresszeile about:config) browser.tabs.remote.separateFileUriProcess = true