00:24 <+bridge_> nop, but I can tell you to not use awx lmao 01:07 <+bridge_> nice license type https://github.com/ddnet/ServerStatus 01:07 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1515855151053930516/image.png?ex=6a30859f&is=6a2f341f&hm=3aad6786d2d8c5c876e8193685abcdafd14d123beee328d2cae298b433e8d9aa& 01:45 <+bridge_> bro 01:45 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1515864843599478967/1.jpg?ex=6a308ea6&is=6a2f3d26&hm=e63f53ec9994b8e8d9d597d2a4993d56ffebd9b7fe20bfca1387b35d39cae506& 01:45 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1515864843985616957/2.jpg?ex=6a308ea6&is=6a2f3d26&hm=7a290eb8432ae2a402979e57283bd9dbdf8dbe5c64b19bd0fbba6d2de7fd871a& 01:45 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1515864844388008148/3.jpg?ex=6a308ea6&is=6a2f3d26&hm=d1ba684b9d4fd9c0a04b406334567f861d012a9a1c8d936404a72e0580b4c01d& 01:45 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1515864844774150344/4.jpg?ex=6a308ea6&is=6a2f3d26&hm=783a692b2485a70ad5981f96a6fb2f3432fe60470dee5cba774dd0fae59f87a4& 09:12 <+bridge_> so annoying that i can never run clang-tidy locally to test if the CI would pass because my arch clang-tidy version finds a GAZZILION errors always 09:15 <+bridge_> I use https://github.com/muttleyxd/clang-tools-static-binaries for clang-format, you can download clang-tidy from there as well 09:26 <+bridge_> Such "useless parenthesis" can be even more than just useless, but dangerous :happy: 09:30 <+bridge_> @milkeeycat sounds annoying to setup but ye i should probably do that 09:30 <+bridge_> lets spam a few prs for now to reduce the noise :D 09:38 <+bridge_> most annoying one is the warning in color.h which i am not too sure about what to do and it throws every time color.h is included which is everywhere 09:38 <+bridge_> https://paste.zillyhuhn.com/kH 09:38 <+bridge_> https://github.com/ddnet/ddnet/blob/36336392ea7635cb35530b7388525347cbc8ccf4/src/base/color.h#L160 09:38 <+bridge_> https://github.com/ddnet/ddnet/blob/36336392ea7635cb35530b7388525347cbc8ccf4/src/base/color.h#L96 09:39 <+bridge_> fakin template magic 09:47 <+bridge_> is this maybe missing the "override" keyword? Otherwise this is actually shadowing 09:48 <+bridge_> 160 shadows 96, w/o any apparent reason. Just delete 160 09:49 <+bridge_> wait this is just a wrapper which does nothing 09:49 <+bridge_> override requires the function member to be virtual 09:49 <+bridge_> you really could just delete the Pack function here right? 09:49 <+bridge_> override requires the function member to be virtual (and therefore not constexpr :happy:) 09:49 <+bridge_> it just calls the base function anyways 09:50 <+bridge_> and should be visible 09:52 <+bridge_> Yep. 09:55 <+bridge_> The whole class is a bit strange â€Ķ 09:57 <+bridge_> chillerdragn if you want to flex around there you can replace this whole union stuff by std::variant, don't use `union` 09:57 <+bridge_> chillerdragon if you want to flex around there you can replace this whole union stuff by std::variant, don't use `union` 09:58 <+bridge_> I am sure this is very old, where std::variant wasn't a thing 09:58 <+bridge_> I remember reading the color class 15 years ago already 09:59 <+bridge_> and this whole pseudo-CRBP exists for completely no reason, classes can have function member templates w/o being class templates 09:59 <+bridge_> I see we often use the same colors at multiple spaces, like menu color or others - do you think it would make sense to add a list of color constants? 10:01 <+bridge_> akshually this whole thingy doesn't do even what it's meant to do â€Ķ 10:09 <+bridge_> `requires(!std::is_same_v)` can't be very old :> 10:10 <+bridge_> and I didn't blame the original author, but we have better alternatives now 10:10 <+bridge_> doesn't mean it didn't change with time :p 10:11 <+bridge_> and if you want to rewrite it using std::variant, go ahead - I'd just make sure that this is already available for the minimal gcc version we support 10:12 <+bridge_> nah this came with cpp17 so go ahead 😄 10:17 <+bridge_> just write me if you do, otherwise I might suddenly write motivation again xD 10:17 <+bridge_> just write me if you do, otherwise I might suddenly find motivation again xD 10:28 <+bridge_> I'm not even sure if it's a good idea to solve this via inheritance, traits would be another approach 11:30 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1516012086751268914/image.png?ex=6a3117c7&is=6a2fc647&hm=bf49405786e79a5e2adf234d607e48ac1b0b0dce93e8e50c548cd68c8bec4a0e& 11:30 <+bridge_> erm â€Ķ 11:31 <+bridge_> shouldn't it be more like this? 11:31 <+bridge_> ~~~cpp 11:31 <+bridge_> template 11:32 <+bridge_> constexpr H minimum(H const& h, T... t) 11:32 <+bridge_> { 11:32 <+bridge_> if constexpr (sizeof... (t) > 0) 11:32 <+bridge_> return std::min(h, minimum(t...)); 11:32 <+bridge_> else 11:32 <+bridge_> return h; 11:32 <+bridge_> }~~~ 11:32 <+bridge_> shouldn't it be more like this? 11:32 <+bridge_> ```cpp 11:32 <+bridge_> template 11:32 <+bridge_> constexpr H minimum(H const& h, T... t) 11:32 <+bridge_> { 11:32 <+bridge_> if constexpr (sizeof... (t) > 0) 11:32 <+bridge_> return std::min(h, minimum(t...)); 11:32 <+bridge_> else 11:32 <+bridge_> return h; 11:32 <+bridge_> }``` 11:46 <+bridge_> I guess more than 3 arguments is not that wanted, doing this recursive might also not be the best decision 11:47 <+bridge_> well maybe this doesn't matter since it's constexpr 11:50 <+bridge_> Code duplication is hardly ever wanted at all 11:50 <+bridge_> `constexpr` only means "it's possible to evaluate this at compile time, there are no guarantees as to whether this is done or not" 11:51 <+bridge_> â€Ķ and it's tail recursion, it would be curious if the compiler doesn't unfold it 11:53 <+bridge_> + the current solution does call by value, not good 11:54 <+bridge_> the current thing looks just fine for the things it's likely used with 11:54 <+bridge_> ints and floats 11:55 <+bridge_> we're not trying to be a general purpose template library, we do what we need for our purposes 11:55 <+bridge_> why would you use a reference on an integer? xd 11:56 <+bridge_> me when I don't write 200 lines of template metaprogramming to take the maximum of three integers 11:56 <+bridge_> 1. It copies, calls by reference are easier to optimize out 11:56 <+bridge_> 2. a reference is (if at all) 8 bytes, float and double are larger 11:57 <+bridge_> same reasoning, there is no guarantee 11:57 <+bridge_> a reference is 8 bytes on 64bit machines, a float is 4bytes 11:57 <+bridge_> idk what you are yapping 11:57 <+bridge_> the compiler is not stupid enough to not recognize a simple function like that 11:58 <+bridge_> yes, hopefully 12:02 <+bridge_> Now you have your answer ↑ 14:32 <+bridge_> `ChillerDragon:pr_nullptrnullabnullnotNULLornul` 14:32 <+bridge_> you ok? 😛 14:33 <+bridge_> ðŸĪŠ 14:34 <+bridge_> its replacing 0 with nullptr in antibot\_null.cpp so that branch name is pretty descriptive if you ask me 14:36 <+bridge_> i have been using funny branch names for a while since nobody seems to be offended by it so its my canvas where i do let my creativity flurish 14:36 <+bridge_> i dont think flurish is a word 14:37 <+bridge_> on this beautiful day I'd like to share with you my favorite chiller's commit name https://github.com/ChillerDragon/json/commit/64762085555c6cd58e070f0856de478211360b92 14:37 <+bridge_> xd 14:38 <+bridge_> not sure if assa noticed the branch name he merged here https://github.com/ddnet/ddnet/pull/12293 15:03 <+bridge_> I ignore branch names as long as ppl ignore mine 15:04 <+bridge_> I wonder if wuthering is a reference about a game or about fish 15:51 <+bridge_> probably: https://www.imdb.com/title/tt32897959/ 15:55 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1516078719716950188/image.jpg?ex=6a3155d6&is=6a300456&hm=289a5c861595a26a9c1cbd5c9d5b585a5e3e21bb402505703edb767e3d2e807d& 15:55 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1516078720140710139/image.jpg?ex=6a3155d6&is=6a300456&hm=452c55b58abad3a3f69d638e41c6818071038141b1ca22d9b06dc068f9836fc3& 15:58 <+bridge_> more like the book though 🙂 16:20 <+bridge_> preferrably provide an econ alternative that is not based on telnet but encrypted :'/ 16:21 <+bridge_> or encrypted telnet 👀 16:25 <+bridge_> `shell: "echo '{{ command }}' > {{ deploy_path }}/servers/{{ server.id }}.fifo"` ðŸĨē 16:38 <+bridge_> that's no better than current econ. you need to be connected to the server and run on localhost mire or less. 16:38 <+bridge_> more* 16:39 <+bridge_> maybe with some sh shenanigans feasible 16:39 <+bridge_> ssh 16:40 <+bridge_> ssh + log parsing (where econ is actually in its current form the better solution) 16:45 <+bridge_> econ over TLS or similar would be really neat indeed, but i'm unsure how applicable it is 16:46 <+bridge_> maybe its something that could be done with QUIC over UDP 17:35 <+bridge_> the problem with econ isn't the connection method, sure it can be improved but that's not what makes it pretty much useless 17:35 <+bridge_> it's the completely unstructured and uncorrelated input and output 17:36 <+bridge_> you send a command, you have almost no way to figure out what the result of the command is reliably 17:41 <+bridge_> Create another FIFO/Named pipe in the opposite direction where the server writes the command output to? :justatest: 17:52 <+bridge_> econ with extra steps 👀 17:53 <+bridge_> :kek: 17:54 <+bridge_> but via ssh it'd at least be secure without ddnet devs maintaining it 17:55 <+bridge_> how about a more general approach: let the client use an arbitrary tag (let's say 5 letters of their choice) and every response to this request gets prefixed with this tag? 17:56 <+bridge_> like `tagged_status 4711` 17:56 <+bridge_> ```4711 blupp 17:56 <+bridge_> 4711 blah 17:56 <+bridge_> 4711 foo``` 17:56 <+bridge_> I can remember it working well with /who requests on IRC back in these days 17:56 <+bridge_> FIFO over SSH is easier than implementing SSH in the server 17:56 <+bridge_> that's what i am saying 17:57 <+bridge_> you use fifo files over ssh without having to maintain the ssh implementation 17:57 <+bridge_> which would be neat 17:58 <+bridge_> Yeah, that's also what I was thinking. Associate the command/session with a UUID, then write output for the specific command/session to a file/socket/FIFO/pipe and include the UUID to identify the session. 17:59 <+bridge_> That's already how DDNet works 17:59 <+bridge_> 👀 output as well 18:00 <+bridge_> hmmm are there any example docs? 18:00 <+bridge_> ddnet-scripts is the public part 18:01 <+ChillerDragon> just bake ssh server into ddnet server 18:01 <+bridge_> The wrapper script would have to pass that back over SSH too when the output can be identified 18:06 <+bridge_> With "more general" I meant using it for rcon too. This would allow the client to issue multiple concurrent requests instead of artificially serializing them. And most of the multiline response commands don't have a clear end of reply marker 18:06 <+bridge_> With "more general" I meant using it for rcon too. This would allow the client to issue multiple concurrent requests instead of artificially serializing them. And most of the multiline response commands don't have a clear-end-of-reply marker 18:07 <+bridge_> rn I'm parsing the response based on a line pattern, this has limitations :happy: 18:49 <+bridge_> a more general way of sending secure traffic could also be helpful if it's extended to chat (kog /login comes to mind, maybe rcon credential transport also fall into this) 18:50 <+bridge_> you could already do this if you echo smth before your commands i guess 18:51 <+bridge_> structured logging is much needed though 18:53 <+bridge_> I'm using a modified client, I grab the stuff from rcon itself hooked into `CGameClient::OnRconLine` 18:53 <+bridge_> tbh fifo over ssh is the easiest we could implement without much hussle :D 19:35 <+bridge_> @heinrich5991 LOTM 19:36 <+bridge_> Would be neat to have separate netmessages for rendering structured commands and output in the console. Quick sketch with paint. 19:36 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1516134219183816794/image.png?ex=6a318986&is=6a303806&hm=c6ce58ab0185cf577b29ea49ca35aa3c1028c1585ddfd6401602e898cb89ddf0& 19:36 <+bridge_> like a separate NET_MSG with further subdivision? 19:37 <+bridge_> I thought about something like this for the account system :happy: 19:37 <+bridge_> shouldnt this area collapse up maybe? useful for f1 too 19:37 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1516134628967059517/image.png?ex=6a3189e7&is=6a303867&hm=6f0d5e23bb83adac9d489b93d2eee4ba5aff406a565a432919d01a8789b0523b& 19:38 <+bridge_> Like the server tells the client that a command was executed. This includes the meta data like key, command and channel (rcon, econ, FIFO, etc.) in different fields. Each command group has some UUID so the server can add messages specifically to each block. Could also indicate that the block is fully received. 19:39 <+bridge_> Yeah, I also have this on my TODO list for a console rework so the completion options work like in the editor. 19:39 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1516135158418374777/image.png?ex=6a318a66&is=6a3038e6&hm=b639271b1baeec69ea4db804af23ee72b4dc5c07e1e996ffa3ce23d369cef402& 19:40 <+bridge_> hmm 19:41 <+bridge_> Sounds like it's almost too late to shift the config variables and commands to json :s 19:54 <+bridge_> Would be nice to have something like json that the client can render however it likes if it knows it 21:08 <+bridge_> That could be added on top of this relatively easily. Add a `format` property to the netmessage to differentiate between `plain` and `json`. With `json` format, the client parses the output as json, with the json data expected to contain a more detailed `"format"` attribute that specifies the exact format (e.g. table of bans, antibot specific output etc.). If the command output exceeds the size of one netmessage, the output is continued in separat 21:15 <+bridge_> hey 21:16 <+bridge_> i need help 21:17 <+bridge_> i cant join some fng servers with normal github build of 19.8.3 and 19.8.2 21:17 <+bridge_> what should i do 21:21 <+bridge_> @_noby :angy: 21:21 <+bridge_> why can't you join 21:22 <+bridge_> since your version? 21:25 <+bridge_> :thonk: 21:26 <+bridge_> I remembered some useless anti-bot system would block some versions, not sure which fng server you join. 21:43 <+bridge_> idk it just crashes 21:44 <+CN-Bridge> I guess it's snapshot issue. D: 21:45 <+bridge_> isnt 19.8.2 alr released? 21:46 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1516167092636877011/image.png?ex=6a31a823&is=6a3056a3&hm=fb48055b48d99437880904e94ec7016a2641c6218dd97ffe3aa11c4e8a213a8f& 21:47 <+CN-Bridge> not sure if the issue it is 22:12 <+bridge_> @robyt3 I have a question about #7544, do you imagine all binds be layout aware or only some of them/maybe ones outside of the game itself(like only in the editor) 22:12 <+bridge_> @robyt3 I have a question about https://github.com/ddnet/ddnet/issues/7544, do you imagine all binds be layout aware or only some of them/maybe ones outside of the game itself(like only in the editor) 22:12 <+bridge_> @robyt3 I have a question about https://github.com/ddnet/ddnet/issues/7544, do you imagine all binds be layout aware or only some of them/maybe ones outside of the game itself(like only in the editor) 22:12 <+bridge_> @robyt3 I have a question about https://github.com/ddnet/ddnet/issues/7544, do you imagine all binds be layout aware or only some of them/maybe ones outside of the game itself(like only in the editor) 22:22 <+bridge_> I think we don't want to change how it works for binds by default. The only case where it matters currently are Ctrl+Z/Y hotkeys to undo/redo. Would be nice if the UI could be agnostic to the layout. https://github.com/MilkeeyCat/ddnet/commit/eb912a49188ea26121f889860bac0683451d409b seems to work for me to correctly use Ctrl+Z/Y with `inp_translated_keys 1` whereas the setting previous did nothing. 23:19 <+bridge_> I don't know if you investigated why current `inp_translated_keys 1` doesn't work, but here's my 2 cents about this. 23:19 <+bridge_> 23:19 <+bridge_> SDL under the hood has [`keymap`](https://github.com/libsdl-org/SDL/blob/1414dbf29d272f15a755afc7eee8242ad89b7226/src/events/SDL_keyboard.c#L49) array, its size is `SDL_NUM_SCANCODES` and it stores `SDL_Keycode`s. In other words it's an array that allows to look up what keycode corresponds to what scancode and vice versa. 23:19 <+bridge_> 23:19 <+bridge_> On QWERTY layout, `keycode[SDL_SCANCODE_Y]` is `y` and `keycode[SDL_SCANCODE_Z]` is `z`. 23:19 <+bridge_> On QWERTZ layout, `keycode[SDL_SCANCODE_Y]` is `z` and `keycode[SDL_SCANCODE_Z]` is `y`. 23:19 <+bridge_> 23:19 <+bridge_> Current implementation of `inp_translated_keys` uses [`SDL_GetScancodeFromKey`](https://github.com/libsdl-org/SDL/blob/1414dbf29d272f15a755afc7eee8242ad89b7226/src/events/SDL_keyboard.c#L1163-L1175)a to get the scancode from the keycode. 23:19 <+bridge_> If you look at the code, you can see that it simply iterates over this `keymap` array and checks if `keymap[scancode]` equals to the passed keycode. 23:19 <+bridge_> 23:20 <+bridge_> On QWERTY layout, `SDL_GetScancodeFromKey(SDLK_y)` will return `SDL_SCANCODE_Y` because `keymap[SDL_SCANCODE_Y]` is going to be the place that has `SDLK_y` as a value. 23:20 <+bridge_> On QWERTZ layout, `SDL_GetScancodeFromKey(SDLK_y)` will return `SDL_SCANCODE_Z` because `keymap[SDL_SCANCODE_Z]` is going to be the place that has `SDLK_y` as a value. 23:26 <+bridge_> When pressing `Y` on my QWERTZ keyboard I get `sym=121 scancode=29 scancode-from-key=29`. When pressing `Z` I get `sym=122 scancode=28 scancode-from-key=28`.