00:00 <+bridge> considering im getting bullied by a check atm - is there any way to run a build test locally without having to push each of my attempts to the PR ? XD 00:00 <+bridge> https://github.com/ddnet/ddnet/pull/7886 00:00 <+bridge> https://github.com/ddnet/ddnet/pull/7886 00:00 <+bridge> 00:00 <+bridge> its always the damn CI (please help) 00:46 <+bridge> @teero777 does this tool create a ghost from a demo that is 1:1 with the original ghost? 00:46 <+bridge> https://github.com/Teero888/demo_to_ghost 00:46 <+bridge> no 00:47 <+bridge> the ghost doesn't start at the correct timing if you don't cut the demo correctly 00:48 <+bridge> and there is a chance the individual positions might be off due to floating point differences between the original ghost recorder and the demo recording. the rest should be the same. 00:49 <+bridge> <._.spook._.> I have made a command in mysql which outputs this when you input a name 00:49 <+bridge> <._.spook._.> ``` 00:49 <+bridge> <._.spook._.> +------------+-------------+ 00:49 <+bridge> <._.spook._.> | Difficulty | Completions | 00:49 <+bridge> <._.spook._.> +------------+-------------+ 00:49 <+bridge> <._.spook._.> | Easy | 14 | 00:49 <+bridge> <._.spook._.> | Extreme | 0 | 00:49 <+bridge> <._.spook._.> | Hard | 0 | 00:49 <+bridge> <._.spook._.> | Insane | 0 | 00:49 <+bridge> <._.spook._.> | Main | 7 | 00:49 <+bridge> <._.spook._.> | Mod | 0 | 00:49 <+bridge> <._.spook._.> | Unknown | 4 | 00:50 <+bridge> <._.spook._.> +------------+-------------+ 00:50 <+bridge> <._.spook._.> ``` 00:50 <+bridge> <._.spook._.> How can i make this into a command for my server? outputting something like (Completions: Hard: 1 Main : 2.... ) 00:50 <+bridge> Ty for info. It might be useful to mention that in the gh description as well, so others know 01:05 <+bridge> I added new sql query in this PR, you can check out how it works 01:05 <+bridge> I added new sql query in this PR, you can check out how it works https://github.com/ddnet/ddnet/pull/11669/changes#diff-da699e0316b9bb7d92d48e89143a1225b53fae1199132fec72943e92aed50c15 01:05 <+bridge> I added new sql query in this PR, you can check out how it works https://github.com/ddnet/ddnet/pull/11669/changes#diff-da699e0316b9bb7d92d48e89143a1225b53fae1199132fec72943e92aed50c15 01:06 <+bridge> `void ShowPoints` should be similar for the command /points 01:06 <+bridge> `void ShowPoints` should be similar, but for the command /points 01:07 <+bridge> I added new sql query in this PR, you can check out how it was implemented https://github.com/ddnet/ddnet/pull/11669/changes#diff-da699e0316b9bb7d92d48e89143a1225b53fae1199132fec72943e92aed50c15 01:07 <+bridge> I added new sql query in this PR, you can check out how it was implemented https://github.com/ddnet/ddnet/pull/11669/changes#diff-da699e0316b9bb7d92d48e89143a1225b53fae1199132fec72943e92aed50c15 01:23 <+bridge> <._.spook._.> so what you did here is just for 1 commnad? 01:24 <+bridge> <._.spook._.> nevermind 01:25 <+bridge> Mostly, you need stuff in score.cpp and score worker.cpp for sql query and then add it to a command in server controller 01:31 <+bridge> @fokkonaut some integration test failed om your 128 player pr, I don't think they were the flaky ones 02:28 <+bridge> This is nice 02:28 <+bridge> https://github.github.com/gh-stack/ 02:29 <+bridge> I guess the issue is that it kinda goes against the review flow, what happens if a PR low in the stack needs big changes? 02:30 <+bridge> They shoe an example with 6 PRs but I think 3 is a reasonable limit 02:30 <+bridge> They show an example with 6 PRs but I think 3 is a reasonable limit 03:04 <+bridge> <._.spook._.> why is it saying that i havent port forwarded on one server but on the other it does? same config and maps 03:04 <+bridge> <._.spook._.> https://cdn.discordapp.com/attachments/293493549758939136/1493416649230123180/image.png?ex=69dee423&is=69dd92a3&hm=5a2e512477cb8ca7b78ba0d94a794c802150a5b5f19a9f62beeeddfda4db2286& 03:04 <+bridge> <._.spook._.> https://cdn.discordapp.com/attachments/293493549758939136/1493416649552826458/image.png?ex=69dee423&is=69dd92a3&hm=8e77b62c678733699c607cd0b2e9ed228efb7552a6735137224c71bd1f3f3a9a& 03:09 <+bridge> You can only have 1 server per port 03:11 <+bridge> <._.spook._.> Im only running one at a time 06:42 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493471396771270726/image.jpg?ex=69df1720&is=69ddc5a0&hm=992bfeccc590228eedf52ee1a542acb4a9852df2a7c8580291e43b168120b3ab& 06:42 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493471397463199884/image.jpg?ex=69df1720&is=69ddc5a0&hm=238e7f7926b9f5023ee36384febdba01c2b8b37a3add8da3a66b5e575c9e4360& 06:42 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493471398084218992/image.jpg?ex=69df1720&is=69ddc5a0&hm=270f4fdab98dd706d9fbe5625a46aa658d53bef9343418f0d7f08da96befbc02& 06:42 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493471399220613140/image.jpg?ex=69df1720&is=69ddc5a0&hm=f2313edad0cb719385c9f8586964131ed04efc9991e9990dc16c6581e22025d3& 06:44 <+bridge> @shennox your account has been compromised, reset your password and enable 2FA. 07:00 <+bridge> <.asasi> https://cdn.discordapp.com/attachments/293493549758939136/1493476125589110824/image.jpg?ex=69df1b87&is=69ddca07&hm=63eec9a5d9dab4e6cd604bd44cacf81b5f95c70107bf6167c2b45cdbf5163079& 07:00 <+bridge> <.asasi> https://cdn.discordapp.com/attachments/293493549758939136/1493476125957951548/image.jpg?ex=69df1b87&is=69ddca07&hm=71bd867d1577492f940295b0f93c3f052b53852766d1d01f5f33f5ec42150d3d& 07:00 <+bridge> <.asasi> https://cdn.discordapp.com/attachments/293493549758939136/1493476126243291209/image.jpg?ex=69df1b87&is=69ddca07&hm=8fbb27dbdecb6bf243aed4ef82fa1ecd064eb5dfd6459b02f7f9478422d7d0fb& 07:01 <+bridge> <.asasi> https://cdn.discordapp.com/attachments/293493549758939136/1493476126528634981/image.jpg?ex=69df1b88&is=69ddca08&hm=35eab6c99f82e46b19f8cbeb5699ce8d410ea78c7de3d5e55c389c7e7edb28b7& 07:01 <+bridge> I SWEAR TO GOD MAN 07:01 <+bridge> @.asasi your account has been compromised, reset your password and enable 2FA. 07:20 <+bridge> melon cybersecurity company 07:57 <+bridge> It’s a new text box maybe a year old or something like that. Before that only the shortcut β€žtβ€œ would open it I think 09:57 <+bridge> <.syur.> discord.gg/GqmHr9yKjZ 10:30 <+bridge> @fokkonaut do you have any info how much bandwidth this takes if 128 players do this? I am just curious if this is sustainable or if you end up with a high network bill 10:31 <+bridge> I assume ddnet even in high bandwidth mode doesn't consume much 10:31 <+bridge> Never ran into problems, and considering this is an old game the bandwidth is probably not even _that_ high 10:33 <+bridge> I have this enabled by default on all servers I host, in block it's quite nice 10:36 <+bridge> alright πŸ‘ my only concern is that deen will have a big network bill, but I guess my concern is unjustified 10:37 <+bridge> Share your concerns in the PR, please 10:42 <+bridge> okay will do 10:42 <+bridge> > Players already complain a lot about visual changes 10:42 <+bridge> @l._ouis do you have an example for me? I can't remember the last time we had a big visual update (except the hookline, which is controverse due to other reasons) 10:44 <+bridge> @essigautomat In fact, there was a high bandwidth mode already previously (rcon only) - requested by Learath2 10:44 <+bridge> It was just not working correctly and only for spectator mode, by TsFreddie 10:47 <+bridge> ideally we'd collect some data about network usage with and without high bandwith and it's scaling behavior - but I am clueless, how do you do this? Wireshark? 10:48 <+bridge> And even then we could implement a network limit, where the server does not allow more high bandwidth connections as a middleground 10:48 <+bridge> And even then we could implement a network limit, where the server does not allow more high bandwidth connections as a middleground (just to have written down the option) 10:58 <+bridge> ninja stars gone, ninja sword gone, new hud for weapons, new weapon shields 10:58 <+bridge> i saw a few people also complain about the new ninja particles 10:59 <+bridge> > ninja sword gone 10:59 <+bridge> ? 10:59 <+bridge> when you are in freeze theres no sword 10:59 <+bridge> > new hud for weapons 10:59 <+bridge> Afaict you can just put the client into the classical view 10:59 <+bridge> > new hud for weapons 10:59 <+bridge> Afaict you can just put the client into the classical view and have the old Hud 11:05 <+bridge> but thank you for the examples - I am so used to this changes already that I forgot 11:06 <+bridge> I was mostly wondering if anyone complained about the new laser heads - well there certainly is a person 11:06 <+bridge> Bandwidth is very expensive for Chinese servers 11:08 <+bridge> This is why I was a bit sceptical about Roby's scoreboard change 11:09 <+bridge> But semi transparent hammer is so negligible 11:09 <+bridge> I see - but I also see problems with the current scoreboard, where it's sometimes half-emtpy 11:09 <+bridge> or was this already fixed πŸ€” 11:16 <+bridge> Yea but new one is half empty too 11:19 <+bridge> I am doing too many things in parallel 11:50 <+bridge> trackmania :kek: 11:51 <+bridge> bro 11:51 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493549129937190973/1.jpg?ex=69df5f85&is=69de0e05&hm=eaf7af9d9b20fed226278094d2d284d58172849e4a1c8ff718084056e905aae1& 11:51 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493549130402762772/2.jpg?ex=69df5f85&is=69de0e05&hm=c344c1f50c0e2144269290bd4811151cdfd0d3da570fdc850fffc9ea2bfb2dc8& 11:51 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493549130864132176/3.jpg?ex=69df5f85&is=69de0e05&hm=f33dd880612a24d89641ee8e6a03dc5c6d9999941ac2967d694ee22d1f1d0bcf& 11:51 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493549131308859432/4.jpg?ex=69df5f85&is=69de0e05&hm=edc1c903159cd34efe41b9a24283d4d07df28debf73778bc5746f830e61a06fd& 11:51 <+bridge> ddnet is a racing game after all 11:51 <+bridge> @Discord Mod 11:51 <+bridge> there are many racists in this game, yes 11:51 <+bridge> 🀣 11:52 <+bridge> at least you can't cheat in ddnet with slowmo 11:52 <+bridge> *tas entered the chat* 11:53 <+bridge> the red-bull trackmania event was the best e-sports event I have ever seen, and it's happening again 11:53 <+bridge> like in terms of fun-to-watch πŸ˜„ 11:54 <+bridge> *tas entered the chat* (it is possible to cheat with slowmo) 11:54 <+bridge> *TAS entered the chat* (it is possible to cheat with slowmo) 13:11 <+bridge> @fokkonaut oh ur here so u didnt get banned yesterday, nice xD 13:12 <+bridge> or i mean sunday 13:12 <+bridge> time flies 13:19 <+bridge> Would be a shame to get banned for speaking the truth 13:25 <+bridge> ill see myself out again 13:25 <+bridge> https://tenor.com/view/castanholas-gif-1906157543912258921 13:57 <+bridge> @fokkonaut are you planning to add 256 slots to F-DDrace after https://github.com/ddnet/ddnet/pull/12018 is merged? xD 13:58 <+bridge> No 14:03 <+bridge> in 2026 can antiping be enabled by default 14:05 <+bridge> With #11752, probably yea (cl_antiping_players to 3) 14:05 <+bridge> https://github.com/ddnet/ddnet/pull/11752 14:06 <+bridge> With #11752, probably yea (`cl_antiping_players 3`) 14:21 <+bridge> @heinrich5991 (or anyone with netcode knowledge), what happens if I send a netmessage with an invalid value, does it resolve to the default value? Like for example the new finish time message goes from max-int to -2, what if I send -3 as a server? 14:26 <+bridge> https://github.com/ddnet/ddnet/blob/f90367b61d5c7ae38ebef200d73e8d3863a4809a/datasrc/compile.py#L176-L181 14:26 <+bridge> clamped 14:28 <+bridge> and displayed in debug menu 14:28 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493588852215123988/image.png?ex=69df8483&is=69de3303&hm=1147f4ac001e614f5c5cc2f1b622048f68529f715b3e49a6fe1b7cb2ca7182dd& 14:29 <+bridge> clamped and displayed in debug menu 14:29 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493588974361378856/image.png?ex=69df84a1&is=69de3321&hm=af1dbf93a6b207369a767c6c5282b3cdb5596e9f263cf3535aa3b175343e43e0& 14:31 <+bridge> so I guess I shouldn't rely on that 14:32 <+bridge> What are you trying to do? 14:36 <+bridge> just experimenting with my trackmania issue 14:37 <+bridge> add a DDNetPlayer flag 14:38 <+bridge> https://github.com/ddnet/ddnet/blob/f90367b61d5c7ae38ebef200d73e8d3863a4809a/datasrc/network.py#L29 14:39 <+bridge> ??? no why 14:41 <+bridge> To render "Secret" score 14:41 <+bridge> I only plan to add an additional value here: https://github.com/ddnet/ddnet/blob/f90367b61d5c7ae38ebef200d73e8d3863a4809a/datasrc/network.py#L267 14:41 <+bridge> Send UNSET for older clients (which is current behavior) 14:41 <+bridge> I only plan to add an additional value here: 14:41 <+bridge> Send UNSET for older clients (which is current behavior) 14:43 <+bridge> New here? πŸ˜‚ 14:44 * bridge sarcasm left the chat 14:45 <+bridge> sounds like deen is not interested in experimental branch 14:45 <+bridge> Where can i support him? 14:46 <+bridge> https://github.com/ddnet/ddnet-scripts/pull/68 14:47 <+bridge> @kebscs since when do you play/code ddnet? 14:47 <+bridge> 2 years maybe 14:47 <+bridge> I played teeworlds in 2007 :) 14:48 <+bridge> ok 14:48 <+bridge> > What's the alternative to a separate branch? 14:48 <+bridge> Not maintaining any experimentals at all (other than compiling the current branch we want to test) 14:49 <+bridge> Compiling? 14:49 <+bridge> see deens reply 14:49 <+bridge> The branch is setup so it can go into steam beta 14:49 <+bridge> Ppl can't compile themselves 14:53 <+bridge> @fokkonaut see this https://github.com/ddnet/ddnet/issues/9801#issuecomment-3940775006 14:53 <+bridge> People need beta for making a map, not for testing map that doesn't exist 14:55 <+bridge> What's wrong with providing one experimental version based on the PR directly only for the purpose to create a map with that feature? 14:57 <+bridge> discussion on github pls 15:10 <+bridge> wtff bro look this girl in vc lmaaoo discord.gg/cam-girl 15:28 <+bridge> @milkeeycat @learath2 talking about egraphs, https://cfallin.org/blog/2026/04/09/aegraph/ 15:30 <+bridge> I just couldn't stop myself :3 15:30 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493604362579345458/screenshot_2026-04-14_15-29-18.png?ex=69df92f5&is=69de4175&hm=19b05510cfcbdced09ea2912cbcfadeb135b9ff0a7256323aa7d3b664853a8e1& 15:30 <+bridge> I read cranelift's RFC which was about adding aegraphs 15:31 <+bridge> Imo it looks weird, there is now a string in the time/points field 15:32 <+bridge> now I have the astronaut meme in mind: "There is a string in the time field - always have been" 15:32 <+bridge> How would you solve this? I find this cleaner than nothing or a lock 15:33 <+bridge> maybe a question mark or nothing at all? what was wrong with that? 15:33 <+bridge> When is it a secret? 15:34 <+bridge> sv_hide_score is already a thing 15:34 <+bridge> dont let melon see that, he will teach you he/she/it 15:34 <+bridge> dazz is ur dummy!?!?!? 15:35 <+bridge> So there shouldn't be anything in that column at all 15:35 <+bridge> With "secret" you can tell who has a score and who doesn't 15:35 <+bridge> Not so secret anymore :) 15:37 <+bridge> you still don't know the time or rank of that person, only that he she it finished 15:37 <+bridge> yes? 15:37 <+bridge> dazz crazy 15:37 <+bridge> u dont know the player dazz?? 15:37 <+bridge> Doesn't make sense, if score is secret, it's always secret 15:37 <+bridge> I know him personally 15:38 <+bridge> irl? 15:39 <+bridge> lol this is supposed to hide scores, not finishes 15:40 <+bridge> like the server still shows when you finish in this mode top right, but you just don't see the time 15:40 <+bridge> yes irl, we know each other for 10+ years now xD 15:40 <+bridge> oh damn 15:41 <+bridge> 15:42 <+bridge> i see 15:42 <+bridge> Update the PR that requires changes. Then rebase to replace the commits in the dependent PR and fix the conflicts. 15:43 <+bridge> uh i get bad gateway 15:55 <+bridge> I had a little fun with speeding up `fix_style`; multithreading and async are making their presence felt :) 15:56 <+bridge> 15:56 <+bridge> `fix_style.py` 15:56 <+bridge> ``` 15:56 <+bridge> ________________________________________________________ 15:56 <+bridge> Executed in 23.90 secs fish external 15:56 <+bridge> usr time 23.43 secs 0.51 millis 23.43 secs 15:56 <+bridge> sys time 0.23 secs 1.07 millis 0.23 secs 15:56 <+bridge> ``` 15:56 <+bridge> 15:56 <+bridge> 15:56 <+bridge> `fix_style_async.py` 15:56 <+bridge> ``` 15:56 <+bridge> ________________________________________________________ 15:56 <+bridge> Executed in 2.94 secs fish external 15:56 <+bridge> usr time 40.69 secs 9.78 millis 40.68 secs 15:56 <+bridge> sys time 3.58 secs 6.10 millis 3.57 secs 15:56 <+bridge> ``` 15:58 <+bridge> I had a little fun with speeding up `fix_style`; multithreading and async are making their presence felt :) 15:58 <+bridge> 15:58 <+bridge> `fix_style.py` 15:58 <+bridge> ``` 15:58 <+bridge> ________________________________________________________ 15:58 <+bridge> Executed in 23.90 secs fish external 15:58 <+bridge> usr time 23.43 secs 0.51 millis 23.43 secs 15:58 <+bridge> sys time 0.23 secs 1.07 millis 0.23 secs 15:58 <+bridge> ``` 15:58 <+bridge> 15:58 <+bridge> 15:58 <+bridge> `fix_style_async.py` 15:58 <+bridge> ``` 15:58 <+bridge> ________________________________________________________ 15:58 <+bridge> Executed in 2.94 secs fish external 15:58 <+bridge> usr time 40.69 secs 9.78 millis 40.68 secs 15:58 <+bridge> sys time 3.58 secs 6.10 millis 3.57 secs 15:58 <+bridge> ``` 15:59 <+bridge> 15:59 <+bridge> ``` 15:59 <+bridge> > python --version 15:59 <+bridge> Python 3.14.4 15:59 <+bridge> ``` 16:01 <+bridge> ``` 16:01 <+bridge> > find . -type f \( -name "*.cpp" -o -name "*.h" \) | wc -l 16:01 <+bridge> 3564 16:01 <+bridge> ``` 16:01 <+bridge> :) 16:05 <+bridge> how to read this am i blind or is async slower 16:05 <+bridge> ah no i see 16:05 <+bridge> from 24s to 3s 16:05 <+bridge> total cpu time is higher but wall time lower ig 16:06 <+bridge> @byfox is this python version without gil? 16:06 <+bridge> i wonder how much more speed with rust it would gain 16:09 <+bridge> ``` 16:09 <+bridge> >>> import sys 16:09 <+bridge> ... print(sys._is_gil_enabled()) 16:09 <+bridge> ... 16:09 <+bridge> True 16:09 <+bridge> ``` 16:09 <+bridge> ```python 16:09 <+bridge> >>> import sys 16:09 <+bridge> ... print(sys._is_gil_enabled()) 16:09 <+bridge> ... 16:09 <+bridge> True 16:09 <+bridge> ``` 16:09 <+bridge> Even without gil it still does it a couple of seconds faster :) 16:10 <+bridge> Even without `gil` it still happens a couple of seconds faster than in the regular version. 16:11 <+bridge> ``` 16:11 <+bridge> def find_clang_format(version): 16:12 <+bridge> for binary in ( 16:12 <+bridge> "clang-format", 16:12 <+bridge> f"clang-format-{version}", 16:12 <+bridge> f"/opt/clang-format-static/clang-format-{version}", 16:12 <+bridge> ): 16:12 <+bridge> try: 16:12 <+bridge> out = subprocess.check_output([binary, "--version"]) 16:12 <+bridge> except FileNotFoundError: 16:12 <+bridge> continue 16:12 <+bridge> if f"clang-format version {version}." in out.decode("utf-8"): 16:12 <+bridge> return binary 16:12 <+bridge> print(f"Found no clang-format {version}") 16:12 <+bridge> sys.exit(-1) 16:12 <+bridge> ``` 16:12 <+bridge> It uses `clang-format`, we always wait for it, async allows us to handle several tasks at the same time :) 16:12 <+bridge> ```python 16:12 <+bridge> def find_clang_format(version): 16:12 <+bridge> for binary in ( 16:12 <+bridge> "clang-format", 16:12 <+bridge> f"clang-format-{version}", 16:12 <+bridge> f"/opt/clang-format-static/clang-format-{version}", 16:12 <+bridge> ): 16:12 <+bridge> try: 16:12 <+bridge> out = subprocess.check_output([binary, "--version"]) 16:12 <+bridge> except FileNotFoundError: 16:12 <+bridge> continue 16:12 <+bridge> if f"clang-format version {version}." in out.decode("utf-8"): 16:12 <+bridge> return binary 16:12 <+bridge> print(f"Found no clang-format {version}") 16:12 <+bridge> sys.exit(-1) 16:12 <+bridge> ``` 16:12 <+bridge> It uses `clang-format`, we always wait for it, async allows us to handle several tasks at the same time :) 16:13 <+bridge> cant clang-format itself accept a list of files? i forgot what the script does 16:16 <+bridge> `subprocess.check_call([clang_format_bin, "-i"] + filenames)` 16:16 <+bridge> 16:16 <+bridge> It works that way, but it still takes a long time :) 16:17 <+bridge> Dividing into several tasks and one team at a time is much faster than everything in one pile. 16:17 <+bridge> 16:17 <+bridge> Let's also take into account that I have `CPU(s): 24` 16:21 <+bridge> If you're interested, here's the link to the commit :) 16:21 <+bridge> 16:21 <+bridge> https://github.com/FoxTempFork/ddnet/commit/6cc975dd4fe0df1b2f7dd09e30c98c902fcdaae8 16:22 <+bridge> ic, im surprised clang-format itself is not MT 16:24 <+bridge> ic its meant to be scripted like this 16:26 <+bridge> Can you test this script and show the results with and without multithreading and async? 16:26 <+bridge> :frozen: 16:26 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493618459232174281/image.png?ex=69dfa016&is=69de4e96&hm=4372487517d9740a970c84f19988fb6073684fcd8abf76465cfeffdce19d45d3& 16:26 <+bridge> uh not at home rn 16:36 <+bridge> If a person has few cores, then on the contrary, it will work longer, this is one of the problems... 16:36 <+bridge> My VPS, with two cores, took longer 16:43 <+bridge> ``` 16:43 <+bridge> > time python3.14 scripts/fix_style.py 16:43 <+bridge> ________________________________________________________ 16:43 <+bridge> Executed in 14.13 secs fish external 16:43 <+bridge> usr time 14.00 secs 383.00 micros 14.00 secs 16:43 <+bridge> sys time 0.13 secs 108.00 micros 0.13 secs 16:43 <+bridge> 16:43 <+bridge> > time python3.14 scripts/fix_style_async.py 16:43 <+bridge> ________________________________________________________ 16:43 <+bridge> Executed in 3.59 secs fish external 16:43 <+bridge> usr time 15.82 secs 389.00 micros 15.81 secs 16:43 <+bridge> sys time 1.67 secs 112.00 micros 1.66 secs 16:43 <+bridge> ``` 16:43 <+bridge> 16:43 <+bridge> `CPU(s): 8` 16:43 <+bridge> `Python 3.14.4` 16:43 <+bridge> 16:43 <+bridge> I think the performance gain is greater if there are more than 2 cores. 16:47 <+bridge> why dont u try with a no gil python 16:49 <+bridge> i can give u a clanker reccomendation 16:49 <+bridge> > Split the file list into cpu_count() chunks and invoke clang-format once per chunk. This amortizes startup and still saturates cores. Drop asyncio entirely. 16:51 <+bridge> https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor 16:55 <+bridge> but what if the cpu_count changes over time!!! 16:55 <+bridge> `cpu_count = multiprocessing.cpu_count()` 16:57 <+bridge> but u only pass 1 file per clang format invocation 16:58 <+bridge> ``` 16:58 <+bridge> ________________________________________________________ 16:58 <+bridge> Executed in 2.59 secs fish external 16:58 <+bridge> usr time 21.54 secs 1.13 millis 21.54 secs 16:58 <+bridge> sys time 0.64 secs 0.01 millis 0.64 secs 16:58 <+bridge> ``` 16:58 <+bridge> 16:58 <+bridge> I had already forgotten about the existence of `ThreadPoolExecutor` 16:58 <+bridge> imagine 100 files to parse, what i meant is if 24 cores = 24 clang-format calls, each call has about 4.1~ files assigned per call 16:58 <+bridge> u only rly do 24 calls in parallel 16:58 <+bridge> instead of hunders 16:59 <+bridge> clang-format has a init cost, parsing config etc 16:59 <+bridge> ot but what do you run your clanker on? 16:59 <+bridge> clang-format a b c 16:59 <+bridge> wha do u mean 17:00 <+bridge> didn't you ran one locally? I have been recently looking into stuff and not sure what to go for, my PC currently doesn't have enough clanker power to run the good gemma4 models 17:00 <+bridge> this was claude opus 4.6 suggestion 17:00 <+bridge> but yeah i have my own fun with local llms 17:01 <+bridge> they are not that powerfull 17:01 <+bridge> local not anywhere near frontier fushi 17:01 <+bridge> also they're just a lot slower unless you have a lot of gpus 17:01 <+bridge> actually thats false 17:01 <+bridge> I noticed but I don't wanna really do complex or anything 17:01 <+bridge> a local llm with 8b on my 5080 runs at 130tok/s 17:02 <+bridge> i think claude is like 80 or so 17:02 <+bridge> 8b lol 17:02 <+bridge> but obviously quality is less 17:02 <+bridge> i was just being pedantic :P 17:02 <+bridge> ye 17:02 <+bridge> 8b would be plenty for me 17:02 <+bridge> i guess for some usecases u can use 8b and be fine 17:02 <+bridge> but I can't stop myself looking at workstation gpus 17:02 <+bridge> if u try a local llm u can feel how faster it is, no network latency etc, its rly something else 17:03 <+bridge> I ran gemma4 e4b but it was quite demanding for my setup so I will probably have to upgrade or cloud 17:04 <+bridge> https://github.com/FoxTempFork/ddnet/commit/49c35acd1c041429090e2bb9334fb0edaae76532 17:05 <+bridge> https://discord.com/channels/252358080522747904/293493549758939136/1493626382964756480 - Execution time for this commit 17:06 <+bridge> new gemma is nice i think it outperforms others of same params 17:08 <+bridge> haven't been excited about AI for a while but these models are pretty cool 17:12 <+bridge> I changed the code based on your recommendation and tested it with and without Gil. 17:12 <+bridge> 17:12 <+bridge> Even using two threads, I noticed a reduction in script execution time :) 17:13 <+bridge> nice 17:15 <+bridge> net messages: dropped. net objects: clamped 17:16 <+bridge> While clamping would technically would work, I decided to explicitly change behavior for older clients - but thank you πŸ‘ 17:16 <+bridge> While clamping technically would work, I decided to explicitly change behavior for older clients - but thank you πŸ‘ 17:16 <+bridge> While clamping technically would work, I decided to explicitly define the behavior for older clients - but thank you πŸ‘ 17:17 <+bridge> @heinrich5991 What do you think about this version of fix_style? 17:17 <+bridge> 17:17 <+bridge> My goal is to speed it up, because mine only works for 24 seconds due to the low frequency. 17:17 <+bridge> Now it takes 3 seconds for the script to execute, I think it will be even faster with high-frequency processors :) 17:27 <+bridge> true about msgs, i only described ob 17:27 <+bridge> true about msgs, i only described obj 17:29 <+bridge> it sounds like a good idea to parallelize that script a little. I'd try to keep the script as simple as possible. how much performance does the chunking gain us? 17:30 <+bridge> just for the record: I don't get where people get the idea from that speaking "truth" somehow absolves them from the requirement to not be an asshole 17:30 <+bridge> these are separate dimensions 17:30 <+bridge> you can behave like an asshole and speak the truth, you can behave nicely and speak the truth, you can behave like an asshole and lie. you can behave nicely and lie 17:31 <+bridge> that is totally correct 17:31 <+bridge> you don't get banned for "speaking the truth" 17:31 <+bridge> you get banned for "behaving like an asshole" 17:32 <+bridge> so you are saying i behaved like an asshole all the times previously where you timeouted me? even those where i showed you how other DDNet admins (!) behaved even more like an asshole and i reacted to that resulting in reactive abuse in which you participated by timeouting only me? 17:32 <+bridge> gg 17:32 <+bridge> (btw you opened this, dont timeout me for public complaints now) 17:33 <+bridge> and since u dont answer any of my dms: do you still have Wire? 17:34 <+bridge> > reacting abusively to abuse is still considered abuse on the ddnet discord 17:34 <+bridge> > that's probably why you were timeouted 17:34 <+bridge> dm by heino 17:34 <+bridge> I wanted to move the discussion to DMs 17:34 <+bridge> ik 17:34 <+bridge> now i suddenly get dms :D 17:35 <+bridge> after weeks and months of ghosting for legitimate antibot requests in your interest 17:35 <+bridge> and i think you misunderstood what reactive abuse is 17:36 <+bridge> move the discussion to DMs please 17:36 <+bridge> as I already did 17:36 <+bridge> give me one really good reason 17:36 <+bridge> not an excuse that saves your image 17:37 <+bridge> you try to publicly frame me as the asshole and when i backfire you want to move to dm... hmmmm 17:37 <+bridge> :thonk: 17:43 <+bridge> I'm going to remove this discussion about rules 17:43 <+bridge> i think being the "nice asshole" applies to you then. and im not here to discuss anything, but to truthfully show what happened and still happens up to this date. take it or dont, ban me or dont. but "that's probably why you were timeouted" just shows me that you dont even take accountability for your actions, but rather try to justify them. 17:45 <+bridge> All test in Python 3.14.4 and ddnet repo 17:45 <+bridge> 17:45 <+bridge> ### `E5-2650 v4`(`CPU(s): 24`, `2.2-2.8 GHz`) 17:45 <+bridge> 17:45 <+bridge> ``` 17:45 <+bridge> -- default 17:45 <+bridge> Executed in 14.37 secs fish external 17:45 <+bridge> usr time 14.06 secs 1.11 millis 14.06 secs 17:45 <+bridge> sys time 0.20 secs 0.00 millis 0.20 secs 17:45 <+bridge> 17:45 <+bridge> -- multi thread 17:45 <+bridge> Executed in 2.93 secs fish external 17:45 <+bridge> usr time 22.62 secs 578.00 micros 22.62 secs 17:45 <+bridge> sys time 0.73 secs 838.00 micros 0.73 secs 17:45 <+bridge> ``` 17:45 <+bridge> 17:45 <+bridge> ### `EPYC 9474F` (`CPU(s): 2`, `3.6-4.1 GHz`, `vps`) 17:45 <+bridge> 17:45 <+bridge> ``` 17:45 <+bridge> -- default 17:45 <+bridge> Executed in 10.78 secs fish external 17:45 <+bridge> usr time 10.23 secs 0.00 micros 10.23 secs 17:45 <+bridge> sys time 0.49 secs 757.00 micros 0.49 secs 17:45 <+bridge> 17:45 <+bridge> -- multi thread 17:45 <+bridge> Executed in 7.37 secs fish external 17:45 <+bridge> usr time 11.00 secs 320.00 micros 11.00 secs 17:45 <+bridge> sys time 0.58 secs 312.00 micros 0.58 secs 17:45 <+bridge> ``` 17:45 <+bridge> 17:45 <+bridge> ### `i7-7700K` (`CPU(s): 8`, `4.20GHz`, `dedicated`) 17:47 <+bridge> > how much performance does the chunking gain us? 17:47 <+bridge> 17:47 <+bridge> All test in Python 3.14.4 and ddnet repo 17:47 <+bridge> 17:47 <+bridge> ### `E5-2650 v4`(`CPU(s): 24`, `2.2-2.8 GHz`) 17:47 <+bridge> 17:47 <+bridge> ``` 17:47 <+bridge> -- default 17:47 <+bridge> Executed in 14.37 secs fish external 17:47 <+bridge> usr time 14.06 secs 1.11 millis 14.06 secs 17:47 <+bridge> sys time 0.20 secs 0.00 millis 0.20 secs 17:47 <+bridge> 17:47 <+bridge> -- multi thread 17:47 <+bridge> Executed in 2.93 secs fish external 17:47 <+bridge> usr time 22.62 secs 578.00 micros 22.62 secs 17:47 <+bridge> sys time 0.73 secs 838.00 micros 0.73 secs 17:47 <+bridge> ``` 17:47 <+bridge> 17:47 <+bridge> ### `EPYC 9474F` (`CPU(s): 2`, `3.6-4.1 GHz`, `vps`) 17:47 <+bridge> 17:47 <+bridge> ``` 17:47 <+bridge> -- default 17:47 <+bridge> Executed in 10.78 secs fish external 17:47 <+bridge> usr time 10.23 secs 0.00 micros 10.23 secs 17:47 <+bridge> sys time 0.49 secs 757.00 micros 0.49 secs 17:47 <+bridge> 17:48 <+bridge> -- multi thread 17:48 <+bridge> Executed in 7.37 secs fish external 17:48 <+bridge> usr time 11.00 secs 320.00 micros 11.00 secs 17:48 <+bridge> sys time 0.58 secs 312.00 micros 0.58 secs 17:48 <+bridge> ``` 17:48 <+bridge> > I'd try to keep the script as simple as possible 17:48 <+bridge> 17:48 <+bridge> I'll give it a try, but in the end what matters is readability and performance. 17:50 <+bridge> > I'd try to keep the script as simple as possible 17:50 <+bridge> 17:50 <+bridge> I'll give it a try, but in the end what matters is readability and performance. 17:50 <+bridge> I don't want to rewrite the entire file yet. 18:02 <+bridge> misspell 18:02 <+bridge> https://cdn.discordapp.com/attachments/293493549758939136/1493642725336154133/image.png?ex=69dfb6b0&is=69de6530&hm=4b4295cdaaf35a58fcf29e58789163eb9d6ac59570b17d12753ab6867c58cf25& 18:03 <+bridge> seperate 18:08 <+bridge> It's know but we can't change it because we don't have backwards compatibility for config variables yet 18:12 <+bridge> the biggest improvement to clang-format i found is by comparing current branch to master and only running it on the modified files 18:14 <+bridge> This would be a bad decision, as some people make several commits and only then remember about this script (especially in their own forks) 18:14 <+bridge> yep probably wont work in a public repo 18:15 <+bridge> but having it auto format on push on only changed files works well :) 20:04 <+bridge> i think git clang-format does that 20:05 <+bridge> @byfox idk if its me but its hard to parse ur table i would show it clearly a before and after without usr or sys time 20:08 <+bridge> > how much performance does the chunking gain us? 20:08 <+bridge> 20:08 <+bridge> All test in Python 3.14.4 and ddnet repo 20:08 <+bridge> 20:08 <+bridge> ### Performance Comparison: Chunking (Multi-thread) vs Default (Single-thread) 20:08 <+bridge> 20:08 <+bridge> | CPU Model | Cores / Threads | Clock Speed | Environment | Default Time | Multi-thread Time | **Speedup** | User CPU Time (Multi) | Efficiency | 20:08 <+bridge> | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | 20:08 <+bridge> | **Xeon E5-2650 v4** | 24 | 2.2–2.8 GHz | Physical | 14.37 s | **2.93 s** | **4.9x** | 22.62 s | 20% | 20:08 <+bridge> | **EPYC 9474F** | 2 (vCPU) | 3.6–4.1 GHz | VPS | 10.78 s | **7.37 s** | **1.5x** | 11.00 s | 75% | 20:08 <+bridge> | **i7-7700K** | 8 | 4.20 GHz | Dedicated | 14.17 s | **4.00 s** | **3.5x** | 14.86 s | 44% | 20:08 <+bridge> All test in Python 3.14.4 and ddnet repo 20:08 <+bridge> 20:08 <+bridge> ### `E5-2650 v4`(`CPU(s): 24`, `2.2-2.8 GHz`) 20:08 <+bridge> 20:08 <+bridge> ``` 20:08 <+bridge> -- default 20:08 <+bridge> Executed in 14.37 secs fish external 20:08 <+bridge> usr time 14.06 secs 1.11 millis 14.06 secs 20:08 <+bridge> sys time 0.20 secs 0.00 millis 0.20 secs 20:09 <+bridge> 20:09 <+bridge> -- multi thread 20:09 <+bridge> Executed in 2.93 secs fish external 20:09 <+bridge> usr time 22.62 secs 578.00 micros 22.62 secs 20:09 <+bridge> sys time 0.73 secs 838.00 micros 0.73 secs 20:09 <+bridge> ``` 20:09 <+bridge> 20:09 <+bridge> ### `EPYC 9474F` (`CPU(s): 2`, `3.6-4.1 GHz`, `vps`) 20:09 <+bridge> 20:09 <+bridge> ``` 20:09 <+bridge> -- default 20:09 <+bridge> Executed in 10.78 secs fish external 20:09 <+bridge> usr time 10.23 secs 0.00 micros 10.23 secs 20:09 <+bridge> sys time 0.49 secs 757.00 micros 0.49 secs 20:09 <+bridge> 20:09 <+bridge> -- multi thread 20:09 <+bridge> Executed in 7.37 secs fish external 20:09 <+bridge> usr time 11.00 secs 320.00 micros 11.00 secs 20:09 <+bridge> sys time 0.58 secs 312.00 micros 0.58 secs 20:09 <+bridge> ``` 20:09 <+bridge> 20:09 <+bridge> ### `i7-7700K` (`CPU(s): 8`, `4.20GHz`, `dedicated`) 20:10 <+bridge> https://github.com/ddnet/ddnet/pull/12047#issuecomment-4246124628 20:10 <+bridge> Is this better? :) 20:13 <+bridge> clang-format is a single-threaded application, it loads my thread, one of 24 20:14 <+bridge> no i mean "git clang-format" exists and i think it formats files with diffs only 20:14 <+bridge> https://github.com/llvm/llvm-project/blob/main/clang/tools/clang-format/git-clang-format 21:14 <+bridge> didnt know about this 21:15 <+bridge> i did mine with hacky diff command 23:44 <+bridge> what is a grid called if the distance between a cell and its neighbors is variable