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.

Re: Jammer-Thread

Beitragvon Krishty » 23.09.2017, 14:56

Du kannst die Keymap vielleicht nach Scancodes definieren statt nach Virtual Keys. Mit WASD muss man das z.B. unbedingt machen, sonst beschweren sich die kanadischen Spieler, dass sie kreuz und quer über die Tastatur greifen müssen ;)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 6008
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Tiles » 23.09.2017, 15:01

Wenn da nicht Blender unten drunter wäre könnte ich das sicher ^^
Free Gamegraphics, Freeware Games http://www.reinerstilesets.de
Die deutsche 3D Community: http://www.3d-ring.de
Benutzeravatar
Tiles
 
Beiträge: 1059
Registriert: 11.01.2003, 14:21

Re: Jammer-Thread

Beitragvon Krishty » 25.09.2017, 02:14

Ich, 2010: „Eure Scheißsprache ist voller Zeiger.“

Sie, 2010: „Unsinn! Das sind Referenzen!“

2017, meistgewolltes C#-Feature: „Unsere C#-Projekte sind voller null-Checks; wir brauchen endlich richtige Referenzen!“

Ist ja nicht so, als ob ich das nicht kommen gesehen hätte.

Bild

I am happy to note that this suggestion has been at the very top ever since I wrote it more than five years ago. To understand its popularity, one can simply enter "billion dollar mistake" into any search engine.

Non-nullability is difficult to retrofit into a language like C#. There are many approaches, who solve the problem to varying degrees. Furthermore, the discussion is tricky, because people easily mix up the semantics of initialization, nullability, and optionality.
Sie mussten sich ja unbedingt an Java orientieren statt an richtigen Sprachen! :D
If you are looking very beautiful call girls in Chandigarh area at very affordable prices provide your places hotels and room with safe and secure escorts agency.
http://www.kajrai.in/
Ikannimmer :D
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 6008
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Jonathan » 25.09.2017, 11:25

Wir sollten alle nur noch in Rust coden!

(ich hoffe ich finde eines Tages mal die Zeit mir das selben anzuschauen - ich mache seit Jahren Werbung dafür weil es so geil klingt, habs aber noch nicht wirklich getestet).
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Jonathan
 
Beiträge: 1153
Registriert: 04.08.2004, 20:06

Re: Jammer-Thread

Beitragvon Artificial Mind » 25.09.2017, 14:22

Ich habe jetzt einige Zeit mit Kotlin gearbeitet und es ist meine neue Lieblingssprache. Dort sind Objekte non-null by default und man kann sie optional mit ? versehen um null zu erlauben. Damit darf man dann keine normalen Funktionen mehr darauf aufrufen (könnte ja null sein). Dazu gehört mMn das tolle Feature flow-dependent typing:

Code: Ansicht erweitern :: Alles auswählen
val s: String? = foo()
println(s.length) // error, length auf nullable darf nicht aufgerufen werden
if (s != null)
    println(s.length) // OK, im then-scope hat s den Typ String, nicht mehr String?


Bisher habe ich null und nullable nur äußerst selten gebraucht. Ein gutes Zeichen. NullReferenceExceptions können in Kotlin nur an ganz speziellen Punkten auftreten.

  • throw NullReferenceException() - explizit und wird quasi nicht verwendet
  • s!!.length - der Operator !! macht Object? zu Object und wirft wenn null (explizit und sollte man normalerweise nicht nutzen, kann aber beim interfacen mit java praktisch sein)
  • man ruft eine Java Funktion auf die intern wirft (nicht wirklich Kotlins Schuld)
  • leider möglich bei initialisierung von Objekten wenn man die Reihenfolge verranzt (Basisklassen-ctor ruft virtual function auf die auf uninitialisierte member in der aktuellen Klasse zugreift). Das hat aber noch keine Sprache richtig gelöst oder?
Benutzeravatar
Artificial Mind
 
Beiträge: 802
Registriert: 17.12.2007, 18:51
Wohnort: Aachen

Re: Jammer-Thread

Beitragvon dot » 25.09.2017, 16:44

Artificial Mind hat geschrieben:
  • leider möglich bei initialisierung von Objekten wenn man die Reihenfolge verranzt (Basisklassen-ctor ruft virtual function auf die auf uninitialisierte member in der aktuellen Klasse zugreift). Das hat aber noch keine Sprache richtig gelöst oder?

Doch: C++. Virtual function call in Basisklassen Ctor ruft die Implementierung der Basisklasse auf. Macht auch Sinn: Zum Zeitpunkt da der Basisklassen Ctor läuft, ist der dynamische Typ des Objektes das gerade konstruiert wird logischerweise noch der Typ der Basisklasse und noch nicht der des fertigen Objektes...
Benutzeravatar
dot
Michael Kenzel
 
Beiträge: 1587
Registriert: 06.03.2004, 19:10

Re: Jammer-Thread

Beitragvon Artificial Mind » 25.09.2017, 16:57

dot hat geschrieben:Doch: C++. Virtual function call in Basisklassen Ctor ruft die Implementierung der Basisklasse auf. Macht auch Sinn: Zum Zeitpunkt da der Basisklassen Ctor läuft, ist der dynamische Typ des Objektes das gerade konstruiert wird logischerweise noch der Typ der Basisklasse und noch nicht der des fertigen Objektes...

Das ist in der Regel aber dennoch ein Fehler und tut nicht das, was man möchte. Eine virtuelle Funktion soll überschrieben werden können um die Funktionalität zu erweitern/ändern. "virtual function calls" in C++ im Ctor sind de facto nicht virtuell wie du sagst.

Beispiel auf das ich schon ein paar Mal reingefallen bin: Basisklasse hat eine "virtual void init();", abgeleitete Klasse überschreibt init und implementiert Initialisierungscode. init wird im Ctor von der Basisklasse aufgerufen. Verhält sich nicht wie gewollt.
Benutzeravatar
Artificial Mind
 
Beiträge: 802
Registriert: 17.12.2007, 18:51
Wohnort: Aachen

Re: Jammer-Thread

Beitragvon Jonathan » 25.09.2017, 18:24

Ein weiterer CMake / C++ / Umgebungsvariablen sind doof Rant:


Ich versuche pbrt zu kompilieren, welches diverse Abhängigkeiten über git-Submodule einbindet. Unter anderem zlib und ptex, welches zlib als Abhängigkeit hat. Letzteres wurde erst neulich hinzugefügt und nach dem merge kompilliert bei mir nichts mehr. Wegen Fehler mit ZLIB. 2 Stunden später habe ich jetzt rausgefunden, dass ptex eine falsche zlib version einbindet (kleine Spaßstatistik: Ich habe es nie selber installiert und trotzdem an 18 verschiedenen Orten eine zlib.h rumliegen... - und 11 zlib.dll's - wieso benutzen Leute eigentlich noch immer dynamisches linken??). Die falsche Version findet er bei Anaconda, was eigentlich eine Python Distribution ist. Ein weiterer Beweis dafür, dass Umgebungsvariablen einfach nicht funktionieren, wenn eine Python-Installation meinen C++ Compiler kaputt machen kann. Das CMake Skript von pbrt kann zwar zlib aus dem eingebundenen Submodul benutzen, tut das aber nur, wenn kein anderes zlib gefunden wurde. Alternativ wäre es jetzt natürlich auch schön gewesen, wenn man ptex einfach hätte sagen können, dass es die zlib Version im Nebenordner benutzen soll, aber Submodule auch noch zu ändern macht deren Benutzung in git auch nicht einfacher.

Ich mag es ja schon nicht, wenn man vor Benutzung Programme selber kompilieren muss. Aber CMake schießt den Vogel definitiv damit ab, dass ich jedes zweite Script selber debuggen muss, weil einfach nie irgendetwas funktioniert. Und weil Menschen für Dinge die eigentlich trivial zu kompilieren sein sollten hunderte und tausende Zeilen CMake Code schreiben, die ansich zu 80% aus Fixen bestehen, die abstruse Ausnahmefälle abfangen, die irgendwann bei irgendeinem mal aufgetreten sind. Man hat echt das Gefühl dass das Ziel "läuft auf allen Systemen automatisch" durch ein "wir Coden für jedes System einen neuen Hack" erreicht wird.
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Jonathan
 
Beiträge: 1153
Registriert: 04.08.2004, 20:06

Re: Jammer-Thread

Beitragvon Krishty » 28.09.2017, 01:01

Seit Windows 10 Creators Update und .NET 4.6 (vielleicht auch früher) ist der Zeitstempel in EXEs und DLLs kein Zeitstempel mehr.

Raymond Chen hatte vor Jahren einen Beitrag, dass das Feld eher als Build-ID gedacht ist denn als Zeitstempel. Aber warum sollte das in Konflikt stehen? Wer kompiliert zwei verschiedene Builds seines Programms in der selben Sekunde? Was wird besser, wenn da eine Toolchain-Kodierung drin landet?

Software ist natürlich nicht drauf vorbereitet, weil bisher jedes EXE-/DLL-Tool versucht, dort einen Zeitstempel zu lesen. Markierung ist das höchstwertige Bit. Die DLLs in System32 werden also seit dem Creators Update mit zufälligen Daten ab 2038 angezeigt.

Ich jammere, weil es so schön bequem war. Man musste kein Datum/Zeit in seine EXE schreiben. Ich brauchte meine Plugins nie nach Versionsnummern fragen, weil ja Zeitstempel drinlagen. Man konnte die Stempel weder vergessen noch vermasseln, weil sich der Linker drum gekümmert hat. Und jetzt? Alles kaputt. Nie kann ich was Schönes haben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 6008
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Jammer-Thread

Beitragvon Jonathan » 28.09.2017, 12:16

Nachtrag: Menschen die in CMake Scripte Dinge schreiben, die offensichtlich nur auf einer Plattform funktionieren können,
SET(ZLIB_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/src/ext/zlib/$<CONFIGURATION>/zlibstatic.lib")
Unter Linux ist die Lib aber anscheinend: src/ext/zlib/libz.a d.h. falscher Ordner, falscher Name und falsche Endung.
bestätigen meine neue These, dass CMake Scripte zu 100% aus Hacks und Fixes bestehen, und für absolut jedes neue System um weitere Fixes und Hacks erweitert werden müssen, weil nie irgendetwas von alleine funktioniert was offensichtlich auch niemals so geplant gewesen sein kann, denn so spektakulär kann man gar nicht scheitern können. Statt 10 verschiedene Projektdateien für verschiedene Plattformen und Compiler zu haben, hat man in CMake einfach alle 10 Projekte in eine einzelne Datei gepackt, die insgesamt länger ist als die Summe ihrer Bestandteile (das nennt man dann wohl Emergenz?) und in einer vollkommen unleserlichen und inhärent missverständlichen Syntax geschrieben ist.
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Jonathan
 
Beiträge: 1153
Registriert: 04.08.2004, 20:06

Re: Jammer-Thread

Beitragvon dot » 28.09.2017, 12:55

Jonathan hat geschrieben:[...] meine neue These, dass CMake Scripte zu 100% aus Hacks und Fixes bestehen, und für absolut jedes neue System um weitere Fixes und Hacks erweitert werden müssen, weil nie irgendetwas von alleine funktioniert was offensichtlich auch niemals so geplant gewesen sein kann, denn so spektakulär kann man gar nicht scheitern können. Statt 10 verschiedene Projektdateien für verschiedene Plattformen und Compiler zu haben, hat man in CMake einfach alle 10 Projekte in eine einzelne Datei gepackt, die insgesamt länger ist als die Summe ihrer Bestandteile (das nennt man dann wohl Emergenz?) und in einer vollkommen unleserlichen und inhärent missverständlichen Syntax geschrieben ist.

Exakt, CMake ist ein riesiger Müllberg...
Benutzeravatar
dot
Michael Kenzel
 
Beiträge: 1587
Registriert: 06.03.2004, 19:10

Re: Jammer-Thread

Beitragvon Jonathan » 28.09.2017, 17:26

Danke für die Bestätigung. Manchmal denke ich mir echt, CMake kann doch gar nicht SO schlecht sein, ich muss doch irgendetwas falsch machen, das muss doch nur mir so gehen, sonst würde das doch niemand freiwillig benutzen... Gut zu wissen, dass ich nicht an Realitätsverlust leide. Wobei die Alternative eigentlich tatsächlich weniger traurig wäre...
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Jonathan
 
Beiträge: 1153
Registriert: 04.08.2004, 20:06

Re: Jammer-Thread

Beitragvon dot » 28.09.2017, 17:43

Jonathan hat geschrieben:Gut zu wissen, dass ich nicht an Realitätsverlust leide.

Definitiv nicht. Was du da oben beschreibst deckt sich zu 100% mit meinen Erfahrungen...von denen ich in diesem Fall leider mehr hab als mir lieb ist...
Benutzeravatar
dot
Michael Kenzel
 
Beiträge: 1587
Registriert: 06.03.2004, 19:10

Re: Jammer-Thread

Beitragvon MasterQ32 » 28.09.2017, 18:07

Ich jammer mal noch dazu...

Ich wurde gebeten, für VersaTile Travis-CI zu verwenden, damit eben für versch. Systeme automatisiert Builds gemacht werden. Sollte ja eigentlich nich so schwer sein?
Nur: Ubuntu 14.04 hat folgende Probleme:
a) Alter GCC, nutzt by-default noch C++98
b) Altes Qt (4.8)
c) Neuestes Qt in den Paketquellen ist 5.5, ich nutze aber 5.9, da dort das OpenGL-Handling massiv verbessert wurde (und das QGLWidget aus Qt4 endgültig als deprecated markiert wurde)
d) Alte Pakete von: Assimp, GLM, ...

GRAH! Zum Glück nutze ich QMake und nicht CMake, aber wirklich viel gibt sich das leider auch nicht, was den platformabhängigen fuckup angeht.
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
 
Beiträge: 939
Registriert: 07.10.2012, 14:56

Re: Jammer-Thread

Beitragvon Krishty » 29.09.2017, 14:40

Auf YouTube darf man nur noch Crowdfunding-Links setzen, wenn auch Werbung eingeschaltet ist.

Wo kämen wir denn auch hin, wenn sich Indie-Entwickler aussuchen könnten, wer an ihrem Promo-Material Geld verdient!

Ach ja – man braucht natürlich mindestens 10.000 Follower, um überhaupt die Option zu bekommen. Viel Glück dann!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 6008
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

VorherigeNächste

Zurück zu Allgemeines Talk-Brett

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot], Yandex [Bot] und 5 Gäste