00:20 <+bridge> [ddnet] https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/ 00:21 <+bridge> [ddnet] @Ryozuki ah 00:21 <+bridge> [ddnet] u first xD 00:22 <+bridge> [ddnet] yep 00:22 <+bridge> [ddnet] :BASEDHALT: 00:22 <+bridge> [ddnet] Is there a way to know when the current map is done loading? 01:28 <+bridge> [ddnet] hum client side, i think the different components get their "onConnecting" or sth like that method called 01:48 <+bridge> [ddnet] I'm trying to get access to tile data for rendering things but if I do it while the map is still loaded it crashes, maybe there is a better way? 01:48 <+bridge> [ddnet] ```c++ 01:48 <+bridge> [ddnet] CMapItemLayerTilemap *pTMap = (CMapItemLayerTilemap *)pLayer; 01:48 <+bridge> [ddnet] CTile *pTiles = (CTile *)GameClient()->Layers()->Map()->GetData(pTMap->m_Data); 01:48 <+bridge> [ddnet] ``` 01:48 <+bridge> [ddnet] I'm trying to get access to tile data for rendering things but if I do it while the map is still loaded it crashes, maybe there is a better way? 01:48 <+bridge> [ddnet] ```cpp 01:48 <+bridge> [ddnet] CMapItemLayerTilemap *pTMap = (CMapItemLayerTilemap *)pLayer; 01:48 <+bridge> [ddnet] CTile *pTiles = (CTile *)GameClient()->Layers()->Map()->GetData(pTMap->m_Data); 01:48 <+bridge> [ddnet] ``` 01:48 <+bridge> [ddnet] I'm trying to get access to tile data for rendering things but if I do it while the map is still loading it crashes, maybe there is a better way? 01:48 <+bridge> [ddnet] ```cpp 01:48 <+bridge> [ddnet] CMapItemLayerTilemap *pTMap = (CMapItemLayerTilemap *)pLayer; 01:48 <+bridge> [ddnet] CTile *pTiles = (CTile *)GameClient()->Layers()->Map()->GetData(pTMap->m_Data); 01:48 <+bridge> [ddnet] ``` 02:12 <+bridge> [ddnet] You probably need a null check somewhere 02:33 <+bridge> [ddnet] who's the god of antlr that will help me 15:44 <+bridge> [ddnet] just an idea for the new hud, but maybe it's not worth it: a indicator which weapon you have selected while you're frozen 15:44 <+bridge> [ddnet] just an idea for the new hud, but maybe it's not worth it:: an indicator which weapon you have selected while you're frozen 15:45 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/974306260558184448/unknown.png 16:19 <+bridge> [ddnet] yeah its just funny that the first issue is directly a meme xd 16:31 <+bridge> [ddnet] @Ryozuki one of the dxvk maintainers already did patches xd 16:31 <+bridge> [ddnet] https://github.com/NVIDIA/open-gpu-kernel-modules/pull/61 16:32 <+bridge> [ddnet] now they get the real pros xd 16:33 <+bridge> [ddnet] lmao completly useless changes tho xd 16:33 <+bridge> [ddnet] https://github.com/NVIDIA/open-gpu-kernel-modules/pull/79/files 16:33 <+bridge> [ddnet] 16:33 <+bridge> [ddnet] wttf xD 16:34 <+bridge> [ddnet] who tried to cheat code lines here xDD 16:35 <+bridge> [ddnet] 99% "fix typos" prs xdd 16:35 <+bridge> [ddnet] they all want their early contribution 16:35 <+bridge> [ddnet] Anime avatar 16:36 <+bridge> [ddnet] xD probably automatically added by a bot fot the case CONFIG_I2C is not defined 16:36 <+bridge> [ddnet] xD probably automatically added by a bot for the case CONFIG_I2C is not defined 16:44 <+bridge> [ddnet] can sb. tell me where the ddnet client looks for sounds on my system? I am on windows 16:45 <+bridge> [ddnet] %appdata%/teeworlds/audio/ 16:45 <+bridge> [ddnet] if you mean the soundpack 16:45 <+bridge> [ddnet] ah under mapres 16:45 <+bridge> [ddnet] no i mean for mapping 16:45 <+bridge> [ddnet] but thank you πŸ˜„ 17:11 <+bridge> [ddnet] does someone have the `Clang-Tidy` extension on vs-code up and running for ddnet code? I can not figure out to configure it correct xD 17:12 <+bridge> [ddnet] does someone have the `Clang-Tidy` extension on vs-code up and running for ddnet code? I can not figure out how to configure it correct xD 17:13 <+bridge> [ddnet] yes 17:13 <+bridge> [ddnet] i use clangd 17:14 <+bridge> [ddnet] https://github.com/clangd/vscode-clangd 17:14 <+bridge> [ddnet] clang-tidy is really slow, I don't even run it locally 17:15 <+bridge> [ddnet] (this extension just directly tells u where the clang tidy issues are) 17:15 <+bridge> [ddnet] they dont get auto fixed 17:15 <+bridge> [ddnet] but u'll still directly see problems 17:16 <+bridge> [ddnet] mh the Clang-Tidy extension runs fast πŸ˜„ but it does not use the cmake command json so it does not find the imports 17:16 <+bridge> [ddnet] I will try clangd 17:18 <+bridge> [ddnet] can confirm clangd works very well on most projects. With cmake it uses the compile_commands.json to figure out exactly how the project is built so it knows about your dependencies etc. 17:19 <+bridge> [ddnet] Clang-Tidy can also use the compile_commands.json xD but I can not get it to work xD ^^ 17:23 <+bridge> [ddnet] rustfmt runs pretty fast 17:23 <+bridge> [ddnet] another reason to use rust 17:23 <+bridge> [ddnet] :monkalaugh: 17:23 <+bridge> [ddnet] but ye 17:23 <+bridge> [ddnet] clang tidy (or the script) is unusually slow 17:23 <+bridge> [ddnet] like painfully slow 17:23 <+bridge> [ddnet] yeah but rust-analyzer tough not so fast 17:23 <+bridge> [ddnet] bcs the script also fixes, so it has to run single threaded 17:24 <+bridge> [ddnet] else it destroys the headers 17:24 <+bridge> [ddnet] u can also run clang-tidy mt 17:24 <+bridge> [ddnet] well rust-analyzer does way way more than clangd does 17:24 <+bridge> [ddnet] and rust is a more complex language to analyze 17:24 <+bridge> [ddnet] did u know rust-analyzer is seen as a top notch language server among the language servers 17:25 <+bridge> [ddnet] so I have now clangd running instead of clang-tidy. How do I tell it the correct compile_commands.json 17:25 <+bridge> [ddnet] the github says it uses .clang-tidy file directly for clang-tidy 17:25 <+bridge> [ddnet] i tried clangd with vscode and it sucked, but i think its more a vscode thing, 17:25 <+bridge> [ddnet] clangd with neovim worked flawlessly 17:25 <+bridge> [ddnet] "Most clang-tidy checks are supported (these can be enabled using a .clang-tidy file)." 17:26 <+bridge> [ddnet] so it should just work in ddnet 17:26 <+bridge> [ddnet] make a symlink to the root dir 17:26 <+bridge> [ddnet] aka the dir where .git is located 17:26 <+bridge> [ddnet] what sucks about it? 17:26 <+bridge> [ddnet] i use it since years 17:26 <+bridge> [ddnet] never had any problem 17:26 <+bridge> [ddnet] @Not Keks idk it didnt work well 17:26 <+bridge> [ddnet] so i just used the microsoft bullshit 17:26 <+bridge> [ddnet] but i mostly use neovim for c++ 17:27 <+bridge> [ddnet] xD a symlink from where to where? 17:27 <+bridge> [ddnet] to the compile_commands.json 17:27 <+bridge> [ddnet] ? 17:28 <+bridge> [ddnet] ye 17:28 <+bridge> [ddnet] in ur build folder 17:28 <+bridge> [ddnet] compile_commands.json -> build/compale_commands.json 17:29 <+bridge> [ddnet] @Ryozuki clang-tidy is more like clippy 17:30 <+bridge> [ddnet] clang-format is like rustfmt 17:30 <+bridge> [ddnet] i also use tree-sitter for enhanced syntax highlight 17:30 <+bridge> [ddnet] but sometimes it goes bonkers 17:30 <+bridge> [ddnet] https://tree-sitter.github.io/tree-sitter/ 17:30 <+bridge> [ddnet] ah ok 17:30 <+bridge> [ddnet] well clang-format is rly slow too 17:30 <+bridge> [ddnet] from my experience running the script on ddnet 17:30 <+bridge> [ddnet] but why would u run the script that checks all files 17:30 <+bridge> [ddnet] why not? 17:30 <+bridge> [ddnet] ofc its slow 17:31 <+bridge> [ddnet] to check all files 17:31 <+bridge> [ddnet] on rust i run cargo fmt and its super fast 17:31 <+bridge> [ddnet] and it formats all files 17:31 <+bridge> [ddnet] but that scriot run it on all files... you only have to run it on the file you jsut edit 17:31 <+bridge> [ddnet] it probs saves what is formatted or smth 17:31 <+bridge> [ddnet] but that script run it on all files... you only have to run it on the file you jsut edit 17:31 <+bridge> [ddnet] same stuff 17:31 <+bridge> [ddnet] but that script run it on all files... you only have to run it on the file you just edit 17:31 <+bridge> [ddnet] cargo fmt is run on all files too 17:31 <+bridge> [ddnet] c++ parsing is hard, you can't get the syntax tree without type checking 17:31 <+bridge> [ddnet] rust parsing is easy in comparison 17:32 <+bridge> [ddnet] that may be it 17:32 <+bridge> [ddnet] i heard parsing c++ headers is like the abomination 17:32 <+bridge> [ddnet] clang-tidy does way more than just parsing, clang-format only parses and that's fast enough 17:33 <+bridge> [ddnet] lmao this commit 17:33 <+bridge> [ddnet] sometimes i think this is more a toy project to them than something serious 17:34 <+bridge> [ddnet] why are there so many newlines 17:34 <+bridge> [ddnet] still does not work 17:34 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/974333707395682364/unknown.png 17:34 <+bridge> [ddnet] u called cmake with the json output right 17:34 <+bridge> [ddnet] tbh i think they used their 1970 code base that they used for linux even if linux wasnt invented, and now they enjoy linux ppl clean it up 17:34 <+bridge> [ddnet] 17:34 <+bridge> [ddnet] good move nvidia xd 17:35 <+bridge> [ddnet] @c0d3d3v just setup neovim 17:35 <+bridge> [ddnet] ezpz 17:36 <+bridge> [ddnet] what are u even trying to do 17:36 <+bridge> [ddnet] just use the cmake extension 17:36 <+bridge> [ddnet] and let that handle everything 17:36 <+bridge> [ddnet] neovim advantages: low ram, no electron bloat, you look cool while using it, enhanced productivity if u learn enough 17:36 <+bridge> [ddnet] no mouse? 17:36 <+bridge> [ddnet] yeah mouse is bloat 17:36 <+bridge> [ddnet] without mouse coding sucks 17:36 <+bridge> [ddnet] who needs low ram if he has 1tb swap 17:36 <+bridge> [ddnet] also learn to use vim macros 17:36 <+bridge> [ddnet] its like playing teeworlds without cursor 17:37 <+bridge> [ddnet] record macros etc 17:37 <+bridge> [ddnet] u can rly save a lot of time 17:37 <+bridge> [ddnet] nah 17:37 <+bridge> [ddnet] speed is the only argument against vscode 17:37 <+bridge> [ddnet] 17:37 <+bridge> [ddnet] tho once it runs u wont notice xd 17:37 <+bridge> [ddnet] u rly dont need the mouse 17:37 <+bridge> [ddnet] u dont need, but u want 17:38 <+bridge> [ddnet] i can also use no keyboard 17:38 <+bridge> [ddnet] xd 17:38 <+bridge> [ddnet] ye im waiting the day i can code mentally 17:38 <+bridge> [ddnet] ok that would be amazing ngl 17:38 <+bridge> [ddnet] then i can code in my bed 17:38 <+bridge> [ddnet] i could code if for some reason i become paralized 17:39 <+bridge> [ddnet] idk why i always think, what would i do if i become paralized 17:39 <+bridge> [ddnet] it would be so boring 17:39 <+bridge> [ddnet] xd 17:39 <+bridge> [ddnet] @heinrich5991 any idea what's wrong with #5069? 17:39 <+bridge> [ddnet] https://github.com/ddnet/ddnet/pull/5069 17:39 <+bridge> [ddnet] hard question xd 17:39 <+bridge> [ddnet] rofl, after installing cmake 17:39 <+bridge> [ddnet] guess u change mentally with your body change 17:39 <+bridge> [ddnet] my build chain is broken 17:39 <+bridge> [ddnet] the same as if someday i become blind lol 17:39 <+bridge> [ddnet] thats terrifying actually 17:40 <+bridge> [ddnet] cmake insists ENGINE_SHARED is not alphabetically sorted, it wasn't I sorted it, it still doesn't like it. It also insists it doesn't contain all the files, but ls -la confirms it does 17:40 <+bridge> [ddnet] I'm at a bit of a loss 17:40 <+bridge> [ddnet] rofl, after installing the cmake extension 17:40 <+bridge> [ddnet] idk, I'll check locally 17:40 <+bridge> [ddnet] these are my plugins 17:40 <+bridge> [ddnet] 17:40 <+bridge> [ddnet] delete build dir 17:40 <+bridge> [ddnet] use a clean dir 17:40 <+bridge> [ddnet] 17:40 <+bridge> [ddnet] close vs code restart 17:40 <+bridge> [ddnet] 17:40 <+bridge> [ddnet] just worksℒ️ 17:40 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/974335332118065162/unknown.png 17:40 <+bridge> [ddnet] should I fix it? didn't dare touch the branch because I asked you to base your branch off of it 17:41 <+bridge> [ddnet] imagine using a debuger 17:41 <+bridge> [ddnet] print goes brr 17:41 <+bridge> [ddnet] dbg_msg ftw 17:41 <+bridge> [ddnet] xd 17:42 <+bridge> [ddnet] lldb is best 17:42 <+bridge> [ddnet] 17:42 <+bridge> [ddnet] but sometimes it also sucks comared to gdb 17:43 <+bridge> [ddnet] You can also tell me what's wrong with it and I can do it too πŸ˜„ 17:43 <+bridge> [ddnet] @Learath2 works locally when I sort it 17:43 <+bridge> [ddnet] can you send me the new error? 17:43 <+bridge> [ddnet] is there something like this https://github.com/tokio-rs/loom but for c++? 17:43 <+bridge> [ddnet] > Loom is a testing tool for concurrent Rust code. It runs a test many times, permuting the possible concurrent executions of that test under the C11 memory model. It uses state reduction techniques to avoid combinatorial explosion. 17:44 <+bridge> [ddnet] @Learath2 would you be available in the evening to brainstorm the game server masterserver selection algorithm? 17:44 <+bridge> [ddnet] Sure 17:44 <+bridge> [ddnet] that's one of the few things still missing from the http masters PR 17:44 <+bridge> [ddnet] :o 17:45 <+bridge> [ddnet] why would you use CodeLLDB instead of default gdb? 17:45 <+bridge> [ddnet] https://paste.pr0.tips/s3 17:46 <+bridge> [ddnet] I wonder if I'm sorting it "wrong" or maybe a locale issue 17:46 <+bridge> [ddnet] it's supposed to be sorted by ASCII order probably 17:46 <+bridge> [ddnet] can you send the list as well? 17:46 <+bridge> [ddnet] bcs it prints variables more pritty and generally has better handling 17:46 <+bridge> [ddnet] 17:46 <+bridge> [ddnet] jump to a next instruction (e.g. in a for loop) instead full line 17:46 <+bridge> [ddnet] 17:46 <+bridge> [ddnet] dunno maybe there is a plugin that works better for gdb, but i mostly use clang for dev anyway 17:47 <+bridge> [ddnet] https://paste.pr0.tips/wl 17:47 <+bridge> [ddnet] I guess vscode is using a different kind of sort :/ 17:48 <+bridge> [ddnet] network.cpp goes above the network_* stuff 17:48 <+bridge> [ddnet] Yeah, apparently vscode uses `localeCompare` so not ascii order 17:49 <+bridge> [ddnet] i think there are gdb plugins for that stuff 17:50 <+bridge> [ddnet] anyway like all llvm tools they copy the behavior of the GNU tools mostly anyway 17:50 <+bridge> [ddnet] @c0d3d3v if u try it out make sure to set the launch: expressions to native instead of simple tho 17:50 <+bridge> [ddnet] 17:50 <+bridge> [ddnet] dunno who thought this is a sane default value xd 17:50 <+bridge> [ddnet] sort it with vim 17:51 <+bridge> [ddnet] @heinrich5991 getting it in the proper order indeed fixes it, is it a cmake quirk that it's also reporting files are missing totally when they are just out of order? 17:51 <+bridge> [ddnet] how does your launch.json look like? With these extension my do not work anymore 17:52 <+bridge> [ddnet] @Learath2 this is "heinrich5991's implementation quirk" 17:52 <+bridge> [ddnet] ```json 17:52 <+bridge> [ddnet] 17:52 <+bridge> [ddnet] "configurations": [ 17:52 <+bridge> [ddnet] { 17:52 <+bridge> [ddnet] "type": "lldb", 17:52 <+bridge> [ddnet] "request": "launch", 17:52 <+bridge> [ddnet] "name": "Launch", 17:52 <+bridge> [ddnet] "program": "${workspaceFolder}/build/DDNet", 17:52 <+bridge> [ddnet] "args": [ "dbg_gfx 0" ], 17:52 <+bridge> [ddnet] "cwd": "${workspaceFolder}/build" 17:52 <+bridge> [ddnet] }, 17:52 <+bridge> [ddnet] { 17:52 <+bridge> [ddnet] "type": "lldb", 17:52 <+bridge> [ddnet] "request": "launch", 17:52 <+bridge> [ddnet] "name": "Launch server", 17:52 <+bridge> [ddnet] "program": "${workspaceFolder}/build/DDNet-Server", 17:52 <+bridge> [ddnet] "args": [ "dbg_gfx 0" ], 17:52 <+bridge> [ddnet] "cwd": "${workspaceFolder}/build" 17:52 <+bridge> [ddnet] }, 17:52 <+bridge> [ddnet] { 17:52 <+bridge> [ddnet] "name": "(gdb) Starten", 17:52 <+bridge> [ddnet] "type": "cppdbg", 17:52 <+bridge> [ddnet] "request": "launch", 17:52 <+bridge> [ddnet] "program": "${workspaceFolder}/build/DDNet", 17:53 <+bridge> [ddnet] "args": [ "dbg_gfx 0" ], 17:53 <+bridge> [ddnet] "stopAtEntry": false, 17:53 <+bridge> [ddnet] "cwd": "${workspaceFolder}/build", 17:53 <+bridge> [ddnet] //"environment": [ { "name":"VK_INSTANCE_LAYERS", "value":"VK_LAYER_MESA_overlay"} ], 17:53 <+bridge> [ddnet] "externalConsole": false, 17:53 <+bridge> [ddnet] "MIMode": "gdb", 17:53 <+bridge> [ddnet] "setupCommands": [ 17:53 <+bridge> [ddnet] holy 17:53 <+bridge> [ddnet] @Learath2 this is a "heinrich5991's implementation quirk" 17:53 <+bridge> [ddnet] rip irc 17:53 <+bridge> [ddnet] ircdead 17:53 <+bridge> [ddnet] first two are lldb 17:53 <+bridge> [ddnet] then one older gdb 17:53 <+bridge> [ddnet] then attach to wine debugger 17:53 <+bridge> [ddnet] @Not Keks please post these long snippets elsewhere, destroys the flow of the chat 17:53 <+bridge> [ddnet] Why does `en_US.utf8` even have a different order for _ and . anyway? :/ 17:53 <+bridge> [ddnet] it probably skips these instead @Learath2 17:53 <+bridge> [ddnet] treats them as the same 17:53 <+bridge> [ddnet] are u always mad to me btw? 17:53 <+bridge> [ddnet] oh drama 🍿 17:54 <+bridge> [ddnet] wait you use it only to run the debugger? and how do you start the build task? I used "preLaunchTask": "compile DDNET" but that does not get triggerd anymore 17:54 <+bridge> [ddnet] if u have the cmake extension 17:54 <+bridge> [ddnet] ctrl-shift-p 17:54 <+bridge> [ddnet] then compile 17:55 <+bridge> [ddnet] if u dont want to run just build just press F7 17:55 <+bridge> [ddnet] no, I would have told anyone else as well 17:55 <+bridge> [ddnet] its 20 lines thats nothing 17:55 <+bridge> [ddnet] it was my whole screen 17:55 <+bridge> [ddnet] just block me then u dont see it 17:56 <+bridge> [ddnet] why would I block you? 17:56 <+bridge> [ddnet] I want to read what you're saying ^^ 17:56 <+bridge> [ddnet] it was just basically as "clear page" for the chat for me, it takes more than a screen in my discord 17:56 <+bridge> [ddnet] and I had to scroll around to see the discussion 17:59 <+bridge> [ddnet] xD In most cases I want both ^^ build and then run 18:02 <+bridge> [ddnet] at least cland seems to be happy 18:02 <+bridge> [ddnet] at least clangd seems to be happy 18:05 <+bridge> [ddnet] thank you for your help ^^ I guess it works now, And I found out how to build and the run. 18:11 <+bridge> [ddnet] curl documentation is really meh, `curl_multi_poll` returns a `CURLMcode` ,doesn't tell you what codes it can return, nor does it tell you which are fatal 18:15 <+bridge> [ddnet] curlmcode is listed here, the link is just not linking to a subheading I think: https://curl.se/libcurl/c/libcurl-errors.html 18:16 <+bridge> [ddnet] so it can return all the curlm_* 18:25 <+bridge> [ddnet] Is it ok that I change the name for the hud.png to `ddnet.png` or do someone have an better (maybe more neutral) idea? https://github.com/ddnet/ddnet/blob/fa2ac1bb64749c413419443cd06abc1de7d1ac9c/data/hud.png 18:26 <+bridge> [ddnet] Is it ok that I change the name for the hud.png to `ddnet.png` or do someone have a better (maybe more neutral) idea? https://github.com/ddnet/ddnet/blob/fa2ac1bb64749c413419443cd06abc1de7d1ac9c/data/hud.png 18:26 <+bridge> [ddnet] did u add assets support for the hug? 18:26 <+bridge> [ddnet] hud* 18:26 <+bridge> [ddnet] yes 18:26 <+bridge> [ddnet] hud_default.png 18:26 <+bridge> [ddnet] ddnet.png says nothing imo 18:27 <+bridge> [ddnet] but the idea was that we also add the textures for new ddnet entities like the new shields to it 18:27 <+bridge> [ddnet] so we do not need to have hud.png and ddnet.png 18:28 <+bridge> [ddnet] or would you prefer a separate png for new ddnet entites/feautres 18:28 <+bridge> [ddnet] or would you prefer a separate png for new ddnet entities/features 18:29 <+bridge> [ddnet] i'd like to see it working like entities 18:29 <+bridge> [ddnet] 18:29 <+bridge> [ddnet] per mod 18:29 <+bridge> [ddnet] 18:29 <+bridge> [ddnet] there it uses directories as names and inside the dir its ddnet.png for ddnet, fng.png for fng etc 18:35 <+bridge> [ddnet] so you would like to put the HUD stuff just like it is now in a hud.png 18:35 <+bridge> [ddnet] And the new shields in the game.png https://github.com/ddnet/ddnet/blob/fa2ac1bb64749c413419443cd06abc1de7d1ac9c/data/game.png 18:35 <+bridge> [ddnet] in a new ddnet-game.png ? 18:36 <+bridge> [ddnet] looks fine 18:36 <+bridge> [ddnet] xD that sounds like a lot of work 18:37 <+bridge> [ddnet] the idea was to keep the game.png clean, so we get no conflicts with other mods 18:37 <+bridge> [ddnet] especially vanilla 18:44 <+bridge> [ddnet] aren't those shields breaking compatibility anyway? 18:46 <+bridge> [ddnet] yeah thats fine 18:48 <+bridge> [ddnet] hud.png is maybe better from intuition, but ddnet.png makes clear its for ddnet xdd 18:48 <+bridge> [ddnet] maybe still put it into a dir hud and name it ddnet.png 18:49 <+bridge> [ddnet] the reason why I'd prefer making it clean is, that in 2 years when everyone uses customized huds and someone wants to add hud for another mod everything breaks again xd 19:02 <+bridge> [ddnet] Does anyone know where I can post a **server feature suggestion**? 19:02 <+bridge> [ddnet] *Banning blockers in crowded DDNet servers heavily rely on whether a moderator is online and bothered to take action. I rarely see 30 yesses on a vote call – I can't recall the last time. My suggestion would be weighted votes. You can use a pathfinding algorithm to determine the distance between the call-voted player and any player that votes yes or no. The closer a player, the more weight their vote carries. Example: within 100 tiles 19:06 <+bridge> [ddnet] Does anyone know where I can post a **server feature suggestion**? 19:06 <+bridge> [ddnet] *Banning blockers in crowded DDNet servers heavily rely on whether a moderator is online and bothered to take action. I rarely see 30 yesses on a vote call – I can't recall the last time. My suggestion would be weighted votes. You can use a pathfinding algorithm to determine the distance between the call-voted player and any player that votes yes or no. The closer a player, the more weight their vote carries. Example: within 100 tiles 19:06 <+bridge> [ddnet] Edit: blockers = team 0 race blockers, past the noob filter.* 19:06 <+bridge> [ddnet] Does anyone know where I can post a **server feature suggestion**? 19:06 <+bridge> [ddnet] *Banning blockers in crowded DDNet servers heavily rely on whether a moderator is online and bothered to take action. I rarely see 30 yesses on a vote call – I can't recall the last time. My suggestion would be weighted votes. You can use a pathfinding algorithm to determine the distance between the call-voted player and any player that votes yes or no. The closer a player, the more weight their vote carries. Example: within 100 tiles 19:06 <+bridge> [ddnet] Edit: blockers = team 0 DDRace blockers, past the noob filter.* 19:12 <+bridge> [ddnet] We are on C++17 now, right? 19:12 <+bridge> [ddnet] yes 19:12 <+bridge> [ddnet] since a weak even on full c++17 19:12 <+bridge> [ddnet] week 19:12 <+bridge> [ddnet] Nice 19:13 <+bridge> [ddnet] https://github.com/ddnet/ddnet/issues 19:21 <+bridge> [ddnet] @heinrich5991 do you think I can safely get rid of the `CURLSH` stuff. I think multi handles share things without a need for that 19:33 <+bridge> [ddnet] yea, I think it works without `CURLSH` 19:33 <+bridge> [ddnet] @Learath2 ^ 19:33 <+bridge> [ddnet] > **CURLM_OUT_OF_MEMORY (3)** 19:33 <+bridge> [ddnet] > 19:33 <+bridge> [ddnet] > You are doomed. 19:33 <+bridge> [ddnet] I did google around a bit but I couldn't figure out if TLS Session Ids are shared by default :/ 19:34 <+bridge> [ddnet] I mean if connections are shared, the TLS sessions are necessarily shared, no? 19:40 <+bridge> [ddnet] https://everything.curl.dev/libcurl/sharing 19:40 <+bridge> [ddnet] hm, this suggests that you should still keep using CURLSH @Learath2 19:45 <+bridge> [ddnet] I guess I can get rid of the locking, since all handles are only in one thread now, and just keep the share 20:19 <+bridge> [ddnet] C++20s std::atomic::wait is so cute, when c++20? πŸ˜„ 20:23 <+bridge> [ddnet] Or std::latch :3 20:27 <+bridge> [ddnet] xD no shit, Sherlock ^^ "Enables rendering of maps with more details." but yes it is hard to explain what the function of the option is. 20:27 <+bridge> [ddnet] Would it be useful to make tooltips multiline for explanations that are helpful? 20:27 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/974377371455070208/unknown.png 20:31 <+bridge> [ddnet] yes is nice 20:31 <+bridge> [ddnet] less struggle with signals reentrance 20:31 <+bridge> [ddnet] yes 20:32 <+bridge> [ddnet] would be more useful 20:32 <+bridge> [ddnet] can also change this specific message 20:32 <+bridge> [ddnet] I'm a little stuck here @heinrich5991 now that all requests are technically asynchronous, I have to come up with a replacement to `IEngine::RunBlocking` 20:33 <+bridge> [ddnet] I want to do `CHttpRequest::Wait()` but to do that properly I need a lock on `CHttpRequest::m_State`, which means all requests have to incur the cost of the lock eventho only some of them use it 20:34 <+bridge> [ddnet] uncontended locks are just atomics AFAIK 20:34 <+bridge> [ddnet] at least on linux 20:34 <+bridge> [ddnet] I guess it wouldn't be too costly, but there is a cost associated with it 20:35 <+bridge> [ddnet] m_State would need to be a atomic integer otherwise, no? 20:35 <+bridge> [ddnet] m_State is already an atomic integer 20:37 <+bridge> [ddnet] Eh, I'll add the lock, we can talk about it in the PR 20:37 <+bridge> [ddnet] ah, it's probably an atomic swap or so, so indeed more expensive than an atomic store 20:37 <+bridge> [ddnet] but probably doesn't matter in the context of http requests 20:45 <+bridge> [ddnet] will the servers be allowed to add extension data? and if, how much headroom is there? 20:47 <+bridge> [ddnet] in the http masterserver info? 20:47 <+bridge> [ddnet] yes 20:47 <+bridge> [ddnet] yes, servers provide a free-form info 20:48 <+bridge> [ddnet] if it contains at least the keys the client expects, it gets shown in the serverbrowser 20:51 <+bridge> [ddnet] I estimate a full server to take about 5 KB of JSON 20:51 <+bridge> [ddnet] I think the current maximum is 16 KB, so you have some headroom 20:51 <+bridge> [ddnet] i want skininfo for every tee 20:51 <+bridge> [ddnet] 20:51 <+bridge> [ddnet] so shouldnt be too much 20:52 <+bridge> [ddnet] I have a question about the map datafile format: when parsing layer names (132string), some of them are null strings when there are not in teeworld's map editor. 20:52 <+bridge> [ddnet] There is the same issue with @Patiga 's twmap lib. 20:52 <+bridge> [ddnet] Is there a peculiarity not documented in https://github.com/heinrich5991/libtw2/blob/master/doc/map.md ? 20:53 <+bridge> [ddnet] what do you mean by null strings? 20:53 <+bridge> [ddnet] of zero length? 20:53 <+bridge> [ddnet] no, I mean it is parsed as an empty string 20:54 <+bridge> [ddnet] so they're shown as some non-empty string in the map editor, but become the empty string when read by Patiga's library? 20:54 <+bridge> [ddnet] yes 20:54 <+bridge> [ddnet] I guess the best course of action is to wait for @Patiga to answer 20:54 <+bridge> [ddnet] ok thx πŸ™‚ 21:01 <+bridge> [ddnet] hmm nevermind, they have actually no name but the teeworlds editor shows the image name instead 21:38 <+bridge> [ddnet] It builds \o/ 21:38 <+bridge> [ddnet] Let's see how badly I broke the client now πŸ˜„ 21:39 <+bridge> [ddnet] A small `emerge -avt gdb` break 21:40 <+bridge> [ddnet] \o/ 21:41 <+bridge> [ddnet] Did you know we can't have conditional member variables? 21:41 <+bridge> [ddnet] not even in C++20 with concepts 21:41 <+bridge> [ddnet] what are conditional member variables? 21:41 <+bridge> [ddnet] ah, not preprocessor ones 21:42 <+bridge> [ddnet] I don't like the way C++ templates work 21:42 <+bridge> [ddnet] Member variables that are added when a template condition is met. 21:42 <+bridge> [ddnet] the fewer templates the better IMO ^^ 21:42 <+bridge> [ddnet] I briefly considered `CHttpRequest` before I learned that 21:42 <+bridge> [ddnet] Or s/Blocking/Waitable/ 21:43 <+bridge> [ddnet] what is wrong with templates? genuinely asking 21:44 <+bridge> [ddnet] code bloat, every template instantiation generates separate code 21:44 <+bridge> [ddnet] weird language 21:44 <+bridge> [ddnet] Hm, isn't it sort of intended that each instantiation generates separate code? That's kinda how generic code works 21:44 <+bridge> [ddnet] somehow just a search-and-replace for types, this might be better with concepts (see SFINAE before) 21:44 <+bridge> [ddnet] My main complaint with C++ templates would be the way SFINAE leads to a mess 21:45 <+bridge> [ddnet] but cpp20 concepts solves the issue i think 21:45 <+bridge> [ddnet] not that of code bloat though 21:45 <+bridge> [ddnet] you mean inflating the executable ? 21:45 <+bridge> [ddnet] yes 21:46 <+bridge> [ddnet] @heinrich5991 what is the alternative though? The way rust does generics is a bit of a lie, it's technically doing polymorphism 21:47 <+bridge> [ddnet] no, rust also does this code bloat thing 21:47 <+bridge> [ddnet] hmm never really experienced this issue but yeah I see your point when I learned templates I was thinking what the f is this hack 21:47 <+bridge> [ddnet] Oh my god, I got it first try 21:47 <+bridge> [ddnet] I compile, I run, http requests aren't broken 21:47 <+bridge> [ddnet] but yes, polymorphism can lead to smaller code 21:48 <+bridge> [ddnet] We love coding for those rare moments πŸ₯° 21:48 <+bridge> [ddnet] It's even more of a surprise because I haven't coded anything in almost 6 months straight 21:50 <+bridge> [ddnet] show code or it didn't happen πŸ˜› 21:52 <+bridge> [ddnet] https://github.com/Learath2/ddnet/commit/c796750104409b1d3ba83a5673aa7526c1a4a6dd 21:52 <+bridge> [ddnet] its like in teeworlds, u take a break and come back better than before 21:53 <+bridge> [ddnet] I'm not very pleased with the way I did things in serverbrowser_http. I need to figure out what to do with errors at the start of `CHttp::Run` and I thiiink I might need a destructor for `CHttp` but other than that it all works 21:54 <+bridge> [ddnet] I'm also unsure about not having a `IHttp` it just breaks symmetry in code πŸ˜„ 21:55 <+bridge> [ddnet] what would you think about a global variable? ^^ 21:55 <+bridge> [ddnet] I thiiink the diff isn't too bad for what it is? 21:55 <+bridge> [ddnet] For what? The errors or CHttp itself? 21:56 <+bridge> [ddnet] `CHttp` 21:56 <+bridge> [ddnet] It'd break symmetry even further, we already have a kernel to store our singletons in. I really think it belongs in there :/ 21:56 <+bridge> [ddnet] the diff actually looks quite small 21:57 <+bridge> [ddnet] if we don't get anything out of it, I'd argue against using `Kernel` 21:57 <+bridge> [ddnet] Oh, I'm missing a bit of code there, how did it even work when my `Wait` is completely wrong πŸ˜„ 21:57 <+bridge> [ddnet] but yea, the diff looks good πŸ™‚ 21:57 <+bridge> [ddnet] I mean, you could argue the kernel is completely useless 21:57 <+bridge> [ddnet] For all components 21:58 <+bridge> [ddnet] well, not all components are as global as this 21:58 <+bridge> [ddnet] e.g. you can reasonably have more than one map open at the same time 21:59 <+bridge> [ddnet] or even multiple `Console()` if you were to run server and client in the same process 21:59 <+bridge> [ddnet] but multiple http clients? there seems to be just downsides to it 21:59 <+bridge> [ddnet] Hm, actually don't know if this statelock is a good idea :/ 21:59 <+bridge> [ddnet] It's making such a mess of all the pretty code 22:00 <+bridge> [ddnet] I need locking every time I access m_State 22:00 <+bridge> [ddnet] what do you need the unordered_map for? 22:00 <+bridge> [ddnet] curl-multi reports info by curl-easy handles 22:01 <+bridge> [ddnet] I need to map those back to `CHttpRequest`s 22:01 <+bridge> [ddnet] `#include ` also that isn't quite nice in the header 22:01 <+bridge> [ddnet] I think you can store userdata in curl easy handles 22:02 <+bridge> [ddnet] I need `CURL_ERROR_SIZE` `CURL` and `CURLM` in the header, not quite sure how else to get it 22:02 <+bridge> [ddnet] Let me take a look, that'd be nice 22:02 <+bridge> [ddnet] https://curl.se/libcurl/c/CURLOPT_PRIVATE.html 22:03 <+bridge> [ddnet] CURL_ERROR_SIZE is 256, one could statically assert in the cpp if need be 22:03 <+bridge> [ddnet] can't be changed without requiring an incompatible change 22:04 <+bridge> [ddnet] the other stuff is always behind a pointer 22:04 <+bridge> [ddnet] Actually I'm not sure if this will work, this is a shared_ptr 22:04 <+bridge> [ddnet] you could store a pointer to a `shared_ptr`, would that work? 22:05 <+bridge> [ddnet] doesn't Monomorphization and static dispatch allow for better optimizations tho? 22:05 <+bridge> [ddnet] anyway i havent seen yet any unrealistically big executable 22:05 <+bridge> [ddnet] and you can always opt in to dynamic dispatch 22:05 <+bridge> [ddnet] i think both sides have bad things 22:05 <+bridge> [ddnet] depends, code bloat leads to cache misses, also bad 22:05 <+bridge> [ddnet] so u gotta pick tradeofs 22:06 <+bridge> [ddnet] and no, you can't really opt into dynamic dispatch because the whole ecosystem doesn't use it 22:06 <+bridge> [ddnet] unless you want to write all libraries yourself 22:06 <+bridge> [ddnet] i would rly like to see some kind of study 22:06 <+bridge> [ddnet] on this 22:07 <+bridge> [ddnet] is the code bloat big enough to be a problem most of the time, no yes, when why 22:07 <+bridge> [ddnet] i expect this only to be a problem in embedded 22:07 <+bridge> [ddnet] cache misses are a real problem not only for embedded 22:07 <+bridge> [ddnet] if you wanna go fast you must optimize for caches 22:08 <+bridge> [ddnet] how long does it take to register a new private ddnet server on the master teeworlds server normaly? 22:08 <+bridge> [ddnet] wdym? 22:09 <+bridge> [ddnet] old-style mastersrv? 22:09 <+bridge> [ddnet] seconds, I think 22:09 <+bridge> [ddnet] so that it is listed in the internet tab of the 16.03 client 22:09 <+bridge> [ddnet] ah 22:09 <+bridge> [ddnet] should be done in a minute unless packets get dropped 22:12 <+bridge> [ddnet] have you good sources regarding that 22:12 <+bridge> [ddnet] the only thing i found is a hn comment 22:12 <+bridge> [ddnet] https://news.ycombinator.com/item?id=25626620 22:12 <+bridge> [ddnet] why is there so little talk about this 22:12 <+bridge> [ddnet] or my google sucks 22:12 <+bridge> [ddnet] ask anyone who does optimizations, it's always about caches these days 22:13 <+bridge> [ddnet] mh worked for me xD the guy who asked me why its not working, must have done something wrong 22:13 <+bridge> [ddnet] would it posible to register ipv6? 22:13 <+bridge> [ddnet] yes, it's possible, specify bindaddr as [::] perhaps 22:13 <+bridge> [ddnet] or :: 22:14 <+bridge> [ddnet] @Ryozuki I guess that means I don't have a reference, let me try to look for one 22:15 <+bridge> [ddnet] Why does `std::list::emplace_back` return a `reference` and not an `iterator` ? :/ 22:16 <+bridge> [ddnet] > In programming languages, monomorphization is a compile-time process where polymorphic functions are replaced by many monomorphic functions for each unique instantiation.[1] This transformation is desirable, since then the output intermediate representation (IR) will have concrete types and can be optimized better. Furthermore, most IRs are designed to be low-level and do not support polymorphism. Code generated this way is typically fast 22:16 <+bridge> [ddnet] @Ryozuki 22:16 <+bridge> [ddnet] there is alot about caches that can cost performance 22:16 <+bridge> [ddnet] 22:16 <+bridge> [ddnet] https://en.cppreference.com/w/cpp/thread/hardware_destructive_interference_size 22:17 <+bridge> [ddnet] c++17 adds a way to avoid cache syncs, if u go tryhard xd 22:17 <+bridge> [ddnet] "The program uses two threads that write (atomically) to the data members of the given global objects. The first object fits in one cache line, which results in "hardware interference". The second object keeps its data members on separate cache lines, so possible "cache synchronization" after thread writes is avoided." 22:18 <+bridge> [ddnet] i only see sources talk about using monomorphomiszation to improve perfomance 22:18 <+bridge> [ddnet] ah no 22:19 <+bridge> [ddnet] well 22:19 <+bridge> [ddnet] just write assembly 22:19 <+bridge> [ddnet] like the fizzbuzz guy 22:19 <+bridge> [ddnet] idc about cpu performance a lot anyway 22:19 <+bridge> [ddnet] GPUs are biggest bottleneck xd 22:20 <+bridge> [ddnet] well usually for most apps is the internet 22:20 <+bridge> [ddnet] but ye for games i guess 22:20 <+bridge> [ddnet] internet or i/o 22:20 <+bridge> [ddnet] well im talking out of my as 22:20 <+bridge> [ddnet] but i agree with learath or whoever said that that in future there will be a time where we might consider faster code again 22:20 <+bridge> [ddnet] but thats what i would guess xd 22:20 <+bridge> [ddnet] instead of javascripting everything 22:21 <+bridge> [ddnet] we can rustify everything 22:21 <+bridge> [ddnet] but can a javascript dev use rust? no or not so ez 22:21 <+bridge> [ddnet] so it will take time 22:21 <+bridge> [ddnet] honestly the only hope to stop javascript is the massive success of webassembly 22:21 <+bridge> [ddnet] there are probs less devs at some point again 22:21 <+bridge> [ddnet] so u can use any language you like 22:21 <+bridge> [ddnet] rn pretty much everyone is a dev xdd 22:21 <+bridge> [ddnet] but rn to modify the DOM u have to go through js 22:22 <+bridge> [ddnet] not rly 22:22 <+bridge> [ddnet] u just live in a bubble 22:22 <+bridge> [ddnet] depends on what u call dev probably 22:22 <+bridge> [ddnet] i dont mean system level devs 22:22 <+bridge> [ddnet] but tools for whatever is needed 22:22 <+bridge> [ddnet] most devs are web devs i guess 22:22 <+bridge> [ddnet] this will probs go away if we have more automization in economy again 22:23 <+bridge> [ddnet] yes 22:23 <+bridge> [ddnet] and web dev is rather ez 22:23 <+bridge> [ddnet] isn't it the devs writing the automatisation? 22:23 <+bridge> [ddnet] ah maybe little missconception 22:23 <+bridge> [ddnet] there are devs that write tools for humans 22:23 <+bridge> [ddnet] and devs that write machines that replace humans 22:24 <+bridge> [ddnet] the no code stuff 22:24 <+bridge> [ddnet] i mean the 1st 22:24 <+bridge> [ddnet] or "low code" 22:24 <+bridge> [ddnet] i also laugh at the serverless word 22:24 <+bridge> [ddnet] well programming is so full of buzzwords 22:24 <+bridge> [ddnet] or the devs that stay are the 2nd 22:24 <+bridge> [ddnet] @Learath2 are you currently available for http mastersrv brainstorming? or currently writing http stuff? 22:25 <+bridge> [ddnet] SOLID DRY clean code, YAGNI, cloud based, serverless, KISS, ML, AI, blockchain 22:25 <+bridge> [ddnet] :fuckyousnail: 22:25 <+bridge> [ddnet] you forgot machine learning 22:25 <+bridge> [ddnet] ML? 22:25 <+bridge> [ddnet] damn people using acronyms again 22:25 <+bridge> [ddnet] thats the devs that replace humans i guess 22:25 <+bridge> [ddnet] @Chairn its always acronyms 22:25 <+bridge> [ddnet] otherwise its not cool 22:25 <+bridge> [ddnet] blockchain 22:25 <+bridge> [ddnet] it's so useless 22:25 <+bridge> [ddnet] i hate them all 22:26 <+bridge> [ddnet] you loose more time explaining the acronyms than writing it in full directly 22:26 <+bridge> [ddnet] xd 22:26 <+bridge> [ddnet] its like math 22:26 <+bridge> [ddnet] every prof has its own notations 22:26 <+bridge> [ddnet] i always gotta search the SOLID one 22:26 <+bridge> [ddnet] > promoted by American software engineer and instructor Robert C. Martin,[1][2][3] first introduced in his 2000 paper Design Principles and Design Patterns.[2][4] 22:26 <+bridge> [ddnet] > 22:26 <+bridge> [ddnet] > The SOLID ideas are 22:26 <+bridge> [ddnet] > 22:26 <+bridge> [ddnet] > The single-responsibility principle: "There should never be more than one reason for a class to change."[5] In other words, every class should have only one responsibility.[6] 22:27 <+bridge> [ddnet] > The open–closed principle: "Software entities ... should be open for extension, but closed for modification."[7] 22:27 <+bridge> [ddnet] > The Liskov substitution principle: "Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it."[8] See also design by contract.[8] 22:27 <+bridge> [ddnet] > The interface segregation principle: "Many client-specific interfaces are better than one general-purpose interface."[9][4] 22:27 <+bridge> [ddnet] > The dependency inversion principle: "Depend upon abstractions, [not] concretions."[10][4] 22:27 <+bridge> [ddnet] ah yes 22:27 <+bridge> [ddnet] thanks for the info 22:53 <+bridge> [ddnet] Mh, I actually liked that `unordered_map` there 😦 22:54 <+bridge> [ddnet] Now I have to write a linked list 23:07 <+bridge> [ddnet] x)