00:09 < bridge> github searching is so fucking broken 00:09 < bridge> i am so mad 00:09 < bridge> like i am searching in a commit, getting 4 results, find a result missing, and need to anticollapse a file, because it's too big and there is the missing reference 00:10 < bridge> microsoft moment 00:26 < bridge> use git log like a pro 00:28 < bridge> Yea gotta do it locally doing it on GitHub is a waste of time usually 00:30 < bridge> @robyt3 is serverbrowser slower after your pr? after opening the game i see "Getting server list from master server" for like a second 00:30 < bridge> didnt happen before 00:31 < bridge> on older version if i go into game and spam P i see this text for maybe 0.1s 00:31 < bridge> on nightly its like 2 seconds 01:32 < bridge> . 02:22 < bridge> in https://wiki.ddnet.org/wiki/FAQ#Where_is_the_DDNet_config,_config_directory_or_save_directory? it is explained that config files like deepfly.cfg are to be put inside ~/.local/share/ddnet/, but i have the client files in ~/Documents/ddnet/ that are tracked with git. is it possible to use this folder instead ? 02:37 < bridge> app directory gets overwritten on new update 02:37 < bridge> appdata does not 02:39 < bridge> oh 02:39 < bridge> so i should track .local/share/ddnet with git 02:42 < bridge> no, the new versions do; that's why the existing behavior (and -lssp) work without fuss 08:19 < bridge> morning devs and others 08:42 < bridge> why close issue without discussion 08:43 < bridge> saying open a pr kills the discussion flow. also you cant add a default bind for 45 degree unless u support variables in binds (mouse max dist and mouse sens) 08:43 < bridge> why close pr while it has a bunch of somewhat active discussion 08:44 < bridge> saying open an issue kills the discussion flow. also you cant add a default bind for 45 degree unless u support variables in binds (mouse max dist and mouse sens) 08:45 < bridge> whatever, i dont really care for the feature that much, if players want it they can ask some other admin to reopen it 08:45 < bridge> i am against adding it, also the vibe of the discussion feels also to not add it 08:45 < bridge> yeah 08:45 < bridge> learath seemed to be not opposed 08:45 < bridge> there was no strong vote for it 08:46 < bridge> "seemed" is a bit vague 08:46 < bridge> and since its a change that can't rly be removed (because for example tclient would keep it forever) its risky 08:51 < bridge> @zwelf2 can u answer when u can on https://github.com/ddnet/ddnet/pull/10049 08:53 < bridge> @ryozuki holidays? xd 08:53 < bridge> today is holiday here xd 08:55 < bridge> But that’s different. Tclient and DDNet are not the same. You can just ban tclient versions with the feature you don’t like on DDNet servers. 09:03 < bridge> @robyt3 pls see https://github.com/ddnet/ddnet/pull/8539 i pushed 09:12 < bridge> we would change it to whatever is accepted 09:12 < bridge> i want the 45 deg bind without the jank of setting distance, a similar thing to how dyncam has seperate settings 09:12 < bridge> there are more clients anyway 09:13 < bridge> good morning, is the database schema somewhere defined on github? 09:14 < bridge> theres currently things in ddnet client which are possible but not allowed 09:14 < bridge> i would expect all non hacked clients to remove them when their fixes come 09:14 < bridge> i think ddnet scripts or smth 09:15 < bridge> like wat 09:16 < bridge> ``` 09:16 < bridge> /Applications/Xcode_15.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk/usr/include/c++/v1/__algorithm/inplace_merge.h:28: 09:16 < bridge> /Applications/Xcode_15.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk/usr/include/c++/v1/__memory/unique_ptr.h:68:5: error: delete called on non-final 'CLocalServer' that has virtual functions but non-virtual destructor [-Werror,-Wdelete-non-abstract-non-virtual-dtor] 09:16 < bridge> delete __ptr; 09:16 < bridge> ^ 09:16 < bridge> ``` 09:16 < bridge> plz sir, its not my fault 09:16 < bridge> virtual ~CLocalServer = default; 09:17 < bridge> it should actually be in CComponentInterfaces 09:17 < bridge> `virtual ~CLocalServer = default;` assuming it doesn't have an explicit destructor 09:33 < bridge> It’s defined as a sql string search for CREATE TABLE it’s probably scoreworker.cpp or something like that 09:53 < bridge> I don't have a strong opinion there. I should definitely take a look and comment 🙈 10:01 < bridge> I think I don't need to change the schema, I just needed to adjust what I feed into it meaning precsision 10:01 < bridge> but thank you ❤️ 10:02 < bridge> here a puzzle for you: 10:02 < bridge> ``` 10:02 < bridge> m_Time = ((float)(Server()->Tick()) - 1.f + FractionOfTick - m_StartTime) / ((float)Server()->TickSpeed()); 10:02 < bridge> float DebugTime = (20*((float)Server()->Tick()) - 20 + (int)(20*FractionOfTick) - m_StartTime) / 1000.0f; 10:02 < bridge> dbg_assert(DebugTime == m_Time, "times do not equal %f %f", m_Time, DebugTime); 10:02 < bridge> ``` 10:02 < bridge> 10:02 < bridge> Why is this not the same? `times do not equal 0.000000 1.577000` 10:04 < bridge> wait what the original doesn't multiple start time by 20, well that's sus 10:04 < bridge> wait what the original doesn't multiply start time by 20, well that's sus 10:15 < bridge> https://github.com/ddnet/ddnet/pull/10028 10:15 < bridge> IT LIVES 10:16 < bridge> What is the problem? 10:16 < bridge> Why can you not bump the tidy version? 10:16 < bridge> Does any CI not have clang-tidy 21? 10:17 < bridge> clang 21 is extremly new apprently 10:18 < bridge> it is, i just moved it to the most recent released 10:18 < bridge> yeah, seems like adding the `m_pChooseMaster->Reset();` has somehow added a delay 10:18 < bridge> but without it the state is not correct initially 10:18 < bridge> alot of checks arent available in old versions 10:18 < bridge> but without it the state is not correct initially on errors 10:19 < bridge> Yes, but we have to orientate on what the CI can give 10:19 < bridge> Simply reopen the PR once the version goes live 10:19 < bridge> the ci works for clang 21 10:19 < bridge> its just im going thru all the errors 10:19 < bridge> @sollybunny The patches you made are in a different PR too? 10:19 < bridge> theres not as many as i thought there would be 10:20 < bridge> same pr, i cant push code which fails the ci i just added 10:20 < bridge> @jupeyy_keks what's msgflsg vital or flush, and which one should have been used? I just looked at other parts of code and seemed correct 10:20 < bridge> same pr, i cant push ci which fails 10:20 < bridge> Without flush, the packet will probably delayed until the next snapshot is sent 10:20 < bridge> If we need vital or not, I dunno 10:20 < bridge> 10:20 < bridge> But vital means it's resend on packet loss, which again increases traffic 10:20 < bridge> Which might be bad during a dos, since it broadcasts this msg to all clients 10:21 < bridge> Oh wow, the CI fails, sry didn't see 10:21 < bridge> 10:21 < bridge> The changes look mostly like code cleanup 10:22 < bridge> There isn't even any clang-tidy bump 10:22 < bridge> I explicitly stated that tclient offical would not keep it forever 10:22 < bridge> in the thread 10:23 < bridge> pretty much every chunk except input and input timing requires vital flag 10:23 < bridge> its the first commit 10:23 < bridge> snaps are not vital either 10:23 < bridge> Everything that is streamed can be lossy usually 10:24 < bridge> Sry but my github only shows one commit 10:24 < bridge> Either I am retarded rn, or we talk about different PRs 10:24 < bridge> Should it be changed? 10:24 < bridge> No problem to do a follow up pr 10:25 < bridge> ` const int *pDstEnd = pDst + DstSize / sizeof(int);` 10:25 < bridge> why is it done like this 10:25 < bridge> caught by "sus pointer arithmatic" 10:25 < bridge> everywhere with this warning thers some byte size being turned into an int size, this causes a rounding down which idk if its intentional 10:25 < bridge> Because it's an int pointer 10:26 < bridge> From pure feeling I'd make it non-vital, but usually I don't review server code, that's why'd have prefered a review from lea or heinrich 10:26 < bridge> should i nolint it? 10:26 < bridge> Unless you know how to fix it correctly 10:27 < bridge> You could do smth like pDst[DstSize] 10:27 < bridge> That would do the same 10:27 < bridge> If pDst is int ptr 10:27 < bridge> I'll check again latet 10:27 < bridge> But they're inactive though 10:27 < bridge> or maybe &pDst[..] 10:27 < bridge> I'll check again later 10:27 < bridge> But `DstSize` is the original size in bytes 10:28 < bridge> Oh yeah the division too 10:29 < bridge> ptroffset is i64 since you can do + and - operations on it 10:29 < bridge> I assume that is the reason this happens, but dunno xd 10:29 < bridge> [] operator should take usize usually 10:30 < bridge> not really, i dont understand this code 10:30 < bridge> silence warning! 10:31 < bridge> At least try the suggestion before silencing it 10:35 < bridge> @robyt3 You are certain about #10128? 10:35 < bridge> 10:35 < bridge> I've nothing against it, even tho I dunno if it's actually useful. 10:35 < bridge> Apparently you at least made the demo handler more robust with it? ^^ 10:35 < bridge> https://github.com/ddnet/ddnet/pull/10128 10:38 < bridge> Chillers use case sounds more like he wants instant replay 10:38 < bridge> Murpi dunno xd 10:38 < bridge> Not sure if he understod what I meant 10:38 < bridge> i dont understand what the suggestion is, how it fixes it and im scared of breaking stuff 10:39 < bridge> you can make another pr if u want >< 10:40 < bridge> You do 10:40 < bridge> 10:40 < bridge> ptr + number 10:40 < bridge> 10:40 < bridge> the number here is a ptrdiff (https://en.cppreference.com/w/cpp/types/ptrdiff_t.html), which is signed int 10:40 < bridge> 10:40 < bridge> sizeof usually returns `usize`. So I assume the analyzer things you doing weird stuff. 10:40 < bridge> 10:40 < bridge> `[]-opeartor` however takes a usize as argument (so only allows positive offsets 10:40 < bridge> Since that is what you want it's probably the better fitting operation here 10:41 < bridge> you sound like a teacher 10:41 < bridge> "i dont understand" 10:41 < bridge> "NO YOU DO UNDERSTAND YOU IGNORAMOUS" 10:41 < bridge> ehehehe 10:41 < bridge> You do 10:41 < bridge> 10:41 < bridge> ptr + number 10:41 < bridge> 10:41 < bridge> the number here is a ptrdiff (https://en.cppreference.com/w/cpp/types/ptrdiff_t.html), which is signed int 10:41 < bridge> 10:41 < bridge> sizeof usually returns `usize`. So I assume the analyzer thinks you doing weird stuff. 10:41 < bridge> 10:41 < bridge> `[]-opeartor` however takes a usize as argument (so only allows positive offsets 10:41 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1386989688660951040/image.png?ex=685bb64e&is=685a64ce&hm=24b80f25cc44709238a0ea2170fe336dbc51132757a92d5cf47d71cef9999188& 10:42 < bridge> I assume bcs u merged the virtual thing in another PR or not? 10:42 < bridge> And this pr does nothing else xD 10:42 < bridge> oh i misread xD 10:43 < bridge> i cant just do virtuals now 10:43 < bridge> since all the other clang tidies are 10:43 < bridge> fighting 10:43 < bridge> i cant reopen however its not same thing removing virtuals to clang tidy no? 10:43 < bridge> i think someone deleted the branch or smth 10:43 < bridge> the branch stille xists 10:43 < bridge> seeing as im still pushing to it 10:43 < bridge> ill just make another pr 10:43 < bridge> Even emotes are vital 10:44 < bridge> weird gh stuff 10:44 < bridge> but clang tidy 21 is not even on gentoo 10:44 < bridge> we only use it in ci so its fine 10:45 < bridge> i wouldnt add smth devs cant use locally with ease tho 10:45 < bridge> what does 21 have that u need? 10:45 < bridge> why not 20 10:45 < bridge> it was just the most recent version 10:45 < bridge> Yes, emotes are a questionable packet anyway, btw they also increased traffic to an extend that it ddosed the russian VPS: 10:45 < bridge> #6715 10:45 < bridge> its pretty easy to install 10:45 < bridge> https://github.com/ddnet/ddnet/pull/6715 10:45 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1386990641686384650/image.png?ex=685bb732&is=685a65b2&hm=38779de08bfebaaba5d7c0d6ff07e53a91f52b10b5f0ba867e3788bce51b36a0& 10:45 < bridge> That is also why I am pretty concerned about broadcast messages 10:46 < bridge> @ryozuki see how the ci installs it 10:46 < bridge> i know i installed llvm countless times 10:46 < bridge> but its not the same as relying on pkg manager 10:46 < bridge> thats my point 10:46 < bridge> i guess so 10:47 < bridge> even rolling distros havent yet updated 10:47 < bridge> https://archlinux.org/packages/extra/x86_64/llvm/ 10:47 < bridge> arch is on 20 10:47 < bridge> just use 20 10:47 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1386991056821686292/image.png?ex=685bb794&is=685a6614&hm=9445e7c4acb4745cd639602ab7bc14a55901ebe2bcc6650e13def13837bb13c7& 10:47 < bridge> okay 10:47 < bridge> ALSO IT LIED TO ME 10:47 < bridge> `RegisterGameUuids` is used 10:47 < bridge> (updating llvm in distros takes time iirc) 10:48 < bridge> lmao 10:49 < bridge> @sollybunny install remind me bot 10:49 < bridge> 😬 10:49 < bridge> ? 10:50 < bridge> So when clang tidy 21 releases your PR gets relevant 10:50 < bridge> noooo 10:50 < bridge> ill just use 20 10:50 < bridge> Or do your changes work with 20? 10:50 < bridge> i pressume so 10:50 < bridge> Do they also work with 19? 10:50 < bridge> Or 18? 10:50 < bridge> .---. 10:50 < bridge> im using 20 10:50 < bridge> 😉 10:50 < bridge> https://tenor.com/view/pir%C3%B3mano-meme-jeje-odio-bomberos-gif-15722930 10:50 < bridge> me after merging prs 10:50 < bridge> My default version is 19. 10:50 < bridge> 10:50 < bridge> But I also have 21 installed 10:50 < bridge> bruh 10:51 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1386992001945174047/image.png?ex=685bb876&is=685a66f6&hm=77bb65ad9ae0747dada497d31503e417d71253cbfe4cd1fe3c18e2e099f3bbd4& 10:51 < bridge> i already d wizardly to have a usable ddnet dev environment 10:51 < bridge> Clang is wasting my disk space 10:51 < bridge> why is llvm 21 too much 10:51 < bridge> xd 10:51 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1386992066319351838/image.png?ex=685bb885&is=685a6705&hm=d1fc3075fd2434e6f2012d602f12d2a93f7847e7fc795f10813f290f163d92d3& 10:51 < bridge> What's `clang --version` for you? (default) 10:52 < bridge> clang --version 10:52 < bridge> clang version 20.1.7 10:52 < bridge> Target: x86_64-pc-linux-gnu 10:52 < bridge> Thread model: posix 10:52 < bridge> InstalledDir: /usr/lib/llvm/20/bin 10:52 < bridge> Configuration file: /etc/clang/20/x86_64-pc-linux-gnu-clang.cfg 10:54 < bridge> the colorin makes it look like u took a picturelmao 10:54 < bridge> True, especially the blur 10:55 < bridge> kinda like a reflection xd 10:55 < bridge> did u try to compile and run client 10:56 < bridge> @sollybunny so clang 20 is also not in the apt repo? 10:56 < bridge> Maybe try 19 xD 10:56 < bridge> We should at least support latest stable ubuntu 10:56 < bridge> nooo 10:56 < bridge> yeah appears to work 10:56 < bridge> i should probably check that now 10:56 < bridge> (check the checkmark) 10:58 < bridge> finally got linux to kill memory hogs 10:58 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1386993795060732056/image.png?ex=685bba21&is=685a68a1&hm=c41ee8d51d411e2cfc9d79561343f4321a11ea1ffe0a6ee8c82b383537264996& 11:08 < bridge> Did it just use lot of memory or did it leak? 11:14 < bridge> i fell for generated files again, argh 11:14 < bridge> I dislike generated files 11:15 < bridge> hi,i would like to ask a question. If I plan to sponsor a server to open a ddnet server, what do I need to know? What are the server configuration requirements? 11:16 < bridge> i asked learath2 but he seems to have been offline for two days... 11:16 < bridge> https://cdn.discordapp.com/attachments/997859408862269502/1241735633869996052/QJGQ25TQJN033Y04FP3.gif 11:16 < bridge> Any vps should do, ddnet does not have huge requirements. 11:16 < bridge> 11:16 < bridge> You'd probably need to send money to deen and ask him to host a server for your region. 11:17 < bridge> learath often ignores PMs 11:17 < bridge> i will purchase a server located in China for the community server 11:17 < bridge> https://cdn.discordapp.com/attachments/997859408862269502/1241735633869996052/QJGQ25TQJN033Y04FP3.gif 11:18 < bridge> You can also #✉-create-a-ticket admin mail maybe to discuss it. 11:18 < bridge> 11:18 < bridge> I dunno if deen is open to others buying servers except for maybe russia where he cannot pay 11:19 < bridge> ok,i will try to contact the administrator later. thank. 11:25 < bridge> I think it needs more testing especially on Linux and macOS, only tested on my machine so far. It's not exactly more robust, I allow playing demos that are only broken at the end again, which was previously validated more strictly. 11:38 < bridge> I have an issue of interpolated `POWERUP_HEALTH` positions, though it should not be the case, as each powerup has its own `Server()->SnapNewId()`. 11:38 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1376929918641897543/infc_prediction_bug.mp4?ex=685b5eaa&is=685a0d2a&hm=0fcbf17955126cc2babd4e4096100723dd32468b8993565f13b05bb1594591c1& 12:47 < ws-client> I can confirm lerato big dm ignorer. 12:47 < ws-client> @learath2 when chat w me 12:52 < bridge> plz help, clang tidy thinks that dbg_asserts dont use the code 12:52 < bridge> meaning it spits dead code warnings 12:55 < bridge> but only on my machine 12:57 < bridge> dbg_assert is no-op if you are compiling in release mode afair 12:57 < bridge> like just ```#define dbg_assert(...)``` 12:57 < bridge> No, they are and have to be always compiled 13:00 < bridge> ``` 13:00 < bridge> cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_CLANG_TIDY="clang-tidy" -DCMAKE_C 13:00 < bridge> C_CLANG_TIDY="clang-tidy" 13:00 < bridge> cmake --build . -j7 13:00 < bridge> ``` 13:00 < bridge> ```sh 13:00 < bridge> cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_CLANG_TIDY="clang-tidy" -DCMAKE_C 13:00 < bridge> C_CLANG_TIDY="clang-tidy" 13:00 < bridge> cmake --build . -j7 13:00 < bridge> ``` 13:00 < bridge> ```sh 13:00 < bridge> cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_CLANG_TIDY="clang-tidy" -DCMAKE_C_CLANG_TIDY="clang-tidy" 13:00 < bridge> cmake --build . -j7 13:00 < bridge> ``` 13:00 < bridge> Send the warning 13:01 < bridge> aeh its alrady compiled it holdon 13:01 < bridge> :nouis: 13:02 < bridge> seems like none of dbg_* functions are debug only xd 13:02 < bridge> ```cpp 13:02 < bridge> /home/solly/Code/ddnet/src/engine/shared/datafile.cpp:1118:13: warning: Value stored to 'Result' during its initialization is never read [clang-analyzer-deadcode.DeadStores] 13:02 < bridge> 1118 | const int Result = compress2(static_cast(DataInfo.m_pCompressedData), &CompressedSize, static_cast(DataInfo.m_pUncompressedData), DataInfo.m_UncompressedSize, CompressionLevelToZlib(DataInfo.m_CompressionLevel)); 13:02 < bridge> | ^~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 13:02 < bridge> /home/solly/Code/ddnet/src/engine/shared/datafile.cpp:1118:13: note: Value stored to 'Result' during its initialization is never read 13:02 < bridge> ``` 13:02 < bridge> ```cpp 13:02 < bridge> for(CDataInfo &DataInfo : m_vDatas) 13:02 < bridge> { 13:02 < bridge> unsigned long CompressedSize = compressBound(DataInfo.m_UncompressedSize); 13:02 < bridge> DataInfo.m_pCompressedData = malloc(CompressedSize); 13:02 < bridge> const int Result = compress2(static_cast(DataInfo.m_pCompressedData), &CompressedSize, static_cast(DataInfo.m_pUncompressedData), DataInfo.m_UncompressedSize, CompressionLevelToZlib(DataInfo.m_CompressionLevel)); 13:02 < bridge> DataInfo.m_CompressedSize = CompressedSize; 13:02 < bridge> free(DataInfo.m_pUncompressedData); 13:02 < bridge> DataInfo.m_pUncompressedData = nullptr; 13:02 < bridge> dbg_assert(Result == Z_OK, "datafile zlib compression failed with error %d", Result); 13:02 < bridge> } 13:02 < bridge> ``` 13:02 < bridge> dbg_assert doesnt have a way to be disabled, so its just ef-ing up the macro but idk why 13:03 < bridge> (i full system updated b4 this to get clang-tidy 20) 13:05 < bridge> I just found out, that you can't finish in ddnet on a map, where start and finish are on the same tile (with front layer), because finish time - start time is < 0 13:05 < bridge> nooooooooooooooooooooooooooooooooooooooooooooooooi 13:05 < Learath2> this brings back some memories 13:06 < bridge> bot 13:06 < bridge> :banhammer: 13:06 < bridge> Interesting, if leave and join the tile again, still not? bcs time is reset in t0? 13:06 < bridge> start is handled before finish, and start resets the time again 13:07 < bridge> I just found out, that you can't finish in ddnet on a map, where start and finish are on the same tile (with front layer), because finish time - start time is <= 0 13:07 < bridge> Sad that it only works in t0 tho 13:07 < bridge> lol what 13:08 < bridge> xDDD 13:08 < bridge> so we can make maps that filter out t0 times, nice 13:08 < bridge> xDDDD 13:08 < bridge> True 13:08 < bridge> Nice usecase 13:08 < bridge> anti t0 finishes 13:08 < bridge> Not like you can just force teams anyway 13:10 < bridge> omg I should create a puzzle server 13:10 < bridge> honestly, you'd need insane bug knowledge to finish some stuff 13:10 < ws-client> game client being protected now is annoying af btw 13:10 < ws-client> who did that -.- 13:10 < ws-client> solly? 13:10 < bridge> NO 13:10 < bridge> royb 13:10 < bridge> robyt probably with subcomponent pr 13:11 < bridge> why is it annoying 13:11 < bridge> apart from u have to change stuff 13:11 < ws-client> m_pClient -> GameClient() is annoying because i have to change a lot of places but it looks nicer so its fine 13:11 < ws-client> the protected thing is annoying because it breaks my code that can not access the gameclient anymore 13:12 < ws-client> for example if i need the gameclient in a conchain callback 13:12 < bridge> but wait you still compile in release mode with clang tidy on? 13:12 < ws-client> i used it in a bunch of places now i have to dance around it -.- 13:13 < ws-client> sub component sounds interesting tho 13:13 < Learath2> If chiller is complaining about something, it's almost always about it being annoying to merge into his fork :P 13:13 < ws-client> yes i merge a lot 13:13 < bridge> that brings up `__clang_analyzer__` and it coverts into `assert(Result == Z_OK)` which is no op in release mode? 13:14 < bridge> converts* 13:14 < bridge> i can be wrong again so just try it out in debug mode xd 13:14 < ChillerDragon> lertao dms 13:15 < bridge> why is this not a reference `const ERaceState PlayerDDRaceState = pChr->m_DDRaceState;` 13:15 < bridge> (╯°□°)╯︵ ┻━┻ 13:16 < ChillerDragon> @learath2 13:19 < bridge> yeah 13:19 < bridge> relwithdbginfo 13:20 < bridge> no its just an if statement 13:20 < bridge> can you try out debug build anyway 13:20 < bridge> :justatest: 13:20 < bridge> sooooon 13:20 < bridge> im just ignoring those awrnings 13:20 < bridge> xd 13:21 < bridge> they dont show in ci 13:21 < bridge> https://en.cppreference.com/w/cpp/error/assert.html 13:22 < bridge> its literally (void)0 in release mode 13:25 < bridge> oh god they use comma operator to avoid warnings 13:25 < bridge> pretty smart 13:26 < bridge> ```cpp 13:26 < bridge> #define dbg_assert(test, fmt, ...) \ 13:26 < bridge> do \ 13:27 < bridge> { \ 13:27 < bridge> if(!(test)) \ 13:27 < bridge> { \ 13:27 < bridge> dbg_assert_imp(__FILE__, __LINE__, fmt, ##__VA_ARGS__); \ 13:27 < bridge> } \ 13:27 < bridge> } while(false) 13:27 < bridge> ``` 13:27 < bridge> check out __clang_analyzer__ part 13:27 < bridge> check out `__clang_analyzer__` part 13:27 < bridge> oh i see 13:28 < bridge> why do it do that 13:28 < bridge> x-x 13:29 < bridge> you need to `((void)(test), assert(test))` probably 13:29 < bridge> our one also goes to noreturn 13:30 < bridge> we use dbg_assert(false) aswell after definate failures 13:30 < bridge> aswell 13:30 < bridge> ima disable it and see what happens 13:31 < bridge> it's just a way to silence this warning without nolint 13:39 < bridge> 50$ steam - [steamcommunity.com/gift/activation=OzEQWHvrZD](https://e.vg/OzEQWHvrZD) @everyone 13:42 < bridge> @Discord Mod 13:42 < bridge> xd 13:42 < bridge> poor milke 13:43 < bridge> Ghost ping detection should probably not apply to messages deleted by mod actions 13:43 < bridge> it also reacts on message deleted by bot 13:43 < bridge> so i can easily timeout myself :troll: 13:43 < bridge> time to poc 13:46 < bridge> @gerdoe: @robyt3 @milkeeycat @sollybunny get ghost pinged axaxaxax 13:46 < bridge> chillerdragon: get ghostpinged 13:46 < bridge> Xd 13:46 < bridge> Fair 13:47 < ws-client> irc never forgets lel 13:47 < bridge> so next: send steam gift cards over ws-client with bot 13:47 < bridge> lmao nice 14:28 < bridge> why is some weapon tele and hook tele rendered like blue tele (should be yellow and green in my gameskin) 14:28 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1387046784903151677/d86d489fcd6f1766.png?ex=685beb7b&is=685a99fb&hm=e7a12dd5763eb2d2b6773ffb69237077178408e776d0444be8ad7cb54ac445f7& 14:31 < bridge> old map 14:32 < bridge> `sv_old_teleport_weapons` 14:38 < bridge> yeah i mean can they be rendered differently 14:58 < bridge> @jupeyy_keks 15:39 < bridge> Thanks :deen_star: 15:54 < bridge> i managed to do windows toast notification in 30 loc 15:54 < bridge> :deen_star: 15:55 < bridge> without wintoast 15:55 < bridge> @kebscs btw servers are usually recompiled every few days. 15:55 < bridge> 15:55 < bridge> simply do /info on a server, the empty once seem to be on af4feb3922006470 15:55 < bridge> https://github.com/ddnet/ddnet/commit/af4feb3922006470 15:55 < bridge> yea ik about /info 15:55 < bridge> no servers yet on preinput pr 15:56 < bridge> Too bad it's not on kog servers, else I could finally play with chile players hehe 15:57 < bridge> ive never joined kog but my ip is banned 15:57 < bridge> so i cba 15:58 < bridge> but seen here they are behind a lot 15:58 < bridge> didnt have spec count for long time 16:03 < bridge> I actually don't get what it's complaining about: 16:03 < bridge> ``` 16:03 < bridge> CMake Error (dev) at CMakeLists.txt:369 (message): 16:03 < bridge> GAME_SERVER does not contain every file from directory src/game/server 16:03 < bridge> ``` 16:03 < bridge> I added two files, both are in the diff, both are in the CMakeList, why is it complaining 😠 16:03 < bridge> Wrongly sorted? 16:04 < bridge> locally it says this: 16:04 < bridge> ``` 16:04 < bridge> cmake] CMake Warning (dev) at CMakeLists.txt:389 (message): 16:04 < bridge> [cmake] GAME_SERVER is not alphabetically sorted 16:04 < bridge> ``` 16:04 < bridge> 16:04 < bridge> Which makes sense, but the other error must be wrong 16:04 < bridge> I think the error msg was always bit bad 16:05 < bridge> also the sorting is case sensitive afaict 16:06 < bridge> file sorting is a weird topic anyway 16:06 < ws-client> cring who does it by hand btw 16:06 < bridge> I've seen explorers ignore stuff like `_` or cases etc. 16:06 < bridge> Chiller tell us more 16:06 < ws-client> i have script 16:06 < bridge> What bash script u have 16:07 < ws-client> u dont know it? 16:07 < ws-client> i plug it weekly 16:07 < ws-client> its op 16:07 < ws-client> it makes sure current file tree is correctly reflected in CMakeListst.txt 16:07 < bridge> normally I don't need a script for adding 2 files 16:07 < bridge> I hope it's a one liner 16:07 < bridge> Like all op bash things 16:07 < ws-client> no xd 16:07 < bridge> less | grep | xargs | sort | chiller 16:07 < ws-client> https://github.com/lib-crash/lib-teeworlds/blob/1b4c6615c6891e3a62773bbdbd92be027b339d31/bin/tw_cmake 16:07 < ws-client> 300 lines 16:07 < ws-client> but really good 16:08 < bridge> you forgot ` | chatgpt_cli` 16:08 < bridge> sick 16:08 < bridge> lib-crash, nice repo 16:08 < ws-client> i just do ``tw_cmake .`` and i am done 16:08 < ws-client> also op during merge conflicts i dont even have to open CMakeListst.txt in editor ever 16:08 < ws-client> thats also why i dont need the globbing pr as bad as solly needs it xd 16:08 < bridge> Didn't know you such an elite guy 16:08 < bridge> +rep 16:09 < ws-client> i cant do alphabet 16:09 < ws-client> back in the days before i had the script i was hard stuck on adding files xd 16:11 < bridge> did 19.3 introduce something to clang-tidy? 16:11 < bridge> I mean after tag 19.3 16:12 < bridge> Watcha mean? 16:14 < bridge> I don't understand why this fails 16:14 < ws-client> assa just fix_style.py 16:14 < bridge> ``` 16:14 < bridge> python scripts/fix_style.py 16:15 < bridge> Found no clang-format 10``` 16:15 < bridge> 16:15 < bridge> :thonk: 16:15 < ws-client> install it 16:16 < ws-client> @Assa https://github.com/muttleyxd/clang-tools-static-binaries/releases 16:17 < ws-client> or get it from your package manager if you have a good one :p 16:18 < ws-client> @robyt3 what do you think about fix_style.py automatically downloading clang-format-10? o.O 16:19 < bridge> Do you all use this script wtf 16:19 < bridge> I couldn't code with manually calling scripts like that 16:20 < bridge> Also isn't it rather slow to scan all files every time instead only the saved one 16:20 < ws-client> nah even on my laptop its fast enough 16:20 < ws-client> way faster than compile 16:20 < ws-client> i jsut do it before commit 16:20 < bridge> :pepepuke: 16:20 < bridge> 16:20 < bridge> automatically downloading sounds like a bad idea, but you could add a hint instead of silently failing / running it with the wrong clang-format version 16:21 < ws-client> why bad idea 16:21 < ws-client> would be op UX 16:21 < ws-client> especially for windows gooflords 16:21 < bridge> to download and run prebuilt binaries within a format script? ._. 16:21 < ws-client> yes 16:21 < ws-client> i love it when stuff like that happens 16:22 < ws-client> the alternative is ppl simply not running it i guess 16:23 < ws-client> @Jupstar ✪ clang format should also work on indivdual files its probably 1 line of bash to have a on save format deamon 16:23 < ws-client> but that sucks 16:23 < bridge> i mean in a best-case scenario people would read the CONTRIBUTING.md, which i extended for exactly this: 16:23 < bridge> https://github.com/ddnet/ddnet/commit/1326deb7fef61728348694dffb07822d76920db7 16:23 < ws-client> doing it manually is more fun 16:24 < bridge> I have format on save 16:24 < bridge> I never formatted by hand 16:24 < bridge> .vscode workspace enjoyer 16:24 < bridge> And i can code ugly, press CTRL + S and it looks nice all of a sudden 16:24 < ws-client> format on save makes me nervouse 16:24 < ws-client> i hate it 16:24 < bridge> Isn't that nice 16:24 < bridge> Why that? 16:24 < ws-client> I WRITE THE CODE 16:24 < ws-client> nobody else 16:24 < bridge> I do that since the introduction of clang-format in our code 16:25 < ws-client> i dont want anything unexpected to happen automatically 16:25 < bridge> Never failed me 16:25 < ws-client> i want file save to be instant 16:25 < ws-client> i want no magic 16:25 < bridge> It's pretty instant 16:26 < ws-client> jupstar do you also run CI as pre commit hook? xd 16:28 < bridge> No, but since I use clangd it shows all clang-tidy LINTS 16:29 < bridge> And other stuff usually doesn't fail 16:29 < bridge> the clang-tidy stuff is also present in current master, I didn't change this lines 16:29 < bridge> ~~the clang-tidy stuff is also present in current master, I didn't change this lines~~ apparently I did :justatest: 16:36 < bridge> here chiller 16:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1387078977470070924/ajaj.mp4?ex=685c0976&is=685ab7f6&hm=60ad192a626ba49d3adbbcdcda79a4b66c99153a93999208838d590297c36382& 16:36 < bridge> My experience 16:36 < bridge> Feels instant to me 16:38 < bridge> Indenting the whole file is just as fast on re-format 16:43 < bridge> Manually format the code to not download clang-format-10 16:43 < bridge> :gigachad: 16:49 < bridge> if I'd be a tutor, I would let the students do this once for like 3 K lines of code, after that they'll know why projects contain linters and hopefully why we need them. 17:15 < bridge> does the server not access the generated files? 🤔 17:15 < bridge> ``` 17:15 < bridge> fatal error: 'game/generated/client_data.h' file not found 17:15 < bridge> #include 17:15 < bridge> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 17:15 < bridge> 1 error generated. 17:15 < bridge> ``` 17:17 < bridge> I guess if I read that correct it was removed from the cmake list for the server at some point 17:25 < ws-client> @Jupstar ✪ blazingly electron 17:25 < ws-client> i also show clang tidy lints 17:25 < ws-client> but no auto fixes only if i tell it to 17:25 < ws-client> idk external formatting is much more pleasing for me smh 17:27 < bridge> Well then 17:30 < bridge> Chiller I am open to not use electron alternative. Haven't seen any that convinced me yet tho 17:30 < bridge> zed & lapce are now the never finished products 17:30 < bridge> The wayland of code editors basically 17:30 < bridge> 😬 17:31 < bridge> zed has a debugger now, let's test 17:31 < bridge> I don't think it should be in the script, dependencies should be set-up by the user by following the readme 17:33 < bridge> The server includes `server_data.h/cpp` instead, but it's mostly unused 17:33 < bridge> #9040 17:33 < bridge> https://github.com/ddnet/ddnet/issues/9040 17:33 < bridge> Yes, I found that out as well, after the compiler found a collision in the datacontainer I need because I import both files 👍 17:35 < ws-client> @Jupstar ✪ neovim is goated ngl 17:40 < bridge> Yeah dunno, too many shortcuts for my brain 17:40 < bridge> But it's defs minimalistic, which is cool 17:50 < bridge> https://github.com/ddnet/ddnet/pull/10410 finally passed ci xd 17:52 < ws-client> @Jupstar ✪ u dont need to use any shortcuts 17:52 < bridge> melon showed me how his neovim insulted him for using his mouse 17:54 < ws-client> yea if u fakin right click xd 17:58 < ws-client> i use mouse in neovim! 17:58 < ws-client> and arrow keys 17:58 < ws-client> literally vscode expirience 17:59 < ws-client> but jupsti if u have no problem with vscode stay there. I switched because the launch times annoyed me. 17:59 < bridge> Ok 17:59 < bridge> Yeah dunno, rust-analyzer and clangd take longer than the IDE 18:00 < bridge> But you are right, sometimes vscode does not feel instant, especially with the overlay hints 18:00 < bridge> But e.g. zed & lapce did not do any better if vscode really lagged, it was simply not vscode but e.g. rust-analyzer that struggled 18:01 < ws-client> u got same limits in neovim 18:01 < bridge> Why does this mf always use so much RAM xdd 18:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1387100351949176952/image.png?ex=685c1d5e&is=685acbde&hm=cab5724b58764cd576b55826607f327aa9e1c8b0ed926f0d169780113f116628& 18:01 < bridge> I don't even have 3 instances open 18:01 < bridge> Ah wait, one is zed 18:01 < bridge> nvm xD 18:01 < ws-client> rust problem 18:02 < bridge> lldb is not much better xD 18:02 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1387100524335202374/image.png?ex=685c1d88&is=685acc08&hm=5f482f4b51115f1f606bc3aabc7f9d23d56ca1cc044b16ebbd89f1dce8596ae0& 18:02 < bridge> and no, this is not vs code lldb, it's the zed integration 18:02 < bridge> Yeah clangd uses less RAM for me, but it also provides worse static analysis 18:03 < ws-client> i think vscode still uses lots of regex while neovim uses treesitter which is a bit more fancy 18:03 < bridge> Good thing that 64GB are normal nowadays 18:03 < bridge> Otherwise I'd probs be sad 18:03 < bridge> In which cases should I notice this? 18:03 < bridge> Isn't regex more like for searches? 18:03 < ws-client> i guess syntax highlight not being instant or lagging in big files 18:04 < ws-client> i think it uses regex for syntax highlighting under the hood 18:04 < ws-client> and scans entire file 18:04 < bridge> Well it's not about syntax highlighting 18:04 < bridge> 18:04 < bridge> it's about these hints 18:04 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1387101156320215123/image.png?ex=685c1e1e&is=685acc9e&hm=13cbbd297b237f3f83301f5878287e3709a4591b9a80b16fd5bf03ea1e1d8690& 18:05 < ws-client> ye i talk in general 18:06 < bridge> :KEKW: 19:19 < bridge> I get errors from valgrind for creating entities with new 19:19 < bridge> don't they destroy themself? 19:24 < bridge> isn't that a stack vs non stack allocation thing? 19:25 < bridge> w/o new they would call the destructor when going out of scope. 19:27 < bridge> yeah, for pointers seemingly delete is required 19:27 < bridge> for heap allocated pointer 19:27 < bridge> well yeah, everything on the stack calls the destructor when out of scope 19:27 < bridge> on the heap you need to delete it manually 19:28 < bridge> for heap allocated pointer to object 19:29 < ChillerDragon> @Assa they are deleted by the gameworld if you instered it into the gameworld 19:30 < bridge> the actual missing piece: domain knowledge 👀 19:31 < ChillerDragon> i think the constructor inserts it self 19:31 < ChillerDragon> so it rly shouldnt memleak watfak did u do assa 19:31 < bridge> oho 19:33 < bridge> Assa status, is it a memleak or is valgrind just screeching because of something else 19:53 < bridge> The right question is, is he working on his port again 19:54 < bridge> status report: valgrind is screeching, and I know it is 19:55 < bridge> yes I am, but this is not coming from me 19:56 < bridge> ``` 19:56 < bridge> 789 warnings generated. 19:56 < bridge> Suppressed 784 warnings (770 in non-user code, 2 NOLINT, 12 with check filters). 19:56 < bridge> Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 19:56 < bridge> 2 warnings treated as errors 19:56 < bridge> ``` 20:20 < bridge> oh yeah if I'd implement one feature from unique, it would be "fastcap", imagine carrying a flag with your team to the end of a map 20:20 < bridge> and you need to throw it, drop it, squash it, and do other stuff with it 20:32 < bridge> use it as broom to fly 20:32 < bridge> only with the witch-hat-pickup 20:32 < bridge> accepted! 21:16 < bridge> ```// NOLINTBEGIN(clang-analyzer-unix.Malloc)``` 21:20 < bridge> Adding flags and flag dropping would reduce the diff in ddnet-insta too! Much appreciated 21:20 < bridge> Oh and ddnet++ too 21:31 < bridge> 21:31 < bridge> how do i do it 21:31 < bridge> with storage 21:52 < bridge> ```cpp 21:52 < bridge> char aUserDir[IO_MAX_PATH_LENGTH]; 21:52 < bridge> 21:52 < bridge> GC()->Storage()->GetCompletePath(IStorage::TYPE_SAVE, "", 21:52 < bridge> aUserDir, IO_MAX_PATH_LENGTH); 21:52 < bridge> ``` @kebscs 21:52 < bridge> ```cpp 21:52 < bridge> char aUserDir[IO_MAX_PATH_LENGTH]; 21:52 < bridge> 21:53 < bridge> GC()->Storage()->GetCompletePath(IStorage::TYPE_SAVE, "", 21:53 < bridge> aUserDir, IO_MAX_PATH_LENGTH); 21:53 < bridge> ``` @kebscs 21:53 < bridge> ```cpp 21:53 < bridge> char aUserDir[IO_MAX_PATH_LENGTH]; 21:53 < bridge> 21:53 < bridge> GC()->Storage()->GetCompletePath(IStorage::TYPE_SAVE, "skins", 21:53 < bridge> aUserDir, IO_MAX_PATH_LENGTH); 21:53 < bridge> ``` @kebscs 21:53 < bridge> ```cpp 21:53 < bridge> char aUserDir[IO_MAX_PATH_LENGTH]; 21:53 < bridge> 21:53 < bridge> GC()->Storage()->GetCompletePath(IStorage::TYPE_SAVE, "data", 21:53 < bridge> aUserDir, IO_MAX_PATH_LENGTH); 21:53 < bridge> ``` @kebscs 22:00 < bridge> ty 22:01 < bridge> so now i need to figure out how to get storage into notifications class 22:05 < bridge> wdym normal 22:09 < bridge> Normal normal 22:09 < bridge> The normal meaning of normal 22:09 < bridge> i guess im poor 22:10 < bridge> 16gb gang here 22:10 < bridge> yea idk it's not really normal imo 22:10 < bridge> i only know 1 other person with 64GB and it's probably you 22:11 < bridge> 64GB is totally normal you see? 22:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1387163180345856233/image.png?ex=685c57e2&is=685b0662&hm=35b94ac31572260b3db265bfe64f205e5ca582f9ac288b37b3015d5c49b85b34& 22:11 < bridge> 32's on the way up tho wow 22:11 < bridge> time to buy another 64 22:12 < bridge> i want to be there at the top 0% 22:12 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1387163614502195262/image.png?ex=685c5849&is=685b06c9&hm=97dc2a8d661434f618b49c6ac364b56ebc046527c4c24e567a5e2b9f363b2c47& 22:23 < bridge> i wouldn't be surprised if that's strictly datacenter techs and tech reviewers installing steam for kicks lol 22:24 < bridge> or if you were to install it on a VPS where all cores are shared & it'd just report as 192 for your system 22:26 < bridge> windows has a class named IStorage, same as ddnet's 22:26 < bridge> what do i do 💀 22:27 < bridge> you shouldn't have to include that stuff 22:27 < bridge> or any WinRT things honestly 22:28 < bridge> are you making DDNet UWP :justatest: 22:28 < bridge> i am in fact making winrt in ddnet 22:28 < bridge> for toast notifications 22:29 < bridge> better than win32? 22:29 < bridge> get a job at microsoft and change it 22:29 < bridge> not so simple 22:30 < bridge> in practice kebs you should be fine if you can isolate the WinRT functionality to one translation unit where IStorage is never referenced 22:30 < bridge> in practice kebs you should be fine if you can isolate the WinRT functionality to one translation unit where DDNet's IStorage is never referenced 22:31 < bridge> yea but roby wants me to use storage to get data path 22:31 < bridge> but uhh... that shit is not really gonna work on MinGW 22:31 < bridge> unless you use the fully qualified C API symbols. which would honestly solve your name conflict too 22:31 < bridge> but they are really ugly and cumbersome 22:31 < bridge> the win32 way can't be that bad 22:31 < bridge> you're also linking more shit 22:31 < bridge> just for toasts 22:32 < bridge> i like the current toast way 22:32 < bridge> dont want change it 22:32 < bridge> what's the current way 22:33 < bridge> 22:33 < bridge> the shortcut thing is ugly but thats necessary 22:33 < bridge> toast is nice 22:33 < bridge> does it have any difference in practice 22:33 < bridge> this won't work on w7 22:34 < bridge> it'd make the same style of popup as the win32 api would 22:34 < bridge> you wouldn't have to initialize winrt for the thread 22:34 < bridge> im just failing to see the benefit 22:34 < bridge> what win32 api 22:35 < bridge> and we have maybe 3 users still on win7 22:36 < bridge> "i wish to break compatibility so we can have desktop notifications" :brownbear: 22:36 < bridge> but we can't update mingw because it breaks w7 22:36 < bridge> did u try this 22:36 < bridge> this is a horrible popup 22:37 < bridge> it doesnt break compatibility 22:37 < bridge> just wont work on win7 22:37 < bridge> it's not gonna look like that on new windows tho 22:41 < bridge> idk i commited too much time to make this without wintoast 22:42 < bridge> If it works at all on modern Windows, it's probably going to look very similar 22:43 < bridge> But you raise a valid point that it would need to work when compiled with deen's old mingw version 22:43 < bridge> and i think it requires a tray icon 22:43 < bridge> The tray icon is effectively the notification together with the bubble 22:43 < bridge> But I prefer the new toast notification, we don't need to support old Windows with the feature 22:44 < bridge> In a few months, Windows 10 will be considered EOL as well 22:44 < bridge> how do i use IStorage when windows uses IStorage in objidl.h 22:44 < bridge> and its global scope.. 22:44 < bridge> :pepeW: 22:45 < bridge> Maybe determine the path outside of the notification class and pass it in with `Init` or something 22:45 < bridge> So you don't need the storage inside 22:46 < bridge> seems good 23:09 < bridge> it gets appdata data instead of the one in game folder 23:11 < bridge> oh thats what you wanted xd 23:11 < bridge> i thought you wanted the config dir 23:18 < bridge> Yes, but me too, just not thaat poor. 23:18 < bridge> 23:18 < bridge> But still poor you know 23:18 < bridge> But the difference is, you are a kid 23:18 < bridge> yea. will you give me a 0.00% cpu with your less-poor money? 23:18 < bridge> yea. will you give me a 0% cpu with your less-poor money? 23:20 < bridge> Yeah, I give you 0% of my CPU, no problem 23:21 < bridge> sadly 0% of your cpu is actually an improvement to my performance... 23:21 < bridge> sadly 0% of your cpu is actually a major improvement to my performance... 23:22 < bridge> Soon Bafög bro, then you rich heheh 23:22 < bridge> if he keeps going all in on C he will have no job :brownbear: 23:23 < bridge> who knows 23:28 < bridge> :lol: 23:28 < bridge> He will be that person that has to maintain some ass old legacy code base on windows xp 23:28 < bridge> for deutsche bahn ag 23:39 < bridge> In 40 years no one knows how to write in C because no one taught AI how to 23:39 < bridge> He'll make millions! 23:41 < bridge> ai can write C but it'll kill ppl on the train 23:43 < bridge> So not much difference to huamsn 23:43 < bridge> So not much difference to humans