00:00 < bridge> i was already convinced when you started typing 00:00 < bridge> `./sysdeps/x86_64/multiarch/strcpy-sse2.S` I looked at the sse2 one 00:01 < bridge> Finally someone that takes me for my word 00:01 < bridge> all plagiarized from the dictionary 00:02 < bridge> fwiw I only looked to spot the presence of 2 loops and I couldn't spot 2 loops 00:03 < bridge> I think in practice the compilers do have an object size limitation of PTRDIFF_MAX 00:03 < bridge> and I guess if you used a 64 bit unsigned for the length the max length would be your whole address space anyway (not that it would work) 00:04 < bridge> though probably a joke 00:04 < bridge> ackshully, since zero terminated strings are just a single pointer, their object size is just the size of a pointer 00:04 < bridge> the memory backing the string is an object, I wasn't talking about the pointer itself 00:05 < bridge> <-StormAx> does ddnet have a function to rotate text? 00:06 < bridge> For a C string literal under clang and gcc it maybe matters, but any portion of memory that ends in a `\0` is technically free game. e.g. strlens implementation knows nothing about the object size limits 00:08 < bridge> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91397 00:08 < bridge> I've had gcc give me a related bogus warning with wording: 00:08 < bridge> `exceeds maximum object size 9223372036854775807 ` 00:08 < bridge> (which is PTRDIFF_MAX) 00:10 < bridge> but if anyone has the 9 million TB of memory please give me some 00:23 < bridge> uh, this seems to be too long for the time i have 😢 00:30 < bridge> waiting 20mins already for xorg to finish installing....... 00:31 < bridge> 15€ rpi do be slow 00:52 < bridge> hmm 00:52 < bridge> color picker is kind of jank 00:53 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213272835846578206/image.png?ex=65f4df61&is=65e26a61&hm=6607c335c5f5eb5a80c9ec7f0b29829c3ee89956d88a2837eb944c439d56f5e7& 01:01 < bridge> neither does size prefixed strings (in a real physical world) 01:02 < bridge> because you only need the inner core of the strlen function in the inner loop of strcpy 01:02 < bridge> you mean in a real theoretical world, unless you want to introduce a branch, length is limited 01:02 < bridge> to detect the null character in the input string 01:03 < bridge> how is it practically limited when no machine has enough memory to fill 2^64 bytes ? 01:04 < bridge> anyway, on SIMD, in x86, the glibc function just checks for page boundary on 4kB page 01:04 < bridge> then it fetches as much as it wants and detects if there's a null character in the data 01:04 < bridge> yes, after looking at it this was obvious 01:04 < bridge> it's not, I'm just being pedantic since they are being pedantic 01:05 < bridge> my null delimited strings will work for my universe computer with 10 exobyte strings 01:05 < bridge> the first load is a special unaligned ones that performs less good than another instruction which requires an cache aligned (or 32B aligned) address, otherwise it generates a segfault (really not the best exception to generate though) 01:11 < bridge> note that some ISA allows vector loads to safe in an elegant manner with not touching elements outside the allowed region 01:11 < bridge> note that some ISA allows vector loads to fail in an elegant manner with not touching elements outside the allowed region 08:48 < bridge> @robyt3 i tested on windows 08:48 < bridge> 08:48 < bridge> ram changes, but it doesnt permanentaly increase 08:49 < bridge> @furo321: when fix \#8038 08:49 < bridge> @furo321: when fix \#8039 08:52 < bridge> @robyt3 i did however indeed have a massive lag closing the console after a while 😄 08:55 < bridge> Dude @remakepower when improve English axaxaxa. Just run your sentences through chatgpt before you post on GitHub and then read the text so everytime you learn it a bit :p 08:55 < bridge> 08:55 < bridge> It’s much harder to take you serious when your messages barley make sense 08:55 < bridge> @robyt3 m_Elements defs increases the whole time 😄 08:56 < bridge> maybe gcc has a different allocation strategy 08:56 < bridge> so it takes much longer to notice with it 08:57 < bridge> chillerdragon: check dms aka offtopic 08:57 < bridge> chillerdragon: don't make fun of others 08:58 < bridge> :justatest: 08:58 < bridge> Who did I make fun of? 08:58 < bridge> On da phone later 09:00 < bridge> Oh you deleted my message to bamcane. That’s weird ngl. I was being nice giving him advice on how to be respected more on GitHub. I didn’t make fun of anyone. 09:01 < bridge> @heinrich5991: don’t you agree his comments would be treated more seriously if they were corrected by chatgpt? Or that he could learn by doing so? You also correct my English all the time and I learn through that. It’s nice. 09:02 < bridge> ChillerDragon: feel free to DM me about rules, if you want anything clarified 09:11 < ws-client> ye sure im actually curious @heinrich5991 where dm 09:12 < bridge> at your service, I'm currently monitoring irc, matrix and discord 09:12 < ws-client> do you mind doing it in a public irc channel thats not bridged to ddnet? 09:13 < ws-client> #ddnet-off-topic on quakenet 09:18 < bridge> prefer not to 09:18 < bridge> interesting: https://sourcehut.org/blog/2021-11-29-announcing-the-chat.sr.ht-public-beta/ 09:24 < bridge> @robyt3 i think i understand the problem now... it's indeed not a leak, it's just a suboptimal way of doing small allocation 09:24 < bridge> 09:24 < bridge> if you'd wait long enough it would probably decrease memory again. 09:24 < bridge> 09:24 < bridge> I'll think about a solution 09:32 < bridge> who is cpp pro? 09:32 < bridge> 09:32 < bridge> i need this: 09:32 < bridge> https://en.cppreference.com/w/cpp/container/multimap/lower_bound 09:32 < bridge> 09:32 < bridge> however in my case the multimap is sorted in a reversed order 09:32 < bridge> 09:32 < bridge> so i'd also need the reverse of lower_bound basically 09:32 < bridge> 09:32 < bridge> in other words: 09:32 < bridge> "the last element that is still greater (or equal) than key" 09:32 < bridge> iterators in cpp are so hard 09:32 < bridge> xd 09:33 < bridge> have you overloaded the `operator<` to sort in reverse order? 09:34 < bridge> std::multiset> 09:34 < bridge> this basically 09:34 < bridge> then `lower_bound` should do what you want, no? 09:34 < bridge> that's not clear for me from the specs 09:34 < bridge> xd 09:34 < bridge> "This overload participates in overload resolution only if the qualified-id Compare::is_transparent is valid and denotes a type. It allows calling this function without constructing an instance of Key." 09:35 < bridge> this is the hardest sentence i over read 09:35 < bridge> but that would be the intuitive solution i guess 09:35 < bridge> I'm not sure what else it would return 09:36 < bridge> it can't suddenly start using something other than your comparator, that would violate its internal guarantees, I guess 09:36 < bridge> i'll simply test it out i guess 😄 09:45 < bridge> seems not to work 09:46 < bridge> do i need to use upper_bound then? 09:46 < bridge> 09:46 < bridge> but would it also allow equal compare? 09:47 < bridge> ok upper also doesnt work 09:47 < bridge> i don't want to manually quick sort xd 09:49 < bridge> https://en.cppreference.com/w/cpp/algorithm/lower_bound takes a comparitor 09:49 < bridge> maybe i can use that 10:10 < bridge> you can't change the operators to sort with rbegin and rend? 10:21 < ws-client> did my bugtrix msgs reach u @heinrich5991 ? 10:24 < bridge> added casts to edlang 10:33 < bridge> Odd, it used to work correctly with Vulkan and OpenGL when I tested it, but in 18.0.3 it doesn't work consistently with Vulkan anymore 10:51 < bridge> well i simply need a reversed lower bound, but the class function doesnt offer it 😄 10:51 < bridge> but yeah with the std thing it's ez 11:17 < bridge> I'm not entirely sure what you need. can you give an example with a couple of sample values? 11:17 < bridge> ```c++ 11:17 < bridge> #include 11:17 < bridge> #include 11:17 < bridge> 11:17 < bridge> int main() { 11:17 < bridge> std::multimap> map; 11:17 < bridge> map.insert({1, 2}); 11:17 < bridge> map.insert({4, 3}); 11:17 < bridge> map.insert({9, 5}); 11:18 < bridge> printf("%d\n", map.lower_bound(8)->first); 11:18 < bridge> return 0; 11:18 < bridge> } 11:18 < bridge> ``` 11:18 < bridge> this prints `4` for me, which is the first element after `8`, given that I have the `std::greater` ordering 11:25 < bridge> "the last element that is still greater (or equal) than key" 11:25 < bridge> 11:25 < bridge> so the last element >= 8 11:25 < bridge> 11:25 < bridge> in your case it's 9 11:25 < bridge> i basically need a reverse iterator 11:29 < bridge> i already solved it btw 11:29 < bridge> nice 11:29 < bridge> with std::lower_bound tho 11:30 < bridge> i don't think the class is built for my needs xd 11:30 < bridge> to me, it's not clear from your description, whether "greater" refers to the container ordering that is reversed or to the ordering outside the container 11:30 < bridge> the container is reverse bcs of the std::greater too, like in your example 11:33 < bridge> i could probably also rewrite it to not use greater in the container already.. but honestly i'm too lazy xdd 11:33 < bridge> 11:33 < bridge> with rust iterators it would have been easier 11:33 < bridge> just saiyan 11:33 < bridge> ```rs 11:33 < bridge> #include 11:33 < bridge> #include 11:33 < bridge> 11:33 < bridge> int main() { 11:33 < bridge> std::multimap> map; 11:33 < bridge> map.insert({1, 2}); 11:33 < bridge> map.insert({4, 3}); 11:33 < bridge> map.insert({9, 5}); 11:33 < bridge> auto it = map.lower_bound(8); 11:33 < bridge> it--; 11:33 < bridge> printf("%d\n", it->first); 11:33 < bridge> return 0; 11:33 < bridge> } 11:33 < bridge> ``` 11:33 < bridge> I think decrementing the iterator would work then 11:33 < bridge> yep, probably 11:33 < bridge> but what if there is no fitting entry 11:33 < bridge> then u decrement end 11:33 < bridge> eh 😦 11:33 < bridge> what even happens then xd 11:33 < bridge> yea 11:33 < bridge> UB, probablu 11:34 < bridge> UB, probably 11:34 < bridge> my cpp brain really got removed 11:34 < bridge> i forgot everything 11:34 < bridge> in my case this would actually even work 11:34 < bridge> bcs i first check if there could be a fitting allocation anyway 11:35 < bridge> to prevent the worst case of iterating through all entries 11:35 < bridge> which is likely 11:39 < bridge> i think i'll need quick_search anyway :lol: 11:39 < bridge> i need to calculate the alignment too, which changes the size requirements 11:39 < bridge> all discussion for nothing 11:40 < bridge> but it's also not really correct 11:40 < bridge> this is harder than expected 11:40 < bridge> a lower_bound with a condition 11:47 < bridge> clangd code insight also seems compltely broken 11:47 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213437409518424084/image.png?ex=65f578a7&is=65e303a7&hm=6f1d090e0814452ac5c1ba272e8daf715047fd9bcfd7cfe678e949802ae95cfc& 11:48 < bridge> i think it's broken since our refactor for include what u need 11:48 < bridge> why didnt the tool for example say: 11:48 < bridge> include 11:48 < bridge> 11:48 < bridge> here? 11:48 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213437867221713018/image.png?ex=65f57914&is=65e30414&hm=40b61afee3742e6609b2508ae85e08e20ca23d30507c68e5a6d15bd482acf02c& 11:49 < bridge> does it find some earlier include and then just stops? 11:49 < bridge> 11:49 < bridge> isn't that the opposite of include what you need :lol: 11:49 < bridge> include what others need 11:49 < bridge> xd 11:49 < bridge> don't include what others already needed* 12:02 < bridge> ``` 12:02 < bridge> 12:02 < bridge> log 12:02 < bridge> 2(last - first) + O(1) comparisons). However, for non-LegacyRandomAccessIterators, the number of iterator increments is linear. Notably, std::map, std::multimap, std::set, and std::multiset iterators are not random access, and so their member lower_bound functions should be preferred. 12:02 < bridge> ``` 12:02 < bridge> 12:02 < bridge> MHHH 12:02 < bridge> well that sucks :lol: 12:03 < bridge> man when gpt 5 ngl 12:03 < bridge> 12:03 < bridge> i waste 1h for a problem where i know the solution, but struggle to apply it 12:23 < bridge> i have a curse or something that breaks every feature when i try to use it 12:25 < bridge> Most likely explanation is that we updated our drivers, which causes the buggy code path in the Vulkan backend to be used instead 12:51 < bridge> i think this generally does not work without reversing the iterator 12:51 < bridge> 12:51 < bridge> "Returns an iterator pointing to the first element that is not less than (i.e. greater or equal to) key" 12:51 < bridge> 12:51 < bridge> for greater it would mean smaller or equal 12:51 < bridge> 12:51 < bridge> but i need smaller (without equal) 12:51 < bridge> 12:51 < bridge> this really sucks xd 12:51 < bridge> i dunno how i can make it work without O(1) lookup 12:53 < bridge> i guess i'll simply rewrite the container to use std::less 12:54 < bridge> well i could use greater_eq 12:54 < bridge> i guess 12:54 < bridge> what was the name of repo which could count loc in project 12:55 < bridge> tokei 12:55 < bridge> or snth 12:55 < bridge> oh ye, thx 12:56 < bridge> @milkeeycat Are you working on #8020? 12:56 < bridge> https://github.com/ddnet/ddnet/issues/8020 12:56 < bridge> ah. and you potentially have a lot of elements with the same key? 12:56 < bridge> that's probably forbidden 12:57 < bridge> no, there's no way my little noodle can fix it, i just wanted to help as much as I could =] 12:57 < bridge> well a multimap can store multiple equals, so i guess it's no problem here? 12:57 < bridge> ok, thanks 🙂 12:57 < bridge> i do indeed 12:58 < bridge> ah, so this relates to the main thread index or whatever is used for the one-time-use buffer objects? 12:58 < bridge> yes, but equal is defined as `!(a < b) && !(b < a)` 12:58 < bridge> that fails if you replace `<` with `<=` 12:59 < bridge> but why should it need eq 12:59 < bridge> well maybe it matters, but it seems like in worst case it appends it to a later element? 12:59 < bridge> when inserting 12:59 < bridge> for lookup, e.g. 13:00 < bridge> probably UB, but you might get away with it for non-production code 13:00 < bridge> the problem is the allocations in that thread yeah 😄 13:00 < bridge> but the real problem is a little bit harder to explain 13:00 < bridge> if it always uses the biggest allocation => it grows the allocation heap 13:01 < bridge> it cant merge it bcs of delayed cleanups 13:01 < bridge> yea, the comparator must suffice `Compare` 13:01 < bridge> and `Compare` states that equality must be `!(a < b) && !(b < a)` 13:01 < bridge> so AFAICT, passing `<=` is UB 13:03 < bridge> Hm, why not upper_bound - 1? 13:03 < bridge> even tho that makes sense, doesn't it depend on the lookup done? 13:03 < bridge> 13:03 < bridge> e.g. if i never use a "normal" find 13:03 < bridge> i mean it's UB by spec 13:03 < bridge> but logically 13:03 < bridge> logically, it might work 13:03 < bridge> but then, you'd think the same applies to `sort` 13:04 < bridge> and that causes actual segfaults for stuff that doesn't adhere to `Compare` 13:04 < bridge> yeah i tried that in the pr.. dunno where my thought mistake is 13:05 < bridge> Not for lower and upper bound btw 13:05 < bridge> but for `lower_bound`/`upper_bound` on `multimap` 13:05 < bridge> because `multimap` requires it 13:05 < bridge> (the member functions) 13:05 < bridge> esp upper_bound requires it 13:05 < bridge> "Returns an iterator pointing to the first element that is greater than key." 13:05 < bridge> 13:05 < bridge> it could tell if it's greater 13:05 < bridge> without knowing it's not equal 13:05 < bridge> 😄 13:05 < bridge> couldn't * 13:06 < bridge> Me and a friend got timed out at the same time, can't connect to any server because "UDP seems to be filtered" what causes this 13:06 < bridge> that sounds like UDP isn't working for you, currently 13:07 < bridge> teeworlds/ddnet run over UDP 13:08 < bridge> Hm, I'm unsure whether the compare fn you use with the multimap itself has to be the same as the one you use in upper and lower bound as long as the data satisfies is_partitioned for both 13:08 < bridge> so linear search works 13:08 < bridge> 13:08 < bridge> to remove the linear search partially i tried to first find the upper bound for size (minus one) 13:08 < bridge> => then i reversed the returned iterator and did the linear search on the remaining values 13:08 < bridge> what is wrong about this xd 13:09 < bridge> `upper_bound`/`lower_bound` member functions don't take another comparison function 13:09 < bridge> i guess make_reverse_iterator automatically does minus one? 13:09 < bridge> Bamboozled once again, why does multimap have member upper and lower bound? 😄 13:09 < bridge> " std::copy(std::make_reverse_iterator(v.end()), 13:09 < bridge> std::make_reverse_iterator(v.begin()), 13:10 < bridge> std::ostream_iterator(std::cout, ", "));" 13:10 < bridge> that's how i understand their example 13:10 < bridge> https://upload.cppreference.com/mwiki/images/3/39/range-rbegin-rend.svg 13:10 < bridge> xd 13:10 < bridge> to do the logarithmic complexity `lower_bound`/`upper_bound` 13:11 < bridge> so that was my mistake 13:11 < bridge> the function doesnt reverse the order of the iteration, but literally changes the iterator 13:11 < bridge> i swear i find cpp's iterator stuff way too complicated 13:12 < bridge> Why not a template specialization for the non-member ones though? I guess there is no way to express the operations in terms of iterators? 13:12 < bridge> interesting. I don't know. I guess it should be possible in terms of iteratorss 13:13 < bridge> I'm sure I'm missing something here. Why did you think it would reverse the order? 13:15 < bridge> i am not used to not lazy evaluated iterators anymore 13:16 < bridge> i simply didnt think about it dunno 13:16 < bridge> there is no .next() call 13:16 < bridge> it does that automatically xd 13:19 < bridge> So is your problem fixed btw? 13:19 < bridge> i guess so 13:19 < bridge> upper bound was never the problem 13:19 < bridge> but if u have a clever way to remove the O(1) search 13:19 < bridge> u could help me with that 13:20 < bridge> O(n)? 13:20 < bridge> but i think it's not really possible 13:20 < bridge> What is the actual problem? 13:20 < bridge> Like what are we solving? 13:20 < bridge> i need to calc alignment on fly 13:20 < bridge> and add that to the required size 13:20 < bridge> so the key i am searching for is literally changing xd 13:20 < bridge> only thing guaranteed is that at least one exists 13:22 < bridge> only real solution i see is overallocating the whole alignment 13:22 < bridge> but you as vulkan expert know why i shouldnt 13:22 < bridge> I don't quite get it, why does alignment requirement of an object depend on other objects? 13:22 < bridge> Why are your things in a multimap? 13:23 < bridge> the allocation itself has alignment requirements 13:23 < bridge> but how the allocations (the list of possible allocations) are aligned is not saved in some key value 13:23 < bridge> spotted on my save before map change pr afair 13:23 < bridge> it's not possible @learath2 just ignore my monologue 13:23 < bridge> i just can't accept that it's linear 13:24 < bridge> Sorry, I guess this is far too niche for me to understand from the outside. I was hoping it was more abstract 13:24 < bridge> Well a linear search in sorted data does sound like a bummer 13:24 < bridge> i'd need a data structure that somehow is categorized in certain alignment requirements already i guess 13:25 < bridge> in 99% of all cases it also doesnt matter 13:25 < bridge> i already put similar alignments together, similar != equal in this case 13:25 < bridge> Depends on how expensive a comparison is and how big your set is 13:25 < bridge> more like upper categories xD 13:26 < bridge> What are you making btw? 13:27 < bridge> basically this 13:27 < bridge> Search __most__ fitting allocation, not _first_ fitting 13:28 < bridge> it's not very easy to explain, but since some stuff is lazy deallocated the allocation heap grows in an undesirable way 13:28 < bridge> where it sometimes does not merge back similar allocations 13:32 < bridge> now comes the rust version fix 13:32 < bridge> let's see how much i struggle there. 13:32 < bridge> 13:32 < bridge> multimaps don't exist in rust 13:33 < bridge> I bet there is a crate for it 13:33 < bridge> back then i didnt find one 13:34 < bridge> There is one called multimap and another multi_map 13:34 < bridge> Maybe one of them works for you 13:35 < bridge> Or I guess you can have a naive multimap as a hashmap of key to vec. 13:35 < bridge> apparently i used this 13:35 < bridge> ```rust 13:35 < bridge> std::collections::BTreeMap> 13:35 < bridge> ``` 13:35 < bridge> and rewrote the logic 13:35 < bridge> MemoryHeapQueueElement just says nothing to me 😄 13:36 < bridge> understandable xd 13:36 < bridge> why LinkedHashMap? 13:36 < bridge> Linked lists are hot 13:36 < bridge> and why nonzero? 13:36 < bridge> it's basically just the struct that stores the alloc size and alignment in buffer 13:36 < bridge> xd 13:36 < bridge> that's just some id 13:36 < bridge> bcs i don't work with ptrs in rust 13:36 < bridge> why not 13:36 < bridge> in cpp multimap iterators stay valid 13:37 < bridge> smth like that doesnt exist in rust 13:37 < bridge> So this keeps track of your allocations in gpu memory? 13:37 < bridge> and would be some kind of ptr magic 13:37 < bridge> well kind of i guess 13:37 < bridge> 13:37 < bridge> but not directly 13:37 < bridge> is that safe 13:37 < bridge> it keeps track of sub allocations 13:37 < bridge> Why does the alignment need to be kept track of? Do you move objects around later? 13:37 < bridge> it is safe, as long as they entry doesnt get invalid 13:38 < bridge> maybe u can achieve that with pin or smth 13:38 < bridge> but ye sounds annoying 13:38 < bridge> well for the allocator the offset in heap is interesting 13:38 < bridge> but for user the offset + align 13:38 < bridge> xd 13:38 < bridge> apparently the user for simplicity simply gets a copy 13:38 < bridge> of that element 13:39 < bridge> so ignore the alignment stuff 13:40 < bridge> ```std::multiset>;``` 13:40 < bridge> 13:40 < bridge> cpp version btw `SMemoryHeapQueueElement` is the same here 13:41 < bridge> i also use multiset not map.. but doesnt matter in this case xD 13:42 < bridge> Hm, see I may be missing something but alignment should only be important when you allocate first, unless the allocations need to be relocatable without user intervention 13:43 < bridge> it is 13:43 < bridge> ignore the alignment part 13:43 < bridge> i dont use it 13:43 < bridge> it's only for the result value 13:44 < bridge> but alignment is affected by the offset in the buffer 13:44 < bridge> Anyway, a map doesn't look like the best structure for this. I'll think about it over breakfast 13:44 < bridge> so exactly at allocation time it matters what the offset is 13:44 < bridge> note that i already group _similar_ aligned stuff together 13:44 < bridge> so it only sometimes doesn't fit 13:45 < bridge> You want to find the best fitting, so the smallest free block that's properly aligned with enough size, yes? 13:45 < bridge> yes 13:45 < bridge> Ok, brb tea and fooding. It helps me think 13:45 < bridge> xd 13:46 < bridge> lerato tea-powered 13:46 < bridge> and btw it should not only be the properly aligned one.. if the allocation is big enough, it should be allowed to align the memory inside the allocation 13:46 < bridge> it's better to waste a few bytes than use a oversized chunk i guess 13:47 < bridge> or in other words: 13:47 < bridge> if no alignment fits (without wasting bytes) 13:47 < bridge> 13:47 < bridge> the impl would need to allocate a completely new buffer 13:47 < bridge> and that's super expensive 14:15 < bridge> @0xdeen can we also fix linux build xd 14:15 < bridge> before release 14:16 < bridge> oh lol u already commented on the pr 14:16 < bridge> issue* 14:31 < bridge> @jupeyy_keks how big are these buffers? 14:32 < bridge> at least 20mb 14:41 < bridge> @jupeyy_keks im getting a 30% rise pog 14:41 < bridge> liking even more my job now xd 14:41 < bridge> same job? 14:41 < bridge> that's significant 😮 14:42 < bridge> yes 14:42 < bridge> and then 20% 14:42 < bridge> on top of that 14:42 < bridge> that's insane 14:42 < bridge> they value me 14:42 < bridge> deserved 14:42 < bridge> :owo: 14:43 < bridge> so it's > 40k now right? 14:43 < bridge> 43k 14:43 < bridge> then i think its like 52 or smth 14:43 < bridge> u have 43 niw=+ 14:43 < bridge> now? 14:43 < bridge> yes 14:43 < bridge> oh ok 14:43 < bridge> with the rise 14:43 < bridge> yeah itsn ot same as germany kek 14:44 < bridge> wait but why the 52 14:44 < bridge> but my father gets 14k for reference 14:44 < bridge> u confuse me 14:44 < bridge> 52 is the 20% rise 14:44 < bridge> on top of the 30 14:44 < bridge> they said will come if i keep doing good 14:44 < bridge> for what the 20%? 14:44 < bridge> ah 14:44 < bridge> ? 14:44 < bridge> xd 14:44 < bridge> i get 33k, i got a 30% so now 43k 14:44 < bridge> 52 is already senior level payment 14:44 < bridge> then 20% maybe in the future 14:44 < bridge> that would be good 14:45 < bridge> ofc depends on region 14:45 < bridge> in barcelona probably u should get more 14:45 < bridge> on spain 14:45 < bridge> im like a living rich 14:45 < bridge> or close 14:45 < bridge> medium high 14:45 < bridge> i only have 1 friend who is close 14:45 < bridge> he gets 30k 14:45 < bridge> he is devops 14:45 < bridge> well he just got the rise to 30k 14:46 < bridge> Are you trying to say our ryozooki isn't senior level? 14:46 < bridge> im not xD 14:46 < bridge> does the payment reflect the skill ever? xd 14:46 < bridge> well rarely 14:46 < bridge> Rarely indeed. It's all Reagan's fault 14:47 < bridge> You are now 14:47 < bridge> i consider myself skilled atp rogramming 14:47 < bridge> but not enough yet at soft things 14:47 < bridge> like managing 14:47 < bridge> or considering decisions 14:47 < bridge> i like too much interesting stuff 14:47 < bridge> to choose the boring answeres 14:47 < bridge> @learath2 what salery do you aim for? 14:47 < bridge> 14:47 < bridge> i guess u could aim for 48k? 14:48 < bridge> and probs correct ones 14:48 < bridge> to choose the boring answers 14:48 < bridge> Who cares about managing. That's wht we have managers 14:48 < bridge> ok not manager, but tech lead 14:48 < bridge> in this industry sadly u need to become more social 14:48 < bridge> to go upwards 14:48 < bridge> i think 14:48 < bridge> I honestly don't really care for now, I just need things to pad my CV so as long as I don't starve, it's fine 14:49 < bridge> it's not about salery anyway 14:49 < bridge> 14:49 < bridge> either ur job is cool or your job offers good opportunities 14:49 < bridge> 14:49 < bridge> for 1st money wont matter as much, second will give u money in long run xd 14:50 < bridge> I don't think I'd be worth that much tbf. I'm a generalist that is very well versed in a language that is on life support and a language that everyone can't wait to replace. With no professional experience whatsoever 14:51 < bridge> @learath2 if u have a nice salary then what matters most is if ur job is interesting 14:51 < bridge> it changes so much 14:51 < bridge> With a lackluster portfolio. I'm a very very risky hire 14:51 < bridge> ur life 14:51 < bridge> i worked before in some nodejs pdf shit 14:51 < bridge> Not good for shareholder value 14:51 < bridge> were do u want to apply anyway? 14:51 < bridge> and now im doign compilers 14:51 < bridge> in germany only certs matter 14:51 < bridge> u will havemore luck with startups for a first job 14:51 < bridge> they dont pay after skill xd 14:51 < bridge> murica only skill matters 14:52 < bridge> @learath2 i already dmed u some time ago but if u ever want to apply i can recommend u 14:52 < bridge> tbh i think u would get along with my coworker, the gdb wizard 14:52 < bridge> x 14:52 < bridge> xd 14:52 < bridge> also he is obsessed with wanting to make his own cpu design 14:53 < bridge> understandable 14:53 < bridge> 😬 14:53 < bridge> his uni thesis was smth about making matrices rly perfomant or smth with assembly 14:53 < bridge> i forgor 14:53 < bridge> I'm thinking europe, haven't thought more specifically than that for now. Maybe netherlands or germany. 14:53 < bridge> 14:53 < bridge> I could also consider japan while I'm still young enough to be able to endure the 12 hour japanese work day 14:53 < bridge> some cache analysis or smth 14:53 < bridge> I could actually. Barcelona isn't a half bad place to live in 14:54 < bridge> i love barcelona, its the city with the most city vibes i ever went 14:54 < bridge> idk what that means but i know 14:54 < bridge> Understandable, vibes are hard to describe 14:54 < bridge> did u ever live in rome? 14:55 < bridge> somehwo it smelled worse than barcelona in the center 14:55 < bridge> What certs would a software engineer even get anyway? I thought those were more an IT thing 14:55 < bridge> a problem is tourists pissing on the small streets of the old city center 14:55 < bridge> Cisco certified network engineer 14:55 < bridge> because there was a time where designers thought having close and not open spaces was better against deseases 14:55 < bridge> but its the opposite XD 14:55 < bridge> Nope, but I did go there twice 14:56 < bridge> i meant like bachelor and stuff 14:56 < bridge> anything that qualifies u 14:56 < bridge> @learath2 did u visit "el barrio gotico" 14:56 < bridge> Oic 14:56 < bridge> in barcelona 14:56 < bridge> Nope. The gothic bar? 😄 14:56 < bridge> no 14:56 < bridge> its a neighbourhood 14:56 < bridge> in the oldest part of the city 14:57 < bridge> https://en.wikipedia.org/wiki/Gothic_Quarter,_Barcelona 14:58 < bridge> I may have. Idk it's been so long since I've been to Barcelona 14:59 < bridge> i wanted to show a pic of the views from the office b ut idk about google map lurkers 14:59 < bridge> Let me look at a couple landmarks and see if I remember any 14:59 < bridge> we have direct sight of sagrada familia 14:59 < bridge> Don't, :konsti: 14:59 < bridge> ill post it and delete 14:59 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213485858242699265/e7eab44b-6dae-4f67-9b47-cddf69fdde6f.png?ex=65f5a5c6&is=65e330c6&hm=0beeb580426e8653f1597e01c4963a1d39f0dfb923717dbba9b7117f6deab6f8& 14:59 < bridge> :p 14:59 < bridge> Irc never forgets 14:59 < bridge> true 14:59 < bridge> xD 14:59 < bridge> That is an amazing view though 15:00 < bridge> yep 15:00 < bridge> I'll now camp in front of your building and take your kidneys 15:00 < bridge> xDDD 15:00 < bridge> that seems like an easy job for geoguessr 15:00 < bridge> indeed 15:00 < bridge> but well its not my house 15:01 < bridge> new bug 15:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213486232265556009/image.png?ex=65f5a61f&is=65e3311f&hm=63e51786ad2d42dcc60d9f6df182657f2b794b97e6c46093393e181dd2b3ea89& 15:01 < bridge> take an image, name it something idk, then rename it to something that can be external and export will go out of the box 15:01 < bridge> I think @0xdeen also indicated in the past that he could recommend people for some job, but maybe that's a thing of the past already 15:08 < bridge> @jupeyy_keks https://twitter.com/zozuar/status/1763906851337326736 15:09 < bridge> video 15:09 < bridge> https://twigl.app/?ol=true&ss=-Nrz9bitd8IESh_Lyq2F 15:09 < bridge> insane 15:09 < bridge> I love this sort of stuff. Such a small algorithm generating such beauty 15:12 < bridge> 😮 works well too good 15:12 < bridge> 😮 works way too good 15:15 < bridge> ? 15:15 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213489841707155486/image.png?ex=65f5a97b&is=65e3347b&hm=9d3a295dd87d06d69d7a25fb55406e20bf0a3fbff24458336b514befd42dddaa& 15:15 < bridge> trying to replace grass_doodads and it does this 15:18 < bridge> Replace with itself? 15:18 < bridge> Then use "Readd" instead 15:20 < bridge> well it was an embedded one so i thought to replace it 15:29 < bridge> Liars 15:29 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213493481729695784/screenshot_2024-03-02_15-27-22.png?ex=65f5acdf&is=65e337df&hm=5ce10dc3ad28c04a022d56d03187869b2faadd47fabe05c055006e8143414486& 15:29 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213493509517217832/screenshot_2024-03-02_15-27-28.png?ex=65f5ace6&is=65e337e6&hm=0f47634d1601cbf8faf98d349e2e1facefde59a2db3d4735524a8866b3f97045& 15:30 < bridge> you only get every second tick from the server. maybe the tooltip could be reworded 15:35 < bridge> Depends on `sv_high_bandwidth` value, which is 0 per default. Could be changed to "Go to next/previous tick" I guess. 15:35 < bridge> snapshot 15:35 < bridge> yes 15:35 < bridge> but can't we also interpolate the tick 15:35 < bridge> then the logic would always be the same 15:36 < bridge> it might work for skipping to the next tick, but I don't think skipping backwards works with interpolation 15:36 < bridge> how so 15:37 < bridge> - back to prev. snapshot 15:37 < bridge> - then interpolate 15:37 < bridge> or let's call it prediction tick 15:37 < bridge> that's more clear 15:38 < bridge> but u could ofc also interpolate between both snapshots 15:38 < bridge> more ticks might be missing, though 15:38 < bridge> at what point should we stop interpolating? 15:38 < bridge> predict until tick count is equal 15:39 < bridge> for one tick, I can see that work. for more, I think that's a bad idea because it might show users things that didn't actually happen 15:39 < bridge> that's already the case now 15:40 < bridge> how should the demo know if an entity spawned for 1 tick if it was never included in a snapshot 15:40 < bridge> we know the current snapshot and the input of the next snapshot 15:40 < bridge> that's all we need 15:41 < bridge> what I was trying to say is: for one tick the effects of that are likely small. for more, they might show more discrepancies 15:42 < bridge> (I'm not sure I completely understood your messages. interpreted them as: it might happen with just one tick as well) 15:43 < bridge> all i was saying it, that the demo is never smooth in that case anyway 15:43 < bridge> 15:43 < bridge> the demo already interpolates anyway 15:43 < bridge> if it interpolates between two snapshots or between an imaginary inserted tick doesnt matter then anymore 16:10 < bridge> @heinrich5991 have u ever thought about logging without global variables? xd 16:11 < bridge> I have 16:11 < bridge> when I looked at it, I thought it might have pretty bad performance implications though 16:11 < bridge> because you have to pass the logging everywhere 16:12 < bridge> well a global logger might have one too.. e.g. a once_cell wrapper will always have to deref 16:12 < bridge> you effectively lose one register to that. it becomes worse if it gets spilled to the stack 16:13 < bridge> you mean the if? ye, that's a performance concern, but at least it should be always predicted correctly 16:13 < bridge> passing stuff is prbably negatable 16:13 < bridge> 16:13 < bridge> also to make it clear. i mean global variables, not global state 16:13 < bridge> if ur component clones the logger arc. i am fine with that 16:13 < bridge> I don't think that passing stuff is negligible, if it happens everywhere 16:14 < bridge> ah, so without passing. I haven't thought about that like that yet 16:14 < bridge> i think heinrich is right 16:14 < bridge> ah, so without passing it every time. I haven't thought about that like that yet 16:14 < bridge> if u pass it always* 16:15 < bridge> a global is like knowing a constant address so u dont need a register or stack to hold it 16:15 < bridge> i dunno, it's ofc there, but to me it's on a level with index checks etc. 16:15 < bridge> 16:15 < bridge> it's negatable 16:15 < bridge> that's true, but how do you intialize that global? 16:16 < bridge> a global lock also _cannot_ have optimizations for runtime stuff easily 16:16 < bridge> e.g. batching 16:16 < bridge> a global variable which needs a lock* 16:16 < bridge> well anyway, let's say it makes my programm 5% slower 16:17 < bridge> i doubt that but ok 16:17 < bridge> is this real jupstar 16:17 < bridge> so back to the non global variable: 16:17 < bridge> 16:17 < bridge> how would you imagine it? 16:17 < bridge> 😬 16:17 < bridge> currently i have a global state logger 16:17 < bridge> and from that u kinda allocate a local one, that has a unique id/name whatever 16:18 < bridge> my goal is to have the possiblity to disable/filter logging of some stuff, without loosing it. 16:19 < bridge> let's say it like this: 16:19 < bridge> 16:19 < bridge> i can understand the appeal of global loggers, global allocators 16:19 < bridge> it makes stuff easier to write 16:19 < bridge> but i hate global variables 16:19 < bridge> xd 16:20 < bridge> if u'd have a 100% truely non global variable program, u could literally make every lib a .so load unload it at runtime and it will for ever work 16:20 < bridge> ofc global state is also a problem 16:21 < bridge> tbh im at gym rn so hard to think xd 16:21 < bridge> for logging the global state would probably simply live in the most upper component, e.g. the client. 16:21 < bridge> 16:21 < bridge> so every component beneath can be reloaded 16:21 < bridge> xd 16:21 < bridge> xdd 16:21 < bridge> 16:21 < bridge> i talk shit anyway 16:21 < bridge> whats the problem with globals and dyn libs? 16:22 < bridge> but i want to consider some designs. logging to me is a rather boring topic 16:22 < bridge> 16:22 < bridge> 16:22 < bridge> but if it's epic future proof, who knows how a design would look like 16:22 < bridge> ahh 16:22 < bridge> is logging rly a overhead for u? 16:22 < bridge> are u doing HFT 16:22 < bridge> well depends on the global var. but generally it might be a different global variable 16:22 < bridge> 16:22 < bridge> or do some shady memory stuff 16:23 < bridge> no, not really, i don't have an huge amount of logging yet 16:23 < bridge> 16:23 < bridge> i often do log driven debugging 16:23 < bridge> but dunno, it gets removed afterwards xD 16:23 < bridge> xd 16:24 < bridge> @jupeyy_keks do u think smth like compiler supported logging would be useful 16:24 < bridge> i wonder how a compiler can help 16:24 < bridge> to make logging better 16:24 < bridge> less overheas 16:24 < bridge> less overhead 16:25 < bridge> well my naive view on logging is that it always has a lock 16:25 < bridge> 16:25 < bridge> either in your impl, or in the OS 16:25 < bridge> so probably it cant help a lot 16:31 < bridge> will take a look later, currently afk 16:37 < bridge> why is it desirable to pass around an address everywhere if you aren't even avoiding global state? 16:40 < bridge> you could also make it the other way around. 16:40 < bridge> 16:40 < bridge> if you use a global variable in your lib, the variable is bound to your lifetime of the lib, so it's "shady" memory management. 16:40 < bridge> Additionally you will loose the state of your global variable if you unload and reload the lib. 16:40 < bridge> And this happens opaque to a coder 16:40 < bridge> also global variables are kind of less explicit 16:41 < bridge> If you unload the logging library, wouldn't it make sense that the variable is now out of scope? 16:42 < bridge> maybe u passed a log item somewhere, which is also invalid now 16:42 < bridge> 16:42 < bridge> ofc this is kinda weird argument, bcs i doubt u'd program like that 16:42 < bridge> 16:42 < bridge> however, generally global variables could cause this 16:42 < bridge> and it depends on how your global var looks like, e.g. if it is wrapped in an Arc or some heap object 16:43 < bridge> I don't really see how it's not possible if you are passing the pointer to global state around 16:43 < bridge> You pass me a global state variable, unload yourself, now I have a dangling pointer 16:44 < bridge> how should that happen with global state? 16:44 < bridge> im in rust btw 16:44 < bridge> then the allocator would need to be local too 16:44 < bridge> If there is global state that your logger must reference no matter what to do the logging. The unique local loggers you pass around have to contain some reference to that state, no? 16:45 < bridge> yes, here is the question how that ref looks like 16:46 < bridge> No matter what that ref looks like, can't it go out of scope the same way the entire global variable you avoided can go out of scope? 16:46 < bridge> well depends where your global state is allocated 16:47 < bridge> maybe that was a bad example 16:47 < bridge> But couldnt the global variable also be allocated there to avoid scope issues in the same way? 16:47 < bridge> it could yes 16:47 * bridge could 16:47 < bridge> what ? what's the relation between Reagan and salary = skill ? 16:48 < bridge> everywhere you need to have social skills 16:50 < bridge> yes 16:52 < bridge> ok my main problems are the one you already know: 16:52 < bridge> 16:52 < bridge> - modularity, a global var cannot be switched with a different instance (e.g. having 2 global states) 16:52 < bridge> - debugging. having to pass stuff makes it easy to replace it for debugging for a specifc area 16:52 < bridge> - performance (depends on the impl) you could™️ batch stuff etc in case of a local logger instance (you can probably do smth similar with globals too, the only difference is that with a global variable you'd most likely not want to pollute your function arguments/constructors in first place, bcs that defeats the argument about that) 16:53 < bridge> actually i also didnt want a discussion about global vars xD 16:53 < bridge> i just want to know if anyone here ever made a logger without global vars 16:53 < bridge> and see the impl, or hear about challenges, ideas whatever 17:01 < bridge> Well I guess it depends on how you define "skill", neoliberalism ushered in the era of wages and profit being more dependent on how socially and economically savvy you are rather than how skilled you are at your craft 17:06 < bridge> - You can have an extra level of indirection (which in your current design the local loggers provide) baked into the global variable to begin with (e.g. main component holds a global variable which contains a pointer to the logger component that is currently loaded, one could even have shared_ptrs/arcs to keep the old instance alive if two global loggers being alive at the same time is desired) 17:06 < bridge> - Debugging with globals is indeed rather annoying 17:06 < bridge> - Batching almost always has nasty looking api anyway, I can see why you might not want that in your global namespace, but I doubt you get any extra performance if you implement it on a local logger rather than a global one 17:06 < bridge> me neither, I was curious why you thought avoiding one with a logger would help 17:08 < bridge> Well u could have a sync point per thread which writes to the logger. There are so many ideas, so why not try out and see how far I come 17:08 < bridge> And if I fail, that's OK too 17:08 < bridge> If I were building such a logger I'd see if I could get rid of all global state as well, relying on some OS mechanism to make sure my lines don't get interleaved 17:10 < bridge> Under stable. My idea for the global state was to have some kind of fallback mechanism if u want a logger that can filter other loggers at runtime. So it could recollect all log even if expensive 17:10 < bridge> But probably not worth it anyway xdd 17:11 < bridge> But console logs also != client logs for me.. Client logs could contain ids to actually identify where the logs come from 17:11 < bridge> That would probs require global state too 17:12 < bridge> Anyway, I'm a global state enjoyer, so I probably wouldn't bother messing around with it anyway. The way I see it a logger is a perfectly fine place to use global state and variables 17:13 < bridge> I'm big on using features and paradigms that people with fancy degrees and articles don't like. It gives me some sort of primal pleasure 17:13 < bridge> Global state or var? 17:13 < bridge> I'm impressed how much stuff just works if u don't use global variables anywhere 17:14 < bridge> I think I'd implement one using both, with minimal locking preferably, would have to think about it and have requirements in front of me 17:14 < bridge> I can create 100 demo viewers and it just works xd 17:14 < bridge> I also minimize global state 17:15 < bridge> But don't avoid it 17:17 < bridge> The trick to using global state in a sane way is to make sure something is truly global, most issues arise when scopes of variables are extended beyond their useful life. This isn't just an issue for globals but for every scope IMO 17:19 < bridge> That's true 17:20 < bridge> For logging in defs more open for using them than other stuff 17:20 < bridge> For logging i'm defs more open for using them than other stuff 17:22 < bridge> I guess the reason globals get the most flak is that it's usually the wrong scope since it's the largest scope 😄 17:33 < bridge> @jupeyy_keks im thinking of getting a 7900x3d 17:33 < bridge> the 3d is better for compile right? 17:33 < bridge> more cache 17:35 < bridge> It's better in almost anything 17:35 < bridge> I want it too but i wait for next gen 17:37 < bridge> @blaiszephyr 17:37 < bridge> yes 17:37 < bridge> got some spare mony xs 17:37 < bridge> im more than happy with it 17:37 < bridge> when is next gen? 17:38 < bridge> they will share same socket anyway 17:40 < bridge> Q3 I heard 17:40 < bridge> And next year x3d 17:41 < bridge> i rly wanna see it compile 17:41 < bridge> and higher mhz ram 17:41 < bridge> also i need a better case 17:41 < bridge> need to fuel ny rust addiction 17:51 < bridge> hey, it's stupid question saturday and here's my question. what mafs should i apply to draw things in ehh.. like on a map, not just on a screen xD i want to draw rectangle and when i go spec i want it go stay on map, u know :justatest: 17:51 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213529213760442438/image.png?ex=65f5ce26&is=65e35926&hm=b2ba6022adcd813961684920e8559d69c6b4ea658308bd6a097686e450b8825c& 18:08 < bridge> i don't understand tf u want xdd 18:09 < bridge> u want a rect that is fixed at a specific view? 18:09 < bridge> independent of the map? 18:09 < bridge> at a fixed position* 18:09 < bridge> yes 18:09 < bridge> graphics->mapscreen 18:09 < bridge> u can also query the current mapped screen to restore it later 18:10 < bridge> Gift 50$ - [steamcommunity.com/gift/50](https://u.to/KNptIA ) 18:10 < bridge> in case it happens during the map rendering 18:10 < bridge> @heinrich5991 ^ 18:10 < bridge> @Discord Mod ban 18:10 < bridge> i am always impressed that discord never takes action for such obvious scams 18:11 < bridge> it's the 20th time i saw that now 18:11 < bridge> I opened this chat and that link instantly appeared xD 18:11 < bridge> => u are the scammer 18:11 < bridge> 😬 18:12 < bridge> :justatest: 18:14 < bridge> ok maybe that's not waht i wanted :justatest: 18:28 < bridge> hi, I found a server for you with a nice girl with perfect nudes. join now ❤️ 18:28 < bridge> https://discord.gg/sexyhot 18:28 < bridge> damn the spam lately is big 18:29 < bridge> @jupeyy_keks il lget it by 25 march 18:30 < bridge> AMD Ryzen 9 7900X3D 4.4GHz/5.6GHz 18:30 < bridge> when will you get mine again? 18:30 < bridge> xd 18:30 < bridge> why not 16 cores? 18:30 < bridge> is it so much more expensive? 18:31 < bridge> i got it for 459 18:31 < bridge> € 18:31 < bridge> the 7950x3d is 656 18:32 < bridge> u live in EU bro 18:32 < bridge> https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-7950X3D-16x-4-20GHz-So-AM5-WOF_1481122.html 18:32 < bridge> 569 18:32 < bridge> its ok 18:32 < bridge> its already overkill xd 18:33 < bridge> 12 cores 24 threads at 5.6ghz 18:33 < bridge> @jupeyy_keks do u know if i can overclock it so it uses 6000mhz ram 18:33 < bridge> it says it uses 5200 by def 18:47 < bridge> depends on mb 18:47 < bridge> x670 18:47 < bridge> ye it allows it 18:47 < bridge> got the good chipset xd 18:48 < bridge> yeah 18:48 < bridge> it supports up to 8000 18:48 < bridge> with XMP 18:48 < bridge> u have to manually enable it btw 18:48 < bridge> damn 18:48 < bridge> i got 6000mhz ram 18:48 < bridge> Corsair Vengeance RGB DDR5 6000MHz PC5-48000 32GB 2x16GB CL36 Negra 18:49 < bridge> i hear cl32 is best but its double price 18:49 < bridge> yep 18:49 < bridge> but with your cache size 18:49 < bridge> it probably wont matter too much xd 18:49 < bridge> xd 19:06 < bridge> 50$ from steam 19:06 < bridge> [steamcommunity.com/gift/765615931809238015](https://qptr.ru/5Izd) 19:07 < bridge> @Discord Mod ban ban ban 19:08 < bridge> Thanks 21:09 < bridge> https://www.youtube.com/watch?v=UDGdPE_C9u8 :justatest: 21:10 < bridge> tff 21:39 < bridge> ChillerDragon: I assume you know https://sdomi.pl/ already? 21:56 < bridge> ryo dont u have 5th gen ryzen already 22:28 < bridge> i got 5800x 22:28 < bridge> u just buying every new gen or what 22:29 < bridge> which is a good cpu 22:29 < bridge> but yeah 22:29 < bridge> im addicted to cpus i guess 22:29 < bridge> 2024 problems 22:29 < bridge> how come i only have the third fastest processor here now 22:29 < bridge> no fair 22:29 < bridge> which u got? 22:29 < bridge> 7900X 22:29 < bridge> well technically i dont have it till 25 22:29 < bridge> i think 7900x3d is faster by a small margin 22:30 < bridge> but i heard the cache helps massively in some use cases 22:30 < bridge> yes 22:30 < bridge> u have my cpu on steroids 22:30 < bridge> will have at least 22:30 < bridge> for example 7900x3d works a lot better for factorio 22:30 < bridge> factorio is limited by cache misses xd 22:33 < bridge> @mpft have u found a pcie 5 m2? 22:33 < bridge> crucial t700 22:33 < bridge> $$ but fast 22:33 < bridge> ye xd 22:33 < bridge> how fast is ram? 22:33 < bridge> how fast is that m2 22:33 < bridge> i have 6000 22:33 < bridge> i wonder if drivers are getting near 22:33 < bridge> m.2 is 12,400MBps read 22:33 < bridge> i wonder if drives are getting near 22:33 < bridge> idk about raw bandwidth on ram 22:34 < bridge> probably tremendous 22:34 < bridge> DDR5 also has higher frequencies than DDR4, up to 8GT/s which translates into 64 GB/s (8000 MT/s * 64-bit width / 8 bits/byte = 64 GB/s) of bandwidth per DIMM. 22:34 < bridge> ok not close yet 22:34 < bridge> yea XD 22:34 < bridge> but its not that far anymore 22:34 < bridge> gpus are past there tho 22:34 < bridge> 4090 is ~1TBps iirc 22:34 < bridge> 912GB/s 22:34 < bridge> Running on the latest NVIDIA Ampere architecture, the 3080 Ti GPU comes with 12GB of GDDR6X memory and a 384-bit memory interface for 912GB/s of memory bandwidth. 22:34 < bridge> for the 3080 22:35 < bridge> yea 22:35 < bridge> but gpu memory is more limited 22:35 < bridge> in what u can use it for 22:35 < bridge> unfair 22:35 < bridge> yea 22:35 < bridge> we need to use the gpu for more than graphics and fodder 22:36 < bridge> there are some desktop tasks that the gpu would probably be really good for 22:36 < bridge> that they aren't being utilized for 22:36 < bridge> like archive compression 22:36 < bridge> like archive de/compression 22:38 < bridge> @mpft do u know if browsers already use available gpu for audio decoding whathever? 22:38 < bridge> or maybe its only encoding 22:38 < bridge> that's not a thing atm 22:38 < bridge> my mpv uses gpu 22:38 < bridge> gpus as far as audio goes are just usb or spdif equivalent input and output devices exposed by the driver 22:38 < bridge> ``` 22:38 < bridge> ❯ mpv \[SubsPlease\]\ Sousou\ no\ Frieren\ -\ 25\ \(1080p\)\ \[7423AE35\].mkv 22:38 < bridge> (+) Video --vid=1 (*) (h264 1920x1080 23.976fps) 22:38 < bridge> (+) Audio --aid=1 --alang=jpn (*) (aac 2ch 44100Hz) 22:38 < bridge> (+) Subs --sid=1 --slang=eng (*) 'English subs' (ass) 22:38 < bridge> Using hardware decoding (nvdec). 22:38 < bridge> AO: [pipewire] 44100Hz stereo 2ch floatp 22:38 < bridge> VO: [gpu] 1920x1080 cuda[nv12] 22:39 < bridge> Exiting... (Quit) 22:39 < bridge> ``` 22:39 < bridge> they don't rly have audio encode or decode yet 22:39 < bridge> nvdec is video decode 22:39 < bridge> they might have added something that i dont know about 22:39 < bridge> someone would need to write nvidia aac encoder 22:40 < bridge> btw is there a way to reset the clipboard colors to default 22:40 < bridge> clipboard colorsa 22:42 < bridge> yes its a ddnet feature 22:42 < bridge> ya idk 22:42 < bridge> sorry 22:42 < bridge> what are clipboard color? 22:42 < bridge> is it an editor thing 22:42 < bridge> like theres colors on the top right of the editor 22:42 < bridge> what are clipboard colors? 22:43 < bridge> restarting the client seems to reset them @cyberfighter 22:44 < bridge> thats too much just to reset them 22:44 < bridge> imo 22:44 < bridge> why do you want to reset them in the first place? ^^ 22:44 < bridge> have u tried looking for color in f1 22:45 < bridge> u can also flush ur entire config if u want 22:45 < bridge> it doesn't seem to be persisted anyway 22:45 < bridge> oh i see 23:12 < bridge> i called clipboard because of this btw 23:12 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1213609916716027976/image.png?ex=65f6194f&is=65e3a44f&hm=7d7aa40e2ea84007386e0561a58412b37162d64d29aad66fde9e7dea317b9d9b& 23:22 < bridge> ah 🙂 23:22 < bridge> it was a new feature I didn't know yet 23:31 < bridge> ChillerDragon: continue checking out matrix DMs, not sure if you need a reminder for this