Grundsätzliche Überlegungen zur Planung eines neuen Projekts

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Hallo zusammen,
mein erstes größeres Projekt mit Python/PyQt war eine eigene Kurs/Schülerverwaltung für mein N900, die auch soweit funktioniert aber an der ein oder anderen Stelle hackt, mir für die nächsten 1-2 Jahre aber noch prinzipiell ausreicht (wenn die 2 N900 noch solange durchhalten ;)) Die Daten werden im Moment aber rein objektbasiert gespeichert, was das Hinzufügen von zusätzlichen Informationen natürlich erschwert und ich mit meinem heutigen Kenntnisstand auch eher auf eine relationale Datenbank zurückgreifen würde. Ich möchte also einen Neuanfang machen und diesmal Fallstricke vermeiden bzw. ein wenig Zukunftssicherer planen, soweit das möglich ist.
Da ich das Programm längerfristig auch auf verschiedenen Geräten einsetzen möchte, wollte ich das Backend in Python programmieren und die Oberfläche mit PySide/QML abbilden, da es im Moment so aussieht, dass dies auf den meisten Plattformen auf lange Sicht unterstützt wird und ich mich weder im Android- noch Apple-Universum bewege und das auch nicht vorhabe. Zielgeräte sind hier eher das N9/N950 (solange es noch läuft ;)) und die kommenden Plattformen basierend auf SailfishOS, BB10, UbuntuPhone. Da ich auch ein Playbook mein Eigen nenne, wäre das erstmal das bevorzugte Gerät (auch vom Formfaktor 7").
Nach meinen bisherigen Recherchen würde ich auf SQLAlchemy zurückgreifen und die Oberfläche mit QML gestalten. Mit SQLAlchemy habe ich aber noch gar nichts gemacht, mit QML aber schon eine ganze Menge, so dass ich da nicht die großen Probleme sehe, wenn es um das GUI geht.

Wie sehen das hier die erfahreneren Programmierer, ist PySide/QML zukunftssicher oder sollte man ggf. auf eine webbasierte Lösung bauen, was für mich aber wieder völliges Neuland bedeuten würde. Welche Werkzeuge wären hier hilfreich? Oder gibt es einen ganz anderen Ansatz, den ich bisher übersehen habe?

Für Anregungen/Meinungen wäre ich sehr dankbar.
Gruß EmaNymton
BlackJack

@EmaNymton: Bei PySide habe ich so bisschen Bedenken was die „Lebendigkeit” angeht. Laut FAQ gibt es Packager für Windows, das war aber in der Vergangenheit nicht immer der Fall.

Da Du Front- und Backend trennen möchtest, sollte es ja möglich sein das Frontend auszutauschen, oder gar mehrere anzubieten. Für den „mobilen Markt” würde ich wohl auf eine Webanwendung setzen. Einen modernen Browser haben diese Geräte ja alle.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@EmaNymton: Mit der Trennung in Backend (Server mit Geschäftslogik und Daten) und Frontend (Client zur Darstellung und Datenpflege) musst Du Dir Gedanken über die Kommunikation, Datenexklusivität (wer darf was wann wie einsehen und bearbeiten) und nicht zuletzt Sicherheit machen. Das sind serverseitige Vorarbeiten, die recht planungsintensiv werden können. Im Idealfall erarbeitest Du ein API zu Deinen Geschäftsdaten, die diese Belange und die Interaktionsmöglichkeiten abbildet. Den Client würde ich zunächst hinten anstellen.
Um das Rad nicht neu zu erfinden, würde ich für die Kommunikation auf HTTP(S) und für den Datenaustausch auf JSON setzen.

Clientseitig bietet sich dann der Browser an, muss aber nicht. Du kannst das JSON-API genauso gut mittels eines selbstgestrickten Clients in Qt bedienen. Nur lohnt der Aufwand? Was die Zukunft von Qt angeht - es hat in der jüngsten Vergangenheit mehrfach den Besitzer gewechselt, und Digia, der neue "Maintainer" macht zwar vollmundige Versprechung in puncto Android und iOS, aber da fliesst noch einiges an Wasser den Rhein hinunter ;)
Moderne Browser dagegen sind das Schweizer Taschenmesser, was die Verteilung auf eine Vielzahl von Endgeräten kopfschmerzfrei (zumindest weniger aufwändig) werden lässt.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

@jerch: Oh, sorry, habe mich da wohl nicht klar genug ausgedrückt. Es geht ausschließlich um eine lokale Anwendung, die nur von einem Benutzer (dem Lehrer) verwendet werden soll. Die Software soll das Notenbuch und die Kurshefte ersetzen und mich in meine Alltagsarbeiten auf Dauer entlasten. Insofern ist eine lokale Lösung für mich ausreichend.

@BlackJack: Würde man da auf ein Webframework a la Django zurückgreifen? Habe wie gesagt noch nichts damit gemacht...
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@EmaNymton: Ah ok, ich las in Kursverwaltung den rechnerübergreifenden Ansatz hinein. Wobei ich mich frage, ob dass aus Gründen der Datensicherheit nicht angezeigt wäre - was ist, wenn das Handy mit dem Programm den Geist aufgibt? Kursbuch/Noten weg? Gibts eine Backupstrategie?

Vielleicht kannst Du mal beschreiben, was die Anwendung kann und können soll.

NB: Für eine standalone-Anwendung bin ich kein Freund der Webapp-Lösung, sondern eher old school und würde eine native Anwendung vorziehen.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Ok, ich versuche mich mal kurz zu fassen.

Notenbuch:
Eintragen von Noten, Unterteilung in Oberkategorien (schriftlich/mündlich), Unterkategorien individuell anlegbar mit Gewichtung der einzelnen Noten, Vorschläge zu Quartalsnoten/Endnoten mit anschließender Festlegung

Schülerverwaltung:
Schülerdaten/Erzieherdaten, Bemerkungen zu Schülern, Gesprächsnotizen zu Eltern/Schülergesprächen

Kursbuch pro Klasse/Kurs:
Notieren von Stundenthema, Bemerkungen, Aufgaben, Fehlstunden von Schülern verwalten (entschuldigen/unentschuldigt), Auswertung von Fehlstunden in einem auswählbaren Zeitintervall

Export der Kursbuches, d.h. ich möchte am Ende des Schuljahres ein Datei erzeugen, die mir meine Kursheft abbildet, sonst hätte ich ja doppelte Buchführung. Im Moment mache ich das mit Latex.

Backupstrategie besteht im Moment aus einem wöchentlichen Kopieren meiner gepickelten Daten über ssh/cron.

Verschlüsselung der Daten wäre wünschenswert, ist aber für mich kein Muss. Das Gerät selbst ist per Passwort geschützt und ein normales Notenbuch kann ich ja auch nicht verschlüsseln, bevor jetzt hier wieder jemand schreit ;)
BlackJack

@EmaNymton: Mit einem Notenbuch geht man aber anders um als mit einem mobilen Rechner oder gar Telefon. Das lässt sich auch nicht so einfach kopieren oder nicht nachweisbar verändern. Angriffe über Bluetooth oder WLAN funktionieren bei einem Buch auch nicht. ;-)
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

@BlackJack: Schon klar, deswegen hatte ich ja geschrieben,
Verschlüsselung der Daten wäre wünschenswert, ist aber für mich kein Muss.
Passwortschutz ist in NRW auch im Moment ausreichend, für wie sinnvoll man das auch immer halten mag:
http://www.schulministerium.nrw.de/BP/L ... chutz.html
BlackJack

@EmaNymton: Passwortschutz ist ein Beispiel. Da steht hinreichend geschützt. Was vielleicht noch für einen relativ grossen, fest verkabelten PC gilt, kann man IMHO nicht einfach so auf ein Mobiltelefon oder Tablet-PC, beziehungsweise noch nicht einmal auf einen grossen Laptop übertragen.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Das siehst du so.

In der Verordnung steht in §2:
Die Verarbeitung personenbezogener Daten von Schülerinnen und Schülern in privaten ADV-Anlagen von Lehrerinnen und Lehrern für dienstliche Zwecke bedarf der schriftlichen, ein Verfahrensverzeichnis gemäß § 8 DSG NRW enthaltenden Genehmigung durch die Schulleiterin oder den Schulleiter. Die Genehmigung darf nur erteilt werden, wenn die Verarbeitung der Daten nach Art und Umfang für die Erfüllung der schulischen Aufgaben erforderlich ist und ein angemessener technischer Zugangsschutz nachgewiesen wird.
Dein
IMHO
ist also mehr als berechtigt, da wir beide keine Anwälte sind und die entscheiden nunmal über die Auslegung dieser Passage. Mein letzter Kenntnisstand ist der, dass ein Passwortschutz ausreicht (Rückfrage meines Direktors wg Erteilung der oben zitierten Genehmigung). Bevor ich etwas anderes lese, ist das für mich also als Mindestvoraussetzung, um Schülerdaten in digitaler Form zu speichern, bindend.
Das heißt nicht, dass ich mich gegen eine Komplettverschlüsselung stelle, ich befürworte sie sogar, für mich stellt sich im Moment nur die Frage nach der Verhältnismäßigkeit. Wenn ich irgendwann mal mein Programm öffentlich zugänglich machen sollte, wird auch eine Verschlüsselung integriert sein, da ich bei dem durchschnittlichen Kollegen nicht das grundlegende Verständnis für Sicherheitsfragen voraussetze ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also ich würde da einfach ein Web-Dings bauen und das Frontend für Telefone mittels HTML5 und eventuell PhoneGap realisieren. Da kann man ein Framework nehmen welches man will, Django wäre sicherlich keine schlechte Wahl, aber anderes geht an der stelle etwa genausogut.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Da ich mir ja eh eine geeignete DB-Struktur überlegen muss, bevor ich mir über die Darstellung/Oberfläche Gedanken mache, habe ich jetzt erstmal mit einem ER-Diagramm angefangen und stoße bei der Modellierung der Noten schon an meine Grenzen, da ich bisher nur einfachere Zusammenhänge modelliert habe.
Jeder Kurs soll seine eigene eindeutige Notenskala haben, wobei ich jetzt hier nur die Skala berücksichtigen will, in der die Quartalsnoten und Zeugnisnoten erscheinen, also z.B. in der Oberstufe bei uns 0-15 Pkt und in der SekI 1-6 als Notenstufen.
Innerhalb der Kurses sollen aber beliebig viele Notenkategorien anlegbar sein, aus denen dann je nach Gewichtung der einzelnen Kategorien die Quartalsnoten und daraus die Endnoten gebildet werden können. Also gibt es z.B. für jedes Quartal die Oberkategorien mündlich (mit möglichen Unterkategorien Beteiligung, Referat, Gruppenarbeit, Experimentieren, ...) und die Oberkategorie schriftlich (mit möglichen Unterkategorien Klausur, Hausarbeit, Projekt,...). Jede Kategorie sollte prinzipiell eine eigene Skala haben können. Also möchte ich z.B. die Beteiligung z.B. nur mit ++, +, 0, - bewerten können, was 4 Stufen entspräche, die Quartalsnote aber dann in der entsprechenden Notenskala des Kurses.

Da ich jeder Note ein Datum zuordne, würde ich in einer eigenen Tabelle die Quartalszeiten eintragen lassen und damit die Notenzugehörigkeit zum jeweiligen Quartal abbilden. Oder sollte das Quartal direkt beim Anlegen bestimmt werden und mit gespeichert werden? Bei der Strukturierung der Kategorien/Oberkategorien habe ich aber ein Brett vor dem Kopf, kann mir das jemand wegnehmen oder zumindest ein paar Löcher reinbohren?

Mein bisher erstelltes aber noch nicht fertiges ER-Diagramm findet ihr hier:
https://dl.dropbox.com/u/107743837/ER.png
xeike
User
Beiträge: 83
Registriert: Donnerstag 28. Februar 2013, 09:58

Hi EmaNymton!

Bildung von Noten und deren Kategorie ist jetzt recht weit weg von Python.

Wenn du dich auf Ordinalskalen beschränkst und es schaffst, zum Beispiel deine "++, +, 0, -"-Skala auf z. B. [10, 7, 5, 2] abzubilden, dann machst du dir das Leben leicht.

Ebenfalls etwas leichter wird es, wenn man im Diagramm etwas schreibt wie:
* Ein Schüler hat 1-2 Erziehungsberechtigte Personen (Du verwendest Eltern, und dann gleich noch m Stück ;-) )
* Eine (operationalisierbare) Leistung ist mit 1 Notenskala verknüpft.
* In 1 Kurs sind M (operationalisierbare) Leistungen zu erbringen


Xe
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

xeike hat geschrieben: Bildung von Noten und deren Kategorie ist jetzt recht weit weg von Python.
Da hast du natürlich Recht, ich hatte nur gehofft, dass die fähigen Leute hier mir im DB-Design einen Tipp geben könnten ;)
xeike hat geschrieben: Wenn du dich auf Ordinalskalen beschränkst und es schaffst, zum Beispiel deine "++, +, 0, -"-Skala auf z. B. [10, 7, 5, 2] abzubilden, dann machst du dir das Leben leicht.
Ja, das wäre zum Ermitteln einer Quartalsnote sicher sinnvoll und würde ja darauf hinauslaufen, dass jede Note einen Wert braucht, was ich im ER-Diagramm ja schon berücksichtigt habe, oder habe ich dich falsch verstanden?
xeike hat geschrieben: * Ein Schüler hat 1-2 Erziehungsberechtigte Personen (Du verwendest Eltern, und dann gleich noch m Stück ;-) )
* Eine (operationalisierbare) Leistung ist mit 1 Notenskala verknüpft.
* In 1 Kurs sind M (operationalisierbare) Leistungen zu erbringen
Danke für die Hinweise, ich hatte die Anzahl der Erziehungsberechtigten offen gelassen, da wir durchaus schonmal den Fall hatten, dass Schüler bei ihren Großeltern wohnen, die Eltern aber trotzdem noch erziehungsberechtigt sind. Die Großeltern sind aber als Kontaktperson angegeben, so dass man im Endeffekt alle Kontaktdaten vorhalten müsste.
Antworten