01:38 < bridge> lerato 04:37 < bridge> 5 am, im finally done with 1st site in my life 04:37 < bridge> hope last 04:37 < bridge> rate pls 04:37 < bridge> https://stormaxs.github.io/StA-site/ 05:33 < bridge> <_voxeldoesart> wait what 05:33 < bridge> <_voxeldoesart> LERP tee animation? 05:33 < bridge> <_voxeldoesart> what does that mea 05:35 < bridge> <_voxeldoesart> also @stormaxd is it alright that i give out thoughts about this client? 05:36 < bridge> Linear interpolation 05:36 < bridge> Ofc, go for it 05:37 < bridge> <_voxeldoesart> on 2560x1440 the buttons arent centered LOL 05:37 < bridge> <_voxeldoesart> https://cdn.discordapp.com/attachments/293493549758939136/1186527605508284461/image.png?ex=659392f1&is=65811df1&hm=43cf6054bc6a56f729dfb86d4b6f55dabd3a46b1d1b49d2c92fd176c14724c4e& 05:37 < bridge> I fixed it already 05:37 < bridge> Someone reported me when i released it last time 05:38 < bridge> Cause im planning to done with stat page and only then make a new release 09:06 < bridge> The logo is missing an "r" 09:07 < bridge> STA CLIENTR 09:07 < bridge> troll 09:09 < bridge> Trollr 09:09 < bridge> Star client?:poggers2: 09:10 < bridge> 😏 09:10 < bridge> Also add ✪ 09:10 < bridge> I can't 09:11 < bridge> I haven't sleep almost 2 night 09:11 < bridge> Let me 09:11 < bridge> Sleep :pepeLost: 09:11 < bridge> Ok, you can sleep for 10 minutes 09:12 < bridge> :Deadge: 09:12 < bridge> :blushWokege: 09:14 < bridge> how dare he 09:14 < bridge> stop sleeping - go work 09:14 < bridge> alr alr 09:15 < bridge> 1 buf fix 10:13 < bridge> Rust needs a 'inline lifetime, that makes sure a reference is only valid for a single expression. Would be cool and useful 10:15 < bridge> i mean cant u do that with a block {} 10:16 < bridge> ```rust 10:16 < bridge> let b = 2; 10:16 < bridge> { 10:16 < bridge> let b = &b; 10:16 < bridge> } 10:16 < bridge> ``` 10:16 < bridge> use shadowing to achieve it 10:16 < bridge> idk 10:16 < bridge> I mean e.g. if i return a mut ref from function call 10:16 < bridge> That you can't truly borrow this result 10:16 < bridge> @jupeyy_keks there is something called fnonce 10:16 < bridge> https://doc.rust-lang.org/std/ops/trait.FnOnce.html 10:16 < bridge> Instances of FnOnce can be called, but might not be callable multiple times. Because of this, if the only thing known about a type is that it implements FnOnce, it can only be called once. 10:17 < bridge> idk how u could achieve that u want xd 10:17 < bridge> but if u can only use the ref inside a fnonce 10:17 < bridge> maybe its possible 10:17 < bridge> Well what i actually want is to return a Ref<'inline, T> 10:17 < bridge> Xd 10:17 < bridge> xd 10:18 < bridge> OnceCell? 10:18 < bridge> ah no this is to write 10:18 < bridge> idk 10:18 < bridge> Yeah dunno. 2024 edition clearly needs a new rfc 😬 10:18 < bridge> well u should explain ur use case in depth 10:20 < bridge> Yeah i want to return a borrow_mut. 10:20 < bridge> But this is unsafe, in logic sense, in combination with rc because you could end up borrow twice. But if the borrow would end every line+ i have a strict hierarchy of my types => safe af 10:21 < bridge> Rn i am emulating with by not allowing public types and rewrite the public interface with a proc macro 10:22 < bridge> Works well, but more hidden logic xdd 10:23 < bridge> With some inline lifetime i could use deref trait 10:23 < bridge> Would be clean af 10:25 < bridge> deref should only be used by smart pointers btw 10:25 < bridge> > Implementing Deref for smart pointers makes accessing the data behind them convenient, which is why they implement Deref. On the other hand, the rules regarding Deref and DerefMut were designed specifically to accommodate smart pointers. Because of this, Deref should only be implemented for smart pointers to avoid confusion. 10:25 < bridge> > 10:25 < bridge> > For similar reasons, this trait should never fail. Failure during dereferencing can be extremely confusing when Deref is invoked implicitly. 10:25 < bridge> > 10:26 < bridge> > Violating these requirements is a logic error. The behavior resulting from a logic error is not specified, but users of the trait must ensure that such logic errors do not result in undefined behavior. This means that unsafe code must not rely on the correctness of this method. 10:26 < bridge> Well mine would be smart wrapper 10:37 < bridge> the doc was recently updated btw: 10:37 < bridge> https://github.com/rust-lang/rust/commit/58645e06d9121ae37654b812d14041d0229d49c3 10:39 < bridge> so no smart-pointer 10:39 < bridge> 10:39 < bridge> it must be fail safe, the wrapper type should not have API collisions 10:39 < bridge> also should not != must not 😉 10:42 < bridge> With some inline lifetime i could use deref trait (the inline lifetime also needs other requirements, but too much to list them) 10:43 < bridge> With some inline lifetime i could use deref trait (the inline lifetime also needs other requirements, but too much to list them, e.g. no inline lifetimes twice, or specific evaluation order of calls etc. xd) 10:43 < bridge> Can't you take the mut borrow out of the rc? 10:44 < bridge> what do you mean? 10:44 < bridge> the whole Rc> would be wrapped in a smart wrapper 10:45 < bridge> so u can never acess the refcell interface directly 10:46 < bridge> Yes that's sort of what I meant 10:46 < bridge> i mean i didnt 100% think though the best solution, but i think it would have potential xdd 10:46 < bridge> i mean i didnt 100% think through the best solution, but i think it would have potential xdd 10:47 < bridge> Or whatever function is returning the mut borrow would take the rc in exchange 10:47 < bridge> but i can clone Rcs 10:48 < bridge> But the refcell wont allow a second mut borrow and enforce it at runtime 10:48 < bridge> yes that's exactly what i dislike xD 10:48 < bridge> at runtime xD 10:48 < bridge> Ah you want to avoid the refcell? 10:49 < bridge> i want to avoid lifetime (rc) but also the problem of calling borrow_mut twice (refcell) 10:49 < bridge> i have a solution for this, it's just not nicest to use, bcs it requires adding proc macros to many types.. so it's also not enforced in that sense anyway 10:50 < bridge> the 'inline would also not enforce it, but it would make my solution more elegant xD 10:51 < bridge> e.g. if you never have cycling refs (not even with Weak) ,also not by passing Rcs around, you should™️ never have problems and still have the benefits of Rc 10:52 < bridge> oh and hierarchically it is not allowed to have the same Rc on a child component if the parent has it already 10:52 < bridge> Well idk your specifics but there isn't much harm in a refcell if that's the only way to ensure safety that's the only way to do it. It's just 1 branch 10:53 < bridge> you are right and if you have a private field that is a refcell it's relatively safe 10:53 < bridge> i also try to do it, if i use it. 10:53 < bridge> 10:53 < bridge> i guess i am in adventurer mode rn xd 10:56 < bridge> the only problem is smth like this: 10:56 < bridge> 10:56 < bridge> ```rs 10:56 < bridge> struct A { r: Rc<...> } 10:56 < bridge> struct B { r: Rc<..>, a: A } // same rc as above 10:56 < bridge> 10:56 < bridge> impl A { fn func() {r.borrow_mut().dosmth}} 10:56 < bridge> impl B { fn func() {let borrowered = r.borrow_mut(); 10:56 < bridge> a.func(); // panic bcs and b will borrow_mut 10:56 < bridge> }} 10:56 < bridge> 10:56 < bridge> 10:56 < bridge> let b = B::...; 10:56 < bridge> b.func(); 10:56 < bridge> ``` 10:56 < bridge> the 'inline lifetime could also also disallow being passed to a function etc. 10:57 < bridge> well as said it only works under certain conditions, but it defs help to fuck up less in my case without having to have so many proc macros 10:57 < bridge> the only problem is smth like this: 10:57 < bridge> 10:57 < bridge> ```rs 10:58 < bridge> struct A { r: Rc<...> } 10:58 < bridge> struct B { r: Rc<..>, a: A } // same rc as above 10:58 < bridge> 10:58 < bridge> impl A { fn func() {r.borrow_mut().dosmth}} 10:58 < bridge> impl B { fn func() {let borrowered = r.borrow_mut(); 10:58 < bridge> a.func(); // panic bcs a and b will borrow_mut at same time 10:58 < bridge> }} 10:58 < bridge> 10:58 < bridge> 10:58 < bridge> let b = B::...; 10:58 < bridge> b.func(); 10:58 < bridge> ``` 11:01 < bridge> now i am motivated to write test cases for my macro to find some of its limitations 11:01 < bridge> 11:01 < bridge> thanks for movation 😏 11:13 < bridge> Yeah this is suboptimal calling the functions while holding a borrow leading to a panic is bizarre feeling 11:14 < bridge> its enforcing the borrow checker at runtime 11:14 < bridge> I'm more curious as to how you'd allow this pattern 11:15 < bridge> whats the pattern i didnt read i was trying to fix my lalrpop pascal parser :/ 11:15 < bridge> > "array" "[" > "]" "of" => ast::Type::Array { 11:15 < bridge> > index, 11:15 < bridge> > component: Box::new(c), 11:15 < bridge> > packed: p.is_some(), 11:15 < bridge> > }, 11:15 < bridge> > and looking at a token `Eof` we can reduce to a `CommaNoTrailing<"identifier">` but we can also reduce to a `SemiColonNoTrailing` 11:15 < bridge> im dying 11:16 < bridge> Technically while `a.func()` is happening you are already holding a mut ref outside it so it panics, but technically it's sane. The second mut borrow is the only one in scope 11:16 < bridge> Like a two phase borrow 11:17 < bridge> You can get rid of the refcell too. I'm just curious how a seasoned rust veteran would structure it 11:19 < bridge> @jupeyy_keks is this components and cgameclient btw? 11:19 < bridge> That's the sort of relationship those have 11:19 < bridge> well you can do lot of stuff without Rc. sadly this can always increase complexity, by a lot, bcs u need to pass so much stuff around. 11:19 < bridge> 11:19 < bridge> Generally i think this isn't even bad, it's just that i want to have some modules be very easy to use 11:20 < bridge> generally u want to structure ur code to avoud refcells at all 11:20 < bridge> for me it's more the interaction with the graphics component by two or more components 11:20 < bridge> and still you use all these fancy libs that have a slim api. bcs they internally have Rc or Arcs 11:21 < bridge> this code doesnt make sense, where do u get r in the B impl block 11:21 < bridge> as said, it's a matter of simplicity 11:21 < bridge> Yep that works too. So I guess the proper solution is for the components to not hold a ref to the graphics component 11:21 < bridge> what libs 11:21 < bridge> it's pseudo code 11:21 < bridge> i dunno, like 90% of the libs allow me to clone their instance of whatever 11:22 < bridge> ??? 11:22 < bridge> Yeah libs wrap their contexts in arcs 11:22 < bridge> i hate arguments like that, u cant argue cuz its so vague 11:22 < bridge> if you have a tokio runtime, u can just clone it and it's the same instance 11:22 < bridge> 11:22 < bridge> if you clone some sound lib, you can clone the runtime and it will just work 11:22 < bridge> Anyway, why are you arguing? RefCell bad has nothing to do with Arc bad 11:23 < bridge> yeah arc is kinda the way to share refs between threads 11:23 < bridge> well Arc has the exact same problem xD 11:23 < bridge> they want to allow send 11:23 < bridge> They don't require runtime borrow checking 11:23 < bridge> true, it's even worse there 11:23 < bridge> dead lock 11:23 < bridge> well thats what uget when dealing with MT 11:23 < bridge> but a arc alone wont deadlock u 11:23 < bridge> its when u use a lock 11:24 < bridge> consider refcell like a single thread lock 11:24 < bridge> yeah, but u cannot use arc and then write an API xd 11:24 < bridge> 11:24 < bridge> is that a read-only API or what? XD 11:24 < bridge> but ucant block xd 11:24 < bridge> Anyway can we not drift away? How would one solve this? Just establish a hierarchy so you only pass a reference down instead of keeping an Rc everywhere? 11:24 < bridge> btw 11:25 < bridge> u have try_borrow 11:25 < bridge> iirc 11:25 < bridge> u can borrow from the rc on a upper level and pass a plain ref down 11:25 < bridge> i mean B can read the rc of A. and if the borrow_mut would be guaranteed inline, without side effects, it would not compile 11:25 < bridge> so yes, that is kinda my plan 11:26 < bridge> my problem isn't so much about that you have to redsign this call a bit. 11:26 < bridge> 11:26 < bridge> it can simply happen without you noticing it 11:26 < bridge> that's what i dislike about it 11:27 < bridge> Yeah, so I guess just don't have multiple references, pass it down instead 11:28 < bridge> s\/references/Rcs/ 11:28 < bridge> yep, but for the graphic instance it would suck to always pass it around. 11:28 < bridge> 11:28 < bridge> and i have a usecase where i potentially allow borrowing parts of the graphics api. so if 2 comps have the graphics cloned, this is problem xdd 11:29 < bridge> ```rust 11:29 < bridge> use std::{cell::RefCell, rc::Rc}; 11:29 < bridge> 11:29 < bridge> struct A { 11:29 < bridge> r: Rc>, 11:29 < bridge> } 11:29 < bridge> 11:29 < bridge> struct B { 11:29 < bridge> r: Rc>, 11:29 < bridge> a: A, 11:29 < bridge> } 11:29 < bridge> 11:29 < bridge> impl A { 11:29 < bridge> pub fn funca(&self) { 11:29 < bridge> let _ = self.r.borrow_mut(); 11:29 < bridge> } 11:29 < bridge> } 11:29 < bridge> 11:29 < bridge> impl B { 11:29 < bridge> pub fn funcb(&self) { 11:29 < bridge> let borrowed = self.r.borrow_mut(); 11:29 < bridge> self.a.funca(); 11:29 < bridge> } 11:29 < bridge> } 11:29 < bridge> 11:29 < bridge> fn main() { 11:29 < bridge> let r: Rc> = Default::default(); 11:29 < bridge> let x = B { 11:29 < bridge> r: r.clone(), 11:29 < bridge> a: A { r }, 11:30 < bridge> }; 11:30 < bridge> ok so this is the code 11:30 < bridge> it panics on borrow mut 11:30 < bridge> thanks for taking the time 11:30 < bridge> sadly i dont have much time tho 11:30 < bridge> i gotta go to office 11:30 < bridge> and i need to cook my meal 11:30 < bridge> XD 11:30 < bridge> gl 11:30 < bridge> Just bite the unsafepill 11:30 < bridge> Who cares what the borrowchecker thinks. Who is he anyway 11:30 < bridge> xdd 11:31 < bridge> well i'd already be happy to make it harder to fuck up xD 11:34 < bridge> Survival of the fittest 11:34 < bridge> true, but if i am an overpowered cyborg, i've higher chances 😬 11:35 < bridge> so i tune myself 11:41 < bridge> You know what would be cool? Some sort of "call stack local" variable 11:41 < bridge> That way any frame that comes after a frame that mutably borrows something can share that borrow 11:45 < bridge> ```rust 11:45 < bridge> use std::{cell::RefCell, rc::Rc}; 11:45 < bridge> 11:45 < bridge> struct A { 11:45 < bridge> } 11:45 < bridge> 11:45 < bridge> struct B { 11:45 < bridge> r: Rc>, 11:45 < bridge> a: A, 11:45 < bridge> } 11:45 < bridge> 11:45 < bridge> impl A { 11:45 < bridge> pub fn funca(&self, r: &mut String) { 11:45 < bridge> r.push('a'); 11:45 < bridge> } 11:45 < bridge> } 11:45 < bridge> 11:45 < bridge> impl B { 11:45 < bridge> pub fn funcb(&self) { 11:45 < bridge> let mut borrowed = self.r.borrow_mut(); 11:45 < bridge> self.a.funca(&mut borrowed); 11:45 < bridge> } 11:45 < bridge> } 11:45 < bridge> 11:45 < bridge> fn main() { 11:45 < bridge> let r: Rc> = Default::default(); 11:45 < bridge> let x = B { 11:45 < bridge> r: r.clone(), 11:45 < bridge> a: A{}, 11:45 < bridge> }; 11:45 < bridge> 11:46 < bridge> btw this is how i would do it 11:46 < bridge> A simplydoesnt need to hold r 11:46 < bridge> simply pass the mut ref when it needs on the fn 11:46 < bridge> it compiles 11:46 < bridge> now i go to work 11:47 < bridge> this is why u can usually avoid refcells 11:47 < bridge> on the second u dont need refcell for B either 11:47 < bridge> they make life easier on some places and in some are needed ye 11:48 < bridge> Makes sense for this specific tiny example, but I think the point is that there are many `A`s that maybe nested far deeper in hierarchy than in here 11:48 < bridge> its hard to say without seeing the whole picture 11:48 < bridge> And B may not even be the one that's directly holding A 11:48 < bridge> Think `CComponent` and `CGraphics` 11:49 < bridge> u have to structure things in rust like u would in rust 11:49 < bridge> not like in java 11:50 < bridge> this is why i find bevy amazing 11:50 < bridge> bevy way is the way 11:50 < bridge> i think its sensible to say, its better to have functions accept references to the objects u need and use them there instead of holding stuff in ur structs 11:51 < bridge> limit the scope of ur references as much as possible 11:51 < bridge> idk 11:51 < bridge> and how is it doing it? 11:51 < bridge> the ECS 11:51 < bridge> But ECS hardly applies to this situation 11:52 < bridge> xd 11:52 < bridge> is his design optimal in the first place 11:52 < bridge> Well I guess entities could have a sprite component, which the gfx can call render on with a reference to gfx 11:53 < bridge> https://docs.rs/bevy_ecs/latest/bevy_ecs/ 11:53 < bridge> i started with passing everything around. 11:53 < bridge> 11:53 < bridge> My point stands: it's simplicity vs compile time checks 11:53 < bridge> design is not just passing all around 11:54 < bridge> if you want automatic cleanup of resources on drop, you need a rc of that part of the graphics lib 11:54 < bridge> but how u structure all ur code idk 11:54 < bridge> else u need destroy manually 11:54 < bridge> yes, that's why i tryhard about this problem to not fuck up 11:55 < bridge> designing things like this is part of the hard problems in programming 11:55 < bridge> the other is MT 11:55 < bridge> :owo: 11:56 < bridge> i defs find my current solution MUCH easier to use, and for an end user easier to not fuck up 11:56 < bridge> 11:56 < bridge> 11:56 < bridge> but it 11:56 < bridge> 1. makes the graphics comp harder to implement 11:56 < bridge> 2. it still has some _smaller_ holes for potential panics, which is dislike 11:56 < bridge> You know where it isn't hard? C 11:56 < bridge> No refcells, no Rcs, no borrowchecking. Just don't forget to free stuff bozo :gigachad3: 11:57 < bridge> 😏 11:57 < bridge> let's _upgrade_ to c 11:57 < bridge> lots of segfaults 11:58 < bridge> also he wants to abuse RAII 11:58 < bridge> if he did manual freeing of resources he could just use a storage 11:58 < bridge> RAII is for weak lazy men. Jupstar is big strong man 11:58 < bridge> and it would be simple 11:58 < bridge> in rust too 11:58 < bridge> honestly i would probs go for some kind of storage 11:59 < bridge> ecs kinda does that 12:00 < bridge> then the `key`/`index` to that storage can be invalid 12:00 < bridge> i prefer the "if it exists, it must exist" philosophy :brownbear: 12:01 < bridge> i prefer the "if it can exists, it must exist" philosophy :brownbear: 12:01 < bridge> Q: Can't you make sure by some other means that all components die before the gfx one instead of an Rc? Isn't there a hierarchical owner of the gfx component that when dead it doesnt even make sense for the gfx component to live on? 12:02 < bridge> so you want me to use a ptr? 😄 12:02 < bridge> I fail to see why one might want the components to be able to keep the gfx component alive if the client itself is gone e.g. 12:03 < bridge> it don't want or need this actually 12:03 < bridge> it's simply that resources hold a ref to the graphics comp for automatic cleanup, and i don't want to pass aroud graphics component every time 12:04 < bridge> i introduced a concept of graphics programs, which should work as if it itself is a graphics implementation 12:04 < bridge> e.g. the map rendering is not part of the graphics component anymore. 12:04 < bridge> 12:04 < bridge> engine & game are 100% split 12:04 < bridge> Ah, hm that is actually a rather annoying steucture indeed 12:05 < bridge> Too much thinking for me. I have a bag to pack, cya'll 12:05 < bridge> maybe u could a way would be to have a struct wrapping the gfx with interior mutability and then u pass the outer struct by a plain non mut reference 12:05 < bridge> rust will make sure the struct outlives conponents holding a ref to that struct 12:06 < bridge> components just need to hold a ref 12:06 < bridge> not a mut ref 12:06 < bridge> aka use interior mutability but hiding the rc in a struct u share by ref 12:07 < bridge> hmm 12:07 < bridge> xd 12:07 < bridge> ok idk 12:07 < bridge> u then expose the gfx methods via &self 12:07 < bridge> or whathever 12:07 < bridge> xd 12:07 < bridge> that's indeed what it does, no refcell is public 12:08 < bridge> ur code was public 12:08 < bridge> in 99% it just works. but sometimes gfx internal components talk to each other. 12:08 < bridge> 12:08 < bridge> Additionally i have at least one hole where i either pass a closure (harder to use) or have to make sure the graphics api is not in use already 12:09 < bridge> well it's very outdated. currently i code so much shit xD 12:09 < bridge> 12:09 < bridge> can't show this trash 12:12 < bridge> https://austral-lang.org/ 12:12 < bridge> Austral is a new systems programming language. It uses linear types to provide memory safety and capability-secure code, and is designed to be simple enough to be understood by a single person, with a focus on readability, maintainbility, and modularity 12:12 < bridge> syntax is odd tho 12:12 < bridge> ada like 12:17 < bridge> Is there the concept of a call stack local variable in any language? 12:17 < bridge> please invent one, i want to test it 😄 12:18 < bridge> I will craft a language one day. Even if it won't be used by anyone I want to experiment 12:19 < bridge> what's a call-stack local variable? 12:20 < bridge> you mean a global variable? visible to the call stack? 12:20 < bridge> thread-local variable maybe? 12:22 < bridge> my company wants to make a lang 12:22 < bridge> based on rust safety with go simplicity 12:23 < bridge> inspired by the lang i sent 12:23 < bridge> linear types 12:23 < bridge> arent variables stored in the stack anyway 12:23 < bridge> or register when possible 12:24 < bridge> A global variable of sorts that would lie in some higher stack frame. Maybe like an `export` of sorts. With visibility only within that chain of calls until the function who initially exported it returns 12:24 < bridge> Like passing it down all the way but more ergonomic 12:33 < bridge> that's the solution: no stack, no call frames => no problems 12:34 < bridge> put everything in one big function xdd 12:37 < bridge> how can a company just afford to make a lang 12:37 < bridge> our company doesn't even want us to make our own playercontroller 12:41 < bridge> that doesn't sound like a problem of money 12:45 < bridge> it is if we need more than a week to make one 12:45 < bridge> xd 12:46 < bridge> btw we made our own anyway 12:46 < bridge> 12:46 < bridge> :poggers2: 12:46 < bridge> and it sucks now 12:47 < bridge> stair handling is broken:kek: and i dont have time to fix it 12:47 < bridge> shouldve bought one or steal one 12:48 < bridge> man i really wonder if your companies are really so horrible or if you exaggerate xd 12:48 < bridge> definitely exaggerate 12:48 < bridge> xD 12:48 < bridge> but also not? 12:48 < bridge> YES 12:48 < bridge> it sounds bad 12:49 < bridge> i just dont like working if you cant tell 12:50 < bridge> and i think everyone is kinda stupid in the team.:owo: 12:50 < bridge> i feel that. the only difference is, that it includes myself 😉 12:50 < bridge> :owo: you're better than me 12:51 < bridge> vscode now supports floating windows 12:51 < bridge> meaning u can move a opened file to second display 12:51 < bridge> omg 12:51 < bridge> ye, thats cool 12:51 < bridge> biggest feature 12:51 < bridge> requested since years 12:51 < bridge> now i just need 2 screens so it's worth it 12:52 < bridge> i want the sidebar to float tho 12:52 < bridge> :owo: float this 12:52 < bridge> cuz the explorer takes half of my vertical screen 12:53 < bridge> you can make the sidebar be a bottombar 12:54 < bridge> can you now. havent used vscode for quite a while 12:54 < bridge> u can drag the icon to some places xd 12:55 < bridge> isn't explorer fixed to be on the side. 12:55 < bridge> anyway i better check myself 12:55 < bridge> u gotta drag the explorer icon, then it's not fixed 12:56 < bridge> any neovim enjoyers? 😬 12:56 < bridge> i know enough vim to close it 12:57 < bridge> :kek: 12:58 < bridge> also i know enough to mess my colleague when one of them actually uses a vim plugin in vscode. i hit that I key quicker than he wanted to explain it to me. 12:59 < bridge> also i know enough to mess my colleague when one of them actually uses a vim plugin in vscode. i be hitting that I key quicker than him wanting to explain it to me. 13:01 < bridge> I love `%` and `_` 13:01 < bridge> i love changing my text editor alternatives to not use vim 13:49 < bridge> i gotta get my settings back but im lazy af 14:39 < ws-client> @milkeeycat what is % and _ and do they work in vanilla vim too? 14:47 < bridge> Do you use vim? 😮 14:52 < bridge> _ goes to first non empty character and % goes to.. eeeh. Opposite character. Like you have { hdhfus } if ur cursor under { and u press % it goes to } 14:58 < bridge> <_voxeldoesart> #1234 14:58 < bridge> https://github.com/ddnet/ddnet/issues/1234 15:16 < bridge> rest in piece 15:18 < bridge> Windows :brownbear: 15:18 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186673974495686796/image.png?ex=65941b42&is=6581a642&hm=a0ffce0477b5311bdbf56f5a6a5625981570c5566bae3cbd24827731b6f0a52e& 15:29 < bridge> Checked out libs? 15:29 < bridge> Да 15:29 < bridge> Yes 15:30 < bridge> Everything is in place on GitHub and on my PC 15:30 < bridge> I also tried to fix it with this 15:30 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186677049176371281/image.png?ex=65941e1f&is=6581a91f&hm=d3fe322d6505aa483d6bbaf9c946373e37c2f82fe35b8d71f7c6d3dd1528e898& 15:31 < bridge> I also wrote ``git submodule update --init --recursive`` 15:32 < bridge> Maybe that is the problem 15:32 < bridge> I never tested it with the sdk xd 15:32 < bridge> It must be in your path and stuff 15:33 < bridge> Since our CI isn't failing it should work on Windows 15:34 < bridge> I'm compiling dfng <3 15:40 < bridge> Then you can also use -DCLIENT=OFF for cmake, i guess 15:41 < bridge> thx 15:44 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186680365964869742/image.png?ex=65942136&is=6581ac36&hm=fdb17190f5173feda31a59142daf5d2960f25ba68e5a47488bc0cad6cd15bcdb& 15:48 < bridge> To me that looks like a clear indicator that libs are not checked out 15:49 < bridge> maybe xd 15:49 < bridge> but I didn't change anything in the repository 15:49 < bridge> I dunno. Just download the ones from ddnet 15:49 < bridge> And put them there 15:49 < bridge> It should: tm: work 16:32 < bridge> I solved the problem with connecting to my server, the problem was that I have an ovh anti-ddos and because of this, no one can log in until they establish a direct connection to the server (i.e. until they add it to the hosts file (maybe)) 18:24 < bridge> @gummibaer12345 Thank you! 18:24 < bridge> :3 18:25 < bridge> :3 Merry christmas to you guys 19:14 < bridge> only 45€ missing until 2023 is completely funded! 19:15 < bridge> sounds like a thread-local `Option<>` to me 19:17 < bridge> <_voxeldoesart> wait arent tees already LERPed? 19:21 < bridge> Just a tad too large in scope no? 19:42 < bridge> well thread locals are not readable by threads xd 19:43 < bridge> well thread locals are not readable by other threads xd 19:43 < bridge> depends if u want to support this, or if that is out of your stack stack frame 19:43 < bridge> @learath2 do you like coroutines? 19:47 < bridge> Uhh, are they? 19:48 < bridge> I like the idea of them, but I honestly dont ever think in terms of them nor do many languages support them, so I rarely get to use them 19:48 < bridge> Maybe if I learn some go 19:52 < bridge> yes, otherwise the maximum would be 50 frames per second 19:53 < bridge> > raibow tees 19:53 < bridge> small typo 19:56 < bridge> intratick 19:59 < bridge> <_voxeldoesart> wait then what IS lerped? 20:02 < bridge> whats radmin doing there? 20:02 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186745356214599680/image.png?ex=65945dbd&is=6581e8bd&hm=7a56fae41214ec4b37b76239490f219ccee1e3948aab705a57e14524a7dd7e9a& 20:02 < bridge> @stormaxd 20:04 < bridge> whats radmin doing on ur website? 20:04 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186745356214599680/image.png?ex=65945dbd&is=6581e8bd&hm=7a56fae41214ec4b37b76239490f219ccee1e3948aab705a57e14524a7dd7e9a& 20:05 < bridge> Radmin template 20:05 < bridge> :justatest: 20:11 < bridge> <_voxeldoesart> 🗣️ 20:15 < bridge> Means unlocked feets, hammer etc 20:16 < bridge> That what you can see on this video 20:16 < bridge> https://cdn.discordapp.com/attachments/295908390956433410/1186106431762604112/Disability_2023-12-18_02-39-07.mp4?ex=65920ab2&is=657f95b2&hm=7b6b0b52f6d2f37bed6ca27f5124009a9ad8781d7a298c7167e583635858df36& 20:16 < bridge> <_voxeldoesart> oh thaat 20:17 < bridge> mid map 20:17 < bridge> <_voxeldoesart> isnt it just the feet and hammer lagging behind 1 frame 20:20 < bridge> this feature is not original btw 20:20 < bridge> And this have a lot of bugs, cuz I programmed this :troll: 20:21 < bridge> https://www.youtube.com/watch?v=0dq1BpvjWEE 20:21 < bridge> look my vid from 8 years ago 20:21 < bridge> their feet 20:21 < bridge> Ye, this was taken from goreworlds to my client, and from my client to storm client 20:21 < bridge> Yeah i saw that somewhere already 20:21 < bridge> However you can just turn it off 20:22 < bridge> the blood is funny 20:22 < bridge> github:hehehe: 20:22 < bridge> <_voxeldoesart> i gotta make an offline client so i can just fuck around 20:23 < bridge> <_voxeldoesart> i love the teeworlds engine 20:23 < bridge> <_voxeldoesart> has so much potential 20:23 < bridge> I love teewars engine, has so much potential 20:24 < bridge> I love teeworlds 20:24 < bridge> That's all i can say 20:24 < bridge> i love rust 20:24 < bridge> rustworlds* 20:24 < bridge> I love asm 20:24 < bridge> <_voxeldoesart> im blocking you 20:24 < bridge> Binworlds* 20:25 < bridge> https://tenor.com/view/ni%C3%B1o-asustado-huh-what-meme-stare-gif-16752413 20:25 < bridge> <_voxeldoesart> 1 blocked messahe 20:25 < bridge> Blockworlds 20:25 < bridge> <_voxeldoesart> 1 blocked message 20:25 < bridge> not like we interact much lately xD 20:25 < bridge> <_voxeldoesart> i am at peace now 20:26 < bridge> good, i can say linux without u answering windows 20:26 < bridge> :3 20:27 < bridge> https://andrewkchan.dev/posts/fire.html 20:27 < bridge> maybe "fresh animations" 20:27 < bridge> Fair, guess i have to rename it 20:27 < bridge> Lagging animations 20:27 < bridge> https://www.jpl.nasa.gov/news/nasas-tech-demo-streams-first-video-from-deep-space-via-laser 20:27 < bridge> nasa sent a cat video 20:27 < bridge> to space 20:27 < bridge> based 20:27 < bridge> cursed* 20:30 < bridge> <_voxeldoesart> yea 20:31 < bridge> call it "lerp_ported_from_Goresworld_to_toilet_to_stormax" 20:32 < bridge> call it "cursed_animations_ported_from_Goresworld_to_toilet_to_stormax" 20:32 < bridge> <_voxeldoesart> tbh if it was less dramatic itd be cool 20:33 < bridge> @learath2 did u know ocaml has += for type definitions 20:34 < bridge> Imagine how config variables will be named :justatest: 20:34 < bridge> I barely knew ocaml existed 20:34 < bridge> <_voxeldoesart> camel 20:34 < bridge> https://v2.ocaml.org/manual/extensiblevariants.html 20:34 < bridge> Objective Camel! 20:34 < bridge> honestly ocaml is big 20:34 < bridge> its used to make compilers 20:34 < bridge> i havent learned it tho 20:34 < bridge> but the bad thing is it has circular deps problem 20:35 < bridge> I would make my compiler in C, don't need no camel 20:35 < bridge> xd 20:35 < bridge> you keep on writing rust wrong smh 20:35 < bridge> @learath2 its rly rly easy to make a compilere in ocaml 20:35 < bridge> i think it falls nicely 20:35 < bridge> rust was originally made with ocaml 20:35 < bridge> llvm has oficial bindings in ocaml 20:36 < bridge> The rust lobby has arrived 20:36 < bridge> xd 20:36 < bridge> 20:36 < bridge> <_voxeldoesart> the unfunniest group of people ever 20:37 < bridge> i mean i dont wanna brag, but i not only enjoy rust... i use arch btw! 20:37 < bridge> <_voxeldoesart> ok yeah thats my push thank you 20:37 < bridge> gentoo here 20:38 < bridge> did i just get blocked ._. 20:38 < bridge> why do u care 20:38 < bridge> true 20:38 < bridge> the holy path to rust has obstacles 20:38 < bridge> now join the church of memory safety 20:39 < bridge> and confess (tell me ur unsafe uses) to me in the confession box 20:39 < bridge> :justatest: 20:39 < bridge> Voxel just gone 20:39 < bridge> https://en.wikipedia.org/wiki/Confession_(religion) 20:39 < bridge> XD 20:40 < bridge> What?? 20:41 < bridge> not everyone can be as superior as us rust enjoyers 20:41 < bridge> You said rust? 20:41 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186755245527806134/ryo.png?ex=659466f3&is=6581f1f3&hm=f64756b30730724e087d6acab63bbcf8a701c43315b3375f697b66861adf1423& 20:42 < bridge> witzig witzig 20:42 < bridge> Arch is old news. All the real cool people use gentoo now 20:43 < bridge> aight give me 2 hours! 20:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186755677306224660/image.png?ex=6594675a&is=6581f25a&hm=8e6a643c3e6410c07a96531f377d926f790aa81356539c4e583f068cac628b04& 20:43 < bridge> mentioning zig is a sin here 20:44 < bridge> 😬 20:44 < bridge> *forgive me Ryozuki for i have sinned* 21:35 < ChillerDragon> @milkeeycat _ goes to start of line and % does nothing gg 21:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186769081941119047/GBsn8TGXIAAEmJM.png?ex=659473d6&is=6581fed6&hm=c186ef548cf3516f8e3431f4572c9c1e01eb6a72f866ad3b25a1726e7a8b6aec& 21:37 < ChillerDragon> xd 21:37 < bridge> xd 21:38 < ChillerDragon> isnt zig the new shit that will replace rust? 21:38 < bridge> no it has no memor safety 21:38 < bridge> its hipster C 21:38 < ChillerDragon> wot no memory safety? 21:38 < ChillerDragon> thats so 1999 21:38 < bridge> yeah 21:39 < bridge> Time to try neovim 🙂 21:39 < ChillerDragon> i tried in neovim too 21:39 < ChillerDragon> same result 21:39 < bridge> Wat 21:39 < ChillerDragon> german keyboard layout :p 21:39 < ChillerDragon> :beer: 21:39 < ChillerDragon> :de: 21:40 < bridge> It's default motions, they have to work xd 21:40 < ChillerDragon> not on my machine 21:40 < bridge> Works on ukrainian, russian, czech and english layouts 21:40 < ChillerDragon> i use f for those scenarios i guess 21:40 < ChillerDragon> or f, 21:40 < ChillerDragon> germany issue then 21:40 < bridge> XD 21:42 < bridge> Do u have config for ur vim on gh? 😮 21:47 < bridge> chillerdragon: was ur cursor at '{' char when u were pressing `%`? 22:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186775272960295033/Screenshot_2023-12-19-22-01-08-032_com.brave.browser.jpg?ex=6594799a&is=6582049a&hm=050178256d3243b6cf33e3beb2823f0452c173a011f06e882d50ffc1febc2d3d& 22:01 < bridge> https://tenor.com/view/detroit-become-human-gif-26524809 22:01 < bridge> @ryozuki @deen 22:02 < bridge> xd 22:03 < bridge> but a callstack usually lives in one thread only, no? 22:03 < bridge> rust too, no? 22:04 < bridge> sounded more like a var that lives on the stack somewhere 22:05 < bridge> instead of donating 100 euros you should donate 1 euro 100 times and add a different name each time 22:05 < bridge> :troll: 22:05 < bridge> real pros let the girl die 22:05 < bridge> 😬 22:05 < bridge> C seems like the wrong choice, given no ADTs 22:06 < bridge> fuck missed opportunity 22:06 < bridge> https://tenor.com/view/death-gif-24356219 22:14 < bridge> is there a specific reasons /showothers only works on the client you activate it on?, if its off and i set it on with /showothers, and switch to dummy, its disabled there 22:15 < bridge> there's a technical reason, but no concrete design reason, I guess 23:04 < bridge> Doesn’t rust only have them in nightly? 23:06 < bridge> Well I was half jesting. The only reason I would even consider C for a compiler is because something so complex I probably should write in the language I’m most familiar with 23:12 < bridge> ah, futures are not co-routine-y enough? 23:12 < bridge> yes 23:30 < bridge> @cellegenrih Thanks again for the second donation in 2 days! 23:30 < bridge> @zwelf2 Thanks for the donation, you two filled up the missing 45 € kind of at once 😄 23:32 < bridge> 🤔 23:32 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1186798277505589308/image.png?ex=65948f07&is=65821a07&hm=c360a8249a728356f69a659a7a163c4ee13a4c7241f4365af8d9a02ad747496a& 23:35 < bridge> completely funded 🎉 23:42 < bridge> :poggers2: 23:53 < bridge> ChillerDragon/dotfiles 23:54 < bridge> My cursor was in a word I had no { only spaces I thought it also jumps to spaces 23:54 < bridge> Do I need a literal { ?