00:00 < bridge> [ddnet] because cloudflare apparently makes things slower 00:00 < bridge> [ddnet] I'll set it up on ger2 when I get to it 00:00 <@deen> meh 00:00 < bridge> [ddnet] bad idea? 00:01 <@deen> no, cloudflare making things slower is meh 00:44 < bridge> [ddnet] @heinrich5991 If cloudflare is adding a lot of latency, can we use some cdn where we just upload the static file every 5 seconds? 00:46 < bridge> [ddnet] didn't find a cdn where this would be cheap @deen 00:46 < bridge> [ddnet] ok 00:46 < bridge> [ddnet] e.g. aws bills per PUT request 00:46 < bridge> [ddnet] Would it help to pay for Cloudflare? I think they have better routing for paid accounts 00:47 < bridge> [ddnet] I don't know, I could ask cloudflare support I guess 00:47 < bridge> [ddnet] I'll write a ticket 00:47 < bridge> [ddnet] but I guess it could just be the detour to cloudflare's servers that could cost us 00:47 < bridge> [ddnet] although I learned in network class that splitting up TCP connections can speed them up 01:21 < bridge> [ddnet] @lynn now better? 01:21 < bridge> [ddnet] I set up master3.ddnet.tw 01:29 < bridge> [ddnet] let me test 01:29 < bridge> [ddnet] so remove the file you mentioned? 01:29 < bridge> [ddnet] @heinrich5991 way better now 01:30 < bridge> [ddnet] nice 🙂 01:41 < bridge> [ddnet] @heinrich5991 01:41 < bridge> [ddnet] ``` 01:41 < bridge> [ddnet] [2021-06-15 01:41:22][serverbrowse_http]: found master, url='https://master1.ddnet.tw/ddnet/15/servers.json' time=0ms 01:42 < bridge> [ddnet] [2021-06-15 01:41:22][http]: fetching https://master1.ddnet.tw/ddnet/15/servers.json 01:42 < bridge> [ddnet] [2021-06-15 01:41:22][http]: task done https://master1.ddnet.tw/ddnet/15/servers.json 01:42 < bridge> [ddnet] [2021-06-15 01:41:24][serverbrowse_http]: found master, url='https://master2.ddnet.tw/ddnet/15/servers.json' time=967ms 01:42 < bridge> [ddnet] [2021-06-15 01:41:24][serverbrowse_http]: found master, url='https://master3.ddnet.tw/ddnet/15/servers.json' time=20ms 01:42 < bridge> [ddnet] [2021-06-15 01:41:24][serverbrowse_http]: determined best master, url='https://master1.ddnet.tw/ddnet/15/servers.json' time=0ms 01:42 < bridge> [ddnet] ``` 01:42 < bridge> [ddnet] 0ms 01:42 < bridge> [ddnet] wowo 01:42 < bridge> [ddnet] wowow 01:42 < bridge> [ddnet] thats bad xd 01:42 < bridge> [ddnet] can you restart and check if the problem persists? 01:42 < bridge> [ddnet] sure 01:42 < bridge> [ddnet] that might be our timekeeping "optimization" 01:43 < bridge> [ddnet] now it says 70, but the 0 is to be expected? 01:43 < bridge> [ddnet] no 01:43 < bridge> [ddnet] the 0ms is probably from our caching time_get values 01:43 < bridge> [ddnet] ahh 01:43 < bridge> [ddnet] i understand 01:44 < bridge> [ddnet] make sure to create a bug report 02:15 < bridge> [ddnet] i can also just patch is, we have a microsecond implementation that doesnt cache 02:16 < bridge> [ddnet] its safer anyway to not use time_get in a different thread 09:32 < bridge> [ddnet] Nope, CF routing is shit also on Paid accounts 09:32 < bridge> [ddnet] If they have problems in a location, they just shut down It, Milan location for example is online 1 time over 10 /year 09:32 < bridge> [ddnet] 😂 😂 11:46 < bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/854295755262394418/-3723f2b93fd32e8a.jpg 11:47 < bridge> [ddnet] 🍷 13:47 < bridge> [ddnet] Q: Assuming empty caches, a host pinging another host in their own subnet would just do an ARP request, no? 13:47 < bridge> [ddnet] plus ICMP ping 13:48 < bridge> [ddnet] what do you mean by "pinging"? 13:48 < bridge> [ddnet] Can you see any reason for this insanity? 13:48 < bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/854326512555524136/unknown.png 13:49 < bridge> [ddnet] Ah at A... 13:49 < bridge> [ddnet] yes, only the ARP request is broadcast 13:49 < bridge> [ddnet] At the switch we'd see ARP Req, ARP Reply, ICMP Req, ICMP Reply. Right? 13:51 < bridge> [ddnet] yes 13:52 < bridge> [ddnet] The way they drew it made me think it was a shared bus, not a switched network 14:18 < bridge> [ddnet] Is it not possible to set up a limit for the console? For the test server it would be very useful because sp someone always comes when we test on the server and causes with his spam timeouts 14:19 < bridge> [ddnet] I already asked @murpi but he said it's impossible? 14:33 < bridge> [ddnet] It is possible but it requires some engineering and I'm not completely sure how best to fix it 14:34 < bridge> [ddnet] @heinrich5991 any idea on how to fix it? 14:34 < bridge> [ddnet] #3691 14:34 < bridge> [ddnet] https://github.com/ddnet/ddnet/issues/3691 14:34 < bridge> [ddnet] I think we talked about it before for a bit but I don't think we came up with any solution that satisfied both of us 14:35 < bridge> [ddnet] can you change map on the testing servers? 14:35 < bridge> [ddnet] with the rcon 14:35 < bridge> [ddnet] I think it also annoys murpi that I have to ask him all the time if we can get a server with a new pw 14:35 < bridge> [ddnet] Well the map changes only used to cause it because they spammed fron with `vote added` 14:35 < bridge> [ddnet] I don't mind 14:35 < bridge> [ddnet] s\/fron/rcon/ wtf 14:36 < bridge> [ddnet] I think the issue was that we are running out of space in the retransmit queue? 14:36 < bridge> [ddnet] yes 14:36 < bridge> [ddnet] we ignore the error though (not a good thing) 14:36 < bridge> [ddnet] and when the client asks for retransmits, it'll eventually get dropped because we don't have the packets anymore 14:37 < bridge> [ddnet] how would we even sanely handle running out of space? fwiw imo this shouldn't even be possible to begin with 14:37 < bridge> [ddnet] do we use the nuclear test servers for anything specific? 14:38 < bridge> [ddnet] Some throttling for rcon log lines or maybe merging duplicated lines? 14:38 < bridge> [ddnet] we either throw lines away or disconnect the player 14:38 < bridge> [ddnet] I don't see many alternatives 14:38 < bridge> [ddnet] rcon messages are VITAL, maybe they shouldn't be vital? 14:38 < bridge> [ddnet] we could also make the buffer larger, making it harder to reach 14:39 < bridge> [ddnet] we could introduce a new vital message type that is only actually sent if the queue is less than 50% full 14:39 < bridge> [ddnet] or maybe we introduce something like `SOFTVITAL`, if we can reliably deliver it 14:39 < bridge> [ddnet] heh, we came up with the exact same idea 😄 14:40 < bridge> [ddnet] no, you want to send it as non-vital, I want to drop it on the server 14:40 < bridge> [ddnet] it's similar, I guess 14:40 < bridge> [ddnet] The first one I said was sending it non-vital, but that's not really good. I was thinking the exact same idea for `SOFTVITAL` 14:40 < bridge> [ddnet] ah 🙂 14:41 < bridge> [ddnet] if the queue isn't too busy deliver reliably, if not either send it non-vital and pray for the best or drop it 14:41 < bridge> [ddnet] just drop it, shouldn't happen during normal usage 14:41 < bridge> [ddnet] maybe also introduce a log message that it happened 14:41 < bridge> [ddnet] and watch out for it in the logs 14:41 < bridge> [ddnet] (rate limited!) 14:42 < bridge> [ddnet] I don't know anything about this, but how about doing it like twitch, all non testers are allowed to make an entry every 10sec. 14:42 < bridge> [ddnet] then you can't use stuff like `up` anymore, I guess? 14:42 < bridge> [ddnet] U can use tele 14:42 < bridge> [ddnet] I would take a look at it but I have a computer networks exam tomorrow and even though I know the material I'll feel bad if I don't atleast pretend I studied for it 😛 14:42 < bridge> [ddnet] there are alternatives, sure 14:42 < bridge> [ddnet] but up won't be usable anymore? 14:43 < bridge> [ddnet] or quickly respawning at a tele to retry a part? 14:43 < bridge> [ddnet] I don't think so 14:43 < bridge> [ddnet] sounds like a bad idea 14:43 < bridge> [ddnet] We could also just ratelimit the rcon lines per second as a quick patch and just drop the messages 14:43 < bridge> [ddnet] Maybe 1sec is enough? 14:43 < bridge> [ddnet] well everyone can log in on test servers so that's not particularly useful 14:44 < bridge> [ddnet] But as non tester u got only helper role 14:44 < bridge> [ddnet] @heinrich5991 ah I have one more idea, we can also separate out the consoles finally, so not every logged in person gets the entire server log 15:27 < bridge> [ddnet] This guy gave 11.68ms transmission time for one packet in an exercise. What kind of evil entity gives such a horrible number in an exam without calculators? 17:26 < bridge> [ddnet] what are the conditions for a successful vote 17:26 < bridge> [ddnet] Exclude Nexus from the vote :troll: 17:27 < bridge> [ddnet] :Sadge: 17:27 < bridge> [ddnet] Oh cmon its quiet easy. You need to go with a free bottle of beer to everyone who can make a vote and try to reason them why they should F3 =] 17:27 < bridge> [ddnet] Include LCSG47 :troll: 17:28 < bridge> [ddnet] It almost feels like you have to seo ur reasons and do everything so people start to vote 17:28 < bridge> [ddnet] @NeXus ingame: all of the players who have veto must agree, and a majority of the players must agree 17:28 < bridge> [ddnet] Veto for map vote I suppose? 17:28 < bridge> [ddnet] Welcome to elections this is how nowadays voting works =] 17:28 < bridge> [ddnet] afk players don't count, people get veto if they're >20min on the server or >20min in the race 17:28 < bridge> [ddnet] ah yes 17:28 < bridge> [ddnet] true, vetos only exist for map votes 17:29 < bridge> [ddnet] We try to kick someone and I've noticed this serveral times now, its almost impossible to kick a blocker by vote 17:29 < bridge> [ddnet] bcs most people just dont vote and I guess their vote counts f4 17:29 < bridge> [ddnet] how long do you have to be afk to make it count (exclude you from voting) ? 17:31 < bridge> [ddnet] seems like 2min? 17:31 < bridge> [ddnet] on official servers. default is 5min 17:44 < bridge> [ddnet] https://www.bbc.com/news/technology-57443598 17:44 < bridge> [ddnet] :monkalaugh: 17:46 < bridge> [ddnet] https://news.ycombinator.com/item?id=27514130 17:46 < bridge> [ddnet] hum 17:46 < bridge> [ddnet] looks weird, I thought win10 was forever 17:46 < bridge> [ddnet] same 17:46 < bridge> [ddnet] I guess it's just new branding? 17:47 < bridge> [ddnet] > While PC sales still dominate - 79.4 million shipped in 2020, according to Gartner - Google's alternative is proving popular, with 11.7 million Chromebooks, which run on Google's Chrome OS, shipping in the same timeframe. 17:47 < bridge> [ddnet] chromebooks creating competence? 17:48 < bridge> [ddnet] > Honestly, HN may want to just consider banning any site that runs this news article from being posted on HN, because this claim is basically proof they did not do even cursory research before posting. 17:48 < bridge> [ddnet] > 17:48 < bridge> [ddnet] > Here's the 2015 story covering this date announcement, which bears no relation to recent rumors at all: https://www.ghacks.net/2015/07/20/microsoft-to-support-windo... 17:48 < bridge> [ddnet] ye im reading that 17:48 < bridge> [ddnet] but i dont think they will ban bbc 17:49 < bridge> [ddnet] I'm more commenting on the story itself 17:49 < bridge> [ddnet] i.e. that it's not clear that this is some actual news 18:37 < bridge> [ddnet] @heinrich5991 || @Ryozuki do either of you know an expression that will easily get optimized out but would fail if a field of a struct doesn't exist? 18:38 < bridge> [ddnet] s\/fail/fail to compile/ 18:38 < bridge> [ddnet] (in rust) 18:38 < bridge> [ddnet] &struct.field; 18:38 < bridge> [ddnet] struct.0? 18:39 < bridge> [ddnet] idk what u mean 18:39 < bridge> [ddnet] xd 18:39 < bridge> [ddnet] i dont know much about what gets optimized or not 18:39 < bridge> [ddnet] i never rly cares much 18:39 < bridge> [ddnet] cared* 18:41 < bridge> [ddnet] :o 18:41 < bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/854400120274288700/unknown.png 18:41 < bridge> [ddnet] https://gist.github.com/jFransham/369a86eff00e5f280ed25121454acec1 18:41 < bridge> [ddnet] maybe u find something here 18:41 < bridge> [ddnet] @Learath2 tell us what you need 🥺 18:41 < bridge> [ddnet] I need a macro to fail to compile if an invalid field name is given 18:42 < bridge> [ddnet] but you don't have an instance of the struct? 18:42 < bridge> [ddnet] nope 18:42 < bridge> [ddnet] I can create one in the macro if rust will optimize it out, but then I need to find a way to create a unique identifier 18:42 < bridge> [ddnet] dont macros accept :ident which will always be ok? 18:42 < bridge> [ddnet] maybe `let _ = |x: Struct| x.field;` ? 18:43 < bridge> [ddnet] oh, if the struct doesnt have it? 18:43 < bridge> [ddnet] that looks like it'd work, let me give it a try 18:51 < bridge> [ddnet] theorically rust macros are partially hygienic, 18:52 < bridge> [ddnet] https://danielkeep.github.io/tlborm/book/mbe-min-hygiene.html 18:52 < bridge> [ddnet] I also noticed I could just create a block and name it whatever I want inside there 18:53 < bridge> [ddnet] Got offered 15k/month with provided accommodation 18:53 < bridge> [ddnet] 15k cny 18:53 < bridge> [ddnet] 15k pennies? 18:53 < bridge> [ddnet] ah ok 18:53 < bridge> [ddnet] xd 18:53 < bridge> [ddnet] > 1,931.05 Euro 18:53 < bridge> [ddnet] thats rly good, atleast here 18:54 < bridge> [ddnet] Well it is in Beijing so it is OK. 18:54 < bridge> [ddnet] provided accomodation means u dont pay for a flat? 18:54 < bridge> [ddnet] if so then even better 18:54 < bridge> [ddnet] Ye that's pretty sweet 18:54 < bridge> [ddnet] i would take it 18:55 < bridge> [ddnet] But only because they are a really small team with like 10 people, and they want me to live upstairs above the office lol. 18:55 < bridge> [ddnet] But still pretty swee 18:55 < bridge> [ddnet] T 18:55 < bridge> [ddnet] I probably would too. 18:56 < bridge> [ddnet] what is the job? 18:56 < bridge> [ddnet] sounds cool tbh 18:56 < bridge> [ddnet] well depends what they want u to do 18:56 < bridge> [ddnet] Ripping off ddnet 18:56 < bridge> [ddnet] wat 18:57 < bridge> [ddnet] Lol 18:57 < bridge> [ddnet] Literally. https://www.taptap.com/app/211037 18:57 < bridge> [ddnet] lmao 18:58 < bridge> [ddnet] i wouldnt want to live above my job 18:58 < bridge> [ddnet] @Learath2 pinging you since you are the person I had in mind might have done it in the past, in case you missed it 18:58 < bridge> [ddnet] thats really shit 18:58 < bridge> [ddnet] "Hi, everybaby~ 我们是来自北京的独立游戏团队" 😄 18:58 < bridge> [ddnet] that is hilarious o.o 18:58 < bridge> [ddnet] > Hi, everybaby~ We are an independent game team from Beijing - Connected Star Dreams 18:59 < bridge> [ddnet] Nope, you do need to run it and it is indeed quite a hassle to get it running 18:59 < bridge> [ddnet] I'm pretty sure that's a demo. And they are hiring to redo the whole thing 18:59 < bridge> [ddnet] But it is funny nonetheless 18:59 < bridge> [ddnet] haha what the fuck 18:59 < bridge> [ddnet] I'm about 30 minutes away from rolling a bot to replace the global bans, so I can debug it on both sides 18:59 < bridge> [ddnet] xd 18:59 < bridge> [ddnet] that's what you're doing with rust? ^^ 18:59 < bridge> [ddnet] > Reference and borrowed from the Steam classic multiplayer cooperative game "DDrace network", interested partners can try it on PC https://store.steampowered.com/app/412220/DDraceNetwork/ 18:59 < bridge> [ddnet] > 18:59 < bridge> [ddnet] > At the same time, the game also continues the Bowl. 18:59 < bridge> [ddnet] > 1. multiplayer cooperative IO game 19:00 < bridge> [ddnet] > 2. advocate friendship and mutual aid, positive sunshine positive energy 19:00 < bridge> [ddnet] > 3. micro-pit pleasant character detection mechanism 19:00 < bridge> [ddnet] > Added the now popular 19:00 < bridge> [ddnet] > 4. custom skin and creative workshop 19:00 < bridge> [ddnet] > 19:00 < bridge> [ddnet] > Above, I hope that everyone, whether you know, or passers-by, can be in the process of mutual pit, while also experiencing the joy of saving people. 19:00 < bridge> [ddnet] > Sam gas full of every day, adjourn ~ 19:00 < bridge> [ddnet] > 19:00 < bridge> [ddnet] > Translated with www.DeepL.com/Translator (free version) 19:00 < bridge> [ddnet] just as soon as rust decides to accept my macro notation 19:00 < bridge> [ddnet] xd 19:00 < bridge> [ddnet] why dont u show the code? 19:00 < bridge> [ddnet] yes, for now it'll just replace the bans, it is quite dirty after all 19:00 < bridge> [ddnet] They went on here and asked deen tons of questions. deen basically agree to the attribution 19:01 < bridge> [ddnet] @Ryozuki https://github.com/Learath2/discordbot I already asked you to take a look at it, it isn't made for long term usage, it's more for me to learn more rust and debug the problems plaguing the mods 19:01 < bridge> [ddnet] And it is probably why I got offered 19:01 < bridge> [ddnet] Imagine not looking for jobs and ddnet discord gave you one. 19:01 < bridge> [ddnet] fwiw our license even allows them to not attribute at all, so it's nice that they did it anywya 19:01 < bridge> [ddnet] > Some access control 19:01 < bridge> [ddnet] sounds dangerous 19:01 < bridge> [ddnet] 😄 19:02 < bridge> [ddnet] imagine all users being able to ban people, that would be fun 😄 19:02 < bridge> [ddnet] there's a discord command framework 19:02 < bridge> [ddnet] it doesn't look like you're using it. intentionally? 19:02 < bridge> [ddnet] honestly if the office is near the center of the city i would do it 19:02 < bridge> [ddnet] @heinrich5991 I checked out a couple they were all very annoying to use 19:03 < bridge> [ddnet] kk 19:03 < bridge> [ddnet] I'll make my own afterwards, I just want to get the bans fixed first 19:03 < bridge> [ddnet] writing a lexer when u have a rly good lib for it 19:03 < bridge> [ddnet] @Learath2 no, I mean native support for commands in discord 19:03 < bridge> [ddnet] feelsbadman 19:03 < bridge> [ddnet] They did it because our guy went to their game and did some heavy trolling. I didn't manage to stop hundreds of chn players jumping on the bandwagon 19:03 < bridge> [ddnet] try writing / here @Learath2 19:04 < bridge> [ddnet] I like my lexer, it's cute, and an actual lexer is actually not so easy to use since they usually take regex patterns that you have to mess around with 19:04 < bridge> [ddnet] (and they usually don't have rewind :P) 19:04 < bridge> [ddnet] They really want to nod from deen to calm the trolls. 😅 19:05 < bridge> [ddnet] Ah you mean slash commands, they are so new barely any frameworks implement them at all and those that do hardly document it and they don't usually have full support 19:05 < bridge> [ddnet] want a * 19:05 < bridge> [ddnet] https://github.com/maciejhirsz/logos 19:05 < bridge> [ddnet] e.g. in serenity-rs slash commands need to be guild-wide 19:05 < bridge> [ddnet] I see 19:05 < bridge> [ddnet] in twilight they don't have any access control at all 19:05 < bridge> [ddnet] @Learath2 19:05 < bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/854406344027406396/unknown.png 19:07 < bridge> [ddnet] @Ryozuki ofc it'll do better than me, but bringing in such a heavyweight component for the simplest language ever created sounded silly to me 19:08 < bridge> [ddnet] i rly disagree with that stance 19:08 < bridge> [ddnet] but well i cant convince u, u did it 19:08 < bridge> [ddnet] I'm not parsing/lexing a programming language, it's just a command line with space as delimiters 19:08 < bridge> [ddnet] I know you do, most people do. You do you, let me do me 🙂 19:08 < bridge> [ddnet] hence my second sentence :p 19:08 < bridge> [ddnet] I agree with Learath2 here, how many kilobytes will this dependency bring in? 19:08 < bridge> [ddnet] let me see 19:09 < bridge> [ddnet] 35kb 19:09 < bridge> [ddnet] or 280kb 19:09 < bridge> [ddnet] idk 19:09 < bridge> [ddnet] @heinrich5991 it likely is very efficient spacewise when compiled, DSMs optimize very well 19:09 < bridge> [ddnet] it actually has around 4600 lines 19:09 < bridge> [ddnet] > Create ridiculously fast Lexers. 19:09 < bridge> [ddnet] :monkalaugh: 19:10 < bridge> [ddnet] I meant code size 19:10 < bridge> [ddnet] i love u optimize for space like u will release this on a microcheap 19:10 < bridge> [ddnet] around 4600 19:10 < bridge> [ddnet] lines 19:10 < bridge> [ddnet] but it also increases the compile time which is already annoying in rust imo 19:10 < bridge> [ddnet] I meant code size @Learath2 19:10 < bridge> [ddnet] argh 19:10 < bridge> [ddnet] communication 19:10 < bridge> [ddnet] 😄 19:11 < bridge> [ddnet] Ryozuki: it seemed that Learath2 talked about runtime memory usage, so that's why I said "I'm talking about code size" 19:11 < bridge> [ddnet] btw compile times rn are slower than usually because there is a miscompilation error in recent rust versions thats why it doesnt compile incrementally 19:11 < bridge> [ddnet] I'm optimizing for maximal rust learnage and maximal performance without delving into unsafe 19:11 < bridge> [ddnet] there are miscompilation errors when using incremental compilation 19:11 < bridge> [ddnet] so it is disabled 19:11 < bridge> [ddnet] in recent versions 19:11 < bridge> [ddnet] I don't need 300KB of code to split a string at whitespaces 19:11 < bridge> [ddnet] that probably fits into <1KB 19:12 < bridge> [ddnet] 19:12 < bridge> [ddnet] 😇 I wish I can care about code size. 19:12 < bridge> [ddnet] I don't want my application to be 100x as large as it needs to be 19:12 < bridge> [ddnet] much much less if you are talking about just the lexer 19:12 < bridge> [ddnet] well ok i give it to u 19:12 < bridge> [ddnet] if its just splitting spaces 19:12 < bridge> [ddnet] maybe quoting 19:12 < bridge> [ddnet] I mean this is a TRIVIAL dsm that you can just optimize in your head, even with quoting it's quite simple 19:13 < bridge> [ddnet] @Learath2 `debug!(?req);` is this a shorthand? 19:13 < bridge> [ddnet] didnt know about it 19:13 < bridge> [ddnet] my bot just use a regex for commands 😅 19:13 < bridge> [ddnet] what's it do? @Ryozuki 19:13 < bridge> [ddnet] but anyway, I don't want to lex the entire line in one go either, I need rewind and I need the ability to use code to define the syntax of the commands 19:13 < bridge> [ddnet] i guess its debug!("{:?}", req); 19:13 < bridge> [ddnet] it's from `tracing` when you want to just print one thing with debug formatting 19:13 < bridge> [ddnet] ah 19:13 < bridge> [ddnet] yep 19:14 < bridge> [ddnet] I thought it's the dbg! macro, my bad 19:14 < bridge> [ddnet] `%req` would print with `Display` formatting 19:14 < bridge> [ddnet] @Learath2 did u really need dyn Errors everywhere, instead of using thiserror? 19:14 < bridge> [ddnet] And the next version of tracing will make it even prettier, allowing things like `debug!("login", user = ?u, thread = ?t);` 19:15 < bridge> [ddnet] do I have many dyn Errors? I should have like a single one and the rest should be well defined concrete error types 19:16 < bridge> [ddnet] Anyway, I'm not really happy with how the error handling turned out anyway, I'd need to think more about it the next time but I like having concrete error types, allows me to make sure at compile time that I handle all cases 19:24 < bridge> [ddnet] @Learath2 xD 19:24 < bridge> [ddnet] 19:24 < bridge> [ddnet] change the box dyn 19:24 < bridge> [ddnet] to CommandError 19:24 < bridge> [ddnet] and compile 19:26 < bridge> [ddnet] u never had to use that in the first place 19:27 < bridge> [ddnet] whenever u use ? it calls .into() to the error btw 19:27 < bridge> [ddnet] I was initially planning to let fatal errors bubble up all the way to there 19:27 < bridge> [ddnet] and since u implement From it works 19:28 < bridge> [ddnet] but then I changed my mind, so yeah I guess that can be a CommandError now 19:28 < bridge> [ddnet] this mess should be split into multiple modules too but I honestly don't have the energy anymore 19:28 < bridge> [ddnet] also why use a closure at all? 19:28 < bridge> [ddnet] u can make another function 19:28 < bridge> [ddnet] I'll just finish this up and get to fixing the global bans 19:28 < bridge> [ddnet] closures in rust are harder to debug 19:28 < bridge> [ddnet] Which closure are we talking about? 19:29 < bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/854412206590001152/unknown.png 19:29 < bridge> [ddnet] well 19:29 < bridge> [ddnet] lambda 19:29 < bridge> [ddnet] or whathever u call it 19:30 < bridge> [ddnet] Heh, that's an artifact from when I was messing around with a command system, it can indeed now be a function 19:30 < bridge> [ddnet] well atleast from my experience from reading reddit 19:30 < bridge> [ddnet] maybe this one here doesnt matter 19:30 < bridge> [ddnet] Yeah, it's fine now that I'm not passing it around 19:33 < bridge> [ddnet] @Learath2 btw idk if u know, but usually Errors in rust implement Error 19:33 < bridge> [ddnet] if u implement it you can implement the source function 19:33 < bridge> [ddnet] which u can use to provide the internal error info 19:33 < bridge> [ddnet] kinda 19:33 < bridge> [ddnet] https://doc.rust-lang.org/std/error/trait.Error.html#method.source 19:33 < bridge> [ddnet] the thiserror crate does it all for u btw 19:33 < bridge> [ddnet] :feelsbadman: 19:35 < bridge> [ddnet] I would indeed use thiserror the next time I do this, as I said I tried to maximize learnage here 😄 19:35 < bridge> [ddnet] @Learath2 the usual way to have a CommandError like u do is 19:35 < bridge> [ddnet] to declare it as an enum 19:35 < bridge> [ddnet] have a variant for each From implementation u want 19:35 < bridge> [ddnet] shameless self plug here https://edgarluque.com/blog/wrapping-errors-in-rust 19:35 < bridge> [ddnet] maybe u find it util 19:37 < bridge> [ddnet] :poggers: 19:37 < bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/854414429311205452/unknown.png 19:47 < bridge> [ddnet] https://img.tapimg.com/market/images/25684606b62d63807ae9f2c80ac36a6a.jpg 19:47 < bridge> [ddnet] that looks a lot like the map "LearnToPlay" 19:47 < bridge> [ddnet] i know 19:48 < bridge> [ddnet] it feels so unreal, familiar yet so different ^^ 19:52 < bridge> [ddnet] we have to shut down ddnet so they stop ripping it off 19:52 < bridge> [ddnet] there is a way to disable / give to everybody the strong hook in ddnet srv? 19:53 < bridge> [ddnet] i check gamecontext.cpp and my brain stopped working ;c 20:13 < bridge> [ddnet] https://github.com/teeworlds/teeworlds/pull/2478 try implement this. 20:16 < bridge> [ddnet] you can also cherry pick this: 20:16 < bridge> [ddnet] https://github.com/Jupeyy/ddnet/commit/55f5da8655f552f47e46c9d35c808e071ecb7937 20:16 < bridge> [ddnet] directly for ddnet code 21:54 < bridge> [ddnet] @heinrich5991 https://www.theverge.com/2021/6/15/22535123/microsoft-windows-11-leak-screenshots-start-menu?utm_campaign=theverge&utm_content=chorus&utm_medium=social&utm_source=twitter 21:54 < bridge> [ddnet] it seems it wasnt that far fetched 21:54 < bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/854448895470862387/unknown.png 21:54 < bridge> [ddnet] :monkalaugh: 22:00 < bridge> [ddnet] Oh know Windows 10 X will be a complete failure what do we do. Cancel it. And what should we do about the "new icons set" they look so nice. Ok cancel windows 10 X and move those nice icons to Windows 10 and rename Windows 10 to Windows 11. 22:00 < bridge> [ddnet] they'll change the name just to mess with leakers 22:00 < bridge> [ddnet] Oh no, Windows 10 X will be a complete failure what do we do. Cancel it. And what should we do about the "new icons set" they look so nice. Ok cancel windows 10 X and move those nice icons to Windows 10 and rename Windows 10 to Windows 11. 22:04 < bridge> [ddnet] LOL didn't microsoft say some shit ago about never releasing a new version of windows, only updating 10? 22:05 < bridge> [ddnet] LOL didn't microsoft say some shit few years ago about never releasing a new version of windows, only updating 10? 22:05 < bridge> [ddnet] why would they even say that 22:06 < bridge> [ddnet] they could have said nothing and they wouldn't be called out now for lying 23:20 < bridge> [ddnet] "We will never need 32 bits system" Bill Gates 23:20 < bridge> [ddnet] Seems like predicting wrong future is a requirement to be at Microsoft 😄 23:21 < bridge> [ddnet] well we are at 64bit xd 23:59 < bridge> [ddnet] lol true