Anti-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: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Ich habe für meine Domain eine Catch-All-Adresse definiert – *@ krishty.com leitet weiter an webmaster@ krishty.com. Die Wirkung ist, dass ich alle Mails bekomme, die an falsche Adressen geschickt werden (so lange die Domäne stimmt).

Das erspart Leuten, die mir schreiben wollen, Stress. Manche tippen ifno statt info, einige copy-pasten die Adresse von der Website mit einem Buchstaben zu wenig oder mit einem Satzzeichen zu viel, usw.

Gestern habe ich recht überrascht zur Kenntnis genommen, dass jemand in meinem Namen einen Google-Workspace-Account angelegt hat. Er hat dafür eine imaginäre Adresse @krishty.com angegeben. Normalerweise verschwindet Googles Willkommen zu Workspaces!-Mail damit als unzustellbar, aber durch Catch-All landete sie in meinem Postfach.

Ich habe nach einigen Minuten googeln tatsächlich Google-Kundenservice gefunden (oh die Ironie!). Sie haben tatsächlich innerhalb von 24 Stunden zurückgerufen.

Die Dame hat mir erklärt, dass ich wohl nichts zu befürchten hatte, denn der Fake-Account konnte die Domain nicht verifizieren. (Offenbar wollte er das tatsächlich über meine Domain laufen lassen, aber kam nicht in den Webspace. Meine Server-Logs sehen sauber aus.) Der Account wird in 30 Tagen regulär auslaufen und das Gmail-Konto, das mit dem Fake-Account verknüpft ist, wird gelöscht.

(Ich habe einfach mal versucht, mich mit der Fake-Adresse bei Google anzumelden, und bei Passwort vergessen wurde mir gemeldet, dass das Konto mit einem gmail-Konto verknüpft ist, das mir nicht gehört und rein zufällig wie meine Domain heißt.)

Anti-Jammer:
  • Ich finde Catch-All-Adressen nützlich. Wer eine Domain hat, sollte eine Catch-All einrichten.
  • Ich bin froh, starke Passwörter zu verwenden (wenngleich ich an der Einzigartigkeit feilen sollte).
  • Ich bin froh, dass es bei Google doch sowas wie Kundenservice gibt.
  • Ich bin froh, dass sie mein Anliegen verstanden haben und regeln konnten.
Jammer:
  • Die Dame hat sich nicht vergewissert, dass mir (dem Typ am Telefon) auch tatsächlich die Domain gehört. Das klingt, als könne man auf Zuruf friedliebende gmail-User über den Support anschwärzen und ihre gmail-Konten löschen lassen, nur weil sie irgendwo eine Trial-Registrierung nicht abgeschlossen haben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2348
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Jonathan »

Ist euch eigentlich bewusst, wie großartig dgVoodoo ist?
Ich zocke ja gerne mal ältere Spiele. Leider laufen viele davon nicht mehr gut, und in der Regel liegt das an irgendwelchen Grafikproblemen. Vielleicht ruckeln 2D Spiele furchtbar. Oder die Auflösung wird nicht richtig angepasst. Oder die Farben sind total kaputt. Oder es stürzt gleich ganz ab. Aber echt viele Spiele laufen mit dgVoodoo wieder wunderbar, einfach ein paar dlls in den Spielordner kopieren, vielleicht noch kurz ein paar Einstellungen anpassen, schon kann es losgehen. Noice. Im Vergangenen Monat habe ich damit Anno 1503, Kao the Kangaroo, Sheep und Gruntz wieder ans Laufen gebracht. Sehr cool.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Stimmt; dem muss ich noch einen Post hier widmen!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: Anti-Jammer-Thread

Beitrag von joggel »

Ich bekomme erst jetzt mit wie toll Kindle ist <3
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: Anti-Jammer-Thread

Beitrag von NytroX »

UTF-8 in Windows.

Until recently, Windows has emphasized "Unicode" -W variants over -A APIs. However, recent releases have used the ANSI code page and -A APIs as a means to introduce UTF-8 support to apps. If the ANSI code page is configured for UTF-8, -A APIs operate in UTF-8.
[...]
CP_ACP equates to CP_UTF8 only if running on Windows Version 1903 (May 2019 Update) or above [...]
https://docs.microsoft.com/en-us/window ... -code-page

Also mal getestet:

Code: Alles auswählen

int main(void) {
  //Set and check code page
  auto codepage = ::GetConsoleOutputCP();
  if (codepage != CP_UTF8) {
    println("Unsupported. Codepage is not UTF-8. It seems like your Windows is too old.");
    return 1;
  }
  println("Привет, мир!");
  return 0;
}

Code: Alles auswählen

D:\Projects\UnicodeTest> UnicodeTest.exe
Привет, мир!
D:\Projects\UnicodeTest>
Funktioniert.
Einfach so.
Mit der alten cmd.exe.
Unfassbar.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4831
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Schrompf »

Wow, cool. Aber die MinVersion lässt mich doch zaudern. Heißt das jetzt, auf den Standard-Win10-Möhren des Großteils der Nutzer kann ich das nicht machen?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Da der Kernel auch weiterhin mit UTF-16 arbeitet, fängt man sich bei vielen Systemaufrufen zusätzliche Konvertierung ein. Es gibt auch einige Aufrufe, die in der W-Variante nicht fehlschlagen können, in der A-Variante aber schon (kein Speicher zur Konvertierung der String-Parameter).

Ich halte UTF-8-Everywhere für ausgemachten Schwachsinn und empfehle, möglichst das native Encoding der Plattform zu nutzen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
smurfer
Establishment
Beiträge: 195
Registriert: 25.02.2002, 14:55

Re: Anti-Jammer-Thread

Beitrag von smurfer »

Nachdem Gaia Missions etwas enttäuschend war, bin ich von Carrier Command 2 begeistert. Für mich immer noch mit die beste Mischung aus Simulation, Strategie und Action, wie im Original von 1988. Zusammen mit HighFleet der wiederbelebten Marke Microprose freue ich mich über Nostalgie und über Spiele, die nicht dem typischen Einheitsbrei von heute entsprechen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

In der Tat; habe letztens noch den Trailer gesehen.

Die neuen MicroProse-Spiele sind alles coole independent-Titel, keine riesigen AAA-Produktionen. Sie suchen auch Indie-Entwickler mit Spielen in fortgeschrittener Entwicklung und bieten Hilfe bei der Fertigstellung an. Wenn mein Flugsimulator mal weiter ist (in 20 Jahren), frage ich bei ihnen an.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
smurfer
Establishment
Beiträge: 195
Registriert: 25.02.2002, 14:55

Re: Anti-Jammer-Thread

Beitrag von smurfer »

Ich bin gespannt, bis dahin ist dann der Markenname Microprose wahrscheinlich beim dritten Besitzer (Krishty?) ;)
Gibt sicherlich auch berechtigte Kritik an den Titeln, aber alles in allem bin ich sehr überzeugt. Steam-Kritiken sind z. T. grotesk (eher was für den Jammer-Thread): "Zu teuer, hat ja nur 1GB" oder "Schlecht, keine Survival-Mechaniken in 2021"...
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

NytroX hat geschrieben: 15.08.2021, 14:14 UTF-8 in Windows.

Until recently, Windows has emphasized "Unicode" -W variants over -A APIs. However, recent releases have used the ANSI code page and -A APIs as a means to introduce UTF-8 support to apps. If the ANSI code page is configured for UTF-8, -A APIs operate in UTF-8.
[...]
CP_ACP equates to CP_UTF8 only if running on Windows Version 1903 (May 2019 Update) or above [...]
https://docs.microsoft.com/en-us/window ... -code-page

Also mal getestet:

Code: Alles auswählen

int main(void) {
  //Set and check code page
  auto codepage = ::GetConsoleOutputCP();
  if (codepage != CP_UTF8) {
    println("Unsupported. Codepage is not UTF-8. It seems like your Windows is too old.");
    return 1;
  }
  println("Привет, мир!");
  return 0;
}

Code: Alles auswählen

D:\Projects\UnicodeTest> UnicodeTest.exe
Привет, мир!
D:\Projects\UnicodeTest>
Funktioniert.
Einfach so.
Mit der alten cmd.exe.
Unfassbar.
Zweieinhalb Anmerkungen:
  1. Funktioniert nicht mit einem voll gepatchten Windows Server 2019, weil zu alt.
     
  2. Es reicht nicht, dass das Zielsystem das unterstützt – auch das System, auf dem kompiliert wird, muss das unterstützen. Falls der Quelltext nämlich nicht gerade mit Byte-Order-Mark abgespeichert wurde oder explizit /utf8 übergeben wird, interpretiert Visual C++ den Quelltext in User Code Page. Wo CP_ACP != CP_UTF8 bewirkt das, dass der String zu ??????, ???! kompiliert. Übrigens ohne Warnung! Yay für Build-Server mit anderem Update-Stand!
     
  3. println() in C++, what :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: Anti-Jammer-Thread

Beitrag von NytroX »

1)
Ja, stimmt, ist nix für ältere Systeme. Aber irgendwann muss man halt mal mit Abwärtskompatibilität brechen und es richtig machen.
Ich weiß, du hälst nicht viel von UTF8-Everywhere, aber ich arbeite mit Web-Services und irgendwo muss ich da ne String-Konvertierung reinbasteln.
Stimmt auch, dass es viele Funktionen gibt, die dann halt intern konvertieren. Aber dann brauch ichs nicht zu machen, ein Bug weniger bei mir :-)
std::codecvt ist halt auch fürn Allerwertesten weil die ganzen Facetten für UTF-8 nicht drin oder buggy sind. Bleibt noch der MultiByteTo...-Krams, und der ist auch nicht gerade schön und Windows-spezifisch. Sollen sie bitte selbst machen im Windoof, wenn sie keine gescheiten Interfaces anbieten :-P
Ich möchte halt den Großteil des Codes Plattformunabhängig halten, da passen mir manuelle Konvertierungen nicht so gut ins Bild.
Was ich aktuell entwickle dauert noch bis zur Fertigstellung und dann schreibe ich halt "mindestens Windows 11" drauf und der alte Quatsch kann mich mal ;-)

2)
Visual-wie? Brauch man das? "Ist das Kunst, oder kann das weg?" :-P
Ich benutze "g++ -finput-charset=UTF-8 [...]", da klappts auch mit den Nachba... ääh... source-files.
CP_ACP != CP_UTF8 ist bei mir übrigens der Fall. "if (codepage != CP_ACP)" ist true. In der M$-Doku steht, dass bei meiner Windows-Version das eigentlich gleich sein sollte, aber nein, natürlich nicht. Keine Ahnung warum. Aber es geht irgendwie trotzdem, wichtig ist, was GetConsoleOutputCP zurückliefert. (Vielleicht was mit den mingw Headern schief, aber da sind CP_ACP und CP_UTF8 harte #defines mit unterschiedlichen Nummern - wie sich da ab einem bestimmten Windows plötzlich was dran ändern können sollte ist mir schleierhaft...)

3)
Ups :-)
Die ist von mir, das war Code ausm Projekt den ich vereinfacht hatte zum Verständnis. Es gibt halt keine einfache Funktion für ne Ausgabe in C++; ich will keinen komischen iostream der stateful ist und ich will auch keine %irgendwas-Interpolation die eh immer ungefragt schief geht, weil irgendeiner das falsche Kürzel benutzt (meistens natürlich ich :-P). Einfach mal ein gescheites Interface, bitte :-)
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Anti-Jammer-Thread

Beitrag von Lord Delvin »

Für die komischen "%irgendwas-Interpolation" Strings gibt es mittlerweile Compilerwarnungen, die ganz gut funktionieren ;)
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Tiles »

Puh, grade Armorpaint kompiliert. Die Onkels machen es einem ja echt schwer. Da wird einfach der letze Schritt nicht erklärt wie man denn eine Standalone hinbekommt. Da musst du noch die Exe in einen anderen Ordner packen nach dem kompilieren, die funktioniert an ihrem Platz wo sie erstellt wird nicht. So kann man seine User natürlich auch dazu bewegen doch die kommerzielle Version zu kaufen. Gut dass es Google gibt. Jedenfalls habe ich nun wieder eine Software mehr mit der ich überhaupt nicht zurecht komme :D
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
D-eath
Beiträge: 51
Registriert: 28.08.2009, 19:37
Alter Benutzername: TrunkZ
Echter Name: Thomas

Re: Anti-Jammer-Thread

Beitrag von D-eath »

Angebot für einen Umzug bekommen. Abgesehen davon, dass der Kollege, der alles "aufgenommen" hat, einen Kurs in Kundenumgang hätte bekommen sollen, bestand das formale Angebot aus einer Zahl und einer langen Liste an AGBs, die jegliche Fehler auf den Kunden abwälzen.
Keine Infos darüber, ob Kartons geliefert werden, kein Hinweis auf Haltverbot und alles schön pauschal.

Tja, da weiß man, wo die vielen positiven und doch immer recht ähnlichen Bewertungen herkommen: gekauft.
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Mit dem Jammer-Thread verwechselt? Oder feierst du die Erkenntnis? :D
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
D-eath
Beiträge: 51
Registriert: 28.08.2009, 19:37
Alter Benutzername: TrunkZ
Echter Name: Thomas

Re: Anti-Jammer-Thread

Beitrag von D-eath »

Ich lache drüber ob dieser Traurigkeit.
joggel

Re: Anti-Jammer-Thread

Beitrag von joggel »

Ich finde es sehr schlau von glm eine Funktion length zu nennen, die die Anzahl der Komponenten einer Matrix zurückgibt.
Diese Matrix war in meinem Fall glm::vec3 => myVec.length()
vec3.PNG
Naja, hätte ich mir den Rückgabetyp angeschaut wäre ich vlt darauf gekommen, oder das static beachtet. Aber unter vec3::length() vermute ich spontan etwas anderes^^

Edit:
Verdammt! Anti-Jammer mit Jammerthread verwechselt...
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Anti-Jammer-Thread

Beitrag von Lord Delvin »

Hab' gerade gelernt, dass man in Eclipse Trigger Breakpoints setzen kann, die andere Breakpoints aktivieren.

Gibt es für Java (oder C++; brauche ich bestimmt auch mal) eine Möglichkeit Breakpoints zu definieren, die nur dann verwendet werden, wenn man sowieso schon im Step-Modus durch das Programm läuft?
Ich kann doch nicht der einzige Mensch auf der Welt sein, dessen Code generisch, rekursiv und komplex ist :)
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

MSBuild (also das Standard-System hinter Solutions und Projects, wenn man mit Visual Studio arbeitet) braucht fünf bis sechs Sekunden, um mein Projekt neu zu kompilieren.

Ninja braucht weniger als zwei.

Visual C++ mit MSBuild braucht über 20 Sekunden, um mein Projekt für x86/x64/Debug/Release zu kompilieren.

Ninja braucht drei(!!!).

What the actual FUCK
Ich habe monatelang erfolglos Header-Abhängigkeiten optimiert, obwohl der Flaschenhals MSBuild war :-O
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Kurze Erklärung, was da abgeht:

Visual Studio hat keine parallelen Builds. Sie haben nur parallele Compiler.

Mein Projekt baut in fünf Schritten: Erst werden die HLSL-Shader kompiliert (weil die C++-Dateien das Kompilat verwenden). Dann werden die C++-Dateien kompiliert. Dann wird eine Assembler-Datei kompiliert. Dann werden die Ressource-Dateien kompiliert (Icons, Versionsinformation) und schließlich die EXE gelinkt. Abgesehen von HLSL und Assembler dürfte das der typischer Ablauf eines C++-Builds mit Visual Studio sein. (Je nach Einstellungen kommt noch der Manifest-Compiler dazu, oder mehrere Ressource-Schritte, usw.)

Und ganz genau so führt Visual Studio/MSBuild das auch aus: Einen Schritt nach dem anderen, und immer erst warten bis der Vorherige fertig ist! Die C++-Dateien werden zwar alle parallel kompiliert (sofern sie die selben Compiler-Einstellungen nutzen!), aber das entscheidet der C++-Compiler intern. Die HLSL-Shader werden fast komplett seriell kompiliert, weil sich ihre Compiler-Einstellungen unterscheiden (das eine ist ein Pixel-Shader, das andere ein Vertex-Shader, …) und der Compiler deshalb mehrfach aufgerufen werden muss.

Während MSBuild die vierte HLSL-Datei zum Kompilieren schickt, langweilen sich elf CPU-Threads zu Tode.

Auftritt Ninja: Ninja packt jede Datei in einen eigenen Job. Es beginnt mit HLSL. Während die paar Dateien als parallele Jobs kompilieren, schnappt es sich die Ressource- und Assembler-Dateien, weil die nicht davon abhängen, und kompiliert die schonmal. Sobald sich der erste Kern langweilt, werden C++-Dateien eingeschoben. Und sobald der Linker als finaler serieller Schritt startet, macht Ninja das gleiche schonmal mit Dateien aus den anderen drei Projekten.

(Make würde es genau so tun, wenn es meinen Code denn kompilieren könnte. Kann es nicht, weil ich Leerzeichen im Namen habe, und das für Linux-Entwickler so exotisch ist wie mit Frauen zu sprechen.)

Ich bin echt baff, wie schlecht MSBuild implementiert ist. Und die wagen sie es, uns mit solchen ETW-Auswertungs-Apps zu beschäftigen, während bei kleinen Projekten das meiste seriell abläuft! Und für große Projekte haben sie MSBuild mit Solutions sowieso aufgegeben – dafür haben sie ja jetzt CMake-Support, der Ninja als Backend nutzt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Anti-Jammer-Thread

Beitrag von Lord Delvin »

Code: Alles auswählen

[error] @ test/mar.tyr from 37:26 until 37:36
[error] could not realize access with expected type (Ref[HeapPointer[S]], T) : void
[error] note: a viable alternative might be:
[error]   HeapPointer[S].new(this : Ref[HeapPointer[S]]) : void
[error] note: a viable alternative might be:
[error]   HeapPointer[S].new(this : Ref[HeapPointer[S]], initial : S) : void
[error] note: a viable alternative might be:
[error]   Object.new(this : Object) : void
[error] note: a viable alternative might be:
[error]   S.new(this : S) : void
[error] note: a viable alternative might be:
[error]   T.new(this : T) : void
Erster Gedanke: wie hab' ich die Overloadresolution jetzt schon wieder kaputt gemacht? Tatsächlich hatte ich bei der Vererbung im Testpaket einfach nur die Vererbungsbeziehung falschrum gemacht.
Mein Compiler kann meine Sprache einfach besser als ich :-)
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Matthias Gubisch
Establishment
Beiträge: 470
Registriert: 01.03.2009, 19:09

Re: Anti-Jammer-Thread

Beitrag von Matthias Gubisch »

Ich habe ein Monster erschaffen...

Angefangen hat es damit dass ich ständig die Synchronisation in meiner Vulkan Engine irgendwo verbockt habe, und ich Knoten im Hirn hatte von den ganzen Layout Abhängigkeiten für Image Resourcen.

Zum Glück haben sich schlaue Leute auch über dieses Problem schon Gedanken gemacht, und ich bin neben anderen Resourcen auf diesen Artikel gestossen:
http://themaister.net/blog/2017/08/15/r ... deep-dive/
und dachte mir cool das will ich auch haben und hab mal ganz unbedarft lostgelegt.

5 Wochen, ca. 3.5k Lines of Code und viel Haareraufen später: Es läuft :) : ) :)

Hat zwar im Verlgleich zu dem original aus dem Artikel noch ein paar Einschränkungen, aber bis auf die Tatsache, dass ich noch keine Resourcen aus vorherigen Frames unterstütze kann ich mit den fehlenden Features aktuell gut leben und kann mich mal wieder so netten Dingen wie Beleuchtung und Schatten widmen ;)
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
D-eath
Beiträge: 51
Registriert: 28.08.2009, 19:37
Alter Benutzername: TrunkZ
Echter Name: Thomas

Re: Anti-Jammer-Thread

Beitrag von D-eath »

Zahn Nummer 7 ist zu sehen, endlich ist die Unruhe, die schlechten Nächte und das Geschrei der letzten Tage wieder etwas besser :D
joggel

Re: Anti-Jammer-Thread

Beitrag von joggel »

Ich schreibe meine Scopes jetzt nicht mehr so:

Code: Alles auswählen

MyAwesomeClass:awesomeFunc(Args...)
{
 //...code
}

sonder so:

Code: Alles auswählen

MyAwesomeClass:awesomeFunc(Args...){
 //...code
}

Ich fühle mich so progressiv 🤗
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Compiler-Warnungen sind awesome. Ich habe den Quelltext eines 25 Jahre alten AAA-Spiels in die Hände bekommen; rund eine Million Zeilen C und Assembler. Allein durch das Kompilieren mit einem modernen Compiler sind um die zehn Bugs aufgefallen – von Crashes bis zu „Gegner stehen blöd in der Ecke rum“.

Ich muss echt nur die Compiler-Warnungen durchgehen, und die Bugs purzeln und purzeln.

Nützlich waren auch die Run-time Checks von Visual Studio (/RTsu). Die sollen eigentlich Stack Buffer Overflows erkennen, aber sie stoppen die Ausführung auch, wenn ein Funktionsprolog ein Register nicht korrekt wiederherstellt. Den Typo im Assembler hätte ich sonst wahrscheinlich Jahre suchen müssen, und die resultierenden Crashes zeigten sich nur als Heisenbugs in optimierten Builds.

Weitere Lektionen: C ist so viel langlebiger als C++. Bei C++-Codebases muss ich immer mit einer Woche rechnen, sie überhaupt ans kompilieren zu kriegen – weil irgendwelche Randfälle im Präprozessor, bei Templates, oder in Argument-dependent Lookup heute anders behandelt werden als früher. Visual-C++-Projekte aus den 00ern sind da am schlimmsten. Aber C? Da war der einzige Fehler mit einem 25 Jahre neueren Compiler(!), dass man seine Variablen nicht mehr round nennen darf, weil C99 eine Standard-Funktion gleichen Namens eingeführt hat.

Außerdem ist es Gold wert, seinen Code mit mehr als einem Compiler zu kompilieren, wenn auch nur sporadisch. Die Codebase hier wurde sporadisch mit vier Compilern gebaut (GNU C Compiler, Borland Turbo C, Visual C++, Watcom C Compiler), und das hat alle Portabilitätsprobleme im Voraus erledigt.

Letztlich ist es ebenso Gold wert, alle SDKs dem Repo beizulegen. Das DirectX-5.0-SDK von 1997 kann ich noch im Internet Archive finden, aber bei vielen anderen SDKs (insbesondere proprietären, deren Lieferanten mittlerweile bankrott gegangen sind) schreit das sonst nach Rewrite der ganzen Komponente.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2348
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Jonathan »

Hachja - ich wäre ja echt sehr dafür, dass man gesetzlich vorschreiben würde, dass Quellcode von Software die nicht mehr gewartet wird veröffentlicht werden muss. Weiß nicht ganz, wie man das umsetzen würde (wenn eine Firma pleite geht findet sich ja im Zweifelsfalle niemand, der den Code aufbereitet und veröffentlicht), aber es ist irgendwie ein absolutes Unding, dass Kulturgüter einfach so für immer verschwinden. Es gibt ja eine Reihe kommerzielle Spiele deren Code später veröffentlicht wurde und aus so vielen sind wirklich tolle Projekte entstanden und das sollte halt die Regel und nicht die Ausnahme sein.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Total!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
starcow
Establishment
Beiträge: 522
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von starcow »

Eine Million Zeilen? Ich meine DOOM hätte um die 40'000 und Quake III um die 300'000 - also aus dem Jahr 1999.
Echt so viel?
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Krishty
Establishment
Beiträge: 8227
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Anti-Jammer-Thread

Beitrag von Krishty »

Direkt gezählt ca. 830k; 200k (ins Blaue geraten) können wir für die beiligenden SDK-Header abziehen. Ja; ist ein Brocken.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten