00:56 < bridge> Hello ddnet admins & devs 00:56 < bridge> 00:56 < bridge> So me and a bunch of other people were just wondering about what happened to the account system and if there will ever be one to potentially come. 00:56 < bridge> It would be nice to know about the problems and plans surrounding this topic. 00:56 < bridge> Especially as it seems like the whole community wants something like this implemented (i. e. the survey that was done in the past in ⁠announcements ). 00:56 < bridge> 00:56 < bridge> Probably the whole community would like to know about what's actually going on there so that perhaps solutions could be found. 00:56 < bridge> Be it by funding and therefore paying the devs if that is the problem or by anything else (depending on how this whole thing turns out), I think many people would be glad to help. 00:56 < bridge> 00:56 < bridge> Best regards 01:04 < bridge> <_voxeldoesart> if we needed the money we would add in microtransactions 01:06 < bridge> this sums it up as of May 4 of 2023 https://github.com/ddnet/ddnet/issues/3411#issuecomment-1534189301 01:07 < bridge> This is not an answer to your question it's more of a hint I thought I would provide since I can. 01:16 < bridge> I appreciate your willingness to help but we don't plan on reading old discussions over and over again. An actual conversation about pro and contra and a final summary and therefore a solution would be nice. 01:20 < bridge> did u actually read that thread 01:24 < bridge> no I'm blind, I cant read 01:26 < bridge> the last message you see as user without a github account is from the 24 of July. Most people have no idea how to use github or what it even is 01:27 < bridge> you cant expect everyone to know whats going on there. we just want a little transparency and talk about the whole topic and what we as a community of which most cant code or costribute in a technical way, how we could help in any other way 01:29 < bridge> That's the last message of the conversation for everyone 01:30 < bridge> that github thread is very transparent, anyone can add their own comments 01:30 < bridge> and read the past discussion 01:30 < bridge> alright well didnt know that since a dont have a private github account. Seems like github cuts off at some point. but none the less it kinda shows that the topic kinda just died out and we want to revive it 01:31 < bridge> alright well didnt know that since a dont have a private github account. Seemed like the discussion cut off at some point. but none the less it kinda shows that the topic kinda just died out and we want to revive it 01:33 < bridge> Github just shows that if you want to add a comment (aka participate in the conversation) you need an account. Otherwise, it does not cut the thread which lets everyone see it in its entirety. 01:33 < bridge> But I agree with louis, this thread wasn't created for nothing and its not like it has been several years since the last comment. There have been proposals made in this thread and I think if you really want to get accounts added you should first look into this thread and understand what's going on 01:35 < bridge> Github just shows that if you want to add a comment (aka participate in the conversation) you need an account. Otherwise, it does not cut the thread which lets everyone see it in its entirety. 01:35 < bridge> But I agree with louis, this thread wasn't created for nothing and its not like it has been several years since the last comment. There have been proposals made in this thread and I think if you really want to get accounts added you should first look into it and understand what's going on 01:46 < bridge> I agree on this, atleast read the last comments from july. Its even interesting if you dont have much IT-knowledge. But on the other hand the account topic is such a big topic for every player and would be a big big step in the game. So maybe we should discuss and communicate it more openly, not only on the developer side but also on the players. An idea could be to form a small team of devs, experienced players and well established people of the 01:47 < bridge> I agree on this, atleast read the last comments from july. Its even interesting if you dont have much IT-knowledge. But on the other hand the account topic is such a big topic for every player and would be a big big step in the game. So maybe we should discuss and communicate it more openly, not only on the developer side but also on the players. An idea could be to form a small team of devs, experienced players and well established people of the 02:58 < bridge> It’s not like funding wouldn’t incentivize someone ton work on this feature but I guess if you were serious about it you’d have to set up a bounty. Lots of devs have ideas but they don’t have the time or patience to implement & test it as it’s something which would need extensive work in all faces of DDNet rn (client, server, website, probably discord too). Maybe someone with a real draft would finally get started if there was a bounty 02:59 < bridge> It’s also something that’s not easily agreed upon so perhaps DDNet staff should set up an in-game announcement or something promoting the GitHub discussion 03:01 < bridge> This really is an all hands on deck situation so some feedback from admins would be appreciated 03:03 < bridge> I remember hearing that deen is onboard 😃 07:20 < bridge> I thought it's possible just to copy file to right path during compilation or smth :/ 07:24 < bridge> I thought it's possible just to copy the file to right path during compilation or smth :/ 08:42 < bridge> morning 08:56 < bridge> gm 10:40 < bridge> Hi, is it normal that logfile will create in `AppData\Roaming\Teeworlds` path ? 11:35 < bridge> i guess 11:37 < bridge> ig u can use a global path if you need to have it somewhere else for some reason 11:37 < bridge> or change storage.cfg 11:38 < bridge> in older version it's save in same folder of server or client and i don't have any storage.cfg file 11:39 < bridge> is there any flag to set location of save log ? 11:41 < bridge> Hi, I want to process the local live chat to create an local website where you can process it. To accomplish that I could youse a Network Sniffer. The Problem is that I don’t know what requests i have to look out (UDP Port) and I don’t know how to / if i can decrypt the requests 11:42 < bridge> u can do that on linux with fifo iirc 11:42 < bridge> or logging 11:42 < bridge> Hi, I want to process the local live chat to create an local website where you can process it. To accomplish that I could use a Network Sniffer. The Problem is that I don’t know what requests i have to look out (UDP Port) and I don’t know how to / if i can decrypt the requests 11:42 < bridge> definitly on server side 11:42 < bridge> but idk about client side rn 11:42 < bridge> oh wait 11:42 < bridge> what do u mean by local live chat 11:42 < bridge> u can just modify the client 11:43 < bridge> he wants to sniff the network packets for some reason 11:43 < bridge> chillerdragon: u've done smth with wireshark iirc? 11:43 < bridge> 11:46 < bridge> Your pc receives chat messages in a request. If you know what requests to look out for and how to decrypt them. That way i can avoid maintaining a whole client 11:47 < bridge> English on point 💯 11:47 < bridge> well nothing is encrypted yet 11:47 < bridge> also the client port is random on each connection 11:48 < bridge> check wireshark dissector from heinrich 11:48 < bridge> Udp Packages are encrypted by default 11:48 < bridge> what? 11:48 < bridge> they arent xd 11:48 < bridge> Wait that was tcp my bad 11:48 < bridge> no 11:48 < bridge> not even tcp 11:48 < bridge> encryption is built on top of the protocol 11:49 < bridge> https is encrypted 11:49 < bridge> http is not 11:49 < bridge> both are tcp 11:49 < bridge> ddnet has no encryption at all 11:49 < bridge> its also a thing to fix for accounts 11:50 < bridge> Can you provide a link or smth? 11:51 < bridge> idk it rn 11:51 < bridge> Im sure there is a package for my web framework that can sniff. I will just need to know what to look out for 11:51 < bridge> maybe someone else knows 11:51 < bridge> eh 11:52 < bridge> i doubt u can sniff packets within a sandboxed web page 11:52 < bridge> u need a proper program with access to the os 11:53 < bridge> Hmm when im home i have to look into that 11:53 < bridge> ill just say rust is a perfect fit 11:53 < bridge> ☕ 11:53 < bridge> Im a web developer 11:54 < bridge> account are sucks, why can't you just play simple ddnet without any credit ? 11:56 < bridge> Maybe I’ll find a program that send the request to frontend 11:56 < bridge> u dont need to be limited by that 11:56 < bridge> i also did web dev https://ddstats.org/ 11:56 < bridge> 😬 11:56 < bridge> yes u need to do that 11:57 < bridge> u will need to program it tho 11:57 < bridge> the sniffer program 11:57 < bridge> Ye 11:57 < bridge> https://tenor.com/view/programming-rust-c-lang-cpp-cplusplus-gif-26743262 11:58 < bridge> I hope rust wont be to difficult 11:59 < bridge> :justatest: 12:00 < bridge> But i still don’t know what requests I need 12:02 < bridge> U 12:02 < bridge> yes 12:02 < bridge> im lucy 12:02 < bridge> 😬 12:02 < bridge> time to put on the socks 12:03 < bridge> Programming socks engaged 12:03 < bridge> u'r ryozoozki 12:03 < bridge> @learath2 do you feel bad if c libraries would die out? 12:03 < bridge> Not really. I prefer rolling my own anyway 12:03 < bridge> i would be amazed cuz i think its a hard thing to happen 12:04 < bridge> 😏 12:04 < bridge> do u roll out libcurl 12:04 < bridge> reinvent the reinvented wheel 12:04 < bridge> actually http is really easy protocol its just that 12:04 < bridge> I would if libcurl somehow dies 12:04 < bridge> its ambiguous a bit 12:04 < bridge> and u need to take lot of security measures 12:12 < bridge> On a more serious note, as long as you expose a C API. (Which you kinda have to if you want any ffi). I don't care what the library itself is written in 12:12 < bridge> I would even feel safer if it were written in Rust 12:13 < bridge> @louis.place Thanks! ^ 12:16 < bridge> :brownbear: 12:59 < bridge> @learath2 when u enable as module vs compiled in in kernel? 13:05 < bridge> I pretty much have everything that can be compiled in compiled in. Just a handful of things that I don't need all the time as modules 13:05 < bridge> Like wireguard, ext2, udf, kvm 14:21 < bridge> just a MOV works for rust though. because it statically handles the other object no longer being destructed 14:22 < bridge> do you have a book on signal processing? 14:22 < bridge> from the basics? 14:23 < bridge> I do but I never went through the entire thing. I just read a couple chapters 14:24 < bridge> https://www.analog.com/en/education/education-library/scientist_engineers_guide.html 14:25 < bridge> The chapter on the laplace transform is truly excellent. I've also read chapter 3, chapter 8 and chapter 14 14:25 < bridge> maybe one day we can have a better ABI 🙂 including sum types or sth 14:26 < bridge> discord is not a good medium for that. the discussion will be forgotten tomorrow. go to github if you want your voice to be heard in any way 14:26 < bridge> same goes for @stepfunn 14:27 < bridge> @heinrich5991 can you tell me more about it? 14:27 < bridge> https://github.com/heinrich5991/libtw2/tree/690e8ea95880aaaf2329bd33fc5131e8d6e6cbd5/wireshark-dissector 14:27 < bridge> :pepeW: what 14:27 < bridge> That response speed 14:27 < bridge> 💯 14:28 < bridge> I was looking for that link before you asked me 14:28 < bridge> it was coincidental that you posted your question right before I sent the link 14:29 < ws-client> jopsti yes i did all the wiresharking w heinrichs dissector its very pog 14:29 < bridge> Ooh thats interesting 14:30 < bridge> chillerdragon: nice, u got some blog about using it? 14:31 < ws-client> @Bota why do you want to sniff it? I would just edit the client or server which is much smoother for live chatting. If you go down the sniffing route and it does not have to be live i highly recommend tcpdump and heinrichs wireshark dissector. 14:32 < ws-client> @Jupstar ✪ i guess you tried to help me plug this xd https://chillerdragon.github.io/teeworlds-protocol/index.html 14:32 < ws-client> but yea on heinrichs dissector no blog is needed u just do ``tcpdump -w tw.pcap "port 8303"`` then you run ``wireshark tw.pcap`` and you see all chat messages in plain text 14:33 < bridge> or you just run wireshark on your computer directly 14:33 < ws-client> yea 14:33 < bridge> Chillerdragon: the tcp dump how long does it take? 1 second? 14:33 < ws-client> it doesnt finish 14:33 < ws-client> until you kill it 14:34 < bridge> Oh 14:34 < ws-client> so for live chat it makes no sense 14:34 < ws-client> why not edit client or server? 14:34 < ws-client> if that somehow is not a option use a proxy instead 14:34 < bridge> tcpdump tracks all live traffic on the system 14:34 < ws-client> https://github.com/ChillerDragon/toxy/blob/master/main.py this is a simple poc tw proxy you can modify it to print chat messages 14:35 < bridge> 404 14:35 < ws-client> woah why is that closed src!? xd 14:35 < ws-client> ah yea because its a mess 14:36 < ws-client> its basically a few lines of python that just read udp and send it on 14:36 < ws-client> in there you can just check the payload if it is a chat message 14:36 < ws-client> https://gitlab.com/teeworlds-network/twnet_parser 14:36 < ws-client> can also recommend this python lib (full self plug) if you want to write a tw proxy 14:37 < ws-client> but still dont think it makes sense for your use case tbh @Bota 14:37 < bridge> I just need to send the chat data to my frontend. If i get data lile all 5 -10 seconds its not problematic 14:38 < bridge> I just want to avoid maintaining an extra clienz 14:38 < ws-client> i see 14:38 < bridge> I just want to avoid maintaining an extra client 14:38 < bridge> I just want to avoid maintaining an extra client 14:38 < bridge> maintaining a client/server will be easier than sniffing the packets 14:39 < ws-client> a horrible way to do it would be running tcpdump every few seconds and then using this py script to get the chat messages xd https://gitlab.com/teeworlds-network/twnet_parser/-/tree/master/examples/07/print_pcap_files?ref_type=heads 14:39 < bridge> The sniffer you do 1x and you leave it 14:39 < bridge> If there is something else than a sniffer ill take that 14:39 < bridge> what exactly do you want to do? 14:39 < bridge> I just need data thats not older than 5-10 seconds 14:40 < bridge> log all chat? 14:40 < ws-client> a proxy is better than a sniffer 14:40 < ws-client> or just look at the logfile 14:40 < ws-client> and live read that 14:40 < bridge> I want to make a toll that parses the text and translates it for moderating 14:40 < ws-client> where does the translation appear? 14:41 < bridge> you mean chat? 14:41 < bridge> I use an language server 14:41 < bridge> Yea the ingame chat 14:41 < ws-client> and the translated result 14:41 < ws-client> where should it go? 14:41 < bridge> Stay in my frontend 14:41 < bridge> read it from the log, I'd say 14:41 < ws-client> yea 14:42 < ws-client> if it doesnt have to go back to the client reading from the log works fine 14:42 < bridge> Didn't someone already make a translator? 14:42 < ws-client> even if you want to get it back you could use ``say_self`` and fifo 14:42 < bridge> Is it remote console dump? 14:42 < ws-client> just regular logfile from stdout 14:43 < ws-client> or use the ``logfile myfile.txt`` command 14:43 < ws-client> then read from that file 14:43 < bridge> yes, that 14:43 < bridge> thats what i mentioned first xd 14:43 < bridge> Does it contain ip adresses? 14:43 < ws-client> client side no 14:43 < ws-client> server side yes 14:43 < bridge> I need those aswell 14:43 < ws-client> but they are wrapped in some pattern which you can filter out 14:44 < bridge> Well my frontend is client only 14:44 < bridge> Its just for highlighting anf notifing 14:45 < bridge> Ill look at the links when im home 14:45 < ws-client> @teero777 why u askin bout file size 14:45 < ws-client> @Bota dont look at the links 14:45 < ws-client> just read the logfile dont do any proxy or packet sniffing 14:47 < bridge> Sry if i ask again: does the logfile update automatically without user input and does it contain the ip adresses? 14:47 < bridge> All on Client 14:47 < bridge> I need a Solution for that 14:47 < ws-client> the client never sees any ips 14:48 < ws-client> the logfile is updated live but you also have to make sure you keep reading it live 14:48 < bridge> I got access to Rcon. There i can get ips 14:48 < bridge> That wasnt my idea and i agree we shouldnt discuss it in one of the channels here 14:48 < ws-client> @Bota just setup the thing on the server side not client side 14:49 < ws-client> seems more reasonable anyways 14:49 < bridge> I need ips to generate a ban command 14:49 < ws-client> yea 14:49 < ws-client> so why do it client side? 14:50 < ws-client> just read the logfile on the serverside it contains ips and then you can also host the frontend on the same server 14:50 < bridge> I dont have access to the server 14:51 < bridge> I just join a server as a mod and i want to process the incoming chat from my local client 14:51 < bridge> ``` 14:51 < bridge> show_ips 1 14:51 < bridge> status 14:51 < bridge> ``` 14:51 < bridge> I think this will work for ddnet rcon 14:51 < bridge> I know you can dump logs 14:51 < bridge> But i need it automated 14:52 < ws-client> status does not show in client logs 14:52 < ws-client> and its not automated 14:52 < bridge> Bind for login to rcon and dump logs? 14:53 < bridge> That requires user input 14:53 < bridge> My tool is kinds useless if you have to press s button each time a message comes 14:53 < bridge> write a small tool to connect to a server and listen for rcon log messages 14:54 < bridge> I think that'd be the simplest solution here 14:54 < ws-client> ``dump_remote_console`` only dumps once its not live 14:54 < bridge> given 14:54 < bridge> 1) no access to the server directly 14:54 < bridge> 2) rcon access 14:54 < bridge> 3) automated chat retrieval 14:55 < ws-client> > write a small tool to connect to a server and listen for rcon log messages 14:55 < ws-client> how? 14:55 < bridge> e.g. by using libtw2 14:55 < ws-client> connect as a client? 14:55 < ws-client> login in rcon? 14:55 < bridge> or by starting a new tool in the src/tools folder 14:55 < bridge> Yea 14:55 < bridge> yes 14:56 < bridge> "Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."[ 14:56 < ws-client> then might as well use a finished client :D 14:56 < bridge> 😬 14:56 < bridge> "Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin." 14:56 < bridge> Thats what I thought 14:56 < ws-client> I would suggest js, python or ruby for scripting that 14:57 < ws-client> instead of rust :p 14:57 < bridge> Just compile ddnet without graphics and add user input to console, or create remote control by socket xd 14:57 < bridge> Xd 14:57 < bridge> that sounds way to complicated ^^ 14:58 < bridge> js, python, ruby don't have readily available libs for connecting to a ddnet server 14:58 < bridge> Easiest way: JS lib 14:58 < bridge> c++ and rust do 14:58 < bridge> Ill probably write a service in my website thats able to connet 14:58 < bridge> https://gitlab.com/swarfey/teeworlds-client 14:59 < bridge> I use Angular. Connecting somewhere should not be an issue 14:59 < bridge> ah nice, then JS is an option 14:59 < bridge> without the lib that @kekomonter posted, it'd have been too difficult 15:00 < bridge> Lol: then i can just connect to every single ddnet server and track all at once 🤯 15:00 < bridge> Yap 15:00 < bridge> Do it 15:01 < bridge> Massive ddnet moderation 15:01 < bridge> That's so deep 15:01 < ws-client> > js, python, ruby don't have readily available libs for connecting to a ddnet server 15:01 < ws-client> they do 15:01 < bridge> Python and ruby have? 15:01 < ws-client> ye 15:01 < bridge> I saw only 0.7 impls 15:01 < ws-client> ofc 15:01 < ws-client> 0.6 is outdated 15:01 < ws-client> xd 15:01 < bridge> Is it hard to connect to an ddnet server? 15:02 < ws-client> wait is it a 0.6 only server? 15:02 < bridge> don't do that. ask for permission first 15:02 < bridge> With js? 15:02 < ws-client> no its easy with js 15:02 < ws-client> the js lib is close to ddnet protocol 15:02 < bridge> Ye 15:02 < ws-client> ruby is 0.7 only 15:02 < ws-client> python is 0.6 and 0.7 but not very high level abstracted yet 15:03 < ws-client> @heinrich5991 libtw2 doesnt have docs or crates in cargo i wouldnt know how to build a client with it 15:03 < bridge> I will first try if it even works. If i manage that ill ask dw 15:04 < bridge> Example with chat bot, you just need to create function for auth in rcon and able to connect bot with websocket or other stuff 15:04 < bridge> https://gitlab.com/swarfey/teeworlds-client/-/blob/main/docs/examples/chat_bot.js?ref_type=heads 15:04 < ws-client> ye 15:04 < bridge> K ty 15:04 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183771315723833436/71POhHBaGCL.png?ex=65898bf3&is=657716f3&hm=eb4f1a21caf2bf468b27953fc2ba3ca854aa5c6958ea32a61c3d4e21e385f9e9& 15:04 < bridge> has anyone read this 700 page book? 15:04 < bridge> or recommend one related 15:05 < bridge> thats not over 50€ 15:05 < bridge> ChillerDragon: you can check the `downloader` folder 15:05 < bridge> cuz academia inflates 15:05 < bridge> prices 15:05 < bridge> it has a ready client 15:08 < ws-client> where readme 15:08 < ws-client> https://gitlab.com/teeworlds-network/twnet_parser/-/tree/master/examples/07/download_map?ref_type=heads 15:08 < ws-client> this is how i marketed mine 15:08 < ws-client> doesnt take much 15:09 < bridge> https://0xax.gitbooks.io/linux-insides/content/index.html 15:10 < ws-client> @heinrich5991 but good to know maybe i give it a try one day :) 15:10 < ws-client> i mean i kinda knew but thought its unfinished or something because of missing readme 15:10 < bridge> I used it in production already 15:10 < bridge> writing a readme takes time 15:11 < ws-client> cmn 3 lines on how to install and run 15:11 < ws-client> mine took me 1 minute 15:12 < bridge> https://github.com/heinrich5991/libtw2/tree/690e8ea95880aaaf2329bd33fc5131e8d6e6cbd5 15:12 < bridge> this readme took me an hour at least 15:12 < ws-client> yea i know 15:12 < bridge> looks nice! 15:14 < bridge> If im honest: I don’t like the idea of an massive observation center 15:15 < bridge> I will take a look at the normal logs when im home 15:15 < bridge> @learath2 do u know how structs are passed by C to functions 15:15 < bridge> That does not serve ddnets purpose 15:15 < bridge> in the assembly level 15:15 < bridge> are they on the stack or registers always? 15:16 < bridge> depends on the size of the struct IIRC 15:16 < bridge> 64bit btw 15:16 < bridge> @heinrich5991 is there a known size 15:16 < bridge> what is a "known size"? 15:17 < bridge> a size up until which it is passed in registers? 15:17 < bridge> https://en.wikipedia.org/wiki/X86_calling_conventions 15:17 < bridge> Chillerdragon you have discord? 15:17 < bridge> I always use this wikipedia article @ryozuki 15:17 < bridge> yes 15:18 < bridge> apparently only up-to-pointer-sized structs are passed in registers in microsoft's calling convention 15:18 < bridge> the article remains silent about the sysv abi 15:18 < bridge> This is defined by the ABI, but it'll be passed in a register as a pointer as it's of MEMORY class 15:19 < bridge> even for pointer-sized structs? 15:19 < bridge> Ah, if it's smaller than a certain size it can be passed differently yeah 15:19 < bridge> I assumed a large struct for some reason 15:20 < bridge> xd 15:20 < bridge> wait so they can be passed in a register if small or in the stack and the register has a pointer to it? 15:20 < bridge> or how it works 15:20 < bridge> https://gitlab.com/x86-psABIs/x86-64-ABI/-/jobs/artifacts/master/raw/x86-64-ABI/abi.pdf?job=build 15:20 < bridge> 3.2.3 is what you want to look at 15:22 < ws-client> @Bota i do not have discord why? 15:23 < bridge> that reads quite complicated 15:24 < bridge> > The classification of aggregate (structures and arrays) and union types works as fol- 15:24 < bridge> > lows: 15:24 < bridge> > 1. If the size of an object is larger than eight eightbytes, or it contains unaligned fields, 15:24 < bridge> > it has class MEMORY 15. 15:24 < bridge> > 2. If a C++ object is non-trivial for the purpose of calls, as specified in the C++ ABI 15:24 < bridge> > 16, it is passed by invisible reference (the object is replaced in the parameter list by 15:24 < bridge> > a pointer that has class INTEGER) 17. 15:24 < bridge> > 3. If the size of the aggregate exceeds a single eightbyte, each is classified separately. 15:24 < bridge> > Each eightbyte gets initialized to class NO_CLASS. 15:24 < bridge> > 4. Each field of an object is classified recursively so that always two fields 18 are con- 15:24 < bridge> > sidered. The resulting class is calculated according to the classes of the fields in the 15:24 < bridge> > eightbyte: 15:24 < bridge> > (a) If both classes are equal, this is the resulting class. 15:24 < bridge> > (b) If one of the classes is NO_CLASS, the resulting class is the other class. 15:24 < bridge> > (c) If one of the classes is MEMORY, the result is the MEMORY class. 15:24 < bridge> > (d) If one of the classes is INTEGER, the result is the INTEGER. 15:24 < bridge> > (e) If one of the classes is X87, X87UP, COMPLEX_X87 class, MEMORY is 15:24 < bridge> > used as class. 15:24 < bridge> > (f) Otherwise class SSE is used. 15:24 < bridge> > 5. Then a post merger cleanup is done: 15:24 < bridge> > (a) If one of the classes is MEMORY, the whole argument is passed in memory. 15:24 < bridge> > (b) If X87UP is not preceded by X87, the whole argument is passed in memory. 15:24 < bridge> > (c) If the size of the aggregate exceeds two eightbytes and the first eightbyte isn’t 15:24 < bridge> > SSE or any other eightbyte isn’t SSEUP, the whole argument is passed in mem- 15:24 < bridge> > ory. 15:24 < bridge> > (d) If SSEUP is not preceded by SSE or SSEUP, it is converted to SSE. 15:24 < bridge> I was just wondering 15:24 < bridge> You are basically only interested in the very last part of Classification because we are talking about an aggregate 15:24 < bridge> "only" 15:24 < bridge> Point 1 immediately applies if you have a large struct 15:24 < bridge> @learath2 what are eight eightbytes 15:24 < bridge> what is a eightbyte 15:24 < bridge> ?? 15:25 < bridge> XD 15:25 < bridge> 64 bytes 15:25 < bridge> 8 byte 15:25 < bridge> Eh no 15:25 < bridge> 3.1.2 15:25 < bridge> > ...the term eightbyte refers to a 64-bit object... 15:26 < bridge> which is 8 bytes? 15:26 < bridge> Oh wait I misread what you wrote 15:26 < bridge> Sorry 15:28 < bridge> Anyway, 2 doesn't apply to C. 15:28 < bridge> 3) applies to anything smaller than 64 bytes 15:28 < bridge> You go 2 by 2 applying the rules in 4) 15:28 < bridge> what does 2 by 2 mean? 15:28 < bridge> @learath2 one doubt 15:28 < bridge> 2 by 2 eightbytes? struct fields? 15:29 < bridge> if i pass something as MEMORY ie in the stack 15:29 < bridge> 2 by 2 fields 15:29 < bridge> do i pass a pointer to it on the register? or doesnt make sense 15:29 < bridge> xd 15:30 < bridge> but what if two fields are already larger than the first eightbyte? 15:30 < bridge> No, just put it on the stack 15:31 < bridge> Wym? 15:31 < bridge> you say I always consider two fields at once 15:31 < bridge> but I also need to consider the first eightbyte separately 15:31 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183778092695695452/image.png?ex=65899242&is=65771d42&hm=404f3db7b90542195bed763a540b996e6daa2aa2fa798e3a57293617e0989adb& 15:31 < bridge> this part is important too 15:31 < bridge> what if my first field is already larger than 8 bytes? 15:31 < bridge> boo, pictures 15:32 < bridge> Your field will either be an aggregate or already have a classification as per the parts we skipped at the start 15:32 < bridge> ah 15:32 < bridge> I should use the former rules as well for classifying struct members? 15:33 < bridge> Yep 15:33 < bridge> I see 15:33 < bridge> so structs containing a couple of floats and ints get ripped apart completely 15:33 < bridge> even if they're interleaved 15:33 < bridge> very intereseting document, thanks for linking it @learath2 15:34 < bridge> What happens when 2 clients with same ip connect to 1 Server? 15:36 < bridge> you can have a maximum of four clients per IP address on official ddnet servers, IIRC 15:36 < bridge> They'll have different client ports 15:36 < bridge> dummy and main tee count as 2 15:36 < bridge> @learath2 i ask this cuz we making some kind of trampoline code for a generated shared library with mlir 15:36 < bridge> xd 15:37 < bridge> the idea of trampoline code is to not touch anything, no? 15:37 < bridge> so that you just enter the actual function in the end 15:37 < bridge> i actually tried calling the function using extern c from rust 15:37 < bridge> but it didnt work well 15:37 < bridge> why not? 15:37 < bridge> its odd because theorically the function follows the c calling convetion 15:38 < bridge> weird unexpected results 15:38 < bridge> segfaults 15:38 < bridge> etc 15:38 < bridge> xd 15:38 < bridge> look at it in a debugger 15:38 < bridge> it tells you what's on the ground 15:38 < bridge> or the disassembly 15:38 < bridge> brb 15:39 < bridge> There are not clients that wont take a slot, are there? 15:39 < bridge> 1 person taking 3 slots is wrong 15:39 < bridge> you can't take no slots 15:40 < bridge> with a client 15:40 < bridge> Then I will stay with logs on my Project 15:43 < bridge> https://github.com/gcc-mirror/gcc/blob/master/gcc/config/i386/i386.cc#L2124 It's not too bad to read if you'd like to see an implementation of it 15:44 < bridge> 64bit right 15:45 < bridge> Yep 15:45 < bridge> permalink: https://github.com/gcc-mirror/gcc/blob/b1474da1bb9cc829cbf597f9a51393795108419f/gcc/config/i386/i386.cc#L2124 15:45 < bridge> Yep, good idea 15:46 < bridge> thanks 15:46 < bridge> Class MEMORY is basically poison, if any part of an aggregate is classified as MEMORY everything is MEMORY now 15:49 < bridge> > ||`~~***@archimede67***~~`|| 15:53 < bridge> did I get ghost pinged? 15:53 < bridge> me too 15:53 < bridge> ah, maybe not pinged 15:53 < bridge> :banhammer: 15:54 < bridge> Dunno maybe discord is bugged 15:55 < bridge> Kisao is sent smth and deleted this, maybe this was ping xdd (I saw it on second monitor) 15:55 < bridge> Sedonya is sent smth and deleted this, maybe this was ping xdd (I saw it on second monitor) 15:57 < bridge> @learath2 do u thin sysv abi 64 bit is bloated? 15:57 < bridge> think 15:57 < bridge> Not particularly. Why? 15:57 < bridge> did u look at the arm64 one 15:57 < bridge> from macos 15:57 < bridge> https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms#Pass-arguments-to-functions-correctly 15:58 < bridge> > Pass arguments to functions correctly 15:58 < bridge> > 15:58 < bridge> > The stack pointer on Apple platforms follows the ARM64 standard ABI and requires 16-byte alignment. When passing arguments to functions, Apple platforms diverge from the ARM64 standard ABI in the following ways: 15:58 < bridge> > 15:58 < bridge> > Function arguments may consume slots on the stack that are not multiples of 8 bytes. If the total number of bytes for stack-based arguments is not a multiple of 8 bytes, insert padding on the stack to maintain the 8-byte alignment requirements. 15:58 < bridge> > 15:58 < bridge> > When passing an argument with 16-byte alignment in integer registers, Apple platforms allow the argument to start in an odd-numbered xN register. The standard ABI requires it to begin in an even-numbered xN register. 15:58 < bridge> > 15:58 < bridge> > The caller of a function is responsible for signing or zero-extending any argument with fewer than 32 bits. The standard ABI expects the callee to sign or zero-extend those arguments. 15:58 < bridge> > 15:58 < bridge> > Functions may ignore parameters that contain empty struct types. This behavior applies to the GNU extension in C and, where permitted by the language, in C++. The AArch64 documentation doesn’t address the issue of empty structures as parameters, but Apple chose this path for its implementation. 15:58 < bridge> > 15:58 < bridge> > The following example illustrates how Apple platforms specify stack-based arguments that are not multiples of 8 bytes. On entry to the function, s0 occupies one byte at the current stack pointer (sp), and s1 occupies one byte at sp+1. The compiler still adds padding after s1 to satisfy the stack’s 16-byte alignment requirements. 15:58 < bridge> > 15:58 < bridge> > void two_stack_args(char w0, char w1, char w2, char w3, char w4, char w5, char w6, char w7, char s0, char s1) {} 15:58 < bridge> > 15:58 < bridge> > The following example shows a function whose second argument requires 16-byte alignment. The standard ABI requires placing the second argument in the x2 and x3 registers, but Apple platforms allow it to be in the x1 and x2 registers. 15:58 < bridge> > 15:58 < bridge> > void large_type(int x0, __int128 x1_x2) {} 16:00 < bridge> This is just a document that has a clear explanation. The AArch64 documentation it references is about the same size as the amd64 sysv one I sent 16:01 < bridge> So on the topic of bloated. I don't think so, but it is rather complicated, only because well ABIs aren't very trivial things if you want them performant 16:02 < bridge> i see xd 16:02 < bridge> The eight eightbytes thing is e.g. so structs can be decomposed into registers for efficient passing. You could have an ABI that just doesn't do that and always puts structs on the stack 16:06 < bridge> (not that it gets decomposed for many things tbf, it rarely ends up getting chopped up) 16:08 < bridge> points are likely to get chopped up, no? 16:08 < bridge> like `struct { int x; int y; int z; }` is a zero-cost abstraction 16:09 < bridge> unlike in java, where it used to lead to lots of heap allocations 16:09 < bridge> Anything bigger than 2 eightbytes immediately becomes MEMORY unless it's somethingsomething SSE 16:09 < bridge> wasn't it eight eightbytes? 16:09 < bridge> yes the get"flattened" 16:09 < bridge> this would be like fn(a: i32, b:i32, c:i32) 16:09 < bridge> on registers iirc 16:10 < bridge> 2 eightbytes or 8? 16:10 < bridge> wasnt it 8 16:10 < bridge> Anything bigger than 8 eightbytes is MEMORY 16:10 < bridge> Anything between 2 and 8 eightbytes only get chopped if they SSE something something 16:10 < bridge> ah 16:10 < bridge> Anything less than 2 can be chopped up 16:11 < bridge> what does chopped mean here 16:11 < bridge> into registers 16:11 < bridge> It's the post merger cleanup part 3.2.3.5c or L2306 in the gcc implementation I referred to 16:13 < bridge> <3x1st_> hey guys 16:13 < bridge> (Atleast that's how I understand it, I only briefly dabbled in this while trying to understand some absurd assembly that made no sense to me with the naive understanding of the calling convention I had) 16:13 < bridge> <3x1st_> any one can give me default auto-exec.cfg of ddnet++ 16:13 < bridge> <3x1st_> ? 16:23 < bridge> https://twitter.com/AnimaAnandkumar/status/1734080043196768348 16:23 < bridge> https://vxtwitter.com/AnimaAnandkumar/status/1734080043196768348 16:23 < bridge> https://github.com/lean-dojo/LeanCopilot 16:23 < bridge> Lean Copilot allows large language models (LLMs) to be used in Lean for proof automation, e.g., suggesting tactics/premises and searching for proofs. You can use our built-in models from LeanDojo or bring your own models that run either locally (w/ or w/o GPUs) or on the cloud. 16:23 < bridge> looks big ngl 16:23 < bridge> https://github.com/leanprover/lean4 16:26 < bridge> Not even math is safe 16:33 < bridge> holy shit 16:34 < bridge> in the current year, @robyt3 contributed 846 commits so far 16:35 < bridge> out of 1507 16:35 < bridge> that's ~56% of all ddnet development 16:35 < bridge> of 2023 16:36 < bridge> Carrying DDNet on his shoulders 16:36 < bridge> epic 16:37 < bridge> @heinrich5991 how did u see this summary? 16:37 < bridge> https://github.com/ddnet/ddnet/graphs/contributors?from=2022-12-31&to=2023-12-11&type=c 16:37 < bridge> and manually added the numbers 16:39 < bridge> > 952 Robert Müller 16:39 < bridge> > 381 bors[bot] 16:39 < bridge> > 361 Dennis Felsing 16:39 < bridge> > 128 heinrich5991 16:39 < bridge> > 104 furo 16:39 < bridge> > 83 marmare314 16:39 < bridge> > 60 Alexander Akulich 16:39 < bridge> > 46 Jupeyy 16:39 < bridge> > 39 ChillerDragon 16:39 < bridge> > 34 Edgar Luque 16:39 < bridge> > 25 dobrykafe 16:39 < bridge> > 15 Chairn 16:39 < bridge> > 14 Zwelf 16:39 < bridge> > 12 trml 16:39 < bridge> > 10 Tarun Samanta 16:39 < bridge> > 10 Valentin Bashkirov 16:39 < bridge> > 9 Corantin H 16:39 < bridge> > 9 Learath2 16:39 < bridge> > 9 Samuele Radici 16:39 < bridge> > 9 devdenn 16:39 < bridge> > 9 lolipodass 16:39 < bridge> > 8 Rafael Fontenelle 16:39 < bridge> > 8 VoxelDoesCode 16:39 < bridge> > 8 noKetchup 16:39 < bridge> > 7 By 16:39 < bridge> > 5 Cheeser0613 16:39 < bridge> > 5 Pavukoplov 16:39 < bridge> > 4 JSaurusRex 16:39 < bridge> > 4 JuraIBOZO 16:39 < bridge> > 4 Ravie 16:39 < bridge> > 4 Tater 16:39 < bridge> ❯ git shortlog -sn --since "01 Jan 2023" 16:40 < bridge> hey atleast im up there a bit XD 16:40 < bridge> I fell off. L 16:40 < bridge> why is oy there 16:40 < bridge> hmm 16:40 < bridge> idk if this includes merge commits 16:40 < bridge> Maybe one of chillers 0.7 obsessed prs pulled it in? 16:40 < bridge> lol 16:41 < bridge> discord marked my edit unsafe 16:41 < bridge> ah wait it had emails 16:41 < bridge> > 854 Robert Müller 16:41 < bridge> > 104 furo 16:41 < bridge> > 96 Dennis Felsing 16:41 < bridge> > 83 marmare314 16:41 < bridge> > 60 Alexander Akulich 16:41 < bridge> > 49 heinrich5991 16:41 < bridge> > 39 ChillerDragon 16:41 < bridge> > 35 Jupeyy 16:41 < bridge> > 25 dobrykafe 16:41 < bridge> > 15 Edgar Luque 16:41 < bridge> > 14 Zwelf 16:41 < bridge> > 12 trml 16:42 < bridge> > 10 Chairn 16:42 < bridge> > 10 Tarun Samanta 16:42 < bridge> > 10 Valentin Bashkirov 16:42 < bridge> > 9 Corantin H 16:42 < bridge> > 9 Samuele Radici 16:42 < bridge> > 9 devdenn 16:42 < bridge> > 9 lolipodass 16:42 < bridge> > 8 Learath2 16:42 < bridge> > 8 Rafael Fontenelle 16:42 < bridge> > 8 VoxelDoesCode 16:42 < bridge> > 8 noKetchup 16:42 < bridge> > 7 By 16:42 < bridge> > 5 Cheeser0613 16:42 < bridge> > 5 Pavukoplov 16:42 < bridge> > 4 JSaurusRex 16:42 < bridge> > 4 Ravie 16:42 < bridge> > 4 Tater 16:42 < bridge> > 3 +KZ 16:42 < bridge> > 3 BurnyLlama 16:42 < bridge> i edited it 16:42 < bridge> without merge commits 16:42 < bridge> git shortlog -sn --since "01 Jan 2023" --no-merges 16:42 < bridge> hey, I've not completely dropped out \o/ 16:42 < bridge> my new year resolution: do more work on ddnet 16:42 < bridge> but to my defense i did some projects 16:43 < bridge> maintained the wiki, did ddstats.org 16:43 < bridge> and db.ddstats.org 16:44 < bridge> :sadboi: 17:28 < bridge> can i set password using ddnet custom browser protocol 😮 17:29 < bridge> yes its 4 17:32 < bridge> With the `ddnet://` uri? Not possible. 17:32 < bridge> 😦 18:23 < bridge> where are the ddnet live logs stored again? I cant find the folder 18:28 < bridge> Why? Just look into config\_variables.cfg for the defaults. Also the settings I use on my servers are on GitHub as well in a repo called cfg or something like that 18:30 < bridge> Probably from #5737 18:30 < bridge> https://github.com/ddnet/ddnet/pull/5737 18:33 < bridge> Logs when using `logfile`? They get stored in your DDNet config directory. 18:34 < bridge> the local chat output 18:40 < bridge> I think you're looking for `logfile`, it will have everything that gets printed to the local console. There is no way of only logging the chat output. 18:41 < bridge> i cant find the folder 18:41 < bridge> $configdir 18:42 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183826049100947456/image.png?ex=6589beec&is=657749ec&hm=ce55636952bc02936a61fab6cabe65065b944e3a58771cd786d3a6d8c8e6157f& 18:43 < bridge> Ah no, `logfile` is a command. So, you do `logfile output.log` for example. 18:44 < bridge> there is no output.log in my files 18:50 < bridge> Press f1, type "logfile output.log" and somewhere output.log will be generated 18:51 < bridge> i did that 18:51 < bridge> You also need to restart the client after that 18:51 < bridge> makes more sense 18:51 < bridge> nice "live logs" 😄 18:52 < bridge> This will not record rcon messages, i think xd 18:52 < bridge> It's live but the changed filename only takes effect when launching the client 18:52 < bridge> i think i wont come arround conneting a client 18:52 < bridge> welp 19:43 < bridge> is there something like this but for typescrip? 19:43 < bridge> https://www.npmjs.com/package/teeworlds 19:43 < bridge> is there something like this but for typescript? 19:43 < bridge> https://www.npmjs.com/package/teeworlds 19:53 < bridge> <_voxeldoesart> i wonder when heinrich will just close all the PRs people dont evem care about anymore 19:53 < bridge> <_voxeldoesart> i wonder when heinrich will just close all the PRs people dont even care about anymore 20:02 < bridge> is there somewhere a documentation what i need to send to the gameserver go get counted as client? 20:18 < bridge> is there somewhere a documentation what i need to send to the gameserver to get counted as client? 20:26 < bridge> I think there is not detailed guide 20:26 < bridge> I think there is no detailed guide 20:27 < bridge> You can check libtw2 docs 20:27 < bridge> Or source code of js tw lib 20:28 < bridge> i need typescript 😦 20:29 < bridge> Twlib bot writen in ts and have "compilated" js source 20:29 < bridge> You can use it in ts or js 20:32 < bridge> https://gitlab.com/swarfey/teeworlds-client you mean this? 20:34 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183854436091703378/image.png?ex=6589d95c&is=6577645c&hm=84359d9ccbe01dc5827af9f9b8afd8ee0d054088fc34645a4fa27e9a88c77411& 20:45 < bridge> if you mean https://github.com/heinrich5991/libtw2 i havw no idea how to use it 20:46 < bridge> in angular 20:56 < bridge> https://orlp.net/blog/magical-fibonacci-formulae/ 21:04 < bridge> @swarfey can you help? 21:04 < bridge> not unless you did make install… 21:05 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183862031368077392/image.png?ex=6589e06f&is=65776b6f&hm=b18f0cce79a8b8da7ada90789c56e4be35c6befe6818f01974e89b949ce5876b& 21:07 < bridge> that error is kinda odd, I have never seen it before 21:07 < bridge> did you install the package using `npm install teeworlds`? 21:07 < bridge> ye 21:08 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183862857662738524/image.png?ex=6589e134&is=65776c34&hm=916908be969a6b2dcbf45016e8833b690707112bdb8904c17a6bec84a44fd2ca& 21:08 < bridge> o_o i've never worked with angular, kinda thought it would work the same as normal js 21:08 < bridge> 1 sec 21:08 < bridge> wenn i use .ts 21:08 < bridge> but it should normally work 21:09 < bridge> i use .ts 21:10 < bridge> can you send me your typescript version? (`tsc -v`) 21:10 < bridge> might be something with that, but the library already ships the compiled .js files, so i dont know why it is getting recompiled 21:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183863638587613264/image.png?ex=6589e1ee&is=65776cee&hm=e0cde466d6b91b12cea5bd53d16f67a45d6d42a8c0a21517d064b4019fed7698& 21:12 < bridge> npx tsc -v? 21:13 < bridge> above is the version ^^ 21:13 < bridge> over message 21:13 < bridge> 😄 21:13 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1183864239270678618/image.png?ex=6589e27d&is=65776d7d&hm=2ca4b1506a502bf2f57e212deac56bef60b2b9260d007390a9c6d091792c1edb& 21:14 < bridge> i hope u are not trying to set up automod on ddnet servers 21:14 < bridge> not automatic 21:15 < bridge> ppl still have to execute bans 21:15 < bridge> but a tool that highlights 21:15 < bridge> and translates 21:15 < bridge> ah xd in my library it uses "typescript": "^3.9.5", you might want to try that 21:15 < bridge> yea maybe now that you realized you can’t get ips through the client. Lol 21:15 < bridge> otherwise i dont know, maybe theres some fancy angular stuff i have no idea of 21:16 < bridge> if i connect to rcon i should get ips 21:16 < bridge> iirc i didnt add any rcon support 21:16 < bridge> i think any sort of extra tooling for rcon besides what they give you through the console should be 100% vetted by ddnet admins first 21:16 < bridge> if using on a ddnet server 21:17 < bridge> well i have dump_logs 21:17 < bridge> there is ´names and ips 21:17 < bridge> and logs 21:17 < bridge> but i wanted to make it automated 21:18 < bridge> so you dont have to press a button each time go get new logs 22:17 < bridge> https://twitter.com/fabianstelzer/status/1734296159873536214 22:18 < bridge> @jupeyy_keks chatgpt is depressed on december 22:27 < bridge> understandable xd