Skip to content

Commit

Permalink
last changes for firste stable version 2.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
polarwinkel committed Jul 13, 2021
1 parent 52c7981 commit b2a8c5d
Show file tree
Hide file tree
Showing 9 changed files with 90 additions and 34 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ GradeMan2conf.yaml
*.deb
*.exe
__pycache__/
buildExe/build/
buildExe/work/
2 changes: 2 additions & 0 deletions GradeMan2Tray.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
sys.path.append(os.getcwd()+'/GradeMan2')
import app

version = '2.0.0'

TRAY_TOOLTIP = 'GradeMan2'
if platform.system()=='Linux':
TRAY_ICON = 'static/favicon.svg'
Expand Down
68 changes: 54 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,44 +14,84 @@ GradeMan2 is the all-new version of the GradeMan schoon management system for te

As long as nobody else translates this it will only be available in german language. Please contact me if you want to make a translation!

## Public Release Candidate
## Stable Release

GradeMan2 ist zum Sommer 2021 bereit für den breiten Einsatz!
GradeMan2 ist mit der Version 2.0.0 bereit für den breiten Einsatz!

Ich habe GradeMan2 schon das ganze Schuljahr 2020/21 in Prokuktiveinsatz, alle Features laufen einwandfrei. Nur noch wenige Komfortfunktionen stehen noch auf meiner ToDo-Liste, die per Update dann noch kommen.
Ich habe GradeMan2 schon das ganze Schuljahr 2020/21 in Prokuktiveinsatz, alle Features laufen einwandfrei. Nur noch wenige Komfortfunktionen stehen noch auf meiner ToDo-Liste (s.u.), die per Update dann noch bei Zeiten kommen.

Das Einzige, was noch nicht fertig ist, ist das Packaging als Debian-Paket und Windows-exe. Ich versuche das noch bis zum Schuljahresbeginn 2021/22 fertig zu bekommen.
Meine ToDo-Liste:

## Wie kann ich GradeMan2 starten?
- Bereitstellung einer Windows-exe-Datei oder eines Windows-Installers
- berechnete Notenvorschläge für die Halbjahre
- Sitzplaneditor (bislang: Sitzpläne müssen manuell als CSV erstellt werden, siehe Doku in GradeMan2)

## Wie kann ich GradeMan2 verwenden?

### Linux

Bislang: GradeMan2 herunterladen, dafür sorgen dass python3, python3-jinja2 und python3-wxgtk4.0 installiert sind, und dann die GradeMan2Tray.py ausführen.
Die einfachste Möglichkeit ist es die `.deb`-Paketdatei für z.B. Debian, Ubuntu und ähnliche Debian-Derivate herunterzuladen und zu installieren. (In dieser ist GradeMan2 als Quelltext-Version enthalten und kann zur Überprüfung der Vertrauenswürdigkeit auch vollständig eingesehen werden.)

Der GradeMan2-Server ist dann als Taskbar-Icon zu sehen, die Benutzeroberfläche lässt sich per Rechtsklick darauf und dann einem Klick auf `Start` mit dem Browser öffnen.
Nach der Installation des Paketes findet sich ein eintrag im Startmenü unter "Lernprogramme" welches den Server startet, der sich als Tray-Icon bemerkbar macht. Die Benutzeroberfläche lässt sich per Rechtsklick darauf und dann einem Klick auf `Start` mit dem Browser öffnen.

TODO: Ein .deb-Paket ist noch in Arbeit!
GradeMan2 ist dann im Browser unter `http://localhost:4202` erreichbar, die Daten werden standardmäßig in der `grademan.sqlite3`-Datei in Heimverzeichnis gespeichert (kann in GradeMan2 angepasst werden).

### Windows

Bislang: Siehe oben, wie unter Linux!
Bislang: Die verwendete Programmiersprache Python3 muss manuell installiert werden, siehe dazu [die Webseite von python](https://www.python.org/downloads/windows/).

Die Abhängigkeiten von Python3-Bibliotheken müssen dann durch einmaliges Ausführen der folgenden Befehlszeile (Eingabeaufforderung) installiert werden:

```
pip install flask waitress markdown jinja2 pyyaml wxWidgets
```

TODO: Eine .exe-Datei ist noch in Arbeit!
GradeMan2 kann dann als `.zip`-Datei heruntergeladen werden und durch Doppelklick auf `GradeMan2Tray.py` gestartet werden.

TODO: Eine .exe-Datei oder ein Installer ist noch in Planung (vgl. Inhalt des Ordners `buildExe`), als nicht-Windows-Nutzer nehme ich hier gerne Hilfe an!

### GradeMan2-Server

#### [Deutsch]

Die beste Möglichkeit GradeMan2 zu nutzen ist ein eigener GradeMan2-Server, z.B. auf einem Raspberry Pi zu Hause.

Ich empfehle dann den Zugriff z.B. über einen nginx-Reverse-Proxy abzusichern mit Zugangsdaten und ssl-Verschlüsselung. Alternativ geht es vermutlich auch, wenn man z.B. in seinem Heimrouter einen VPN-Zugang einrichtet, was aber weniger Komfortabel ist.

Das ist aber auch der komplizierteste Weg, der einiges an Erfahgung in der Linux-IT-Administration erfordert!
Ich empfehle dann den Zugriff z.B. über einen nginx-Reverse-Proxy abzusichern mit Zugangsdaten und ssl-Verschlüsselung (z.B. let's Encrypt). Alternativ geht es vermutlich auch, wenn man z.B. in seinem Heimrouter einen VPN-Zugang einrichtet, was aber weniger Komfortabel ist.

Das ist aber auch der komplizierteste Weg, der Erfahrung mit Servern erfordert! Unbezahlte Hilfe kann ich hierfür leider nicht leisten.

Wer mit den folgenden Stichworten klarkommt wird es aber sicher schnell schaffen:

- DynDNS für den Zugang nach Hause (bei dynamischer IP-Adresse)
- Zertifikate, z.B. von let's Encrypt, für die Transport-Verschlüsselung (zwingend nötig damit die Fotografie-Funktion für Schülerfotos funktioniert)
- Reverse-Proxy, z.B. `nginx` für das Routing "nach draußen"
- Port-Forwarding im Heimrouter

Meine funktionierende Konfiguration für `nginx`:

```
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name your.tld www.your.tld; # replace your.tld
ssl_certificate /etc/letsencrypt/live/your.tld/fullchain.pem; # replace your.tld
ssl_certificate_key /etc/letsencrypt/live/your.tld/privkey.pem; # replace your.tld
# GradeMan
location / { # optional something like: `/GradeMan2/` (GradeMan2 always uses relative paths)
proxy_pass http://192.168.x.y/; # replace x and y! ; The `/` is important!
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-User $remote_user;
auth_basic "Auth required!";
auth_basic_user_file GradeMan2.passwd;
}
}
```

#### [English]

The best way to use GradeMan2 is to set up your personal GradeMan2-Server, i.e. on a Raspberry Pi. Then Access GradeMan2 from any of your devices, like your Desktop, Smartphone, Tablet, a School-PC or whatever over the web.

I recommend to use a reverse proxy like nginx for access control and ssl-encryption.

But: You will need quite some experience in IT-Administration on Linux to make it happen. Maybe I'll make this easier some day or create a HowTo for this.
But: You will need quite some experience in IT-Administration on Linux to make it happen!
14 changes: 6 additions & 8 deletions buildDeb/DEBIAN/control
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ Version: 2.0.0
Architecture: all
Maintainer: Dirk Winkel <[email protected]>
Installed-Size: 425
Depends: python3 (>= 3.7.0), python3-jinja2 (>= 2.10.0), python3-wxgtk4.0 (>= 4.0.0), python3-waitress (>= 1.4.0)
Depends: python3 (>= 3.7.0), python3-flask (>= 1.1.0), python3-markdown (>= 3.1.0), python3-jinja2 (>= 2.10.0), python3-yaml (>= 5.3.0), python3-wxgtk4.0 (>= 4.0.0), python3-waitress (>= 1.4.0)
Section: utils
Priority: optional
Homepage: https://polarwinkel.de/grademan.html
Description: Ein Schüler- Noten- und Unterrichtsmanager für Lehrer.
GradeMan2 vereint Stundenverwaltung, Notengebung, Anwesenheitskontrolle,
automatische Zusammenfassungen wie Durchschnittsnoten etc. in einer
Datenbank.
Die Benutzeroberfläche ist im Browser und adaptiert damit automatisch
alle modernen Möglichkeiten des Browsers wie Lesezeichenverwaltung,
Textsuche u.v.m.
Description: student-, lesson- and grade-management for teachers
GradeMan2 unites a lesson-management, a grade database, attendance-
documentation with automatic sumamries like average grades.
GradeMan2 is a server, the GUI will run in a browser, either on the
localhost or over the web if run behind a proxy server.
2 changes: 1 addition & 1 deletion buildDeb/buildDeb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# Script to build GradeMan2-deb-file
# insert apropriate version no:
version='dev'
version='2.0.0'

echo '=== building GradeMan2 version '$version' ==='

Expand Down
2 changes: 1 addition & 1 deletion buildDeb/usr/share/doc/grademan2/changelog
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ GradeMan2 (2.0.0-0) stable; urgency=low

* Initial Release

-- Dirk Winkel <[email protected]> Mon, 05 Jul 2021 20:00:00 +0100
-- Dirk Winkel <[email protected]> Tue, 13 Jul 2021 20:00:00 +0100
11 changes: 6 additions & 5 deletions buildExe/cxFreezeSetup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
import os, sys

sys.path.append(os.getcwd().replace('\\','/')+'/GradeMan2')
import app


os.chdir('build')
# TODO: Copy stuff to work-directory, clean up after finish
os.chdir('work')
sys.path.append(os.getcwd()+'\\GradeMan2')
import app

# Dependencies are automatically detected, but it might need fine tuning.
# "packages": ["os"] is used as example only
build_exe_options = {"packages": ['os', 'app'], "excludes": []}
build_exe_options = {"packages": ['os', 'app', 'markdown'], "excludes": []}

# base="Win32GUI" should be used only for Windows GUI app
base = None
Expand All @@ -27,4 +28,4 @@
)

# run with:
# cxFreezeSetup.py build
# cxFreezeSetup.py build
6 changes: 6 additions & 0 deletions buildExe/prepare.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
mkdir work
xcopy ..\GradeMan2Tray.py work\
xcopy ..\GradeMan2 work\GradeMan2\ /E

pip install py2exe cx_freeze
pip install flask waitress markdown jinja2 pyyaml wxWidgets
17 changes: 13 additions & 4 deletions buildExe/py2exeInstall.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
import os
import os, sys

os.chdir('build')
import packaging
import packaging.version
import packaging.specifiers
import packaging.requirements

import setuptools
from distutils.core import setup
import py2exe
# TODO: Copy stuff to work-directory, clean up after finish
os.chdir('work')
sys.path.append(os.getcwd()+'\\GradeMan2')
import app

setup(console=['GradeMan2Tray.py'])
options={"py2exe": {"includes": ["pkg_resources._vendor.appdirs", 'packaging.specifiers', 'packaging.requirements', 'markdown']}}

setup(console=['GradeMan2Tray.py'], options=options)

# run with:
# py2exeInstall.py py2exe
# py2exeInstall.py py2exe

0 comments on commit b2a8c5d

Please sign in to comment.