00:39 < Voxel> Hi! I'm just joining in really quickly to ask a question about a possible new update. It's for the ZIP file asset update, and I don't know if implimenting it will hinder preformance, since it will be dealing with a lot more singular images, instead of one big texture atlas. 07:54 < bridge> hello voxel 07:54 < bridge> morning 07:54 < bridge> morning 07:55 < bridge> yesterday i spilled coffee on part of the keyboard 07:56 < bridge> luckily it isnt affected 07:56 < bridge> :Catsweat: 07:56 < bridge> its just a 200€ keyboard :justatest: 07:58 < bridge> putting my drinks always as far away from anything electrical as possible on my desk. spilled tea once, luckily it had no sugar in it. never doing that again 😄 08:28 < bridge> What kbd do you use? 08:40 < bridge> 😌😁 08:55 < bridge> I can't spill tea on my keyboard because it's Lily58 pro :troll: 08:55 < bridge> https://github.com/kata0510/Lily58 09:39 < bridge> corsair k70 rgb pro 09:40 < bridge> scam 09:41 < bridge> If a keyboard name has "pro" in it it gives +50% skill and 30% fps 09:41 < bridge> If a keyboard name has "pro" in it it gives +50% skill and +30% fps 09:41 < bridge> what about macbook 09:42 < bridge> -65% money :lol: 10:15 < bridge> not if ur work gets it for u 10:15 < bridge> I got thunderbolt out the ass 10:15 < bridge> m3 pro 10:27 < bridge> I wonder if the teeworlds networking model was based on this exact paper. It seems like a lot of somewhat arbitrary details are nearly identical https://mrelusive.com/publications/papers/The-DOOM-III-Network-Architecture.pdf 11:17 < bridge> this gives a type error. do you mean `foo_mut(&mut j);`? then I get an error for the `drop(y);` but that one has nothing to do with lifetimes. it's simply that `x` has been dropped and thus `y` is no longer valid 11:18 < bridge> I remember people saying it was based on quake networking 11:18 < bridge> what is that map, what do you need it for? 🙂 11:56 < bridge> true 12:04 < bridge> imagine a keyboard that actually boosts fps 12:04 < bridge> Idk what I was smoking when I wrote that yesterday, here's new code xd: 12:04 < bridge> ```rust 12:04 < bridge> fn foo_mut<'a>(_: &'a mut &'a String) { 12:05 < bridge> // This function signature means take an exclusive reference for the entire rest of it's validity 12:05 < bridge> } 12:05 < bridge> fn foo<'a>(_: &'a &'a String) {} 12:05 < bridge> 12:05 < bridge> fn main() { 12:05 < bridge> let x = String::new(); 12:05 < bridge> let y: &String = &x; 12:05 < bridge> 12:05 < bridge> foo(&y); 12:05 < bridge> foo(&y); // It's passes something like &'smol &'big and &T is covariant so it can downgrade(?) 'big to 'smol, and with that you can call it as many times as you want 12:05 < bridge> 12:05 < bridge> foo_mut(&mut y); 12:05 < bridge> // Reference is eaten and still in use, so it's not possible to use `y` 12:05 < bridge> // Something about &mut T being invariant over T but covariant over 'a 12:05 < bridge> 12:05 < bridge> drop(y); 12:05 < bridge> } 12:05 < bridge> ``` 12:16 < bridge> how can I check the connection status to the server in ddnet src (i.e. for example, is the map currently being downloaded or is the connection completely complete) 12:23 < bridge> e.g. m_IsConnected() 12:32 < ws-client1> @lsdglsgdflk ``Client()->State()`` can be one of those ``STATE_OFFLINE, STATE_CONNECTING, STATE_LOADING, STATE_ONLINE, STATE_DEMOPLAYBACK, STATE_QUITTING, STATE_RESTARTING`` 12:33 < ws-client1> @doickzashmoukanaiazaza do you need anything specific? :D 12:35 < bridge> ty brooo 12:36 < ws-client1> @deathgood you can use the ``logfile`` command in the client and server console or config which takes a filename as argument. It will create a text file with all the logs including chat. There is also ``dump_local_console`` 12:46 < bridge> ✅ 13:13 < bridge> `let y` must be `let mut y`. do you even compile your examples? you should! the compiler gives better errors than the language server 13:14 < bridge> Really? For me it gives the same errors, except maybe for some insane macros 😄 13:14 < bridge> especially in tricky cases (and I think we already saw these in @milkeeycat's examples), yes 13:15 < bridge> ```rust 13:15 < bridge> use iced_x86::code_asm::*; 13:15 < bridge> 13:15 < bridge> let mut a = CodeAssembler::new(64)?; 13:15 < bridge> 13:15 < bridge> /* 13:15 < bridge> endbr64 13:15 < bridge> push rbp 13:15 < bridge> mov rbp,rsp 13:15 < bridge> mov DWORD PTR [rbp-0x4],0x0 13:16 < bridge> mov eax,0x2 13:16 < bridge> pop rbp 13:16 < bridge> ret 13:16 < bridge> */ 13:16 < bridge> a.endbr64()?; 13:16 < bridge> a.push(rbp)?; 13:16 < bridge> a.mov(rbp, rsp).unwrap(); 13:16 < bridge> a.mov(dword_ptr(rbp - 0x4), 0).unwrap(); 13:16 < bridge> a.mov(eax, 2u32).unwrap(); 13:16 < bridge> a.pop(rbp)?; 13:16 < bridge> a.ret()?; 13:16 < bridge> ``` 13:16 < bridge> this crate is awesome 13:16 < bridge> https://docs.rs/iced-x86/1.21.0/iced_x86/#assemble-instructions 13:16 < bridge> Why sometimes unwrap and sometimes ? xd 13:16 < bridge> cuz i was debugigng 13:16 < bridge> xd 13:16 < bridge> ```rust 13:16 < bridge> use iced_x86::code_asm::*; 13:16 < bridge> 13:16 < bridge> let mut a = CodeAssembler::new(64)?; 13:16 < bridge> 13:16 < bridge> /* 13:16 < bridge> endbr64 13:16 < bridge> push rbp 13:16 < bridge> mov rbp,rsp 13:16 < bridge> mov DWORD PTR [rbp-0x4],0x0 13:16 < bridge> mov eax,0x2 13:16 < bridge> pop rbp 13:17 < bridge> ret 13:17 < bridge> */ 13:17 < bridge> a.endbr64()?; 13:17 < bridge> a.push(rbp)?; 13:17 < bridge> a.mov(rbp, rsp)?; 13:17 < bridge> a.mov(dword_ptr(rbp - 0x4), 0)?; 13:17 < bridge> a.mov(eax, 2u32)?; 13:17 < bridge> a.pop(rbp)?; 13:17 < bridge> a.ret()?; 13:17 < bridge> ``` 13:17 < bridge> fixed 13:17 < bridge> Ryo today is friday 13:17 < bridge> yeah 13:17 < bridge> Back in the days, fridays were legendary 13:17 < bridge> i generated and created the relocatable elf file myself then passed it to linker 13:17 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299330979281895474/out?ex=671ccfc5&is=671b7e45&hm=5c2eb1eb223123c0b0d2abc9840750ef03af657d6fc5bfd958723fa38c25dfe5& 13:17 < bridge> pog 13:17 < bridge> now i have the base to make my codegen backend 13:19 < bridge> what error can `a.ret()` return? 13:23 < bridge> I wasted the last two days thinking about how I can make the vanilla mod easier to use code wise and failed. At some point it just gets messy. 13:23 < bridge> 13:23 < bridge> You either have global states all over your code base, or you have lots of parameter passing and forget to change some stuff somewhere, or your code simply isn't easy to follow anymore. 13:23 < bridge> 13:23 < bridge> It's kinda funny how engine programming is easier than coding a game. 13:23 < bridge> Engines are so deterministic, while game coding always involves some weird hacks 13:30 < bridge> just look on the second error xd 13:31 < bridge> Idk what I was smoking when I wrote that yesterday, here's new code xd: 13:31 < bridge> ```rust 13:31 < bridge> fn foo_mut<'a>(_: &'a mut &'a String) { 13:31 < bridge> // This function signature means take an exclusive reference for the entire rest of it's validity 13:31 < bridge> } 13:31 < bridge> fn foo<'a>(_: &'a &'a String) {} 13:31 < bridge> 13:31 < bridge> fn main() { 13:31 < bridge> let x = String::new(); 13:31 < bridge> let mut y: &String = &x; 13:31 < bridge> 13:31 < bridge> foo(&y); 13:31 < bridge> foo(&y); // It's passes something like &'smol &'big and &T is covariant so it can downgrade(?) 'big to 'smol, and with that you can call it as many times as you want 13:31 < bridge> 13:31 < bridge> foo_mut(&mut y); 13:31 < bridge> // Reference is eaten and still in use, so it's not possible to use `y` 13:32 < bridge> // Something about &mut T being invariant over T but covariant over 'a 13:32 < bridge> 13:32 < bridge> drop(y); 13:32 < bridge> } 13:32 < bridge> ``` 13:50 < bridge> its not executing the instruction its just generating the opcode in a buffer 13:51 < bridge> and then i encode it and put it in the .text section of the generated elf file 13:51 < bridge> and make some symbols 13:51 < bridge> maybe its invalid to ret in some place idk xd 13:51 < bridge> or maybe its just cuz a gerneric trait 13:53 < bridge> Time to stalk Ryo GitHub for his new projects xd 13:53 < bridge> Oh you are no fish anymore 13:55 < bridge> @jupeyy_keks whats fish? 13:55 < bridge> i added it here https://github.com/edg-l/codegen 13:55 < bridge> i need a good name 13:55 < bridge> Your pfp 13:56 < bridge> it doesnt rly have much rn 13:56 < bridge> ez 14:09 < bridge> why can that fail though, what's the possible erorr? 14:10 < bridge> ```rust 14:10 < bridge> pub(crate) fn add_instr(&mut self, mut instruction: Instruction) -> Result<(), IcedError> { 14:10 < bridge> if !self.current_label.is_empty() && self.defined_anon_label { 14:10 < bridge> return Err(IcedError::new("You can't create both an anonymous label and a normal label")); 14:10 < bridge> } 14:10 < bridge> if !self.current_label.is_empty() { 14:10 < bridge> instruction.set_ip(self.current_label.id()); 14:10 < bridge> } else if self.defined_anon_label { 14:10 < bridge> instruction.set_ip(self.current_anon_label.id()); 14:10 < bridge> } 14:10 < bridge> 14:10 < bridge> if self.prefix_flags != 0 { 14:10 < bridge> if (self.prefix_flags & PrefixFlags::LOCK) != 0 { 14:10 < bridge> instruction.set_has_lock_prefix(true); 14:10 < bridge> } 14:10 < bridge> if (self.prefix_flags & PrefixFlags::REPE) != 0 { 14:10 < bridge> instruction.set_has_repe_prefix(true); 14:10 < bridge> } else if (self.prefix_flags & PrefixFlags::REPNE) != 0 { 14:10 < bridge> instruction.set_has_repne_prefix(true); 14:10 < bridge> } 14:10 < bridge> if (self.prefix_flags & PrefixFlags::NOTRACK) != 0 { 14:10 < bridge> instruction.set_segment_prefix(Register::DS); 14:10 < bridge> } 14:10 < bridge> } 14:10 < bridge> 14:10 < bridge> self.instructions.push(instruction); 14:10 < bridge> self.current_label = CodeLabel::default(); 14:10 < bridge> self.defined_anon_label = false; 14:11 < bridge> self.prefix_flags = PrefixFlags::NONE; 14:11 < bridge> Ok(()) 14:11 < bridge> } 14:11 < bridge> i think it comes to this func 14:11 < bridge> its just a generic interface to always return a error 14:11 < bridge> i guess 14:15 < bridge> the reference is not in use beyond `foo_mut`, but `foo_mut` constarains how long the inner reference `y` is valid, I think. but I'm not entirely sure about this 14:16 < bridge> hmm. looks like the errors are programming errors 14:16 < bridge> you should probably `.unwrap()` instead of using `?`? not sure 14:17 < bridge> yeah 14:46 < bridge> The more I try to understand it the less I understand, I thought it would not be possible to drop `x` but it is :\ 14:47 < bridge> The lesson is: don't use `&'a T<'a>` or you are a bad person 14:48 < bridge> The lesson is: don't use `&'a mut T<'a>` or you are a bad person 14:48 < bridge> I think that lesson is good (until "or") 15:31 < bridge> hi 15:31 < bridge> how can i set only strong or only weak hooks on everyone 15:32 < bridge> `sv_no_weak_hook 1` 15:32 < bridge> 15:32 < bridge> https://ddnet.org/settingscommands/ 15:32 < bridge> its not work 15:32 < bridge> also pls use #questions 15:32 < bridge> thanks 15:32 < bridge> oh okey 15:32 < bridge> why should it not work 15:34 < bridge> the hook indicator still shows differently 15:34 < bridge> Then the indicator is simply wrong 15:35 < bridge> okey thx 15:35 < bridge> So how can I make everyone a weak hook? 15:35 < bridge> That doesn't exist 15:50 < bridge> Chillerdragon, got a merge request open 16:39 < zhn> yo guys, i don't know how i did miss it, but teeworlds was a target of being turned into [game hosted on i2p](https://www.teeworlds.com/forum/viewtopic.php?id=20664) 16:40 < zhn> i have nothing to add to this, just wanted to share it with you 16:41 < bridge> u'r alive 16:42 < zhn> yeah, kinda 16:43 < zhn> was messing around with awful reg.ru support tickets that don't work in general, you have to spam f5 in case you want to create one xd 16:44 < zhn> i wonder if they'll open 25 port, im going to move to another hosting + domain name registrar otherwise 16:45 < bridge> what are you registering? discord.ru? 16:46 < zhn> nah, discord.ru is taken and its awful troll site, never visit it 16:46 < bridge> oh xd didnt know 16:46 < zhn> teeworlds.ru, but especially forum.teeworlds.ru 16:47 < bridge> so russian ppl can have a forum again to talk to each other? 16:47 < zhn> yeah, we had teedes.ru and z-team.org.ru before, but now they're gone, completely 16:47 < zhn> i didn't find any person related to project that has any backups 16:47 < zhn> projects* 16:48 < bridge> rip, but nice 16:49 < zhn> i don't expect anything from this project, rus community just has to have atleast 1 content dumpster that everyone can visit easily 16:49 < zhn> 1 tb space is ready to take anything :P 16:53 < zhn> twice! 16:59 < zhn> another warm [post](https://www.teeworlds.com/forum/viewtopic.php?id=13328) from teeworlds.com 17:30 < bridge> @learath2 ping finish server 17:37 < bridge> @heinrich5991 last question xd. If I drop `x` instead of `y`, will it be the place where `y` will not be valid anymore 17:37 < bridge> yes 17:38 < bridge> okaaaaaaaay 17:38 < bridge> I think I finally got it 17:38 < bridge> Thank you so much :heartw: 18:27 < bridge> https://en.wikipedia.org/wiki/Shadow_stack 18:48 < bridge> isnt that basically a canary 18:49 < bridge> but in shadow memory (whatever that is :greenthing: ) 18:54 < bridge> no 18:54 < bridge> its better 18:54 < bridge> > Shadow stacks provide more protection for return addresses than stack canaries, which rely on the secrecy of the canary value and are vulnerable to non-contiguous write attacks.[5] Shadow stacks themselves can be protected with guard pages[6] or with information hiding, such that an attacker would also need to locate the shadow stack to overwrite a return address stored there. 20:32 < bridge> how can i make a timer for example with a delay of 50 milliseconds regular timers from c++ break the game 20:34 < bridge> `std::chrono::duration_cast(end - start).count()` 20:34 < bridge> ok wait 20:36 < bridge> tyyy 20:37 < bridge> np 20:38 < bridge> one more thing how can i call console command for example cl_showfps 1 or say hello etc. 20:39 < bridge> with code? 20:40 < bridge> yh 20:40 < bridge> example from own command 20:41 < bridge> Sorry if it doesn't sound clear 20:41 < bridge> `Console()->ExecuteLine("say /pause");` 20:42 < bridge> AHHH 20:42 < bridge> or when commands are registered this is their callback 20:42 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299443076565045318/image.png?ex=671d382b&is=671be6ab&hm=657036d71f360441fd82b7a1640ea27029cf7df0436f992166ba89300b60cdd2& 20:42 < bridge> Before this I tried console with a small letter... 20:43 < bridge> you can usually call the callback or something inside it that does the same 20:43 < bridge> ok 20:44 < bridge> hm 20:44 < bridge> a timer and automated command execution 20:44 < bridge> why do i smell cheats 20:44 < bridge> are in client.cpp Console() need use with pself? 20:45 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299443633648304199/image.png?ex=671d38b0&is=671be730&hm=d2c588a7aac7806c65396de1d9d905772993259954789721e2a80fc97e556bd7& 20:45 < bridge> idk search around for similar code 20:45 < bridge> in that file 20:45 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299443680830033961/image.png?ex=671d38bc&is=671be73c&hm=d0758c74bedfea268a421a8f58329cf58b92b6782d90ef8cc46e2a6e4c986054& 20:47 < bridge> ctrl+f for console 20:47 < bridge> m_pConsole->function 20:47 < bridge> in client.cpp 20:48 < bridge> ty 21:08 < bridge> auto delayStart = std::chrono::steady_clock::now(); 21:08 < bridge> while (std::chrono::duration_cast(std::chrono::steady_clock::now() - delayStart).count() < 6000) { 21:08 < bridge> } 21:08 < bridge> are this true? when the cycle starts the game just freezes 21:20 < bridge> Make start static and don't use while 21:20 < bridge> Just if time<6000 do stuff 21:22 < bridge> If you want to do it every 6s now just once after 6s, do start=now inside if 21:22 < bridge> If you want to do it every 6s not just once after 6s, do start=now inside if 21:29 < bridge> static auto delayStart = std::chrono::steady_clock::now(); 21:29 < bridge> auto now = std::chrono::steady_clock::now(); 21:30 < bridge> 21:30 < bridge> if (std::chrono::duration_cast(now - delayStart).count() < 6000) { 21:30 < bridge> } else { 21:30 < bridge> delayStart = now; 21:30 < bridge> } 21:30 < bridge> true? 22:09 < bridge> when you gotta use c++ after using rust all time 22:09 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299464770138673184/Gau1LGuXgAATdhd.png?ex=671d4c60&is=671bfae0&hm=0541486b8de0e1288ea5eeb44d4b34e1555d3b19ca6293705b237823f8874727& 22:10 < bridge> i've been coding in nix for the last 3 days, i feel far superior than any rust programmer 22:10 < bridge> (i'm not) 22:11 < bridge> im doing my own compiler backend 22:11 < bridge> i have the power of ELFs 22:11 < bridge> nixOS member :brownbear: 22:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299465352719368192/image.png?ex=671d4cea&is=671bfb6a&hm=ee127a7d0badd08dab8d48a8a90373ad4abf7aa2b5c9757fbbe6330f18975b9e& 22:11 < bridge> i contributed to llvm and rust 22:11 < bridge> :gigachad: 22:11 < bridge> i contributed to the zed editor and ddnet :gigachad: 22:12 < bridge> even my tech lead in my company 22:12 < bridge> said he is proud of me as i am a llvm contributor 22:12 < bridge> :gigachad: 22:12 < bridge> gigachad 22:12 < bridge> @blaiszephyr Come 22:12 < bridge> come where 22:12 < bridge> we are here 22:12 < bridge> oh god 22:12 < bridge> help 22:12 < bridge> he found me 22:12 < bridge> any kernel devs in here? 22:12 < bridge> Can't talk , harf wirh ond hand 22:12 < bridge> not but someday, but what do u need help 22:12 < bridge> im a gentoo user 22:12 < bridge> :kekw: 22:12 < bridge> Ask ur question 22:13 < bridge> I was just asking to know the level of insanity in this community 22:13 < bridge> ah cuz kernel maintainer status was revoked from russians? 22:13 < bridge> ._. 22:13 < bridge> They start to use rust, good people 22:13 < bridge> no, just because LLVM contributor is high tier but kernel contributor is higher 22:13 < bridge> i think being a llvm dev is higher than some kernel devs 22:13 < bridge> if u are a llvm dev and contributed to the instdag ur a god 22:14 < bridge> definitely higher than the people who are only kernel devs by technicality 22:14 < bridge> im deifnitly sure llvm has more loc than kernel 22:14 < bridge> xd 22:14 < bridge> i compile kernel in like 2 mins 22:14 < bridge> llvm in 8 22:15 < bridge> but i have a 24 core 5.6ghz cpu 22:15 < bridge> makes sense, a kernel should be pretty minimal... but then you realize how bloated Linux is and you get a bit scared 22:15 < bridge> actually 22:15 < bridge> im sure the kernel is like 10% code and the other is 80% amd drivers 22:16 < bridge> but yeah kernel locs are mostly drivers 22:16 < bridge> yeah 22:16 < bridge> I'd assume drivers would compile relatively fast though, since they have rather simple dependency graphs 22:17 < bridge> its not a problem because kernel as a pretty dope config system 22:17 < bridge> u enable only drivers u need 22:17 < bridge> its why its so modular 22:17 < bridge> and why gentoo is so good 22:17 < bridge> yeah I've compiled a kernel once or twice 22:17 < bridge> in debian distros and generic normie distros all drivers are enabled most of time 22:17 < bridge> on gentoo u only enable what u need 22:17 < bridge> I even installed Gentoo but still using pleb Arch day to day 22:17 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299466981518348339/image.png?ex=671d4e6f&is=671bfcef&hm=17dc8c0ad8bc952d2605d7ab71420180bc7996ff918685816b1bd1ab00addb5c& 22:18 < bridge> Arch packaging is either based or bloated depending on how you view it 22:18 < bridge> you install an application and it installs all the related libraries and headers 22:18 < bridge> no -dev packages 22:19 < bridge> it's practical and comfy but a bit heavy on space 22:20 < bridge> You need a particular CUDA library? Here you go, take the `cuda` package, 4.8GB installed size 22:20 < bridge> okay that's probably the most egregious example I can think of 22:24 < bridge> what is that 1 flatpak package 22:24 < bridge> :kekw: 22:24 < bridge> xd 22:24 < bridge> idk 22:24 < bridge> thats why i like nix and the nix/store so much, even if stuff is bloated, you just dump your nix/store and everythings tidy again 22:25 < bridge> all unused deps are cached and stored and dumped when you tell them to be dumped - it's great 22:25 < bridge> speaking off - let me clean my store 22:25 < bridge> gentoo also caches 22:25 < bridge> Reading kernel code is easier than nobyC 22:25 < bridge> nobyC is based 22:25 < bridge> Doesn't every decent package manager cache? 22:26 < bridge> nix packages can't collide with each other because either you reuse a cached version or you lock it to it's own - it's great 22:26 < bridge> xd 22:26 < bridge> this reminds me 22:26 < bridge> i'm capable of having every single node version available at once without problems :gigachad: 22:26 < bridge> nix mentioned 22:26 < bridge> the hardest problem in programming 22:26 < bridge> ofc we talkin about kernels and package managers and you appear 22:26 < bridge> naming things 22:26 < bridge> how your lang looking 22:26 < bridge> and cache invalidation 22:26 < bridge> https://surfingcomplexity.blog/2022/11/25/cache-invalidation-really-is-one-of-the-hardest-things-in-computer-science/ 22:27 < bridge> > there are famously two hard problems in computer science: cache invalidation, naming things, and off by one errors. 22:27 < bridge> old but gold 22:27 < bridge> I spent 2 days trying to understand `&'a T<'a>` and still didn't check repo's code of what I wanted to check at the first place 22:28 < bridge> :kekw: 22:28 < bridge> ocaml 22:28 < bridge> i see cammels 22:28 < bridge> ill do advent of code in ocaml 22:28 < bridge> i'll do it in nixlang 22:28 < bridge> noone can stop me 22:28 < bridge> isnt nixlang like haskell 22:28 < bridge> (i guess the lang can) 22:28 < bridge> oh god... 22:28 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299469727378444430/image.png?ex=671d50fd&is=671bff7d&hm=03e92a5d822a3bd20ba49233cb9e271cef39d54d6130509f2b73d5bf3c506485& 22:28 < bridge> 50gb more storage for free 22:28 < bridge> bloat lol 22:29 < bridge> One day I've learned that UML is not only a modeling language 22:29 < bridge> to be fair i tested like 300 different apps today and i didnt clean up after myself xD 22:29 < bridge> the 50gb are basically i3wm, awesomewm, plasma 5, plasma 6, hyprland and cosmos combined 22:29 < bridge> (i stuck with plasma 6) 22:29 < bridge> rust devs when they run `cargo clean` 22:30 < bridge> just `rm -rf result` 22:30 < bridge> ez 22:30 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299470197215985856/image.png?ex=671d516e&is=671bffee&hm=6c5f5800405425383cda5d13644601dbce44a9a9eed3173987cc41d81ea4e935& 22:30 < bridge> it is also a curse upon this world 22:30 < bridge> windows 22:30 < bridge> shame. 22:30 < bridge> they are rust crates 22:31 < bridge> rust pulled 22:31 < bridge> idk why 22:31 < bridge> damn rust 22:31 < bridge> NPM 22:31 < bridge> We're walking in circles! 22:32 < bridge> @blaiszephyr to be fair, these are source files 22:32 < bridge> i dont store bin files 22:32 < bridge> but i could 22:32 < bridge> but it doesnt make sense for me 22:32 < bridge> node_modules 22:32 < bridge> User Mode Linux 22:32 < bridge> ah 22:33 < bridge> every project i work on is basically sandboxed with it's own nix .lock files so i bloat it up on purpose basically 22:33 < bridge> https://en.m.wikipedia.org/wiki/User-mode_Linux 22:33 < bridge> every project i work on is basically sandboxed with it's own nix .lock files so i bloat it up on purpose 22:33 < bridge> not like i'll run out of storage any time soon :greenthing: 22:33 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299470978761621536/image.png?ex=671d5228&is=671c00a8&hm=f709e68aca597ba42ed6800dfa49ad1e94b408967ffc96e70a3d675170b90a9a& 22:34 < bridge> U want some of our 3Pb remaining? :issou: 22:34 < bridge> on one hand I like the idea of sandboxing 22:35 < bridge> on the other hand it's just containers for the desktop eugh 22:35 < bridge> more microservices than users istg 22:36 < bridge> @blaiszephyr 22:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299471552005279824/image.png?ex=671d52b1&is=671c0131&hm=b402ca5c90afb77a31889d9d38fa69d05f5becd0d00a93ad2881bcceedaa9b53& 22:36 < bridge> this is what i need to build, compile and debug ddnet for example :) 22:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1299471555419443251/image.png?ex=671d52b1&is=671c0131&hm=f02fe4db1dfa312a19233920104cc975e0dd5b9d3b38950cba3d0cf0992112b5& 22:36 < bridge> Best pic 22:36 < bridge> you make me sick.. :kekw: 22:36 < bridge> tf 22:36 < bridge> a storage container specifing their space in PiB is already crazy enough, but having 5PiB used... 22:36 < bridge> I manage NetApp clusters 22:37 < bridge> u sysadmin? 22:37 < bridge> I manage some NetApp clusters 22:37 < bridge> Yes 22:37 < bridge> Net and sys 22:37 < bridge> nice 22:37 < bridge> do u use something like tailscale to ssh? 22:38 < bridge> Nop 22:38 < bridge> u just ssh? 22:38 < bridge> Just openssh and expect 22:38 < bridge> what is expect 22:39 < bridge> I use expect to setup my ssh env on NetApp ONTAP 22:39 < bridge> i just connect to some dev servers at my company 22:39 < bridge> but they require tailscale 22:39 < bridge> which requires a SSO login 22:39 < bridge> xd 22:39 < bridge> expect is a scripting language allowing you to send commands etc.. to the remote session, then take control of the input 22:40 < bridge> On a linux server I don't use expect as you can just call /bin/bash at the end and will spawn your shell. Can't do that on ONTAP 22:40 < bridge> idk what ontap is 22:41 < bridge> NetApp's software for unified storage 22:41 < bridge> Their operating system tho 22:41 < bridge> pog 22:42 < bridge> ```tcl 22:43 < bridge> #!/usr/bin/expect 22:43 < bridge> 22:43 < bridge> # Define the variables 22:43 < bridge> set timeout -1 22:43 < bridge> set host [lindex $argv 0]; 22:43 < bridge> set user "user" 22:43 < bridge> 22:43 < bridge> # Catch password 22:43 < bridge> stty -echo 22:43 < bridge> send_user -- "Password for $user@$host: " 22:43 < bridge> expect_user -re "(.*)\n" 22:43 < bridge> send_user "\n" 22:43 < bridge> stty echo 22:43 < bridge> set password $expect_out(1,string) 22:43 < bridge> 22:43 < bridge> set timestamp [timestamp -format %Y-%m-%d_%H:%M] 22:43 < bridge> set logfile $env(HOME)/ssh_logs/session_$timestamp.log 22:43 < bridge> log_file -a $logfile 22:43 < bridge> 22:43 < bridge> # Start the SSH session 22:43 < bridge> spawn ssh $user@$host 22:43 < bridge> expect "Access restricted to authorized users" 22:43 < bridge> 22:43 < bridge> # Handle the password prompt 22:43 < bridge> stty -echo 22:43 < bridge> expect { 22:43 < bridge> "assword:" { 22:43 < bridge> send "$password\r" 22:43 < bridge> } 22:43 < bridge> } 22:43 < bridge> Can even log all you do 22:44 < bridge> Never heard of it, will check 22:44 < bridge> Ah but it's just a vpn 22:44 < bridge> ye 22:44 < bridge> xd 22:44 < bridge> We have one too 22:45 < bridge> But cisco 22:45 < bridge> @reitw https://www.theguardian.com/uk-news/2020/nov/06/companies-house-forces-business-name-change-to-prevent-security-risk 22:45 < bridge> > UK Company named ">