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.
Jonathan hat geschrieben: ↑29.11.2022, 13:29
Sumatra PDF, mein präferierter PDF Viewer kann jetzt auch svg Dateien öffnen. Und es ist super schnell dabei! :)
Nie kann man etwas schönes haben :(
Nachdem ich neulich so happy war muss ich jetzt ein paar Tage später feststellen, dass eine beträchtliche Anzahl an PDFs in Sumatra nicht gerendert werden können. Ich bin Fan von robusten Lösungen, ich will nicht, dass meine Software nur in 95% aller Fälle funktioniert.
Jonathan hat geschrieben: ↑02.12.2022, 20:08Nachdem ich neulich so happy war muss ich jetzt ein paar Tage später feststellen, dass eine beträchtliche Anzahl an PDFs in Sumatra nicht gerendert werden können.
Als jemand, der an PDF-Software werkelt, würde ich gern wissen, ob du ein Muster erkennst oder ein möglichst minimales Beispiel liefern kannst
(PDF ist ein Moloch und mir fallen sofort tausend Dinge ein, die schief gehen können. Die eigentlich interessante Frage ist, was davon wirklich in der Wildnis vorzufinden ist!)
GPT Chat vereinfacht nicht nur einen großen Teil meines Tagesgeschäfts, es optimiert auch mein Hobby weg. Das hier wäre sonst ein schöner Batzen Arbeit gewesen:
Dem Spruch, dass es besser ist als die Hälfte der Google-Bewerber, stimme ich zu. Und wo es noch Probleme hat, ist es mindestens schneller. Hundert Mal oder so.
(improve variable names scheint zu implizieren, dass sich für ansehnlichere Namen das Verhalten des Codes ändert. Anders als ich oben sollte man also immer auch equivalent fordern!)
Ja schon erstaunlich was da heute möglich ist.
Meine Feststellung war das es einem schon viele trivialsachen abnehmen kann aber man zumindest für C++ schon noch selber wissen muss was man tut.
Auf x mal die gleiche Frage gibt es meist x verschiedene Versionen die von ziemlich optimal bis zu WTF in welcher Welt ist das guter/robuster/performanter Code alles beinhalten....
Allgemein glaube ich aber das vieles das aktuell durch Copy & paste aus Google erledigt wird in naher Zukunft mit sowas gemacht wird.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Matthias Gubisch hat geschrieben: ↑05.01.2023, 09:12Allgemein glaube ich aber das vieles das aktuell durch Copy & paste aus Google erledigt wird in naher Zukunft mit sowas gemacht wird.
Ich denke, dass das eine der größten Fehleinschätzungen ist:
Eine Hash-Funktion, die nirgends im Internet zu finden ist, auf AVX2 zu vektorisieren, ist ganz gewiss kein Copy-Paste aus Google. Ja, die Implementierung ist falsch. Aber sie ist nicht viel falscher als mein erster Versuch gewesen wäre, bloß in einer Sekunde statt in zehn Minuten. Und wenn man bedenkt, was die Dinger vor drei Jahren produziert haben und was jetzt rauskommt, wird mir für meine Zukunft tatsächlich mulmig.
Matthias Gubisch hat geschrieben: ↑05.01.2023, 09:12aber man zumindest für C++ schon noch selber wissen muss was man tut.
Auf x mal die gleiche Frage gibt es meist x verschiedene Versionen die von ziemlich optimal bis zu WTF in welcher Welt ist das guter/robuster/performanter Code alles beinhalten....
Das kann ich unterschreiben. Ich denke, dass wir in Zukunft nur noch Leute gebrauchen können, die sehr gut wissen, was sie tun, um Code Reviewer für sowas zu spielen.
Nach drei Tagen dran herumspielen denke ich, dass das die Programmierung langfristig verändern wird wie damals die Vernetzung durchs Internet – ohne jetzt die Diskussion lostreten zu wollen, ob gut oder schlecht. Wir sollten uns aber mächtig auf was einstellen.
Mir fiel beim zweiten Lesen noch auf dass nach meiner begrenzten Erfahrung label wie "CalcChecksum" eben gerade nicht aus dem Kompilat rausfallen und vermutlich trägt das einen guten Teil der Last ChatGPT den Kontext zu geben, den es braucht. Wo kommt der Assembler-Code am Anfang her? Wie wurde er enriched?
Alexander Kornrumpf hat geschrieben: ↑07.01.2023, 12:47Wo kommt der Assembler-Code am Anfang her? Wie wurde er enriched?
Die Label-Namen und Kommentare fallen beim Kompilieren raus, stimmt absolut. Das ist eine tatsächliche echte Quelldatei aus einer proprietären Codebase. Die möchte ich mangels Kompatibilität zu aktuellen Assemblern/Compilern auf C++ umstellen. Der Prompt ist vollständig; mehr Kommentare/Namen sind auch im Original-Quelltext nicht drin (darum möchte ich ihn schnell loswerden).
Allen befürchteten Problemen und Diskussionen um aktuelle KIs (Copyright, Jobs, Qualität, Fakes, Medien-Overflow, ...) zum Trotz: Wir leben in einer interessanten Zeit.
Auch abseits von Code ist ChatGPT für Game-Entwicklung ein ziemlich brauchbares Tool. Von erster Idee und Story-Abstract bis zu Details wie Leveldesigns, Quests, Items, Endbosse etc. Dank Backref und Threadspeicher kann man auch sehr gut mit Änderungen arbeiten sowie die "Diskussion" an anderen Tagen fortführen, d.h. es erlaubt einen sehr bequemen Workflow.
Ganz ohne selbst eingebrachte Ideen wird es natürlich schnell ziemlich generisch, aber für bestimmte Detailausarbeitungen oder Rahmenstory als Indie-Einzelkämpfer doch recht brauchbar, finde ich. (Und ja, natürlich versteht er auch Deutsch)
Ein kleines Jump'n'Run-Spiel zum Thema Ostern. Bitte beschreibe einen möglichen Hauptcharakter, Levelaufbau, Spielverlauf und Spielziel.
Gerne! Hier ist eine mögliche Idee für ein Jump'n'Run-Spiel zum Thema Ostern:
Hauptcharakter:
Der Hauptcharakter könnte ein Osterhase sein, der durch die Levels hüpft und rennt, um die Ostereier zu sammeln und die Endgegner zu besiegen. Er könnte verschiedene Fähigkeiten haben, wie zum Beispiel das Verstecken in einem Osterkörbchen, um Gegnern auszuweichen, oder das Werfen von Ostereiern als Waffe.
Levelaufbau:
Die Levels könnten in verschiedenen Oster-Themen gestaltet sein, zum Beispiel in einem blühenden Garten, in einem Wald voller bunt bemalter Ostereier oder in einer Stadt mit Osterdekorationen. Es könnten auch versteckte Bonus-Eier geben, die der Spieler sammeln kann, um seine Punktzahl zu erhöhen.
Spielverlauf:
Der Spieler muss durch die Levels hüpfen und rennen, um die Ostereier zu sammeln und Gegnern auszuweichen oder sie zu besiegen. Es könnten auch Rätsel und Minispiele eingebaut werden, um das Spiel abwechslungsreicher zu gestalten.
Spielziel:
Das Ziel des Spiels könnte sein, alle Ostereier in jedem Level zu sammeln und alle Endgegner zu besiegen, um das Spiel erfolgreich zu beenden. Der Spieler könnte auch eine bestimmte Punktzahl erreichen müssen, indem er Bonus-Eier sammelt und Gegner besiegt.
Kompletter Chat mit weiterführenden Detailfragen und Änderungen in Richtung SciFi: https://pastebin.com/raw/E2AQcc9N
(Nein, ich bastle kein Oster-Spiel, das war nur just for fun - daher auch ziemlich schräge "Story" am Ende ;))
Wie man sieht, macht der Bot auch zeitweilig logische Fehler, z.B.
"Was wäre mit einem außerirdischen Osterhasen, welcher [...] nach verteckter Technologie sucht, von welcher die Menschen nichts wissen"
-> "Er ist auf der Suche nach geheimer Technologie, die von den Menschen verborgen wurde"
In meinem Kopf implizierte mein Vorschlag direkt eine dritte Partei, welche die Erde als Zwischenlager missbraucht. Von dieser Partei war allerdings noch nicht die Rede im bisherigen Verlauf. I.d.R. kann man den Bot hierzu aber sehr leicht korrigieren.
joeydee hat geschrieben: ↑07.01.2023, 18:43
Wie man sieht, macht der Bot auch zeitweilig logische Fehler, z.B.
"Was wäre mit einem außerirdischen Osterhasen, welcher [...] nach verteckter Technologie sucht, von welcher die Menschen nichts wissen"
-> "Er ist auf der Suche nach geheimer Technologie, die von den Menschen verborgen wurde"
In meinem Kopf implizierte mein Vorschlag direkt eine dritte Partei, welche die Erde als Zwischenlager missbraucht. Von dieser Partei war allerdings noch nicht die Rede im bisherigen Verlauf. I.d.R. kann man den Bot hierzu aber sehr leicht korrigieren.
Wirkt auf mich nicht so abwegig. Eher wie "das Geheime Wissen der Urvölker" oder "das Wissen der Natur".
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Ja, umdenken und ausbauen kann man solche unlogischen Vorlagen meist ganz gut (und dem Bot dann auch sagen, dass man mit diesem ausgebauten Gedanken weiter spielen möchte), aber an "eine untergegangene Zivilisation hat das versteckt" o.ä. hat der Bot dabei sicher nicht "gedacht" :) also ich bin ziemlich sicher dass es ein logischer Fehler war.
Diese Art Logikfehler sind aktuell eher typisch. Ich habe natürlich auch schon versucht, kleine Rätselstränge generieren oder vorhandene ausbauen zu lassen. Beispiele:
Einmal hat der Held im Wald ein lautes Gebäude gehört, was sich als Schloss entpuppte.
Ja, vielleicht fand dort gerade ein Ritterturnier statt.
Ein andermal soll ein Stück Käse auf eine leere Wasserflasche gesteckt werden, um damit eine Überwachungskamera abzulenken.
Ja, vielleicht kann man tatsächlich die Linse mit fettigem Käse einschmieren, und an die Kamera kommt man nur mittels Wasserflache ran.
Der Chatbot erzeugt jedenfalls schnell ein Maß an Co-Brainstorming, das sehr fruchtbar sein kann und einen selbst auf neue Ideen bringt, wenn man die richtigen Fragen/Aufgaben stellt. (Stellt man Fragen zu allgemein, können auch Antworten ähnlich allgemein ausfallen wie z.B. "Es gibt eine Vielzahl Möglichkeiten ... Z.B. könte der Held einen Gegenstand finden, den er mit einem anderen kombinieren muss um weiterzukommen")
Das wirklich Brauchbare ist vor allem natürlich die Backref-Sache, also dass man sich jederzeit auf die bisher (um-)gestaltete Geschichte beziehen und diese auch neu zusammenfassen lassen kann. Oder Listen erstellen lassen, welche Charaktere aktuell in der Geschichte welche Rolle spielen. Welche Items und Hotspots für diesen Rätselstrang benötigt werden. Charakter- und Location-Beschreibungen. Welche Musik in eine bestimmte Szene passen könnte. Usw.
Ich hab nen neuen Job. 70% mehr Gehalt als vorher, große Firma, coole Kollegen und interessanter Aufgabenbereich. Ich stehe grade sogar freiwillig 1.5h früher auf!
Mal schauen, wie sich das entwickelt, aber sieht bisher echt gut aus
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Wollte nochmal ein Spiel aus meiner Kindheit Spielen, Motocross Madness 2. Gibts nicht auf Gog, aber ich fand einen Download auf einer Abandonwareseite. Ich musste ein paar Schritte durchgehen um es ans Laufen zu bringen, aber letztendlich konnte ich es nach 15 Minuten rumfummeln starten und alles lief wunderbar. Into wird abgespielt, Menü ist komplett sichtbar, 3D Grafik hat keine Artefakte. Wunderbar. Ich habe früher schon teilweise stundenlang rumfummeln müssen bis irgendwas ging, ich weiß z.B. immer noch nicht, wie ich Technomage wieder spielen kann, aber dieses mal hatte ich Glück.
Gut, MM2 ist jetzt schon arg in die Jahre gekommen, habs 10 Minuten lang gespielt um es mal wieder zu sehen, vielleicht spiele ich später nochmal ein paar Rennen. Aber für die Erinnerung ist es alleine schon nett, sich mal wieder durch die ganzen Menüs zu klicken :)
Heute letzter Arbeitstag bei Check24. Ab März dann Wandelbots. Bin aktuell eher traurig als glücklich, hier wegzugehen. Aber ich hab Frühstück mitgebracht, und meine Frau hat eine Torte gebacken. Thema: Pauschalreise :-)
Arbeitstechnisch weniger Stress jetzt, wichtiges Projekt ist abeschlossen. Da bin ich sehr zuversichtlich endlich nochmal privat programmieren zu können, vlt. krieg ich ja das Halloween Special meines Zombieshooters mit leichter Verspätung noch fertig :D
Ich gucke in den Code, der das verarbeitet, und natürlich wurde da ein if(slot < -1) reingeklatscht mit dem Kommentar „passiert manchmal“.
Ich stelle gerade eine große C-Codebase auf C++ um – einfach um zu schauen, welche Fehler der Compiler dann findet. Es sind viel mehr als in C. Wer meint, Typsysteme hätten nicht so große Vorteile, soll sowas mal machen.
Selbstverständlich hat der Code noch andere Probleme, aber hier haben Magic Numbers wirklich geholfen. Mein Beispiel hatte eigentlich enum verwendet, deshalb hat der C++-Compiler mich hart gezwungen, einen neuen enum-Wert hinzuschreiben. In C ist die Umwandung von -1 zu enum problemlos möglich. Ich habe das enum aus dem Beispiel entfernt, um die Grundsatzdiskussion „warum nicht 0 statt -1 als ungültiger Wert“ zu vermeiden.
Habe noch ein paar andere Beispiele, in denen C++ uralte Fehler in C-Code aufdeckt, falls sie euch interessieren.
Edit: Fehler beseitigt weil ichdas Beispiel zusammengekürzt hatte
Lol, netter Fang. Der Kommentar ist Weltklasse :-)
Mein Compiler meckert nicht mal. Auch nicht mit der -1.
Aber mit constexpr compiliert es nicht, das ist schonmal gut.
NytroX hat geschrieben: ↑01.02.2023, 20:02
Lol, netter Fang. Der Kommentar ist Weltklasse :-)
Mein Compiler meckert nicht mal. Auch nicht mit der -1.
Weil ich Idiot das enum zu #define geändert habe. Sorry, ich wollt’s vereinfachen. Das ruiniert natürlich die Lektion.
Mal gucken, dass ich’s überarbeite. Edit:constexpr statt #define. Das sollte definitiv den Fehler auslösen. Noch ein Grund, dass C++ > C (Achtung, Undefined Behavior!).
Jonathan hat geschrieben: ↑28.01.2023, 09:20
Hab mein Spiel nach, uhm, Monaten nochmal neu kompilliert. Hatte zwischendrin was am Framework gemacht und jetzt geht natürlich erstmal wieder gar nichts. Nach dem Start ist der Spieler irgendwo im Nirgendwo, die Physik-Engine teleportiert den auf irgendwelche 8-stellige Zahlen und alles Bones stecken ineinander. Hab dann erstmal eine alter Version vom Framework ausgecheckt, die wollte aber auch nicht. Shader machen auch Probleme. Möglicherweise hab ich nicht immer alles richtig eingecheckt? Jedenfalls darf ich mich jetzt erst wieder einen halben Tag hinsetzen und rausfinden, was kaputt ist (letztes mal war es GLM die das StandardßInitialisierungsverhalten geändert hatten, und ich hatte zwischenzeitlich die neue Version installiert...), was irgendwie die Motivation wieder neu anzufangen natürlich dämpft. Ugh...
Fehler gefunden. Er war natürlich, wie sollte es auch anders sein, sehr subtil.
GLM hat vor einiger Zeit das Standard-Initialisierungsverhalten geändert. Alles ist jetzt Standardmäßig uninitialisiert. Was natürlich tödlich ist, wenn man in seinem Code Stellen wie vec3 offset; oder vec3 offset(); anstatt vec3 offset(0.f); hat.
Natürlich gibts dafür keine Compilerfehler, es ist ja "legaler" Code. Ich hatte versucht in Visual Studio nach uninitialisierten Membern zu suchen und habe damit auch ein paar Stellen gefunden. Insgesamt war das aber nicht sehr robust. Dann hab ich irgendwann mal nach allen vec3() & co Vorkommen gesucht und diese entsprechend angepasst. Das tauchte so in der Größenordnung von 50 mal in meinem Code auf.
Heute kam ich dann endlich mal auf die naheliegende Idee, einen Breakpoint in den Default-Constructor zu setzen. Das ging natürlich nicht, weil der also =default deklariert war und dementsprechend keinen Code hatte. Dann wurde mir das irgendwann zu doof und ich habe einfach einen neuen glm-Branch erstellt, in dem ich alles default-Konstruktoren explizit lösche.
Jetzt hat natürlich nichts mehr kompiliert, ein vector<vec3> ging dann z.B. nicht mehr. Es gab auch eine Reihe an Stellen, in denen Variablen uninitialisiert angelegt wurden und gleich darauf vernünftige Werte bekamen, das explizit alles in den Konstruktoraufruf zu schreiben hätte den Code aber nicht schöner gemacht.
Ich hab mich also davon verabschiedet diesen Branch jemals für irgendetwas anderes als zum Debugging zu verwenden. Aber er hat seinen Zwei erfüllt. Letztendlich habe ich damit zwei kritische Stellen gefunden. Eine war die Standardtransformation von Levelelementen die dann meistens eine 0-Matrix hatte, die andere war die Laufgeschwindigkeit des Spielers (die dann abhängig von gedrückten Tasten in X oder Y Richtung verändert werden sollte), die jetzt eben zufällige Werte beinhaltete und dann als Impulskraft an die Physikengine weitergegeben wurde. Kein Wunder, dass daraufhin alles explodiert ist...
Das gemeine ist natürlich, dass ich die neue GLM Version eigentlich schon eine zeitlang einsetze. Aber die Initialisierung war halt undefiniert, das hat Monatelang ohne Probleme funktioniert (und war vermutlich sogar komplett deterministisch, aber halt eher aus versehen richtig), bis dann irgendeine andere Stelle im Code geändert wurde, die dann dafür sorgte, dass der Speicher anders initialisiert war und alles explodiert. Damit war dann eigentlich auch alles rumgesuche im Git-Log recht nutzlos...