- Registriert
- 3 Aug. 2014
- Beiträge
- 28.539
Hallo,
wie ihr vielleicht mitbekommen habt, haben wir in der Vergangenheit über mögliche Projekte für die NGB.to-Programmierer gesprochen. Da sich aber keine Aufgabe klar durchgesetzt hat - hier ein Vorschlag der letztlich diskutiert wurde.
Update: Wir haben nun ein Repository auf Github, Danke drfuture!
Dieses findet sich hier:
https://github.com/NGB-to/split-that-game
Alle Informationen und Outlines finden sich ebenfalls hier: https://stg.dwrox.net
Im weiteren, ich würde da gern mit anfangen das Projekt vorzustellen um ersten Input zu sammeln und auch die Fragen zu klären wie und wo das Projekt, nach Mehrheitsentscheidung, dann gehostet wird zum Beispiel Gitlab oder Github war angedacht, just Git.
Zielplattformen sind Windows und Linux. Mac Support wäre ebenfalls naheliegend.
Außerdem wäre die Frage nach Teams, von je einem der Punkte eins bis vier, wobei Punkt drei als Referenz dienen soll.
Das sind:
Die Programmiersprachen und Tools/Frameworks sollen frei wählbar sein, wobei auf die Lizenz zu achten wäre. Kein Qt (Cute) - ansonsten kann alles verwendet werden.
Das Projekt soll unter der "GNU General Public License v3.0" Lizenz laufen, so wie auch die einzelnen Komponenten.
An euch als potentielle Teilnehmer folgende Fragen:
Anleitung um "LastAccessUpdate" unter Windows einzuschalten, was Standardmäßig deaktiviert ist:
1) Windows …[kw]cmd[/kw] - Kommandozeile als Admin starten
2) Den Status prüfen: [kw]fsutil behavior query DisableLastAccess[/kw] gibt den Status [kw]1 = an[/kw] oder [kw]0 = aus[/kw] zurück
3a) Zeitstempel aktivieren: [kw]fsutil behavior set DisableLastAccess 0[/kw] und Windows neu starten
3b) Zeitstempel deaktivieren: [kw]fsutil behavior set DisableLastAccess 1[/kw] und Windows neu starten
Nachdem die Option aktiviert ist, was etwas die Performance drücken kann, können mittels "PayLoadTimer.py" die Zugriffe protokolliert werden.
Hier eine Kurzanleitung wie ein Spiel oder Anwendung protokolliert werden kann:
wie ihr vielleicht mitbekommen habt, haben wir in der Vergangenheit über mögliche Projekte für die NGB.to-Programmierer gesprochen. Da sich aber keine Aufgabe klar durchgesetzt hat - hier ein Vorschlag der letztlich diskutiert wurde.
Update: Wir haben nun ein Repository auf Github, Danke drfuture!

Dieses findet sich hier:
https://github.com/NGB-to/split-that-game
split-that-game
Idee und Hintergrund
Die Grundidee ist einfach: Spiele oder Anwendungen zu splitten bzw. aufzuteilen und höchstmögliche Performance versus Speichernutzung zu erreichen.
Heißt, auf SSD/M.2 SSD Medien Platz zu sparen und auf normalen HDDs nicht so häufig genutze Daten auszulagern, welche nicht kritisch für die Performance von Spielen oder Anwendungen sind - aber viel Platz einnehmen würden.
Um dieses Ziel zu erreichen, sollen Junctions in Windows bzw. Symlinks unter Linux verwendet werden. Profile sollen diesen Prozess, mit vorher definierten Regeln, vereinfachen.
Und eine Onlineschnittstelle durch eine Community unterstützt könnte Profile bzw. Presets für Spiele und Anwendungen bereithalten die lokal angewendet werden können.
Zu guter letzt sollen Helfer Werkzeuge (Helper Tools) dafür sorgen mit dem eigentlichen Analyse-Prozess beginnen zu können um Profile, erfolgreich, zu kreieren.
Gliederung
- eine GUI-Desktop Anwendung
- eine Onlineschnittstelle
- Profil-Aufbau
- Helper-Tools
1. Die GUI-Anwendung, möglicher Flow
Kernfunktionen der GUI-App
- Navigiere zu einem Ordner und setze diesen als "Quellordner" für das Spiel (idealerweise das langsamere Laufwerk wo die Daten permanent verbleiben)
- Setze den Namen für das Profil und eine eventuelle Version (leer = keine Angabe)
- Klick auf "Analyze" und lasse die App die LastAccess, ModificationTime, Größe erfassen aus dem Quellordner
- Selektiere Dateien oder ganzen Ordner aus dem Quellordner, die kopiert werden sollen, für die Symlinks
- Erstelle / Navigiere zu einem Zielordner, in den die Auswahl später kopiert werden soll (dies kann aus Optionen auch ein fixer Oberordner sein, mit Spielname als Titel aus der Eingabe für den Unterordner)
- Wähle "split-that-game" was:
- Die Inhalte verschiebt und gegebenenfalls prüft, ob diese nicht schon in Zielordner existieren bzw. ob diese verändert worden sind (LastAccess, ModificationTime).
- Die Symlinks in Quellordner setzt zu Dateien und Ordnern - so fern nicht vorhanden
- Speichere die aktuelle Einstellung im aktiven Profil (bzw. das eigene lokale Profil) für das Spiel oder die Anwendung
- (hier wäre eine File-Based Lösung gut: /split-that-game/userProfiles/localId.stg)
- Meta-Informationen landen ebenfalls in der lokalen Datenbank
- Speichere die Dateninformation in der lokalen DB für spätere Vergleiche - dies könnt den JSON Output von PayLoadTimer.py verwenden und oder einer eigenen integrierten Funktion.
Weitere Features
- Eingabe der Profil Eckdaten, siehe 2.
- Erstellen/Verwalten einer MD5 Checksumme für die Spiel/Anwendungs Executable/EXE
- Aufgrund von Beschränkungen in Windows Symlink: Aktivieren / Deaktivieren von Symlinks aus Profilen on demand
- Anzeige der verfügbaren Symlinks/Softlinks die verlinkt werden können
- Windows > a limit of 63 reparse points on any given path. ( https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points )
- Downloaden von Profilen aus der Onlineschnittstelle über eine API
Beispiel: /split-that-game/gameProfiles/authorName_profileId.stg- Informationen über die Profile landen außerdem in der Datenbank und werden auf Wahl Update profiles aktualisiert.
- Auswahl einer Spielversion welche in den Profilen enthalten ist.
- Bewertung von Dateien für die Scores 0 >= 10, wobei:
10 = High Latency (oft genutzt)
0 = Low Latency (wenig oder nur einmal genutzt)- Upload des eigenen Profils zur Onlineversion (nach Registrierung), gegebenfalls mit Freischaltung oder Bewertung
- Auswahl des Betriebssystems und der Version des Spieles und Benutzer-Kommentar zum Profil
- Auswahl von eigenen und Community-Profilen
- Übersicht über alle Profile zu einem Spiel
- Inkompatible Versionen bzw. Angabe mit Version x.x.x getestet
- Angabe von Spielordner, die gescannt werden auf bestehende Spiele. Beispielsweise Gog/Steam/Epic auf bekannte Titel mit Profilvorschlägen so fern vorhanden
- Anzeige des freien Speichers auf der Symlink SSD/M2 - und die neue Belegung durch neue Symlinks/Daten in einer Vorschau
- Schnelle Deinstallation/Unlinking von Spielen und Anwendungen einhergehend mit einer Visualisierung des von Anwendungen belegten Platzes auf Link-Laufwerk
- Wenn Steam/Client Spiele mit gesetzten Symlinks aktualisiert/updated und Zeitstempel abweichen - Daten von SSD auf HDD synchronisieren um die Stammdaten aktuell zu halten damit nur ein Update gefahren werden muss.
- Hinweis auf zu aktualisierende Inhalte bei Klick auf "Refresh game contents" was ein Update durchführt zwischen HDD und SSD
- Setzen von Prioritäten/Scores für Dateien/Inhalte für Performance vs. Disk Usage Tradeoffs in Profilen
2. Profil-Aufbau
Analysedaten von Dateien sollten in einer SQLite DB landen. Heruntergeladene Profile in Dateien im JSON Format.
Beispiel: /split-that-game/gameProfiles/authorName_profileId.stg
- Autor
- Autor Name => name
- Email => email (Optional)
- Profile => profile
- Id des Profiles => id
- Basiert auf/abgeleitet von => basedOn (Id)
- Kommentar => comment
- Zeitstempel => times
- Erstellt => created
- Aktualisiert => changed
- Gesamt-Score (siehe Details)=> score
- Spieldetails => game
- MD5 Checksum (Main EXE) => gMd5
- Spielname => gName
- Spielversion => gVersion
- Betriebssystem => gOs
- Quellordner => gBase
Details
- Ordner /video (Relativ zu "gBase")
- stg_wholeLink = true/false (ganzes Verzeichnis Symlinken)
- stg_fileList (Dateiliste wenn nicht => stg_wholeLink = true)
- Dateiname
- Größe in Bytes => size
- Linking-Status => linkStatus aktiv/inaktiv
- Performance-Score 0 >= 10
10 = High Load auf HDD
5 = Medium Load auf HDD
0 = Low oder One time Load auf HDD
- Lokales Profil
- Änderungszeit => mTime (modificationTime)
- Zugriffszeit => aTime (accessTime)
3. Die Onlineschnittstelle
- Download von aktuellen Profilen (ohne Registrierung) mittels API im JSON Format
- Eintragen/Upload von Profilen
- Registrierung mit Benutzername/Email - nur für das Eintragen von Profilen und auch aus der GUI-App heraus möglich
- Online-Suche in der Datenbank nach Spiel und Anwendungsprofilen
- Bewertung von Profilen (negative könnten herausfliegen aus der Ansicht und sind nur über extra Knopfdruck sichtbar, bleiben aber in der Datenbank erhalten)
4. Helper Tools
- PythonSkript PayLoadTimer.py: Unter Linux und oder Windows die Zugriffe tracken um mögliche Profildaten zu gewinnen, soll in die GUI Anwendung fließen.
- PythonSkript VisualizePayload.py: Visualisiert den Namen, die Häufigkeit der Zugriffe und Abständen von Zugriffen auf Dateien nach einer Sitzung mit Ausgabe von PayLoadTimer.py. - Auch ein Kandidate für die GUI Lösung, also alles in einem.
- PowerShell SwitchLastAccess.ps1: Aktivieren und deaktivieren der LastAccessUpdate Option in Windows über fsutil.
Alle Informationen und Outlines finden sich ebenfalls hier: https://stg.dwrox.net
Im weiteren, ich würde da gern mit anfangen das Projekt vorzustellen um ersten Input zu sammeln und auch die Fragen zu klären wie und wo das Projekt, nach Mehrheitsentscheidung, dann gehostet wird zum Beispiel Gitlab oder Github war angedacht, just Git.
Zielplattformen sind Windows und Linux. Mac Support wäre ebenfalls naheliegend.
Außerdem wäre die Frage nach Teams, von je einem der Punkte eins bis vier, wobei Punkt drei als Referenz dienen soll.
Das sind:
- GUI-Desktop Anwendung
- die Onlineschnittstelle
- Profile (Json Format)
- Behilfswerkzeuge bzw. Helper Tools
Die Programmiersprachen und Tools/Frameworks sollen frei wählbar sein, wobei auf die Lizenz zu achten wäre. Kein Qt (Cute) - ansonsten kann alles verwendet werden.
Das Projekt soll unter der "GNU General Public License v3.0" Lizenz laufen, so wie auch die einzelnen Komponenten.
An euch als potentielle Teilnehmer folgende Fragen:
- Hättet Ihr Interesse an dem Projekt mit zu arbeiten?
- Nutzt Ihr lieber Gitlab oder Github? Was dann die Arbeit an dem Projekt koordinieren soll.
- Welche Programmiersprache
würdet ihr einsetzen wollen und welche Frameworks/Libraries
- Würdet Ihr gerne im Team arbeiten oder doch eher allein? Entsprechende Bereiche würden dann auf Github oder Gitlab erstellt werden.
Anleitung um "LastAccessUpdate" unter Windows einzuschalten, was Standardmäßig deaktiviert ist:
1) Windows …[kw]cmd[/kw] - Kommandozeile als Admin starten
2) Den Status prüfen: [kw]fsutil behavior query DisableLastAccess[/kw] gibt den Status [kw]1 = an[/kw] oder [kw]0 = aus[/kw] zurück
3a) Zeitstempel aktivieren: [kw]fsutil behavior set DisableLastAccess 0[/kw] und Windows neu starten
3b) Zeitstempel deaktivieren: [kw]fsutil behavior set DisableLastAccess 1[/kw] und Windows neu starten
Nachdem die Option aktiviert ist, was etwas die Performance drücken kann, können mittels "PayLoadTimer.py" die Zugriffe protokolliert werden.
Hier eine Kurzanleitung wie ein Spiel oder Anwendung protokolliert werden kann:
- Unter Windows mittels fsutil die Option [kw]DisableLastAccess[/kw] auf [kw]0[/kw] (Null) stellen und ausschalten
- Pfad zum Spiel in [kw]PayLoadTimer.py[/kw] eintragen.
- Spiel starten und spielen
- Spiel beenden
- [kw]PayLoadTimer.py[/kw] mit [kw]Strg + C[/kw] beenden, es wird eine JSON mit den Zugriffen erstellt, welche zur weiteren Analyse wichtig ist. Es wird in einer .stg (JSON Datei) gespeichert, ihr könnt euch gerne alle Daten dazu dann im Detail ansehen.
Zuletzt bearbeitet: