IRC Logs for #zfx


2021-05-06

01:17:16 Biolunar joined the channel
05:26:04 Schrompf joined the channel
06:22:49 IceMichael: moin
06:23:05 Schrompf: Grüzi
06:29:05 IceMichael: na Schrompf, was laeuft so?
06:29:43 Schrompf: die tests wieder
06:29:46 Schrompf: nach einem großen umbau
06:29:55 Schrompf: welcher für die neue funktion komplett unnötig
06:30:06 Schrompf: aber auf welchen wir uns vorher im SP2 geeinigt
06:30:29 Schrompf: so funktioniert teamwork. manchmal macht man auch aufgaben, die man für sinnlos hält
06:37:39 xq: moin moin
06:37:56 Schrompf: grü zi
06:40:06 IceMichael: moin auch xq
06:40:13 IceMichael: wofuer steht SP?
06:40:18 Schrompf: Sprint Planning
06:40:19 IceMichael: sprint plan?
06:40:20 IceMichael: ah
06:40:27 Schrompf: Meeting. Da gibt's bei uns zwei
06:40:37 IceMichael: ja, haben wir auch
06:40:44 IceMichael: verschmilzt in letzter Zeit oft ein bisschen
06:41:02 Schrompf: im ersten gehen wir die Tickets durch, die die Projektmanagerin zusammengestellt hat, und suchen uns was raus, und schachern
06:41:35 Schrompf: und einen Tag später machen wir dann SP2, in dem wir gemeinsam über die Herangehensweise reden, falls Du an Deinen Tickets irgendwo ein Tag "Ich will darüber reden" drangemacht hast
06:41:52 IceMichael: ah, sehr interessant
06:42:07 IceMichael: wir haben eine eigene Lane fuer Tickets, wo wir 'refinement' haben wollen
06:42:26 IceMichael: dann muss die einer erstmal investigieren, aufraeumen, Details/Background sammeln, bevor sie ins Planning gehen
06:42:46 IceMichael: da wir oft von externen vendorn wie Apple abhaengen, ist das oft sinnvoll, weil nicht mal der Aufwand klar ist
06:42:55 IceMichael: und der Umbau ist generall auch sinnlos? Wenn er alles schoener macht, ist es ja trotzdem nett
06:43:39 Schrompf: das ist was leicht anderes, denke ich. Tickets, die unklar formuliert sind oder nach Diskussion nochmal umgeschrieben werden, werden bei uns beim Schätzen auf "In Concept" zurückgeschoben und dem Menschen zugewiesen, der's ändern soll
06:44:02 Schrompf: naja... ob der Umbau jetzt wirklich Sachen besser macht, weiß ich nicht
06:44:39 Schrompf: wir haben bei uns zwei Regel-Datenbanken. Eine für SingleResult-Regeln, die nen Tribool ergeben, und eine für MatrixResult, also ne Matrix aus 64x48 Tribools
06:45:21 Schrompf: und weil ich am Regelkrams vektorisieren darf, war die Meinung, dass ich erstmal ne dritte DB baue für diese Regeln, obwohl sie die selbe Signatur wie die MatrixResult-Regeln haben
06:45:48 Schrompf: ja, sie sind dann schön separat, falls man mal was debuggen muss
06:46:17 IceMichael: ja, debugging ist echt ein wichtiger Designpunkt
06:46:19 Schrompf: aber wir sind uns auch einig, dass ganz am ende die beiden MatrixResult-DBs wieder zusammengeworfen werden sollen
06:46:35 Schrompf: *ich* persönlich bin der meinung, mir hilft das nicht beim debuggen
06:46:49 IceMichael: aus Platzspar- und sync-Vermeidungs-Gruenden?
06:46:51 Schrompf: aber ich halte mich am ende natürlich an die teamentscheidungen
06:47:15 IceMichael: hm ja, wenn du eh gut filtern kannst, ist es halt easy
06:47:41 Schrompf: ist ja ne eigene DB, kein SQL oder sowas. weniger code, und mehr gelegenheit, dass Regeln mit identischem inhalt zusammengeworfen werden können
06:47:59 Schrompf: und ich dachte, das wär ne menge kopieren&einfügen
06:48:08 Schrompf: aber es waren halt auch ein paar stolperfallen drin
06:48:51 Schrompf: darunter das parallele mergen, das ich an zwei stellen manuell nachtragen musste. und die symptome, an denen ich das erkennen musste, waren race conditions in explizit-unsynced-mempools :-(
06:49:24 Schrompf: jetzt, zwei tage später, ist der umbau fertig, aber ich bin grumpy. *so* hatte ich mir das nicht vorgestellt, dann hätte ich vorher in der diskussion deutlich heftiger gezankt
06:50:14 IceMichael: ja, voellig verstaendlich, scheiss Rattenschwaenze
06:50:51 Schrompf: ist auch kein vorwurf ans team. ich steck am tiefsten im thema drin, wenn ich das nicht gesehen habe, dann niemand
06:50:55 IceMichael: das fuehrt ja auch die Moeglichkeit ein, dass man allein durch die neue DB Bugs einbaut. Die Chance ist vll niedrig, aber wenn das passiert, kostet es u.U. viel, klingt ja nach komplizierten Bereichen
06:52:00 Schrompf: ja, aber da muss ich mal unsere testabdeckung loben. wenn die durchläuft, bist du save
06:53:25 IceMichael: das ist eh ein Traum
06:53:52 IceMichael: bei uns sind Bereiche, da entscheide ich mich schaemenderweise lieber fuer einen sicheren Fix eines Bugs als fuer ein Refactoring, weil die Coverage nicht da ist
06:54:06 IceMichael: obwohl der Code gruetze ist und refactoring oft gut waere
06:54:28 IceMichael: aber wenn ich da was kaputt mache, was leicht passieren kann, ist die Chance hoch, dass es bei irgendeinem Kunden ploetzlich alles kaputt macht
06:55:00 IceMichael: na ja, wenn es so weiter geht wie bisher, dann ist das noch schlimmer am Ende. Aber welcher Code mal komplett neu gemacht wird und welcher nicht, ist eben noch nicht entschieden... hm, muss ich eigentlich mitentscheiden, wenn ich so drueber nachdenke
06:56:55 xq: übrigens: versucht niemals, networking auf windows zu machen. das ist alles kacke
06:58:31 IceMichael: ja, da hatte ich gestern ja nen Bug. die Win OpenSSL implementierung braucht nen event loop run (also in Qt, kA, was da genau benoetigt wird), um die trusted CAs zu bekommen
06:58:32 Schrompf: all. les. mist
06:58:53 IceMichael: macht keinen Sinn, wieso nicht synchron...
06:59:04 IceMichael: aber dein Problem ist wsl mehr low level?
06:59:22 xq: du darfst in windows nicht einfach WSASocket() oder socket() aufrufen
06:59:32 xq: du musst vorher WSAStartup(2,2) aufrufen
06:59:38 xq: und diese funktion ist nicht threadsafe
06:59:48 xq: sprich: du kannst sockets nicht on-demand initialisieren
06:59:55 xq: sondern dein programm muss das global zu start machen
07:01:00 Schrompf: oder c++11 static :-)
07:01:48 Schrompf: static int Foozy = []() { WSAStartup(...); return 5; }();
07:02:06 Schrompf: c++11 garantiert dir, dass das atomic passiert
07:02:15 xq: jo, aber: wir haben bei zig kein C++ :D
07:02:24 IceMichael: groesster Nachteil an Zig
07:02:28 xq: ...
07:02:34 IceMichael: SCNR :D
07:02:35 xq: und wir haben auch ne aversion gegen automatische dinge
07:02:47 Schrompf: *shrugs in c++*
07:03:05 xq: und was tust du, wenn WSAStartup fehlschlägt?
07:03:06 xq: :D
07:03:37 Schrompf: an die decke starren
07:03:40 IceMichael: ja dan kannst eh nach Hause gehen?
07:03:40 Schrompf: joggen gehen
07:03:56 Schrompf: ein paar virtuelle menschen erschießen
07:04:04 Schrompf: (bei denen geht WSAStartup immer)
07:04:24 IceMichael: hm, was bringt die atomic-keit hier eigentlich? also WSAStartup + socket holen im Lambda kapier ich, aber..
07:04:38 IceMichael: oder war das die Idee?
07:04:43 xq: du *musst* WSAStartup threadsafe initialisieren
07:04:46 Schrompf: sorry, bei fehlerbehandlung bist du bei mir an der falschen adresse. ich mach immer nur gerade soviel, wie nötig, und immer erst hinterher, wenn's die user experience beeinträchtigt
07:04:48 xq: ansonsten explodiert alles
07:05:05 xq: ach und: Du musst natürlich auch WsaShutdown aufrufen :D
07:05:15 xq: und zwar für jede invocation von WsaStartup
07:05:16 Schrompf: genau. geht nur darum, dass der WSA-Call threadsafe passiert
07:05:29 Schrompf: und c++11-static ist halt ne bequeme methode, dass der compiler dir den mutex einfügt
07:05:32 xq: das is alles ganz große kacke, wenn man es sauber machen will
07:06:24 IceMichael: hm, dann echt nen wrapper mit Mutex bauen, der wsastartup/wsashutdown umgibt?
07:06:49 IceMichael: aber muss man wsastartup jetzt eh am Programmstart ausfuehren oder pro socket?
07:06:59 Schrompf: genau. und der muss halt global sein, und das ärgert den xq
07:07:04 xq: irgendwann vor dem ersten call zu einer anderen funktion von WSA
07:07:09 Schrompf: einmalig am anfang
07:07:15 xq: optionen:
07:07:24 xq: - alle socketfunktionen auf windows werden langsamer
07:07:27 Schrompf: und nicht aus ner fiber heraus, kann ich aus erfahrung sagen
07:07:44 xq: - alle programme auf windows referenzieren plötzlich ws2_32.dll
07:07:47 xq: - du musst es manuell aufrufen
07:07:53 xq: alles drei keine gute option
07:08:13 Schrompf: wie wär's mit global state, der die dll manuell lädt?
07:08:13 xq: aber gibt wohl ne möglichkeit, ne semi-undokumentierte API auf Windows zu nutzen, die das nicht braucht…
07:08:29 xq: idee war, ne "wrapper"-DLL zu machen
07:08:31 Schrompf: wenn du eh nen global state für WSAStartup einführen musst
07:08:36 xq: aber du darfst WSAStartup nicht in DLLMain() aufrufen
07:08:43 IceMichael: also wenn es einmal bei Programmstart ist und nicht pro socket, kapier ich nicht, wieso das nicht einfach in die main fct kommt und gut?
07:09:01 xq: IceMichael: weil du das dann tippen musst, wenn du dein programm auf windows benutzt
07:09:07 xq: und es ne fehlerquelle ist, es nicht zu tun
07:09:09 Schrompf: das verstehe ich, denke ich. es soll halt nicht jedes zig-programm diese dll auf windows brauchen
07:09:24 xq: weil die socket functions dann *irgendwann* failen
07:09:27 xq: und nicht beim ersten call
07:09:29 IceMichael: gibts kein #ifdef WIN?
07:09:36 xq: das löst das problem nicht ,)
07:09:51 xq: auch da hast du entweder die startup-funktion, welche das aufruft (für alle programme)
07:09:52 IceMichael: wsl fehlt mir einfach Background zu WSAStartup, sonst kapier ich's nicht
07:09:56 xq: oder der user muss es selber machen
07:10:05 IceMichael: oder zu dem, was du baust
07:10:07 xq: ganz einfach: "du musst das aufrufen, sonst tun sockets sporadisch mal nicht"
07:10:13 xq: die zig standard library
07:10:16 xq: bauen wir
07:10:18 IceMichael: ach da bist du
07:10:26 IceMichael: der Kontext hat mir gefehlt, haette ja was Dunstiges sein koennen
07:10:38 IceMichael: (ja, wen das lib ist, same...)
07:10:48 Schrompf: und mein vorschlag wär halt atomic_bool globalWSAInitState
07:11:00 xq: dunstblick code benutzt zig-network, was der "vorgänger" ist, als zig std noch kein windows supportete in networking
07:11:19 xq: und die main sieht da so aus:
07:11:34 xq: pub fn main() !void { try network.init(); defer network.deinit(); … }
07:12:16 Schrompf: und dann in ein paar taktischen Socket-Funktionen, die zuerst kommen können, ein "if( !global_bool ) { Mutex; if( !globalbool ) LoadDLL(); GetSymbol(); CallSymbol; SetBool(); }
07:12:35 IceMichael: ja, Schrompfs Idee
07:12:55 Schrompf: dann muss nicht jedes zig-programm auf verdacht die DLL linken
07:13:09 IceMichael: die drei erwaehnten Optionen-Probleme sind dann doch auch geloest
07:13:18 IceMichael: lazy init halt
07:13:21 Schrompf: und der overhead eines bools, der nicht-atomar gelesen wird, ist nicht messbar
07:13:54 xq: überraschend viele dinge sind messbar
07:14:14 xq: aber ja, das wird afaik grade die workaround-lösung sein, bis jemand ein AFD backend macht
07:14:31 Schrompf: nein, die dürfen keine macht bekommen
07:14:46 xq: ^^
07:14:55 Schrompf: und sorry, den bool musst du mir beweisen, bevor ich dir das "messbar" glaube
07:15:06 Schrompf: der erste read muss ja nichtmal atomic sein.
07:15:50 Schrompf: die späteren auch nicht, seh ich gerade, weil du eh mutext. aber atomic_* verhindert halt auch clevere compileroptimierungen, das ist schon ganz gut so
07:28:50 IceMichael: ich find auch gar nicht, dass das ein grosser workaround ist? Es gibt halt etwas, was on-demand initialisiert werden muss, sollte in der Denke ja ein Standardfall sein
07:31:15 xq: IceMichael: das problem ist, dass du nen komplett neuen fehlerpfad bekommst
07:31:53 IceMichael: puh, wann kann das denn eh failen?
07:32:04 Schrompf: warum ist das ein problem? die paar funktionen, mit denen ein netzwerkgedöns startet, haben doch auch eigene fehler?
07:32:07 Schrompf: also da mit rein und fertig
07:32:37 xq: ja, aber: ich handle das zu startup und weiß, danach failed mir ne socket function nicht mehr wegen error.SystemResources
07:32:42 xq: so kann potentiell jede funktion damit failen
07:32:59 Schrompf: ne, nur die paar, mit denen jede netzwerkarbeit eröffnet wird
07:33:20 Schrompf: das dürften gar nicht viele sein. alles read() und write() muss immer von nem createSocket() eröffnet werden
07:33:45 Schrompf: selbst UDP braucht nen socket für's wohlfühlen oder wasweißich
07:33:47 xq: außer du bekommst das socket handle aus ner externen lib
07:34:10 Schrompf: dann haben die für wsastartup gesorgt :)
07:34:24 xq: und rufen WsaShutdown ggf. vorzeitig auf
07:34:25 xq: nein danke
07:34:57 xq: so, jetzt erst mal medikamentieren
07:34:59 Schrompf: sorry, xq, aber jetzt konstruierst du nur noch irgendwelche an den haaren herbeigezogenenen fehlerfälle, weil du windows nicht magst
07:35:21 xq: nein, ich beachte "edge cases matter"
07:35:44 Schrompf: nun, wenn dir jemand nen socket gibt und dann shutdowned, dann ist das *sein* bug und nicth deiner
07:35:58 Schrompf: aber mach, wie du willst. hättest du's einfach gemacht, wärst du schon fertig
07:36:26 xq: und das föllt dann leuten in 10 jahren auf die füße
07:39:05 xq: bei rust fällt ihnen das grade auch fies auf die füße
07:39:26 xq: weil ihre standardlibrary out of memory als "tritt nicht auf" klassifiziert hatte
07:43:27 Schrompf: tja, dann nimmst du den einzelnen bool-vergleich halt in jeder netzwerk-funktion in kauf.
07:44:11 xq: oder yeetest ws2_32
08:07:37 joggel joined the channel
08:07:51 joggel: moin
08:08:37 Schrompf: joggel! wb
08:08:44 joggel: ahoi
08:09:27 joggel: xq: sach mal: kannst du mir nen JSON-Parser für C++ empfehlen? Ich weiß das du da mal einen benutzt hast. Ohne irgend welche Abhängigkeiten oder so
08:11:23 joggel: okay. glaube der sieht gut aus: https://github.com/nlohmann/json
08:12:04 Schrompf: ja, der ist der klassiker. ein header, einfach irgendwo hinkopieren und includen
08:12:15 Schrompf: ist allerdings ein *fieses* template-massaker
08:12:41 Schrompf: wenn du bei der benutzung irgendwo nen fehler machst, musst du schon ordentlich die augen zusammenkneifen, um die fehlermeldung lesen zu können
08:12:48 Schrompf: (und mehrere seiten scrollen)
08:12:57 joggel: Da steht was con CMake?
08:13:34 Schrompf: und wenn es dann ein json-element nicht gibt oder ein string drinsteht und du ne zahl erwartest, kriegst du ne nichtssagende exception, die nicht angibt, wo denn im file das problem steckt
08:13:34 joggel: achso. okay... nur wenn man das in anderen Projekten verwenden will...
08:13:44 joggel: ok
08:13:49 Schrompf: kannst auch cmake nehmen, wenn du willst. mir wurscht. ich nehm single-header
08:13:53 IceMichael: joggel, ja, nlohmann ist nice
08:14:05 joggel: kannst du was empfehlen, Schrompf?
08:14:07 IceMichael: cmake brauchst nicht, hat mich auch irritiert
08:14:12 joggel: ok
08:14:26 joggel: dann nehm ich den mal
08:15:31 Schrompf: gibt sonst rapidjson und so, die sind halt wirklich massiv schneller. aber durch ihr C-interface halt auch mühsam zu benutzen
08:15:56 Schrompf: und ich wollte seit ewigkeiten mal nen eigenen json-parser schreiben, der nur lesen kann und in-place arbeitet
08:41:30 xq: in-place? also mutieren des orginalsources?
08:41:35 xq: oder wie meinst du das?
08:47:25 IceMichael: nur lesen klingt nicht nach mutieren
08:47:41 IceMichael: rapidjson hatte ich auch vorher, aber da kann man jetzt echt abwaegen wie viele Daten das sind oder ob convenience nicht wichtiger ist...
08:47:57 IceMichael: um nen Node zu erstellen muss man dann allocate_node machen und fuer jedes label allocate_string
08:48:28 IceMichael: und falls man mal so gedankenverloren ist den String einfach so reinzuschieben, beschwert sich der Compiler natuerlich nicht, aber es fliegt alles um die Ohren und man hat keine Ahnung, wo und wieso
08:48:46 joggel: Ja, ich suchte einen JSON-Parser ohne Abhängigkeit, und ich erinnerte mich das du da mal einen verwendet hast. Wollte wissen welcher das war. Aber diesen nlohman/json sieht ganz okay aus
08:48:48 IceMichael: ja, man kann sich selbst nen wrapper bauen
08:48:51 joggel: also: forget it^^
08:54:35 xq: moin joggel
08:54:40 xq: schön, deinen namen mal wieder zu lesen
08:56:18 joggel: bin nur auf durchreise. Muss Informationen abgreifen (für Arbeit. shame on me) :D
09:08:53 Schrompf: in-place, level 0: namen und werte der json-nodes im file lassen. also json["bla.blubb"] gibt dir nur nen stringview auf den werteteil von "blubb: 13.84" zurück
09:09:33 Schrompf: und dann evtl. in-place, level 1: die baumstruktur direkt im file aufbauen mit offsets zu first-child, next-sibling und so
09:10:02 Schrompf: allerdings geht das gar nicht, weil du ja gerne mal aus memory mapped files oder so liest, die du gar nicht ändern kannst.
09:10:19 Schrompf: nicht alle lesen den inhalt eines files aus bequemlichkeit in nen vector
09:10:30 xq: Schrompf: { "foo": "a\nb" }
09:10:41 Schrompf: was ist damit?
09:11:25 xq: das musst du ja in-place mutieren, wenn du das vernünftig handlen willst
09:11:33 xq: oder willst du da einfach "a\\nb" an C++ rausgeben?
09:11:59 Schrompf: nö. du kriegst nen stringview auf "a\nb" zurück und der rest ist dein problem. du bist doch der coder, du hast so ne grütze in dein json geschrieben
09:12:09 Schrompf: zumal json sowas verbietet, aber das ist mir zu kleinlich
09:13:02 Schrompf: aber wenn escapen mit irgendwas validem tatsächlich erlaubt ist, könnte man es ja wie ne Zahl behandeln.
09:13:18 Schrompf: also node::get() gibt dir nen rohen stringview zurück
09:13:38 Schrompf: und node::parse() ne zahl, falls der text ne zahl ist
09:13:55 Schrompf: und dann halt node::parse() den string mit allen ersetzungen
09:14:18 Schrompf: und da ich das eh nur on demand machen wollte, gibt's da auch keine verluste
09:14:39 xq: json verbietet kein escaping, just sayin
09:14:53 Schrompf: du machst die kopie dann halt erst, wenn jemand wirklich fragt. und für die allermeisten leute mit "{ bla: \"blubber\" }"-inhalten reicht die rohe version
09:15:09 xq: das klingt aber relativ explosiv
09:15:21 xq: vorallem nach ner footgun
09:15:26 xq: "ja, mit den testdaten hats doch funktioniert"
09:15:35 xq: warum tut das jetzt nicht mit den realen daten?!
09:15:36 Schrompf: wat? irgendwie leben wir in völlig unterschiedlichen universen
09:15:48 Schrompf: ich habe NOCH NIE einen escape-char in nem json gesehen
09:15:51 xq: ja, was will ich denn mit dem fucking string_view?
09:15:56 Schrompf: lesen?
09:16:03 Schrompf: parsen, wenn du sicher bist, dass es ne zahl ist?
09:16:08 Schrompf: du hast doch deine files definiert?
09:16:22 Schrompf: ich verstehe dein problem nicht. json ist doch absichtlich so fucking minimal, wie's nur geht
09:16:25 Schrompf: selbst kommentare sind verboten
09:16:33 Schrompf: es ist verboten, zahlen in "" zu setzen
09:16:33 xq: https://www.json.org/json-en.html
09:16:42 xq: https://www.json.org/img/string.png
09:16:42 Schrompf: jeder scheiß ist verboten
09:16:55 xq: { "foo": "\u1234" }
09:16:56 xq: ist valid json
09:17:04 xq: ja, aber json ist nicht verkrüppelt
09:17:11 xq: json ist zwar minimal, aber du kannst jegliche daten in strings speichern
09:18:16 Schrompf: gut, das ist mir neu. dann halt node::raw() für die rohe version und node::text() gibt einen string per value zurück. parsed immer noch on demand, macht keine riesenbäume mit zigtausend allocs schon beim lesen auf
09:18:29 Schrompf: außerdem kannst du es so ECSsen.
09:18:45 Schrompf: also plump nen vector mit nodes aufmachen. und der vector ist der einzige, der allokiert
09:18:54 xq: ich mein theoretisch könntest du die strings auch in-place bearbeiten
09:19:24 xq: jedenfalls in den meisten fällen
09:19:27 Schrompf: naja... ja. aber da kommst du wieder in oben genanntes problem: manche dir zum parsen gereichten buffer sind prinzipiell nicht änderbar. z.b. file mappings
09:19:32 xq: vorausgesetzt, du bist nicht am orginaljson interessiert
09:19:37 xq: jo, gut
09:20:08 xq: file mappings sind aber auch relativ broken, hab ich mittlerweile gelernt
09:20:19 Schrompf: inwiefern?
09:20:30 xq: du hast keinerlei error handling
09:20:33 Schrompf: ich werde gerade erst warm mit denen, weil halt fäkalienschnell
09:20:37 xq: also, SEGV fangen
09:20:39 xq: ja
09:20:42 xq: aber sonst: nope
09:20:48 Schrompf: hm? wo fliegt da ein segv?
09:21:00 xq: wenn du auf das mapping zugreifst und dann ein fehler auftritt
09:21:04 Schrompf: wenn du nen file in den speicher mappst, geht der call gut oder gibt nen error code
09:21:10 xq: den kannst du nicht behandeln
09:21:26 xq: datei mappen, usbstick ziehen, böff
09:21:41 Schrompf: ah, du meinst irgendwelche errorcodes beim lesen irgendwo aus der mitte
09:22:02 joeydee joined the channel
09:22:07 xq: genau
09:22:14 joeydee: genau.
09:22:18 xq: das bekommst du halt nicht mit, sondern dein programmier schmiert fies ab
09:22:19 xq: moin joeydee
09:22:20 joeydee: Worum gehts überhaupt?
09:23:10 Schrompf: um deine mutter
09:23:16 joeydee: genau.
09:23:19 Schrompf: die schmiert ab, wenn man den usb-stick rauszieht
09:23:30 joeydee: alda, mei mudda!
09:24:18 Schrompf: ey, junge! dei kind is so hässlich, das ist im schulsport auf die ersatzbank gewählt worden und selbst dort disqualifiziert
09:25:22 joeydee: Ich hätt Lust das Kind jeden Tag mal ordentlich zu mappen!
09:25:50 xq: junge, ich unmappe dich gleich
09:27:05 joeydee: was mischst du dich ein, komm geh wieder segv fangen.
09:28:23 joeydee: (so, damit hätten wir das tägliche Soll "bissl lustig manchmal" sowie "komische Leute" in einem erfüllt)
09:28:59 Schrompf: wobei "Du fängst Dir gleich nen Segfault" eine besondere Eleganz hat, finde ich
09:29:32 joeydee: <3
09:29:38 xq: Jo, das ist schön :D
09:30:19 joeydee: SN15 ist gestern ja sauber gelandet.
09:30:27 xq: jo
09:30:30 joeydee: alos heute nacht
09:30:31 xq: gab nicht mal ne RUD
09:30:57 joeydee: whatis?
09:32:02 joeydee: aber 1 Meter weiter, und die hätten es buchstäblich in den Sand gesetzt :D
09:32:26 xq: Rapid Unscheduled Disassembly
09:32:39 joeydee: :D ah war mir nicht geläufig
09:33:32 joeydee: Wäre ein prima Game-Titel für irgendwelche Zerstörungsorgien
09:33:40 xq: hrhr
09:33:50 xq: ist wohl bei der ersten Explosion als Begriff entstanden
09:34:12 joeydee: Kommt mir auch dunkel bekannt vor, aber nicht abgespeichert.
09:36:23 joeydee: manche wollen sich schon "wenhop" aufs T-Shirt drucken lassen.
11:42:16 xq: joeydee, hast du ne minute?
11:42:42 joeydee: was gibts?
11:42:59 xq: ich denk grade über das pfad-rendering nach
11:43:12 xq: weißt du, wie das mit dem "MOVE" befehl ist?
11:43:28 xq: weil die pfade sind ja eigentlich immer geschlossen, oder?
11:45:15 joeydee: Es kann in Grafikprogrammen Pfadsegmente geben, die getrennt sind, aber dennoch zu einem gemeinsamen Pfad gehören.
11:45:39 xq: genau die mein ich
11:46:10 joeydee: Zum Rendern würde ich die als separaten Pfad behandeln
11:47:36 joeydee: Für Flächen gilt ja dasselbe: gehören 2 Kreise zu einer Fläche, und überlappen sich, werden sie nach even/odd gefüllt. Sind sie gruppiert, dann nicht.
11:48:03 xq: spannend, ich hab hier nen pfad-editor
11:48:06 xq: https://yqnn.github.io/svg-path-editor/
11:48:24 joeydee: Also ein "O" in einem Font besteht aus 2 getrennten Pfaden, gilt aber als 1 Outline.
11:48:26 xq: vergleiche bitte mal "M 0 0 H 9 V 8 H 0 Z M 7 2 L 2 2 L 2 6 L 7 6"
11:48:49 xq: und "M 0 0 H 9 V 8 H 0 Z M 2 2 L 7 2 L 7 6 L 2 6"
11:48:57 xq: ich versteh noch nicht ganz, warum das eine ein loch macht und das andere nicht
11:50:27 Hannes joined the channel
11:50:57 xq: also warum ist die winding order hier relevant
11:51:00 xq: hallo Hannes :)
11:51:16 joeydee: hi Hannes :)
11:51:28 Hannes: hallo zfx crew
11:51:47 joeydee: xq, ch muss erst mal durch die moves durchblicken und selbst aufmalen, dauert nen moment
11:52:14 xq: das rechteck außenrum fängt TL an und dreht rechtsrum
11:52:29 xq: das innere fängt auch TL an und dreht einmal links rum, ein mal rechts rum
11:52:44 Hannes: hi joggel
11:58:06 joeydee: Hm, ich bin mir nicht sicher ob dieser Editor richtig rendert, also eigentlich dürfte Winding keine Rolle spielen so wie ich es kenne.
11:58:41 xq: okay, das beruhigt mich
11:58:50 xq: weil dann würde ich folgendes tun:
11:59:04 xq: parse einen pfad in mehrere sub-pfade/polygone
11:59:20 xq: bei jedem M(ove) starte ich ein neues polygon
11:59:29 xq: beim zeichnen prüfe ich dann, ob ich in "odd" polygonen bin
12:00:21 xq: dementsprechend sollten sich zwei überlappende kreise dort füllen, wo nur ein kreis ist
12:00:25 xq: und die überlappung wieder leer sein
12:00:52 Schrompf joined the channel
12:02:01 xq: dann hab ich heute abend was zu basteln *grins*
12:02:23 xq: wenn das klappt, kann ich *alle* material design icons erfolgreich konvertieren und rendern
12:05:17 joeydee: Hab grad nochmal das SVG in Illustrator importiert, es wird dort auch gefüllt angezeigt. Scheint doch so zu sein.
12:05:45 xq: wunderlich
12:05:53 joeydee: Im Editor wird meine Winding-Order zwar immer korrigiert, d.h. ichhabe immer den Standard-Fall.#
12:06:19 xq: https://oreillymedia.github.io/Using_SVG/extras/ch06-fill-rule.html
12:06:34 joeydee: Aber ich kann andere Winding-Order forcieren, indem ich die Punkte an andere Stelle ziehe.
12:07:50 joeydee: ah, wusste nicht dass die generell quasi alles unterstützen
12:08:05 xq: "ja puh"
12:12:27 xq: naja, ich probier mal mit overlapping rum
12:12:35 xq: das mit winding order finde ich irgendwie unnötig
12:13:32 joeydee: grafisch ja, total. Ich schätze, das kommt weil verschiedene Programme das unterschiedlich behandeln, und SVG will da universell sein können.
12:14:39 xq: jo, denk ich auch
12:14:44 xq: SVG ist halt viel zu generisch
12:14:51 joeydee: Sobald ich in Illustrator übrigens zu so einem "getweakten" Pfad einen weiteren hinzufüge, passt er mir wieder die Winding-Order an. Also eigentlich buggy, bzw. so gar nicht vorgesehen.
12:15:07 xq: hrhr
12:16:09 joeydee: Ich denke, wenn du den Even-Odd-Standard interpretierst, wird das 99,9% aller Fälle stimmen.
12:17:06 joeydee: Früher gabs ja auch WMF, EMF etc. als Vektorformate. Da hatte der Import NIE sauber funktioniert sobald ein anderes Programm im Spiel war.
12:18:22 xq: joa
12:18:29 xq: "even-odd-standard"?
12:18:39 joeydee: Wenn du dein Format so definierst, dann ist es eben so. Ist ja immer eine Interpretation, wie MIDI, muss sich nicht gleich anhören.
12:18:43 xq: also "overlap von ungerade vielen subpolygonen" = "gefüllt"?
12:19:04 joeydee: ja
12:19:28 joeydee: unabhängig Winding, so würde ich es erstmal machen und den Rest der Welt ignorieren.
12:20:35 xq: jop
12:20:38 xq: dann sind wir uns da einig
12:20:45 xq: winding order ist ja auch für den artist völlig bekloppt
12:20:51 xq: das versteht doch niemand
12:20:55 xq: und erwarten würde ich es auch nicht
12:21:20 joeydee: genau, deshalb war ich ja auch überrascht, da mir der Fall noch gar nicht untergekommen ist
12:24:35 joeydee: Würde ich sowas in einem Font entdecken (beim Umwandeln in Pfade) würde ich sagen, der ist kaputt :D
12:31:39 xq: hehe
12:31:46 xq: joa, dann ist die route für heute abend gesetzt
12:45:17 joeydee: Bei mir steht heute 3D-Editor auf dem Plan.
12:46:34 xq: oho
12:46:37 xq: ich bin gespannt!
13:30:26 Magister joined the channel
13:44:20 Hannes joined the channel
13:44:33 Hannes: xq?
13:44:59 Hannes: hab das mal mit der bayer-matrix ausprobiert
13:45:11 Hannes: zumindest soweit ich es kapiert hab
13:45:13 Hannes: https://i.imgur.com/8RyfuvS.png
13:47:17 Hannes: sieht bis jetzt nicht so doll aus
13:48:19 xq: hmm
13:48:22 xq: wie viele stufen hat die matrix?
13:48:31 Hannes: 9
13:48:41 Hannes: 4*4 felder
13:49:08 xq: hm
13:49:31 xq: https://www.shadertoy.com/media/ap/85a6d68622b36995ccb98a89bbb119edf167c914660e4450d313de049320005c.png
13:49:37 xq: probier mal ne große matrix
13:49:38 xq: wie die hier
13:50:45 Hannes: der link klappt bei mir nicht
13:52:40 Hannes: Sorry!
13:52:40 Hannes: :-(
13:52:40 Hannes: We either didn't find the page you were looking for, or there was an internal error. If you encounter this problem repeatedly, feel free to send us feedback.
13:54:01 Hannes: hm
13:56:23 xq: Hannes: https://www.shadertoy.com/view/NdBSWw
13:56:40 xq: ich benutze diese textur da
14:00:09 Hannes: ok danke für den tipp, ich überleg mal weiter
14:00:50 joeydee: Hannes, das ist ja jetzt im Screenspace gerastert ... och, gerade weg, keine Geduld der Kerl ;)
14:03:28 joeydee: Naja, vielleicht liest er's nach. Was ich ausprobieren würde in Kurzform: evtl. mal im Texture-Space (so waren ja die letzten Screenshots) statt im Screenspace. Keine Bayer-Matrix, sondern gröberes Punktraster wäre auch interessant.
14:04:53 xq: jo, das ist die frage, wie man das macht
14:05:05 xq: sieht halt beides sehr unterschiedlich aus
14:05:16 xq: ich glaube, der finale look soll manga-artig sein
14:05:27 xq: da wird er glaube ich sowohl texture- als auch screenspace-effekte brauchen
14:06:34 joeydee: Da er als Ref den drawn dungeon hatte, würde ich erstmal im Texturespace experimentieren.
15:11:11 joeydee_ joined the channel
16:32:57 xq: sodele
16:32:59 xq: endlich daheme
16:54:58 Hannes joined the channel
16:55:06 Hannes: so
16:55:13 Hannes: kind ist in der badewanne
16:55:45 Hannes: ups, hab vergessen zusagen: "schwimm nicht soweit raus!"
17:15:40 xq: webe Hannes
19:46:48 xq: ach scheiße
19:47:01 xq: und ich dachte, ich wäre klug
19:47:47 xq: ich hatte bisher in TVG die eigenschaft, die benötigte menge an speicher vorher zu kennen
19:47:50 xq: das ist jetzt futsch :(
20:03:21 Magister joined the channel