Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Methusalix
Beitrag
von Methusalix » 28.08.2016 00:39:16
Hallo,
wir halten demnächst bei uns im Büro eine Wahl ab und ich habe angeboten, mal einen Vorschlag für eine digitale Wahl zu machen.
Code: Alles auswählen
#!/bin/sh
while true
do
dialog --backtitle Wahlinfos --title 'Bitte lesen Sie die Hinweise sorgfältig' --msgbox "\n\nSehr geehrter Wähler, bei dieser Wahl... " 30 80
dialog --stdout --backtitle Wahl --title Kandidatenliste --nocancel --checklist "Kandidatenliste" 44 110 15 \
"1" "Albert Aname" off \
"2" "Berta Bname" off \
.........
"14" "Nina Nname" off >/home/user/tmp/wahl
if [ `cat /home/user/tmp/wahl | wc -w` -gt 7 ]; then
dialog --backtitle Anzahl --title Hinweis --msgbox "Sie haben mehr als 7 Personen gewählt. Ihre Wahl ist ungültig!" 10 80
else
#Auswertung der Eingabe...
Inklusive Eingabeauswertung, die hier erstmal keine Rolle spielt, funktioniert das ganz gut. Nun zu meinem Wunsch / meiner Frage:
Wenn der Wähler im checklist-Auswahldialog eine Person "anklickt", hätte ich gerne eine Einblendung der Art "Sie können noch 6 ..5 ..4.. Personen wählen." usw.
Irgendwo muß die Auswahl einer Person ja temporär zwischengespeichert sein und das will ich mir für eine Einblendung zunutze machen.
Gruß, M.
-
MartinV
- Beiträge: 790
- Registriert: 31.07.2015 19:38:52
- Wohnort: Hyperion
-
Kontaktdaten:
Beitrag
von MartinV » 28.08.2016 16:08:03
Irgendwo muß die Auswahl einer Person ja temporär zwischengespeichert sein und das will ich mir für eine Einblendung zunutze machen.
Ich vermute mal, der Zwischenspeicher liegt kaum erreichbar im RAM. Falls es eine Datei sein sollte, könntest Du z.B. in /tmp oder anderen Verdächtigen mit inotifywait schauen, ob dialog eine neue Datei anlegt.
Patchen des Sourcecodes von dialog wäre auch denkbar, wenn das den Aufwand wert ist.
Eine Alternative wäre es, statt der Option checklist die Option menu zu wählen, um bei jeder Auswahl eine neue, angepaßte Dialogbox zu präsentieren.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.
-
eggy
- Beiträge: 3334
- Registriert: 10.05.2008 11:23:50
Beitrag
von eggy » 28.08.2016 16:32:15
Mal nen paar Fragen am Rande:
Wie gedenkst Du, das mit der "Nichtnachvollziehbarkeit" zu machen? Man will ja nicht, dass man hinterher noch sehen kann, wer z.B. vom ersten oder letzten Wähler gewählt wurde.
Was machst Du, wenn jemand sagt "ich hab den falschen Knopf gedrückt"? Bei Papierwahlen hat der Wähler ja noch die Möglichkeit draufzuschreiben "Kreuz an der falschen Stelle, das sollte eigentlich $dahin". Dein "Wahl ist ungültig" sollte vielleicht zwei Fälle unterscheiden, a) der Wähler wollte ungültig wählen, b) er hat einen Fehler gemacht (der ihm auf Papier evtl nicht unterlaufen wäre?).
Wie gehst Du generell mit Fehlern um? Was machst Du falls das System abstürzt.
-
heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von heisenberg » 28.08.2016 18:30:46
Ja, so Wahlgeschichten haben da so einige Fragen bzgl. der Vertraulichkeit, und und und... . So grundsätzlich hört sich die vorliegende Anfrage aber eher etwas kleiner an, als so etwas wie eine Bundestagswahl. Vielleicht sind da die Ansprüche an die Korrektheit nicht ganz so hoch.
Vielleicht ist da ein bisschen HTML auch nutzerfreundlicher als Dialog. Ist natürlich aufwendiger.
Hier nochmal ein Ansatz für Dialog:
Code: Alles auswählen
#!/bin/bash
kandidaten=("Albert Aussergewoehnlich" "Britta Blossshuebsch" "Christiane Clever")
stimmenzahl=5
function wahldialog {
stimmenzahl=$1; shift
while :;do
dialog_cmd="dialog --stdout --backtitle Wahl --title Kandidatenliste --nocancel --menu 'Kandidatenliste(noch $stimmenzahl Stimmen uebrig)' 44 110 15 "
i=0
for PERSON in "$@";do
((i++))
gewaehlt[$i]=${gewaehlt["$i"]:- }
dialog_cmd="$dialog_cmd $i '["${gewaehlt["$i"]}"] $PERSON'"
done
kandidaten_nr="$(exec 3>&1; eval $dialog_cmd 2>&1 1>&3)"
[[ "${gewaehlt[$kandidaten_nr]}" == "*" ]] \
&& { gewaehlt[$kandidaten_nr]=" "; ((stimmenzahl++)); } \
|| { gewaehlt[$kandidaten_nr]="*"; ((stimmenzahl--)); }
done
}
while true
do
wahldialog $stimmenzahl "${kandidaten[@]}"
break
done
-
eggy
- Beiträge: 3334
- Registriert: 10.05.2008 11:23:50
Beitrag
von eggy » 28.08.2016 18:48:00
heisenberg hat geschrieben:So grundsätzlich hört sich die vorliegende Anfrage aber eher etwas kleiner an, als so etwas wie eine Bundestagswahl. Vielleicht sind da die Ansprüche an die Korrektheit nicht ganz so hoch.
Auch eine "kleinere Wahl" kann von entsprechenden Gesetzen geschützt sein, Beispiel Betriebsratwahl
https://www.gesetze-im-internet.de/betrvg/
-
Methusalix
Beitrag
von Methusalix » 28.08.2016 19:36:50
Hallo,
es handelt sich bei dieser Wahl um einen Vorgang, der in der Durchführung an keine Rechtsvorschriften gebunden ist. Natürlich gilt so etwas "gesunder Menschenverstand", Fairness, demokratisches Verständnis und dergleichen. Dafür ist durch vorgeschaltete Diskussionsrunden, an denen viele sehr unterschiedliche Diskutanten teilnehmen, gesorgt.
Ich bitte um Verständnis dafür, dass ich diese Aspekte hier nicht weiter diskutieren will - es hat mit der Fragestellung nichts zu tun. Bei weiterem Interesse bitte ich um Abspaltung in ein anderes Thema, wie das sonst ja auch hier und da gemacht wird.
Gruß, M.
-
Methusalix
Beitrag
von Methusalix » 28.08.2016 19:44:01
Hallo,
@MartinV: ich kann auf die Schnelle nicht erkennen, dass das mit "--menu" lösbar ist, will aber gerne noch mal in der Dokumentation nachschauen. Danke.
@heisenberg: Als Ansatz ist das ja schon mal sehr interessant. In der Form für den Anwender jetzt erstmal etwas sperrig, aber da läßt sich ja noch was drehen. Ich muss mir das noch genauer für ein besseres Verständnis anschauen. Danke.
Gruß, M.
-
heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von heisenberg » 28.08.2016 20:06:47
@MartinV: ich kann auf die Schnelle nicht erkennen, dass das mit "--menu" lösbar ist, will aber gerne noch mal in der Dokumentation nachschauen. Danke.
Das ist jetzt wohl genau das, was ich getan habe. Zwei Dumme ein Gedanke
-
MartinV
- Beiträge: 790
- Registriert: 31.07.2015 19:38:52
- Wohnort: Hyperion
-
Kontaktdaten:
Beitrag
von MartinV » 28.08.2016 20:26:14
Das ist jetzt wohl genau das, was ich getan habe. Zwei Dumme ein Gedanke
Britta Blosshübsch wäre stolz auf uns!
Elegante Lösung Deinerseits.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.