Programmier-Idee/Teamwork: "split-that-game"

  • Thread Starter Thread Starter
  • #21
Habe alles mit Symlinks verschoben und WINE meckert nicht, dafür SELinux.

Wie meinst du dass Wine meckert nicht, dafür (meckert) SELinux?

Na ja, wenn alle Dateien genutzt werden – die DAT-Datei ist sehr groß – ergibt das Verschieben gar keinen Sinn. Einzelne Chunks kann man ja leider nicht auslagern.

Dass ist die Frage, wie viel MB aus der Datei immer geladen werden müssen, große Chunks ergibt einen SSD Kandidaten, nur sporadisch ein paar MB könnte auch eine HDD stemmen. Je nachdem wie die Datei verarbeitet wird. Allerdings sehe ich aktuell keine Möglichkeit das irgendwie in Bezug auf Performance her zu messen, leider. Da hilft theoretisch nur testen.
 
Die Symbolischen Links arbeiten auf Dateisystem-Ebene. Für Anwendungen die ihre Daten vom Betriebssystem anfordern ist es nicht ersichtlich woher die Daten kommen.
Daher funktioniert so oder so alles wie zuvor.

Für "Sicherheits-Programme" egel welcher Art - sieht eine Umleitung natürlich verdächtig aus. Diese Programme prüfen im Zweifel explizit darauf ob die Anfrage an "Datei X" umgeleitet wird und die Daten "irgendwoher" anders abgerufen werden.
Daher meckert SELinux und im Zweifel auch mal eine andere Sicherheitslösung.
 
  • Thread Starter Thread Starter
  • #23
Wir haben nun ein Repository auf Github, Danke drfuture! :)

Dieses findet sich hier:


PS: wäre genial wenn man da ne einfach zu verstehende gui draufklatschen könnte und alles als exe verkleiden kann. (für windows normal user)

Und im aktuellen Release gibt es neben den Python3 Skripts auch Windows Executables:


Bitte beachtet, der [kw]PayLoadTimer.py/exe[/kw] sucht nach einer [kw]src.txt[/kw] in seinem Verzeichnis um den Ort zum protokollieren zu wählen.
 
Zuletzt bearbeitet:
Das Projekt klingt ganz cool. Vermutlich nicht für Rollenspiele oder sowas, wohl aber für Strategiespiele zum Beispiel. Da muss ja beispielsweise regelmäßig das Objekt eines Fußsoldaten erstellt werden, die allgemeine "Map" aber eher nur einmal zum Spielstart.

Auch stelle ich mir den Boost in verschiedensten anderen Programmen gut vor.

Dass am Ende natürlich alles bestenfalls in einer "einfachen" GUI Platz findet und man als Nutzer nur noch zwei Ordner auswählt und sagt "Mach mal" und irgendwann noch einen Klick macht "Bin fertig, schieb mal Kram rum", ist denke ich klar.
Dann würde ich das zumindest mal bei mir ausprobieren.
Wichtig wäre mir aber auch eine Funktion wie "mach es rückgängig" - also wo alle Dateien wieder an den korrekten Ort verschoben werden und Symlinks aufgelöst werden. Das bedeutet, dass neben dem Profil für die einzelnen Anwendungen auch noch eine Art von "Ich habe folgendes verschoben und verlinkt"-Liste abgespeichert wird. Das ist natürlich im Zweifel einige KB, vielleicht sogar wenige MB Overhead aber für mich auf alle Fälle wünschenswert.

Ich habe mir das PayLoadTimer-Skript noch nicht wirklich angeschaut. Speichert das nur einmal am Ende, welche Dateien wie häufig angefragt wurden und ähnliches? Ich könnte mir nämlich auch vorstellen, dass man daraus eine regelrechte Versuchsreihe machen könnte. Folgende Szenarien habe ich da so im Kopf

1) Das Skript speichert die Anzahl der Zugriffe auf eine Datei, ggf. speichert es auch noch dazu, wie groß diese Datei ist. Dann kann man über einen definierten Threshold entscheiden, wie viel % der Dateien auf die SSD kommen oder auch nicht.

2) Man zeichnet über mehrere Programm-Nutzungszeiträume Profile auf und hat die Möglichkeit diese mit einem irgendwie gearteten Algorithmus zu analysieren. Beispielsweise kann es ja vorkommen, dass einzelne Dateien nur bei wenigen Nutzungen viele Aufrufe haben, andere dafür aber immer sehr häufig angefragt werden.

3) Es sollte sich erkundigt werden, ob man auch eine Schnittstelle zu dem OS oder einer anderen naheliegenden Treiberebene hat, in der man auch auslesen kann, welche Teile der Datei gerade geladen wurden. Das würde die Profile zum Analsysieren erstmal ernorm vergrößern. Hierdurch kann man aber sehen, ob einzelne Dateibereiche regelmäßig angefragt werden (ggf HDD), oder aber eine ganze Datei auf einmal geladen werden muss (SSD).

4) Zudem könnte man als "Analyse" auch überlegen, ob es Sinn macht ein Vortrainiertes Neuronales Netz am Ende an den Nutzer auszuliefern, dass die Auswertung der Profile übernimmt und dabei die "beste Performance" ausgibt. Die Frage ist natürlich in wie weit jemand da eine Testreihe durchführen möchte und dort ein entsprechendes Netz (a) entwerfen und (b) trainieren möchte.

5) Es wäre vermutlich auch interessant zu wissen, in welchen zeitlichen Abständen die Zugriffe auf die Datei durchgeführt wurden. Viele Zugriffe zeitlich nah beieinander sprechen eher für eine SSD, viele Zugriffe, dafür aber mit größeren Pausen, sprechen für HDD. Entsprechendes sollte auch in den Profildaten enthalten sein.

---
Jetzt sind die Szenarien mit irgendwelchen Ideen, die mir im Kopf rumgeschwirt sind vermischt. Viel Spaß beim Querlesen und Kopfschütteln. Vielleicht habe ich ja schon einen sinnvollen Beitrag geleistet.:unknown:

---
Bezüglich Programmierer die dabei mitmachen. Ich werde zumindest mal in das Repo schauen und jenachdem, wie das hier weiter voran geht auch mal was beitragen - vielleicht aber auch nur Hinweise auf mögliche Probleme oder dergleichen geben. Ich bin (noch) nicht so sehr vertraut mit dieser Art der Projektumsetzung und halte mich da lieber etwas zurück.
 
  • Thread Starter Thread Starter
  • #25
Das Projekt klingt ganz cool. Vermutlich nicht für Rollenspiele oder sowas, wohl aber für Strategiespiele zum Beispiel. Da muss ja beispielsweise regelmäßig das Objekt eines Fußsoldaten erstellt werden, die allgemeine "Map" aber eher nur einmal zum Spielstart.

Ich glaube man muß das sehr individuell sehen ob ein Titel mehr Daten dann vorlädt und evnetuell nachlädt bzw. ständig darauf zugreift.

Auch stelle ich mir den Boost in verschiedensten anderen Programmen gut vor.

Das wäre das Ideal.


Wichtig wäre mir aber auch eine Funktion wie "mach es rückgängig" - also wo alle Dateien wieder an den korrekten Ort verschoben werden und Symlinks aufgelöst werden. Das bedeutet, dass neben dem Profil für die einzelnen Anwendungen auch noch eine Art von "Ich habe folgendes verschoben und verlinkt"-Liste abgespeichert wird. Das ist natürlich im Zweifel einige KB, vielleicht sogar wenige MB Overhead aber für mich auf alle Fälle wünschenswert.

Indirekt ist das schon geplant, ich dachte an eine SQLite Schnittstelle für diese Informationen, wobei aber Profile bzw. Presets als Dateien vorliegen sollen, andere Settings zur Nutzung aber in der Datenbank, so in etwa. Das ist vor allem wichtig, da Windows ein Limit hat wie viele auf einmal verlinkt werden darf, 63 "Punkte" sind das Limit pro Verzeichnis und eventuell gilt das auch für Unterordner in dem gleichen Pfad.Das ist aber verlinkt. Daher wäre es wichtig die Symlink an und abschalten zu können um innerhalb dieses Limits zu bleiben. (Habe ich verlinkt.)

Ich habe mir das PayLoadTimer-Skript noch nicht wirklich angeschaut. Speichert das nur einmal am Ende, welche Dateien wie häufig angefragt wurden und ähnliches? Ich könnte mir nämlich auch vorstellen, dass man daraus eine regelrechte Versuchsreihe machen könnte. Folgende Szenarien [...]

Ja, es speichert die Anzahl der Zugriffe, per Standard jetzt alle 30 Sekunden - werden die Daten auf Zugriffe überprüft und die Zeiten der Zugriffe. Außerdem wird der Pfad und die Größe gespeichert. Eventuell könnte man auch die Größe während des Zugriffs in Byte messen lassen.

[...] habe ich da so im Kopf.

1) Das Skript speichert die Anzahl der Zugriffe auf eine Datei, ggf. speichert es auch noch dazu, wie groß diese Datei ist. Dann kann man über einen definierten Threshold entscheiden, wie viel % der Dateien auf die SSD kommen oder auch nicht.

Um das zu vereinfachen habe ich an ein "Scoring" System gedacht von 0 bis 10 gedacht. So kann man bewerten wie "dringend" eine Datei benötigt wird und dann einen Threshold nutzen. Also 10 wird viel/oft geladen, 0 wird nur einmal geladen. Die Punkte soll man aber selbst vergeben können. Zum Beispiel kann es sein das bei einem Rollenspiel ein Spielgebiet öfter geladen wird bei einem User, bei einem anderen gar nicht wirklich in der Messung auftaucht. Daher wäre hier ein einfaches System wünscheswert. Wenn du da ne Idee hast?

Auch bezogen auf deinen Punkt 2 hier:
2) Man zeichnet über mehrere Programm-Nutzungszeiträume Profile auf und hat die Möglichkeit diese mit einem irgendwie gearteten Algorithmus zu analysieren. Beispielsweise kann es ja vorkommen, dass einzelne Dateien nur bei wenigen Nutzungen viele Aufrufe haben, andere dafür aber immer sehr häufig angefragt werden.

3) Es sollte sich erkundigt werden, ob man auch eine Schnittstelle zu dem OS oder einer anderen naheliegenden Treiberebene hat, in der man auch auslesen kann, welche Teile der Datei gerade geladen wurden. Das würde die Profile zum Analsysieren erstmal ernorm vergrößern. Hierdurch kann man aber sehen, ob einzelne Dateibereiche regelmäßig angefragt werden (ggf HDD), oder aber eine ganze Datei auf einmal geladen werden muss (SSD).

Ebenfalls ein guter Punkt, da hab ich aber selbst noch keine Lösung zu gefunden ohne sich irgendwie einzu"häcken", eventuell helfen unter Windows die SysInternals Tools - wie SysMon oder ProcMon - da bin ich unschlüssig wie das analysiert werden kann.

4) Zudem könnte man als "Analyse" auch überlegen, ob es Sinn macht ein Vortrainiertes Neuronales Netz am Ende an den Nutzer auszuliefern, dass die Auswertung der Profile übernimmt und dabei die "beste Performance" ausgibt. Die Frage ist natürlich in wie weit jemand da eine Testreihe durchführen möchte und dort ein entsprechendes Netz (a) entwerfen und (b) trainieren möchte.

Naja, der Logik her gibt "Größe in Bytes, Häufigkeit" aktuell so die Idee, den Maßstab vor. Auch auf Punkt 3 bezogen. Sicherlich kann man da was "beratendes" entwerfen, was das einbezieht - zum Beispiel wenn man als Grenze seine Hardware "GB RAM, GB RAM Graifkkarte" angibt?

5) Es wäre vermutlich auch interessant zu wissen, in welchen zeitlichen Abständen die Zugriffe auf die Datei durchgeführt wurden. Viele Zugriffe zeitlich nah beieinander sprechen eher für eine SSD, viele Zugriffe, dafür aber mit größeren Pausen, sprechen für HDD. Entsprechendes sollte auch in den Profildaten enthalten sein.

Das wäre über die Score geregelt, das man sagen kann wie viel Punkte man "investieren will", "wie viel MB/GB dass ergeben und ob das mit den Regeln/Limits der Symlinks vereinbar ist.

---
Jetzt sind die Szenarien mit irgendwelchen Ideen, die mir im Kopf rumgeschwirt sind vermischt. Viel Spaß beim Querlesen und Kopfschütteln. Vielleicht habe ich ja schon einen sinnvollen Beitrag geleistet.:unknown:
---

Passt, und ich hoffe ich konnte dir ein paar deinen Punkte und Fragen beantworten.

Bezüglich Programmierer die dabei mitmachen. Ich werde zumindest mal in das Repo schauen und jenachdem, wie das hier weiter voran geht auch mal was beitragen - vielleicht aber auch nur Hinweise auf mögliche Probleme oder dergleichen geben. Ich bin (noch) nicht so sehr vertraut mit dieser Art der Projektumsetzung und halte mich da lieber etwas zurück.

No need to be shy :D

Edit: Es kommt nicht darauf an das die erste Lösung perfekt ist und oder alle Punkte umfasst - man lernt ja dazu und wenn erst mal was steht, um so mehr sicherlich. Also auch für Neueinsteiger eventuell geeignet weil es wenige bis keine Abhängigkeiten gibt. :)
 
Zuletzt bearbeitet:
Mal ein anderer Gedanke: Weiß jemand ob gängige Anti-Cheat-Lösungen / Anti-Tamper-Lösungen / Kopierschutz etc sich über Junctions bzw. Symlinks beschweren? Sonst funktioniert das Tool nachher bei einer größeren Anzahl an Spielen überhaupt nicht, oder führt zu gesperrten Accounts.
 
  • Thread Starter Thread Starter
  • #27
Eine sehr gute Frage... sollten wir testen!

@all:
Hat jemand eine Möglichkeit dazu das zu testen?

Ich meine, es sollte nichts passieren.. weil die (Spiel)Daten ja nicht verändert werden, zum Beispiel wenn es über Checksums geht.
Edit: Und theoretisch weiß ja nur das OS um den neuen Pfad, auch was drfuture vorher erwähnte. Aber gut, getestet werden sollte es auf jeden Fall.

Ich hab leider nur Spiele ohne Kopierschutz, no Joke :o
 
Zuletzt bearbeitet:
So dann melde ich mich auch mal wieder. Ich habe mir die Skripte noch nicht angeschaut, da ich auch noch ein paar andere Dinde um die Ohren hatte (u.a. das Osterrätsel :D)

Was die Programmiersprache/UI Framework angeht werfe ich einfach mal C++ und CopperSpice in den Raum. C++ lässt sich auf so gut wie jedem System nativ kompilieren, sollte also bis auch einigen systemabhängigen Code (z.B. symlinks erstellen) für jedes System anwendbar sein.
Mit habe ich selbst auch keine Erfahrung, es ist aber von Qt abgespalten und von den Grundkonzepten ähnlich.
CopperSpice is a set of individual libraries which can be used to develop cross platform software applications in C++. It is a totally open source project released under the LGPL V2.1 license and was initially derived from the Qt framework. Over the last several years CopperSpice has completely diverged, with a goal of providing a first class GUI library to unite the C++ community.
Meine Erfahrung mit Qt ist auch nicht sonderlich viel, aber ich denke das ist schon machbar da reinzukommen.

Man könnte das auch komplett in Python umsetzen, wenn man ein geeigentes GUI Framework hat. Ich habe mit Kivy schon recht gute Erfahrungen gemacht. Da wir jetzt keine besonders hohen Anforderungen an Performance haben sehe ich da kein Problem darin wenn wir keinen nativ kompilierten Binaries haben. Und Python ist vielleicht ein wenig zugänglicher für Leute mit weniger Programmierkenntnissen.


Ich bin natürlich auch für andere Sprachen offen, wenn jemand einen besseren Vorschlag macht.

Da es hier noch nicht viel Struktur gibt wäre es doch erstmal interessant wer denn jetzt konkret Lust hat mitzumachen, wenn ja welche Programmiersprache ihr beherrscht bzw. bereit seid zu lernen. Es ist natürlich niemand verpflichtet dabei zu bleiben und wer will kann auch jeder Zeit später dazustoßen, aber einen groben Plan wer gerade an was arbeitet wäre nicht schlecht. Wir könnten den issue Tracker von github verwenden um Tickets anzulegen und zu tracken wer gerade was macht.

Ich schaue mir die kommenden Tage erstmal die bestehenden Skripte an und überlege mir mal etwas was man denn für ein "MVP" so alles braucht. Falls ich dazu komme würde ich auch mal ein Grundgerüst für eine GUI Anwendung aufsetzen.
 
  • Thread Starter Thread Starter
  • #29
Man merkt richtig, da hat jemand Bock @exomo, find ich gut. :T
Hast du dir in der Zwischenzeit die Skripte mal angesehen?

---

Also grundsätzlich kann an Technologien alles genutzt werden, selbst ein Midnight Commander ähnliches System, , also rein auf Text basierend, wäre möglich. Aber auch jede andere GUI Anwendung. Das eine System soll das andere nicht ausschließen und so fern sich Überlappungen finden, kann man ja gemeinsam etwas damit erarbeiten.

Die Pythonskripte sind auch nicht in Stein gemeiselt. Sondern dienen lediglich als Startpunkt. Das ganze auf etwas anderes umzustellen wäre sicherlich auch möglich. Im Moment ist die EXE für den Plot auch riesig, weil das komplette eingebunden wird um die Graphen auszugeben.

Wichtig wäre mir persönlich nur, bei der Auswahl der Werkzeuge und Komponenten/Libraries, dass es nach Möglichkeit Cross-Plattform ist und nicht an ein einziges System oder OS gebunden ist. Ich denke das ist durchaus möglich.
 
Zurück
Oben