Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Das hier gehört verboten (aus Assimp):

Code: Alles auswählen

        throw std::invalid_argument("Cannot parse string "
                                    "as real number: does not start with digit "
                                    "or decimal point followed by digit.");
Habe diesen Fehler bekommen und wollte herausfinden, was an der Datei nicht stimmt, aber
  1. keine Zeilenangabe (schlecht)
  2. wenn der Fehler im Logger ankommt, befinde ich mich im catch-Block und der gesamte Parsing-Fortschritt ist bereits weggeschmissen (noch schlechter) – Yay Exceptions!
  3. also durchsuche ich den Quelltext nach „Cannot parse string as real number“ und finde kein einziges Ergebnis weil der scheiß String mittendrin getrennt wurde (GANZ schlecht)
Fun fact: Dieser Beitrag verfassen ging schneller als das lokalisieren des Fehlers
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: Jammer-Thread

Beitrag von DerAlbi »

ich weiß nicht, obs in den Jammer-Thread aufgrund des Ausmaßes oder in den Anti-Jammer-Thread aufgrund des endlichen Leaks gehört.

Vault 7 ist auf WikiLeaks draußen. Have fun.
Ich würde empfehlen, sobald ihr nach Hause kommt, die Hauptsicherung zu ziehen und die mobilen Geräte das Klo hinunter zu spülen.
Womit man dann WikiLeaks browst hab ich noch nicht rausgefunden :-D
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Der im .NET integrierte PRNG ist hart scheiße. Ich habe einen randomisierten Optimierungsalgorithmus. Dieser findet bei 1.000.000 Runden mit dem internen RNG eine Lösung mit einem Optimum von 17 Zellen, verwende ich jetzt einen alternativen PRNG, finde ich schon mit 10.000 (und wahrscheinlich weniger) Runden eine Lösung mit 16 Zellen.

Microsoft, SCHÄME DICH!
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Jammer-Thread

Beitrag von Artificial Mind »

MasterQ32 hat geschrieben:Der im .NET integrierte PRNG ist hart scheiße. Ich habe einen randomisierten Optimierungsalgorithmus. Dieser findet bei 1.000.000 Runden mit dem internen RNG eine Lösung mit einem Optimum von 17 Zellen, verwende ich jetzt einen alternativen PRNG, finde ich schon mit 10.000 (und wahrscheinlich weniger) Runden eine Lösung mit 16 Zellen.

Microsoft, SCHÄME DICH!
Ein bisschen Kontext und Nachforschung:

Der Algorithmus von .NET System.Random ist ein Subtractive Generator, welche einen besseren Ruf haben als Congruential Generators.
Der Source Code kann hier nachgeguckt werden: https://referencesource.microsoft.com/# ... 10694e64ca
Die Parameter stammen aus Numerical Recipes in C (2nd Ed.) von Knuth.
Die Periode ist ziemlich groß, wesentlich größer als 1.000.000.

Ich vermute die haben nur deswegen keinen Mersenne Twister genommen weil der zu viel State hat und die Laufzeit ein wenig unpredictable ist.

Dein "alternativer PRNG" sieht zwar an sich nett aus, aber "Der im .NET integrierte PRNG ist hart scheiße" ist glaube ich unfundiert.

Bzgl deiner Anekdote: hast du mal verschiedene Seeds probiert und geguckt wie stark die Abhängigkeit davon ist?
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Ich hab am Anfang gar keine fixen Seeds verwendet, zudem hab ich noch ältere Erfahrungen mit System.Random (Pathtracer-Samplegenerierung) und da hatte ich sogar sichtbare Pattern im Bild. Zudem, wenn du dir zufällige Binärzahlen samplest (also .Next() % 2) erhälst du eine Verteilung von (66%*0/33%*1), was auch nicht so sonderlich optimal ist.

Der Algorithmus, den ich gepostet habe, ist von George Marsaglia, welcher die DIEHARD Tests erstellt hat und erfüllt eben auch alle diese Tests.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

MasterQ32 hat geschrieben:Ich hab am Anfang gar keine fixen Seeds verwendet, zudem hab ich noch ältere Erfahrungen mit System.Random (Pathtracer-Samplegenerierung) und da hatte ich sogar sichtbare Pattern im Bild. Zudem, wenn du dir zufällige Binärzahlen samplest (also .Next() % 2) erhälst du eine Verteilung von (66%*0/33%*1), was auch nicht so sonderlich optimal ist.
Passiert das auch, wenn du Next(2) verwendest?
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Guter Einwand, tut es nicht. Trotzdem wundert mich, warum ich bei 1 Mio Läufe trotzdem nicht einmal eine Permutation erzeuge, welche der andere schon bei 10k Läufen erzeugt
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

MasterQ32 hat geschrieben:Guter Einwand, tut es nicht. Trotzdem wundert mich, warum ich bei 1 Mio Läufe trotzdem nicht einmal eine Permutation erzeuge, welche der andere schon bei 10k Läufen erzeugt
Von welchem "radomisierten Optimierungsalgorithmus" reden wird denn hier?

[Übrigens ist Next(max) offenbar implementiert als (int)([Zufallszahl zwischen 0 und 1]*max) und das war auch mein Stand wie man das machen sollte, wenn man keine fancypants Random-Klasse zur Hand hat. Keinesfalls mit %. Aber das nur am Rande]
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Von welchem "ra[n]domisierten Optimierungsalgorithmus" reden wird denn hier?
Einem Assembler, welcher für die Anordnung des Code Flows einen randomisierten Block Allocator verwendet
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Bin ich leider nicht im Thema. Hast du einen Link? Normalerweise lohnt sich die Art von Randomisierung, um die es hier geht, nur dann, wenn der verwendete Algorithmus eine eingebaute Tendenz zu mehr Struktur hat. Ich denke da z. B. an simulated Annealing. Wenn das so ist sollte die Abhängigkeit vom verwendeten RNG und oder seed bzw. allgemein der verwendeten Sequenz sehr gering sein. Dass das für dich ein Problem ist deutet eigentlich stark auf ein Problem an deinem Ende. Deine Schilderung wirkt im Gegenteil so, als hätte der vermeintlich bessere RNG durch "Glück" die "richtige" Sequent getroffen und das ist normalerweise nicht das was man will, sondern man will im Average Case gut sein.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

DerAlbi hat geschrieben:Vault 7 ist auf WikiLeaks draußen. Have fun.
Ich würde empfehlen, sobald ihr nach Hause kommt, die Hauptsicherung zu ziehen und die mobilen Geräte das Klo hinunter zu spülen.
… und Notepad++ zu aktualisieren: https://notepad-plus-plus.org/news/note ... issue.html
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: Jammer-Thread

Beitrag von DerAlbi »

Pfff danke. Das hab ich in allen VMs.
Es wäre interessant welchen Hash oder was auch immer die DLL von der CIA hat. Hab Notepad++ geupdated und die DLL wird offensichtlich normal geladen... aber aaaaalter was für dreckige Assis.
Ich frage mich, ob man die Verklagen kann. Prinzipiell kann man denen einen erhöhten Stromverbrauch in Rechnung stellen. Einfach pauschal. Generalverdacht gegen mich? Generalverdacht gegen CIA/NSA! Generalverdacht ist ja ganz modern jetzt, hab ich gehört.


Hahahaha,
https://wikileaks.org/ciav7p1/cms/page_20251107.html
Internet Explorer ist nicht dabei :-D
Die erwischen echt krass meine Software...
Ich hab: VLC, Skype, Notrpad++, FixoitReader, 7zip, IrfranView, Chrome/FireFox... mega.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Er so:

Bild

in meinem Kopf so:

Bild

Ein Array von Bäumen aus Zeigern umschichten? Wenn es DAS ist, was mein Browser die ganze Zeit macht, will ich keinen mehr haben.
Luckily reserving space in the vector constructor works, so we're okay for now.
Ja, läuft!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Alexander Kornrumpf hat geschrieben:Bin ich leider nicht im Thema. Hast du einen Link?
Leider nein, das zu lösende Problem kennen zur Zeit nur mein Betreuer und ich, werde aber wohl demnächst mal einen Thread dazu aufmachen und ein bisschen aus dem Nähkästchen plaudern, was die Programmierung einer "völlig anderen" Computerarchitektur angeht.
Dass das für dich ein Problem ist deutet eigentlich stark auf ein Problem an deinem Ende.
Ich habe einen Assembler, welcher "guten" Code ausspucken soll, also Code, der möglichst wenig Blöcke (Eine Aneinanderreihung von bis zu 11 Befehlen) verwendet. Die Position eines Blockes entscheidet stark über den Inhalt in diesem Block und alle diesen referenzierende Blöcke, also der totale Dependency-Wahnsinn. Denn durch die Inhaltsänderung eines davon abhängigen Blockes ändern sich wieder die Inhalte aller davon abhängigen Blöcke (rinse and repeat!). Das ganze lässt sich meiner aktuellen Einschätzung nur optimal lösen, in dem man alle Möglichkeiten durchprobiert. Oder man löst das Ganze eben etwas abkürzt und probiert zufällige Permutationen und behält die beste.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

MasterQ32 hat geschrieben: Das ganze lässt sich meiner aktuellen Einschätzung nur optimal lösen, in dem man alle Möglichkeiten durchprobiert. Oder man löst das Ganze eben etwas abkürzt und probiert zufällige Permutationen und behält die beste.
Sowas in der Art habe ich befürchtet und ich möchte argumentieren, dass du hier einen Denkfehler machst. Wenn du sonst nichts über das Problem weißt, ist es egal ob du 10.000 zufällige Permutationen ausprobierst oder die 10.000 ersten Permutationen nach einem System (lexikographisch o. ä.). Die Wahrscheinlichkeit dass die "richtige" oder "eine gute" darunter ist, ist gleich. Einsichtig, wenn man drüber nachdenkt? Wenn du einen RNG gefunden hast unter dessen ersten 10.000 Permutationen eine gute ist, aber nicht sagen kannst warum, dann hast du im Grunde nicht sehr viel erreicht.

Damit randomisierte Suche überhaupt Sinn macht, braucht es irgendeine Art von Struktur im Suchraum, welcher der Algorithmus (mit etwas Unschärfe, dafür der Zufall) folgen kann. Wenn durch einen unglaublichen kosmischen Zufall die Struktur deines Suchraums auf die Struktur eines bestimmten PRNG passt, dann würde ich alles andere stehen und liegen lassen und DAS weiter untersuchen, denn es ist mit Sicherheit interessanter als was auch immer du eigentlich vorhattest. Ist aber schwer vorstellbar, wesentlich wahrscheinlicher ist es, dass du einfach einen Glückstreffer gelandet hast und auf anderen Instanzen das Problems genauso lange brauchst wie der andere PRNG. Oder dass doch ein bug in deinem Code ist.

Das Standardvorgehen, unterstellt, obiges Wunder wäre nicht geschehen, wäre dass du mal darüber nachdenkst was du über die Struktur deines Suchraums weißt und mit dieser Information simulated annealing oder einen genetischen Algorithmus oder einen Ameisenalgorithmus o. ä. fütterst.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

ICh glaube, ich muss tatsächlich mal den Post über die Arbeit anfangen, damit dürfte dann einiges klarer werden. Ich beschäftige mich jetzt seit über nem halben Jahr mit der Maschine und fange langsam an, zu verstehen, wie man das Gerät programmiert... In der Maschine ist so ziemlich alles anders, als in anderen Computern... :)
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Einerseits ja, andererseits gelten die Sachen die ich gesagt habe (natürlich nur als grobe Skizze zu verstehen) für jedes Optimierungsproblem und damit vermutlich auch für deine Maschine, egal wie sie funktioniert. Gerade wenn deine Maschine auf irgendeine Weise besonders chaotisch ist (was hier immer als Argument mitzuschwingen scheint) sollte es im Durchschnitt egal sein, welche 10.000 Permutationen du nimmst. Wenn du dagegen weißt, dass es nicht egal ist, muss dieses Wissen irgendwie in den Optimierungsalgorithmus einfließen, damit er funktioniert. Das ist praktisch ein Naturgesetz :)
Benutzeravatar
Schrompf
Moderator
Beiträge: 4856
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Um hier mal was Richtiges zu jammern:

Ich (und die halbe Firma) sollen einen Code Generator benutzen. Ein Python-Script, dass ein C++-Executable aufruft, dass irgendwie eine Java-Rich Client Platform-Anwendung ausm Eclipse-Umfeld startet, die eine Domain Specific Language einfachster Sorte parst und daraus Code generiert. Das Ding läuft leider nur in der massiv veralteten "offiziellen" Firmen-VM, aber nicht in all den VMs, die wir uns zum täglichen Arbeiten bauen. Alle Dateien kommen aus diversen Git-Repos gerollt und sind damit identisch. Aber irgendwas in der VM ist anders, so dass es dort funktioniert und überall sonst nicht. Grmpf.

Die Fehlermeldung sieht übrigens so aus:

Code: Alles auswählen

!SESSION 2017-03-09 10:29:13.816 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_80
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Framework arguments:  idl/api.fidl -d ./definition/public -sk
Command-line arguments:  -os linux -ws gtk -arch x86_64 idl/api.fidl -d ./definition/public -sk

!ENTRY org.eclipse.equinox.launcher.win32.win32.x86 2 0 2017-03-09 10:29:15.455
!MESSAGE Could not resolve module: org.eclipse.equinox.launcher.win32.win32.x86 [34]
  Unresolved requirement: Require-Capability: eclipse.platform; filter:="(& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))"


!ENTRY org.eclipse.osgi 4 0 2017-03-09 10:29:15.456
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "org.genivi.commonapi.console.application" could not be found in the registry. The applications available are: org.eclipse.emf.codegen.CodeGen, org.eclipse.emf.codegen.JMerger, org.eclipse.emf.codegen.ecore.Generator, org.eclipse.emf.mwe.core.WorkflowRunner, org.eclipse.equinox.app.error, org.eclipse.jdt.core.JavaCodeFormatter, org.eclipse.jdt.core.JavaIndexer.
	at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:248)
	at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        ...
Und viele Lösungen im Internet sprechen von "Klick die Dependency an und exportiere neu". Tja... nur leider hab ich die Quellen nicht. Andere Ideen empfehlen, obskure kleine Verzeichnisse zu löschen und dann neu zu exportieren. Grmpf.

Ganz zu schweigen davon, dass ich in der Zeit, die ich jetzt in diesen Mist verschwendet habe, auch nen Parser hätte From Scratch neuschreiben können.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Alexander Kornrumpf hat geschrieben:Einerseits ja, andererseits gelten die Sachen die ich gesagt habe (natürlich nur als grobe Skizze zu verstehen) für jedes Optimierungsproblem und damit vermutlich auch für deine Maschine, egal wie sie funktioniert. Gerade wenn deine Maschine auf irgendeine Weise besonders chaotisch ist (was hier immer als Argument mitzuschwingen scheint) sollte es im Durchschnitt egal sein, welche 10.000 Permutationen du nimmst. Wenn du dagegen weißt, dass es nicht egal ist, muss dieses Wissen irgendwie in den Optimierungsalgorithmus einfließen, damit er funktioniert. Das ist praktisch ein Naturgesetz :)
Das Problem ist, dass ich mich seit nem ca. nem viertel Jahr mit dem speziellen Problem beschäftige, seit zwei Wochen intensiv und ich immer noch keine klare Struktur oder überhaupt eine verlässliche Vorangehensweise finde. Ich kann halt Code und Daten nicht einfach verschieben, da sich durch Verschiebung des Codes der Code an mehreren Stellen gleichzeitig verändern muss, um wieder auf ein funktionierendes Programm zu kommen. Das heißt, die Verschiebung von einem einzigen Codeblock kann mit etwas Pech schon gar nicht möglich sein, da sonst das ganze Programm wie ein Kartenhaus zusammenfällt und dann gar nicht mehr übersetzbar ist. Einen Block verschieben läuft im schlimmsten Fall auf alle Blöcke verschieben raus, aber mindestens auf einen.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4258
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

@Schrompf: OSGi ist kacke. Eclipse ist auch ein Moloch... Mal abgesehen von der Chaos-Plugin-Architektur ist der duale Build der absolute Horror, aber das Problem haben ja sehr viele IDEs... Ich würde raten, dass da irgendwo über ein Modul ne harte Abhängigkeit auf Win-32 reinkommt, in diesem komischen GENIVI-Repository wäre das vielleicht diese yamaica-Komponente, mal geschaut ob die irgendwie geladen werden soll? - aber das hast Du Dir sicher auch schon gedacht...
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Argh, Multithreading. Jedes verdammte Mal.

Habe meine UI asynchron gemacht. Die ist schnell geworden. So verdammt superschnell, dass sogar ich keinen Optimierungsbedarf mehr sehe.

Dafür stürzt einer von 600 Vorgängen mit kaputten Zeigern ab. Natürlich reproduziert es nicht; natürlich sehen die Fehler völlig unerklärlich aus.

Jedes verdammte Mal.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
gdsWizard
Establishment
Beiträge: 237
Registriert: 04.02.2005, 09:12
Benutzertext: www.gamedevstudio.com
Echter Name: Thomas Mittelsdorf
Wohnort: Meiningen
Kontaktdaten:

Re: Jammer-Thread

Beitrag von gdsWizard »

Krishty hat geschrieben:Habe meine UI asynchron gemacht.
Warum hast Du deine UI asynchron gemacht ? Nur das Rendering oder auch anderes ?
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Bisher nur das Laden von Dateien. Das soll man abbrechen können, und während des Ladens soll die UI vernünftig reagieren (maximieren, verschieben, Rendern, schließen, etc).

[Der Absturz war ein Dangling Pointer in einer Message Queue, nachdem eine Datei beim Laden abgebrochen wurde und der nächsten Datei vom Memory Manager exakt der selben Pointer zugewiesen wurde.]

Rendering ist momentan noch schnell genug, und ich muss in D3D mit Deferred Contexts anfangen, um das asynchron zu machen – das nervt. Wird aber irgendwann kommen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: Jammer-Thread

Beitrag von joggel »

Ich bin so undiszipliniert beim Software-Design.
So lange die Ansprüche von vorn herein klar sind, ist alles schick. Sollen weiter funktionalitäten hinzukommen wird der Code zusehenst unübersichtlich und hässlich.
Eigentlich müßte ich da immer re-designen.....aber meine Disziplin :(
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Alle meine Visual Studios haben fast zeitgleich beim Kompilieren gejammert: cannot write to PDB, check access rights or insufficient disk space (in der Art).

Natürlich besteht kein Problem, und nach Rebuild hat das Kompilieren wieder normal funktioniert. Ich befürchte, dass irgendwo ein Timer abgelaufen ist (oder dass CIA/NSA jetzt endgültig die Kontrolle über meinen Rechner übernommen haben).
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Anforderungen an eine Funktion, die floats als Text einliest:
  • stürzt bei ungültigen Buchstaben oder Dateiende nicht ab
  • kann +, -
  • kann fehlende Ziffern vor Dezimalpunkt, z.B. .1 oder ,1
  • kann Komma statt Punkt und warnt dann (aber nur, wenn ein Flag übergeben wird)
  • kann Exponentschreibweise
  • gibt bei Müll INF oder NAN zurück (z.B. INF bei 1.e+19999999)
  • ist halbwegs genau
Ich weiß jetzt schon, dass das der hässlichste Code des jungen Jahres 2017 wird.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
B.G.Michi
Establishment
Beiträge: 163
Registriert: 07.03.2006, 20:38
Alter Benutzername: B.G.Michi
Kontaktdaten:

Re: Jammer-Thread

Beitrag von B.G.Michi »

Ließe sich bestimmt ganz hübsch per regex lösen. Performant geht aber vermutlich anders ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Warum der Artikel mit Ace Combat nicht weitergeht? Wegen dem scheiß Win32-Tree View.

Ich habe die Levels schön extrahiert, aber halt mit einem Objekt für jede Kachel der Landschaft. Macht fast 100.000 Objekte pro Level. Mein Tool lädt alles in einen Win32-Tree View (wie jedes Modeling-Tool, das es gibt), und der ist … langsam.

1. Hinzufügen: Dauert für 100.000 Items ungefähr 40 Minuten. Der Trick ist, ihn von hinten nach vorn zu befüllen. (Warum? Raymond Chen erklärt.) Dann ist man nach zwei Sekunden fertig. Tolles Design!

2. Löschen: Dauert für 100.000 Items ebenfalls ungefähr 40 Minuten. Aber: Es gibt keinen Trick. Was ich schon vergeblich ausprobiert habe:
  • TreeView_DeleteAllItems()
  • TreeView_DeleteItem(TVI_ROOT)
  • TreeView_DeleteItem(NULL)
  • TreeView_DeleteItem() von vorn nach hinten
  • TreeView_DeleteItem() von hinten nach vorn
  • TreeView_DeleteItem() von innen nach außen
  • LockWindowUpdate()
  • vor dem Löschen unsichtbar schalten, danach wieder sichtbar
Aber nein, es ist alles gleich langsam. Guess what? Wenn’s meiner gewesen wäre, wären da eh keine 100.000 einzelnen Allokationen, sondern nur ein großer Pool, den ich wegschmeißen könnte, und die Sache wäre sofort erledigt.

Jedenfalls muss ich jetzt jedes Mal, wenn ich in den Levels arbeite, meine Tools via Task Manager killen, damit sie nicht 45 Minuten weiterlaufen. Sowas macht mir die Motivation kaputt und nun habe ich eben keinen Bock mehr. Wenn ich mein eigenes OS geschrieben habe, nehme ich die Sache wieder auf.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2369
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Krishty hat geschrieben: Ich habe die Levels schön extrahiert, aber halt mit einem Objekt für jede Kachel der Landschaft. Macht fast 100.000 Objekte pro Level. Mein Tool lädt alles in einen Win32-Tree View (wie jedes Modeling-Tool, das es gibt), und der ist … langsam.
Ja ok, aber wie es im Artikel schon so schön heißt: The treeview isn't optimized for this case because you don't optimize for the case where somebody is mis-using your system. Ich meine, auf welche Art ist ein Tree-View mit so vielen Elementen denn sinnvoll?
Und wenn man dann sagt "der Benutzer soll sich ja nicht alles ansehen, sondern sich durch die einzelnen Ebenen zu einem ganz bestimmten Node klicken können", könnte man dann nicht den Treeview dynamisch befüllen? Es müsste da doch eigentlich ein OnExpand Event oder ähnliches geben (Soetwas habe ich mal in Qt für ein Menü gemacht, das halt die zuletzt geöffneten Dateien angezeigt hat - das wurde dann bei jedem Öffnen neu befüllt).
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Man kann ihn nur in die Tiefe virtualisieren, nicht in die Länge. Um die 200×200 Grundkacheln komme ich also nicht herum.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten