Barcodes

Barcodes sind klasse.

Ohne Barcodes müsste man jede Ware beim Verkauf händisch im Kassensystem erfassen oder im Warenbestand suchen.

Aber mit Barcodes: Bip.

ean

Nun bietet das Kassensystem, mit dem ich mich so generell herumschlage, zwar eine Option, mit der Barcodes ausgedruckt werden können. Die ist aber relativ unflexibel. Ich wollte also etwas, mit dem ich selbst EAN-Barcodes basteln kann. Als Vektorgrafik, versteht sich.

Zum Glück hat Wikipedia eine detaillierte Beschreibung, wie so ein Barcode aufgebaut und errechnet wird.

Lange Rede, kurzer Sinn: Ich bastelte ein Python-Skript und ein PHP-Skript, die zu einer EAN den passenden Barcode generieren1. Da das Python-Skript zuerst da war, heißt das Ganze halt noch pyEAN.

Projekt auf GitHub

Die Nutzung des Webdienstes ist kinderleicht: Einfach das PHP-Skript aufrufen und die gewünschte EAN angeben, also zum Beispiel:

http://hscmi.de/ean/makebarcode.php?code=0037600175340

Wer die SVG-Datei lieber zum Download angeboten bekommen möchte, hängt einfach ein &dl=1 an:

http://hscmi.de/ean/makebarcode.php?code=0037600175340&dl=1

So einfach ist das.

Bip.

  1. Warum umständlich anderer Leute Lösungen testen, wenn man auch ganz einfach selbst Aufwand betreiben kann, gell.

Bilder zerlegen

Demletzt habe ich in mein Impressum eine kleine Spielerei eingebaut. Die Adresse ist nicht als Text hinterlegt, sondern als Bild. Beziehungsweise, als 8 Bilder, die übereinandergelegt das eigentliche Bild ergeben.

Um das umzusetzen, habe ich mir ein kleines Python-Skript gebastelt, das die Grafik für mich aufsplittet und auch gleich dazu noch das passende HTML-Snippet erzeugt.

Hier gibt es das Projekt auf GitHub.

Die Benutzung ist total einfach:

./pngfragments.py [Pfad-zur-Bilddatei] [Anzahl-der-Teilbilder]

Daraufhin wird das Bild geöffnet, die Menge aller nicht-transparenten Pixel wird zufällig auf X etwa gleich große Teilmengen aufgeteilt und aus diesen werden dann im Ordner ‚output‘ die Teilbilder erstellt. Zusätzlich wird noch ein passendes HTML-Snippet und eine vollständige HTML-Datei mit diesem Snippet erstellt, mit dem das vollständige Bild dargestellt werden kann.

Je größer die Zahl der Teilbilder gewählt wird, über desto mehr Bilder werden die Pixel verteilt und desto weniger erkennt man logischerweise auch auf den Teilbildern (siehe auch bei den Beispielen)

Technische Daten

Das Skript ist für Python3 geschrieben. Es verarbeitet PNG,- JPEG- und TIFF-Dateien. Für die Grafikbastelei wird die Python Imaging Library (PIL) benutzt, das entsprechende Python-Paket muss also verfügbar sein.

[Update]
By popular demand ist nun auch ein zweites Skript enthalten, mit dem man sich ein Textbild gleich direkt miterstellen kann.

Beispiele

Adresse

Teilbilder

item-0.png

item-1.png

item-2.png

item-3.png

item-4.png

item-5.png

item-6.png

item-7.png

Avatar

ava.jpg

ava.jpg

Aufteilung in 2 Bilder

ava-0.png

ava-0.png

ava-1.png

ava-1.png

Aufteilung in 4 Bilder

ava-0.png

ava-0.png

ava-1.png

ava-1.png

ava-2.png

ava-2.png

ava-3.png

ava-3.png

Analyse: Wann werden wir vom Rüngler-Problem kalt erwischt?

Für kommenden Mittwoch ist zu einer SP-Sitzung geladen, auf der die Ausschüsse des Studierendenparlaments der Uni Bonn nach einem entsprechenden Ältestenratsbeschluss neu besetzt werden sollen; derweil streiten sich die Größen der Bonner Hochschulpolitik munter weiter bis in die nächste Instanz.

Doch ignorieren wir das alles mal und wenden uns der eigentlichen Frage zu: Wie problematisch ist das Rüngler-Problem?

Die Fakten

Das Studierendenparlament hat 43 Sitze. Die Ausschüsse des Studierendenparlaments werden auf Basis dieser Sitzverteilung besetzt, nach dem Sainte-Laguë/Schepers-Verfahren. Die Anzahl der Ausschussmitglieder ist zunächst einmal sinnigerweise ungerade. Die Satzung der Studierendenschaft sieht Ausschussgrößen von 3, 5, 7 und 9 vor. Eine SP-Mehrheit hat also mindestens 22 Sitze, eine Ausschussmehrheit entsprechend 2, 3, 4 oder 5.

Das Problem (Wiederholung)

In der aktuellen Besetzung hat das Studierendenparlament das Problem, dass die SP-Mehrheit von RCDS und Jusos mit 22 Sitzen in einem Fünferausschuss nur 2 Sitze besetzen kann, also keine Mehrheit in diesem Ausschuss hätte. Entsprechendes gilt für einen Neunerausschuss. Erklärbärartikel zum sog. „Rüngler-Problem“

Was tun?

Zunächst einmal wollen wir die Frage beantworten, mit welchen Wahlergebnissen wir eigentlich rechnen müssen. Da für unser Problem nicht die Identität der Listen, sondern nur das Verhältnis ihrer Sitzzahlen interessant ist, genügt es, die Sitzverteilungen absteigend sortiert zu berechnen. Ein kleines Python-Skript mit einer zehnfach verschachtelten For-Schleife erledigt dies für 2 bis 10 antretende Listen in erstaunlicherweise weniger als einer Sekunde1. Wen diese Ergebnisse interessieren: klick.

Doch damit beginnt der große Spaß ja erst. Nun wird jede dieser Sitzverteilungen darauf geprüft, für welche Ausschussgrößen das Rüngler-Problem auftritt. Alternativ kann natürlich auch das Sainte-Laguë/Schepers-Verfahren zu viele Sitze zuteilen, was ebenfalls nicht wünschenswert, aber hier nicht primärer Gegenstand unserer Betrachtung ist.

Resultate

Ei, ei, ei.

Nehmen wir mal an, der RCDS hätte einen Sitz weniger und die Piraten-Hochschulgruppe einen Sitz mehr im Studierendenparlament. Abstrakt sieht das ganze also so aus:

Unsere Beispielverteilung.

Unsere Beispielverteilung.

Nun bilden wir unsere Ausschüsse mit dem bewährten Sainte-Laguë/Schepers-Verfahren. In den folgenden Grafiken markiert die gestrichelte Linie die Mitte. Alle Listen links und auf dieser Linie besitzen zusammen eine Mehrheit im Ausschuss.

Dreierausschuss

B+C: 21 SP-Sitze, haben jedoch Ausschussmehrheit

B+C: Nur 21 SP-Sitze, haben jedoch Ausschussmehrheit → Rüngler-Problem

Fünferausschuss

majority-05

A+D: Nur 16 SP-Sitze, haben jedoch Ausschussmehrheit → Rüngler-Problem

Siebenerausschuss

majority-07

B+C: Nur 21 SP-Sitze, haben jedoch Ausschussmehrheit → Rüngler-Problem

Neunerausschuss

majority-09

C+D+E+F: Nur 20 SP-Sitze, haben jedoch Ausschussmehrheit → Rüngler-Problem

Aber hey, es ist Karneval! Versuchen wir es doch mal mit einem Elferrat, dat hätt noch emmer joot jejange!

Elferausschuss (nicht satzungskonform)

majority-11

B+D+E+F: Nur 21 SP-Sitze, haben jedoch Ausschussmehrheit → Rüngler-Problem

Wat fott es, es fott. *hust*

 Herr Doktor, wie schlimm isset?

Schlimmstenfalls treten bei der nächsten Wahl 8 Listen an und es ergibt sich folgendes Ergebnis:

Können wir das machen? Bitte?

Können wir das machen? Bitte?

Dann haben wir das Rüngler-Problem bei einer Ausschussgröße von 3. Und bei 5. Und bei 7. Und 9. Und 11. Und 13. Überhaupt bei jeder ungeraden Zahl zwischen 2 und 42 – außer bei 23: Da schlägt dann das Sainte-Laguë/Schepers-Verfahren fehl, weil fünf Listen gleichzeitig die letzten vier Sitze zugeteilt bekämen. Die Rüngler-Lösung, bei der einfach die Ausschussgröße so weit nach oben korrigiert wird, bis das Problem nicht mehr auftritt, würde also zu 43er-Ausschüssen führen – da kann man dann eigentlich gleich eine SP-Sitzung einberufen.

Nun haben wir Extrembeispiele gesehen. Blicken wir nun auf einen Graphen, der die Wahrscheinlichkeit abbildet, dass bei einer der vier von der Satzung vorgesehenen Ausschussgrößen das Rüngler-Problem auftritt, oder das Sainte-Laguë/Schepers-Verfahren (STLGS) nicht die gewünschte Zahl an Sitzen zuteilen kann.

Aufgeteilt wird das ganze nach der Anzahl der im SP vertretenen Listen.

Aufgeteilt wird das ganze nach der Anzahl der im SP vertretenen Listen.

Wir sehen: Je mehr Listen im SP sitzen, desto wahrscheinlicher wird es, dass das Sainte-Laguë/Schepers-Verfahren für eine der Ausschussgrößen fehlschlägt, und noch stärker steigt die Wahrscheinlichkeit, dass das Rüngler-Problem auftritt.

Eine Grafik hab ich noch: Wie wahrscheinlich ist es, dass für alle vier vorgesehenen Ausschussgrößen entweder das Rüngler-Problem auftritt oder das Sainte-Laguë/Schepers-Verfahren nicht die gewünschte Zahl an Sitzen zuteilen kann?

Sieht verschmerzbar aus. Wobei: 10 % sind dann doch ganz schön viel.

Sieht verschmerzbar aus. Wobei: 10 % sind eigentlich doch ganz schön viel. Anscheinend konvergiert das gegen 25 %, also jedes vierte Wahlergebnis wäre höchstproblematisch. Gegen zu viele Listen im SP könnte ja eine Sperrklausel bei der Wahl helfen *diabolisches Grinsen*

Fazit

Wenn das Rüngler-Problem ein Problem ist, ist es tatsächlich ein Problem.

So, für heute habe ich nun mit genug Zahlen und Bildern um mich geworfen. Das gesamte Team von hszemi.de wünscht allen Beteiligten viel Vergnügen bei der Lösung dieses Problems!

Disclaimer: Menschen machen Fehler. Falls ihr in den obigen Zahlen und Grafiken einen Fehler bemerkt, freue ich mich über einen Hinweis, zum Beispiel in den Kommentaren.

  1. Für eine einzige Liste ist dies trivial. Beweis durch scharfes Hinschauen. (Für 2 Listen eigentlich ja auch.)