02:11 < bridge> <-StormAx> any devs, i know furo gonna blame me, but how can i stop looping this mf? 02:11 < bridge> <-StormAx> https://cdn.discordapp.com/attachments/293493549758939136/1191911600546906312/image.png?ex=65a7292e&is=6594b42e&hm=abe60aa8892a3560a4ba77913913002a5c2b85a81fdaec45c9d23751dcb3d135& 02:11 < bridge> <-StormAx> ```cpp 02:11 < bridge> <-StormAx> 02:11 < bridge> <-StormAx> bool IsParsed = false; 02:11 < bridge> <-StormAx> const char *pname = Client()->PlayerName(); 02:11 < bridge> <-StormAx> if(!IsParsed) 02:11 < bridge> <-StormAx> { 02:11 < bridge> <-StormAx> 02:11 < bridge> <-StormAx> m_pClient->m_Stats.FetchPlayer(&s_StatsPlayer, pname); 02:11 < bridge> <-StormAx> 02:11 < bridge> <-StormAx> 02:11 < bridge> <-StormAx> 02:11 < bridge> <-StormAx> if(!s_StatsPlayer.m_pGetStatsDDStats) 02:11 < bridge> <-StormAx> return; 02:11 < bridge> <-StormAx> 02:11 < bridge> <-StormAx> if(s_StatsPlayer.m_pGetStatsDDStats->State() == s_StatsPlayer.m_pGetStatsDDStats->STATE_PENDING) 02:11 < bridge> <-StormAx> return; 02:11 < bridge> <-StormAx> 02:11 < bridge> <-StormAx> if(!s_StatsPlayer.StatsParsed && s_StatsPlayer.m_pGetStatsDDStats->State() == s_StatsPlayer.m_pGetStatsDDStats->STATE_DONE) 02:11 < bridge> <-StormAx> return m_pClient->m_Stats.ParseJSON(&s_StatsPlayer); IsParsed = true; 02:12 < bridge> <-StormAx> } 02:12 < bridge> <-StormAx> ``` 02:32 < bridge> you’re returning before you set IsParsed to true 02:43 < bridge> the `return m_pClient->m_Stats.ParseJSON(&s_StatsPlayer);` does what it should, return!, playing `isParsed = true` after that has no effect 02:43 < bridge> the `return m_pClient->m_Stats.ParseJSON(&s_StatsPlayer);` does what it should, return!, placing `isParsed = true` after that has no effect 02:44 < bridge> the `return m_pClient->m_Stats.ParseJSON(&s_StatsPlayer);` does what it should, return!, placing `isParsed = true` after that has no effect (yes Ewan you just said that but i know Stormi, he needs full explanations!) ❤️ 02:47 < bridge> the `return m_pClient->m_Stats.ParseJSON(&s_StatsPlayer);` does what it should, return!, placing `isParsed = true` after that has no effect 03:13 < bridge> this is not python, use {} for multi line statements after if 03:13 < bridge> btw, i don't see any loop in there 04:42 < bridge> pls use auto format 05:22 < bridge> how long until a ddnet server fix until its live in the servers? 05:28 < bridge> cause I still cant see finish messages 05:45 < bridge> how long until a ddnet server fix is live in the servers? 07:41 < bridge> There is no fixed protocol. Its whenever deen restarts the servers. You can speed it up by pinging deen to do so. Which finish messages do you mean by the way? For 0.7 (they for sure should be rolled out) or the new ones for 0.6 ddnet protocol? 07:53 < ChillerDragon> hmm fudgy so even the ddnet version works for me on ger and usa servers already so it should have worked for you too ._. 07:53 < ChillerDragon> https://zillyhuhn.com/cs/.1704264765.png 07:53 < ChillerDragon> my hax client just doesnt support the texture yet 07:56 < bridge> is this efficient ? located in ddrace.cpp 07:56 < bridge> ```cpp 07:56 < bridge> int m_TileIndex = GameServer()->Collision()->GetTileIndex(MapIndex); 07:56 < bridge> int m_TileFIndex = GameServer()->Collision()->GetFTileIndex(MapIndex); 07:56 < bridge> 07:56 < bridge> //Sensitivity 07:56 < bridge> int S1 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x + pChr->GetProximityRadius() / 3.f, pChr->GetPos().y - pChr->GetProximityRadius() / 3.f)); 07:56 < bridge> int S2 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x + pChr->GetProximityRadius() / 3.f, pChr->GetPos().y + pChr->GetProximityRadius() / 3.f)); 07:56 < bridge> int S3 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x - pChr->GetProximityRadius() / 3.f, pChr->GetPos().y - pChr->GetProximityRadius() / 3.f)); 07:56 < bridge> int S4 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x - pChr->GetProximityRadius() / 3.f, pChr->GetPos().y + pChr->GetProximityRadius() / 3.f)); 07:56 < bridge> int Tile1 = GameServer()->Collision()->GetTileIndex(S1); 07:56 < bridge> int Tile2 = GameServer()->Collision()->GetTileIndex(S2); 07:56 < bridge> int Tile3 = GameServer()->Collision()->GetTileIndex(S3); 07:56 < bridge> int Tile4 = GameServer()->Collision()->GetTileIndex(S4); 07:56 < bridge> int FTile1 = GameServer()->Collision()->GetFTileIndex(S1); 07:56 < bridge> int FTile2 = GameServer()->Collision()->GetFTileIndex(S2); 07:56 < bridge> int FTile3 = GameServer()->Collision()->GetFTileIndex(S3); 07:56 < bridge> int FTile4 = GameServer()->Collision()->GetFTileIndex(S4); 07:56 < bridge> ``` 07:56 < bridge> is this efficient ? located in ddrace.cpp 07:56 < bridge> ```cpp 07:56 < bridge> int m_TileIndex = GameServer()->Collision()->GetTileIndex(MapIndex); 07:56 < bridge> int m_TileFIndex = GameServer()->Collision()->GetFTileIndex(MapIndex); 07:57 < bridge> 07:57 < bridge> //Sensitivity 07:57 < bridge> int S1 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x + pChr->GetProximityRadius() / 3.f, pChr->GetPos().y - pChr->GetProximityRadius() / 3.f)); 07:57 < bridge> int S2 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x + pChr->GetProximityRadius() / 3.f, pChr->GetPos().y + pChr->GetProximityRadius() / 3.f)); 07:57 < bridge> int S3 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x - pChr->GetProximityRadius() / 3.f, pChr->GetPos().y - pChr->GetProximityRadius() / 3.f)); 07:57 < bridge> int S4 = GameServer()->Collision()->GetPureMapIndex(vec2(pChr->GetPos().x - pChr->GetProximityRadius() / 3.f, pChr->GetPos().y + pChr->GetProximityRadius() / 3.f)); 07:57 < bridge> int Tile1 = GameServer()->Collision()->GetTileIndex(S1); 07:57 < bridge> int Tile2 = GameServer()->Collision()->GetTileIndex(S2); 07:57 < bridge> int Tile3 = GameServer()->Collision()->GetTileIndex(S3); 07:57 < bridge> int Tile4 = GameServer()->Collision()->GetTileIndex(S4); 07:57 < bridge> int FTile1 = GameServer()->Collision()->GetFTileIndex(S1); 07:57 < bridge> int FTile2 = GameServer()->Collision()->GetFTileIndex(S2); 07:57 < bridge> int FTile3 = GameServer()->Collision()->GetFTileIndex(S3); 07:57 < bridge> int FTile4 = GameServer()->Collision()->GetFTileIndex(S4); 07:57 < bridge> ``` 07:57 < bridge> every time a player get contact with a tile it makes so many ints 07:58 < ws-client> making ints is cheap 07:58 < ws-client> its more the method call where the int value comes from but i think those are also only index lookups 07:58 < bridge> isn't it more efficient to make all of the ints in character.h and valuate them here ? 07:59 < ChillerDragon> they are on the stack either way 07:59 < ChillerDragon> its not allocating any memory 07:59 < ChillerDragon> on the heap 07:59 < bridge> hum 08:00 < ChillerDragon> So the GetPureMapIndex is basically taking a pos and then doing some simple math like multiply by width and height and offset etc. Thats a fast operation without any iteration. 08:00 < ChillerDragon> Then GetTileIndex() is just a array index ``return m_pTiles[Index].m_Index;`` 08:04 < bridge> Where the ints are stored has very little to do with the cost of that operation. "Creating an int" has no inherent runtime cost unless it's getting allocated dynamically 08:04 < bridge> i see 08:12 < bridge> what git commands you guys use in your every day ? 08:16 < bridge> what git commands you guys use in your every day of development ? 08:23 < ChillerDragon> @mods bro, checkout this user: piDOR on ddnet copy love box 08:23 < ChillerDragon> rus blocker #1 08:23 < chillerbot> https://github.com/ddnet/ddnet/issues/1 08:24 < ChillerDragon> nvm he left 08:24 < ChillerDragon> omg chilerbot u stoopid 08:25 < ChillerDragon> @mamad_melanin ``git add .`` ``git commit`` ``git push`` ``git commit --amend`` ``git push -f`` and a few more that i frequently use but those are my daily musts xd 08:27 < ChillerDragon> oh and omg ``git status`` 08:27 < ChillerDragon> and ``git diff`` and ``git diff --cached`` ``git log`` i use those bithses daily for sure 08:28 < bridge> `fetch`, `push`, `rebase`, `reset`, `status`, `stash` 08:28 < bridge> Also `diff` sometimes, and very rarely `cherry-pick` 08:28 < ChillerDragon> oh true ``git pull`` 08:28 < ChillerDragon> also a classic 08:29 < bridge> git help 08:29 < ChillerDragon> xd 08:29 < bridge> :KEKSad: 08:29 < ChillerDragon> i also reset, stash, cherry-pick, rebase, checkout quite often but its not guranteed to happen every day 08:29 < ChillerDragon> ``git add . && git reset --hard`` is bae 08:31 < bridge> thank you ❤️ 08:33 < ChillerDragon> ayo lerato lately i have been using cherry-pick to replace stash 08:33 < ChillerDragon> my stash stacks became so bloated idk wat is wat xd 08:34 < ChillerDragon> so i commited on branches instead and then applied only the changes without the commit with ``git cherry-pick -n commithash`` 08:36 < ChillerDragon> https://zillyhuhn.com/cs/.1704267381.png 08:36 < ChillerDragon> but im clearly git nob 08:36 < ChillerDragon> i need to create 24 backup branches to feel safe xd 08:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192010376167051304/GC2Qu8jWcAAi4YW.png?ex=65a7852c&is=6595102c&hm=2cc1b4bce70c71575ca9e4f34d02715a36d582008e3e0897540031c9370130c7& 09:41 < bridge> damn, looks like i really am a nerd 09:41 < bridge> aueigorifugu good morning 🌞 clan 09:49 < bridge> no u 10:08 < bridge> What's html doing there :justatest: 10:10 < ChillerDragon> HtMl iS nOt a ProGAMING lanGuage 10:11 < bridge> `git reset --hard HEAD` 10:11 < ChillerDragon> heinrich will totally respond with "--hard is dangerous" when he reads the backlog in 6 hours axaxaxax 10:11 < bridge> I always use hard 😏 10:12 < ChillerDragon> i like it hard too 10:12 < ChillerDragon> 😏 10:12 < ChillerDragon> hard and with force 10:12 < bridge> Oh, and also `git push origin master --force` 10:12 < ChillerDragon> yes 10:12 < bridge> hell yeah 10:12 < ChillerDragon> classic 10:13 < ChillerDragon> we are vibin 10:13 < ChillerDragon> also call it master instead of main because edgy 10:13 < bridge> Some of my repos have master 10:13 < bridge> Some main 10:13 < ChillerDragon> i set my github default to master xd 10:13 < ChillerDragon> and git too 10:14 < ChillerDragon> masterrace 10:14 < ChillerDragon> ok enough irc stalling 10:14 < bridge> Did u try something with passwords? 10:14 < ChillerDragon> no time for such trols 10:14 < ChillerDragon> i just starred 10:14 < ChillerDragon> i will watch the repo too 10:14 < ChillerDragon> in case u accidentally push secrets i want an email 10:15 < ChillerDragon> also have auto mirroring active 10:15 < ChillerDragon> in case you need an backup ;) 10:15 < bridge> milkeeycat@gmail.com, here u go 10:15 < ChillerDragon> leak 10:15 < ChillerDragon> enjoy spam from irc log scrapers 10:15 < ChillerDragon> axaxaxax 10:15 < ChillerDragon> ok fr now i close irc ffs 10:49 < bridge> Hi 10:49 < bridge> I also use git hard reset. Easiest, and yet I never fckd it up xd 10:51 < bridge> Chiller leak 10:51 < bridge> git stash list 11:01 < bridge> git commit -m "FUCK" 11:02 < bridge> `git commit -m "FUCK"` 11:23 < ChillerDragon> https://zillyhuhn.com/cs/.1704277415.png 11:23 < ChillerDragon> idk wat any of those are 11:24 < ChillerDragon> @blaiszephyr beauty of bash is that everything is a string so you can just do ``git commit -m FUCK`` 11:28 < ChillerDragon> omagawd snap deltas so complicated 11:32 < bridge> At least i think i understood the purpose of a alt snap now. There is the raw snap the client stores for future deltas. And then there is the alt snap which the client might modify due to invalid items. 11:40 < bridge> Ah, that's the alt for xd 11:49 < bridge> I think 11:50 < bridge> Zwelf probably knows everything about them ^^ 11:50 < bridge> He mentioned the first part once 11:53 < bridge> BTW does the first part even 100% work? 11:53 < bridge> I guess one constraint for it to work is that there is a single ordered data stream for snapshots and acks 11:53 < bridge> Right? 11:53 < bridge> Else the server and client cannot really proof in finite time if they actually received a snapshot for Delta 11:55 < bridge> Tw network code is a mystery to me.. I don't understand why it works xd 11:55 < bridge> But I sometimes think if it's broken. Which is only noticeable when u have huge lags 11:55 < bridge> But I sometimes wonder if it's broken. Which is only noticeable when u have huge lags 12:01 < bridge> @zwelf2 light us up: 12:01 < bridge> 12:01 < bridge> Assuming there is only one "raw"-snapshot that is used for delta comparision. 12:01 < bridge> 12:01 < bridge> How can the client and server be sure they talk about the same raw snapshot? 12:01 < bridge> 12:01 < bridge> - if raw-snap is #1 and snap #2 comes in, and the client tells the server it uses snap #2 now, if that packet is lost, server still assumes it must be #1. even if the snap-ack is resent. during that time how does the client proceed? 12:01 < bridge> 12:01 < bridge> it can't wait for the server to also ack the snap-ack. then we have a infinite cycle. 12:01 < bridge> there are so many questions in my head. if tw network code is so failsafe & well written gg 12:05 < bridge> i also wonder how much traffic is saved by the delta comparision. 12:05 < bridge> based on that i'd decide if it's even worth it. 12:05 < bridge> Also i wonder if e.g. other delta algos would suite tw better 12:05 < bridge> so many questions 12:06 < bridge> @zwelf2 light us up: 12:06 < bridge> 12:06 < bridge> Assuming there is only one "raw"-snapshot that is used for delta comparision. 12:06 < bridge> 12:06 < bridge> How can the client and server be sure they talk about the same raw snapshot? 12:06 < bridge> 12:06 < bridge> - if raw-snap is #1 and snap #2 comes in, and the client tells the server it uses snap #2 now, if that packet is lost, server still assumes it must be #1. even if the snap-ack is resent. during that time how does the client proceed? 12:06 < bridge> 12:06 < bridge> it can't wait for the server to also ack the snap-ack. then we have a infinite cycle.=> it must use multiple raw snaps to be correct (?) 12:06 < bridge> chillerdragon: when implement "edit" for irc 12:24 < bridge> @ryozuki please add proper static asserts to rust 🥹 12:26 < bridge> Macros have no kind of type information and checking e.g. a const of a trait can't be done at compile time directly. Currently the only way I know is to let usize overflow in a const expression xD 12:52 < bridge> xd 13:00 < bridge> `std::unique_ptr test = std::make_unique(10);`. deleting is handled automatically 13:03 < bridge> there are multiple raw snaps stored on the client 13:04 < bridge> @[matrix]: @heinrich5991 @murpi @deen @snailx3 @learath2 @robyt3 @pipou_tw Hello i would like to report the moderator ReD he has banned me ip (213.31.170.238) for until january 10th for ban evasion when im wasnt banned and i was 1 hour into a race with my fat friend Deamons 13:04 < bridge> don't mass-ping 13:04 < bridge> thanks 13:04 < bridge> what why are you deleting my support messages 13:05 < bridge> stop 13:05 < bridge> the range "last snapshot that was used as a delta" to "newest snapshot that I received" is stored by the client 13:05 < bridge> "newest snapshot that I received" is sent to the server 13:05 < bridge> im trying to report abusing staff who has banned me 13:05 < bridge> kinda the wrong channel 13:06 < bridge> but you also mass-pinged 13:06 < bridge> what channel do i speak to admins on 13:06 < bridge> developer has all the admins 13:06 < bridge> send me an email: heinrich5991@gmail.com 13:07 < bridge> Thanks for your ticket, we will fix this awful injustice 13:07 < bridge> i dont know how to send email 13:07 < bridge> i use this chat 13:07 < bridge> you could also use discord, but you might be banned here 13:07 < bridge> not sure 13:08 < bridge> yes the discord owner "jao" does not like me 13:08 < bridge> banned for complaining? :justatest: 13:08 < bridge> he ban me forever for no reaosn 13:08 < bridge> send me an email. thanks 13:08 < bridge> but my current problem is ReD has banned me for evasion until 10th january when i was 1 hour into map and i wasnt evading 13:09 < bridge> he has banned my ip 213.31.170.238 13:09 < bridge> kindly unban me and remove ReDs account 13:10 < bridge> OK then it makes sense 13:11 < bridge> (look for `PurgeUntil` in src/engine/client/client.cpp) 13:12 < bridge> And can u also rate the effective traffic saving? 13:14 < bridge> the traffic savings by using deltas instead of sending the whole snap? 13:15 < bridge> Yes 13:16 < bridge> It kinda must depent on the ping and other factors 13:17 < bridge> it means we can just dump rarely changing data into the snap 13:17 < bridge> e.g. all the player data and metadata about the game 13:17 < bridge> and it only consumes traffic at the start of the session and then only when it changes 13:18 < bridge> vs sending game/player data every tick 13:18 < bridge> Yes but how effective is it actually 13:19 < bridge> Player data could be moved out, so id not count that 13:19 < bridge> player data could be moved out, but then you're implementing your own diffing algorithm for player data 13:19 < bridge> which the snap already is 13:20 < bridge> OK but I'm interested how effective it is for the more often changing stuff 13:21 < bridge> I don't know. I'd need to modify the libtw2 code a little to sample it, I guess 13:22 < bridge> I was always surprised that standing still on man server still creates significant enough traffic 13:22 < bridge> Lan 13:34 < bridge> Windows not saving the command history between sessions is absolutely infuriating infuriating 13:34 < bridge> Windows not saving the command history between sessions is absolutely infuriating 13:36 < bridge> Windows's cmd line tool not saving the command history between sessions is absolutely infuriating 13:48 < bridge> https://www.vim.org/vim-9.1-released.php 13:48 < bridge> > This release is dedicated to Bram Moolenaar, Vims lead developer for more than 30 years, who passed away half a year ago. The Vim project wouldn't exist without his work!. 14:06 < bridge> https://github.com/kyren/piccolo 14:08 < bridge> Do u remember her? I told you about here before xdd 14:08 < bridge> She also maintainer of the hashlink create I use 14:09 < bridge> ah xd 14:10 < bridge> https://github.com/kyren/turbulence 14:10 < bridge> Lead Dev of starbound or smth 14:11 < bridge> epyc 14:12 < bridge> https://github.com/kyren/webrtc-unreliable 14:12 < bridge> sounds interesting for ddnet 14:18 < bridge> Go implement 14:19 < bridge> easier to implement after https://github.com/ddnet/ddnet/pull/6961 14:20 < bridge> because transports become abstracted with it 14:20 < bridge> my next plan after quic would be steam networking, so we could try getting ddos-proof servers with steam 14:25 < bridge> Sounds interesting 14:25 < bridge> You should join team zwelf & patiga 14:56 < bridge> Yeah got it, thanks :) 14:56 < bridge> Also read that smart pointers inside std containers (like vectors) are not good practice - and that's what I need :/ 14:56 < bridge> But works fine deleting in the base class! 14:56 < bridge> 14:56 < bridge> However, just wanted to ask another question: 14:56 < bridge> ```cpp 14:56 < bridge> struct Base { 14:56 < bridge> virtual int number() = 0; 14:56 < bridge> virtual ~Base() = default; 14:56 < bridge> }; 14:56 < bridge> 14:56 < bridge> struct Derived : public Base { 14:56 < bridge> int number() override { 14:56 < bridge> return 10; 14:56 < bridge> } 14:56 < bridge> }; 14:56 < bridge> 14:56 < bridge> int main() { 14:56 < bridge> vector x; 14:56 < bridge> x.emplace_back(new Derived); 14:56 < bridge> 14:56 < bridge> cout << x.size() << " -> " << x[0] << "(" << x[0]->number() << ")" << endl; 14:56 < bridge> 14:56 < bridge> for (const auto &item: x) { 14:56 < bridge> delete item; 14:56 < bridge> } 14:56 < bridge> } 14:56 < bridge> ``` 14:57 < bridge> 14:57 < bridge> There are more structs like `Derived` which inherit `Base`. What would be the best way to clone `vector x`? I need the `Base *` values inside also to be deep copied. Played around with copy/constructors but that didn't work out since the generic is a pointer I think. 14:57 < bridge> Do I need to implement a `virtual clone()` method manually in the base class and overwrite it in the subs, then call them in a loop to fill a new vector? 14:57 < bridge> where did you read that smart pointers inside std containers aren't good practice? 14:57 < bridge> maybe its more that u should simply give ownership to the vec? 14:57 < bridge> but idk 14:57 < bridge> I read they could leak when `emplace_back` fails for example 14:58 < bridge> in that case, your example would also leak, I think 14:58 < bridge> https://stackoverflow.com/questions/3283778/why-can-i-not-push-back-a-unique-ptr-into-a-vector 14:58 < bridge> Comments in accepted answer 14:58 < bridge> the comments in the accepted answer tell you to use `std::unique_ptr` over raw pointers, I think 14:59 < bridge> because raw pointers might leak 14:59 < bridge> wait I had another source 15:00 < bridge> bonus question: no, C++ will stay relevant for ddnet. barely anything is rust yet 15:01 < bridge> yes, `virtual std::unique_ptr clone() const` is the only way I can think of 15:01 < bridge> I want to know why you need polymorphism though @stnwtr 15:01 < bridge> Hm, I can’t imagine unique_ptrs leaking on throw. If emplace fails it probably just results in the old unique_ptr keeping the ownership and if that happens to be a temporary it would then get destroyed properly 15:02 < bridge> I am searching for the other posts I read ... maybe I misunderstood because coming from Java, C++ is super hard haha 15:02 < bridge> dont try to do java in c++ 15:02 < bridge> i am trying 15:03 < bridge> well, I had 2 years rust in between ... and I am "unlearning" the java way 15:03 < bridge> a common problem is not adapting to the language idioms and trying to force one from another lang 15:03 < bridge> its a common problem in rust learners too :d 15:04 < bridge> It’s a massive problem in Rust 15:04 < bridge> Because my teacher wants me to do so 15:04 < bridge> Having a base class building and some subclasses like "SolarPowerPlant", "GiantHouse" and so on 15:04 < bridge> which consists of Materials (baseclass) like Wood, Metal, ... 15:04 < bridge> 15:04 < bridge> And I need vectors (or arrays) of the base* 15:04 < bridge> but well c++ kinda has classes like java 15:04 < bridge> but with pointers xD 15:05 < bridge> Because Rust is just absurd compared to other languages. No other language really has such strictly enforced ownership hierarchies and lifetime restrictions 15:05 < bridge> ah typical teacher teacing OOP 15:05 < bridge> blegh 15:05 < bridge> why ppl teach OOP and not useful stuff 15:06 < bridge> How would you do this without oop? 15:06 < bridge> Enums would be nice imo, but well, school 15:06 < bridge> @stnwtr btw did ur teacher ever say the phrase "composition over inheritance"? 15:06 < bridge> Not yet 15:06 < bridge> And no 15:06 < bridge> ask him 15:06 < bridge> about it 15:07 < bridge> Almost forgot to thank you :) 15:07 < bridge> Well, oop is useful when you have shared behaviour. What sort of behaviour would a `Wood` class even have? 15:07 < bridge> I should use `unique_ptr` everywhere I can? 15:07 < bridge> > To favor composition over inheritance is a design principle that gives the design higher flexibility. It is more natural to build business-domain classes out of various components than trying to find commonality between them and creating a family tree. For example, an accelerator pedal and a steering wheel share very few common traits, yet both are vital components in a car. What they can do and how they can be used to benefit the car are easily 15:07 < bridge> > 15:08 < bridge> > Initial design is simplified by identifying system object behaviors in separate interfaces instead of creating a hierarchical relationship to distribute behaviors among business-domain classes via inheritance. This approach more easily accommodates future requirements changes that would otherwise require a complete restructuring of business-domain classes in the inheritance model. Additionally, it avoids problems often associated with relatively 15:08 < bridge> Nothing, thats so stupid. Just a single variable, the price. 15:08 < bridge> In part 1 of the exercise we used an enum tho. 15:08 < bridge> Now we need a class and are not even allowed to use a static variable for the price 15:08 < bridge> School is trolling us, right? 15:08 < bridge> Smart pointers are indeed the way in modern C++. You want to think in terms of ownerships 15:09 < bridge> gimme that sweet static void abstract MainBuilderProducer 15:09 < bridge> gimme that sweet static void abstract MainBuilderProducerFactory 15:09 < bridge> in java its where u can manage to put 100 prefixes before the function name 15:09 < bridge> So I should avoid raw pointers as good as possible 15:09 < bridge> public final static const void urmom 15:10 < bridge> (sry i forgot a lot of java kek) 15:10 < bridge> good! 15:10 < bridge> u know 15:10 < bridge> the next java is called dart 15:10 < bridge> im using it for flutter apps 15:10 < bridge> But then `Wood` being the baseclass of `WoodHouse` wouldn’t really make much sense, why would you ever want `WoodHouse` to inherit the price of wood? So that’s kinda why this is not the greatest use of OOP 15:10 < bridge> https://dart.dev/ 15:10 < bridge> i though its c# :justatest: 15:10 < bridge> Its not, sorry 15:11 < bridge> no 15:11 < bridge> dart is like go for making apps 15:11 < bridge> stupidly simple and focused on being good at making apps 15:11 < bridge> Baseclasses are `Material` (for Wood, Metal, Plastic, ...) and `Building` for a few more where Building has a `vector` 15:11 < bridge> yes 15:11 < bridge> Baseclasses are `Material` (for Wood, Metal, Plastic, ...) and `Building` for a few more (like SolarPowerPlant) where Building has a `vector` 15:11 < bridge> only if u need a pointer 15:11 < bridge> shouldnt u favor references 15:12 < bridge> if you need ownership 15:12 < bridge> yes 15:12 < bridge> i would even favor std::option> 15:12 < bridge> but thats me being rusty 15:12 < bridge> the OOP examples by your teacher seem sketchy. just follow the class and forget the OOP practices later 15:12 < bridge> altho idk if option is zero cost 15:12 < bridge> I used option, expected and tuple for a few reasonable things, my teacher called it overengineered :( 15:12 < bridge> I see, well that sounds saner, anyway it’s just a conceptual exercise 15:13 < bridge> it's not zero-cost 15:13 < bridge> Tell him you find his solution underengineered 15:13 < bridge> not even for a reference? 15:13 < bridge> rip c++ 15:13 < bridge> is `unique_ptr` zero-cost or are there some bytes overhead? 15:13 < bridge> for shared_ptr there is a counter 15:13 < bridge> but unique_ptr? 15:13 < bridge> it's zero-cost in terms of space 15:14 < bridge> Alllmost zero runtime cost too 15:14 < bridge> ye 15:14 < bridge> and a huge +++ in terms of memory management 15:14 < bridge> https://www.gamingonlinux.com/2024/01/linux-hits-nearly-4-desktop-user-share-on-statcounter/ 15:14 < bridge> YEAR OF LINUX DESKTOP!!! 15:15 < bridge> unless you are coding for a very very very weak mcu the runtime cost won’t ever be something you think about 15:15 < bridge> tldr; 15:15 < bridge> a lot of things i am learning in software engineering classes are outdated and bad practice? 15:15 < bridge> probably 15:16 < bridge> unclear. software engineering is probably never outdated. coding classes more so 15:16 < bridge> unclear. software engineering is probably never outdated. classes where you learn to code more so 15:16 < bridge> I found courses range from wildly outdated to slightly outdated and the practices range from very bad to meh 15:17 < bridge> We'll do server side web services using Java Server Pages next term .... 15:17 < bridge> Oh yeah, the actual meta software engineering part is never really out of date 15:17 < bridge> Now that’s one course I’d just delete from my brain after passing 15:18 < bridge> done already 15:18 < bridge> r u doing uni? 15:18 < bridge> sadly, yes 15:18 < bridge> Unless you aspire to work at airline IT. They love their java legacy stuff 15:18 < bridge> prof about 600 years old 15:18 < bridge> in my uni mfs teach nothing :justatest: 15:18 < bridge> in my uni mfs teach us nothing :justatest: 15:18 < bridge> i did no uni :justatest: 15:19 < bridge> good! 15:19 < bridge> if i wasnt in uni id probably go on the war :justatest: 15:19 < bridge> The most out of date course I had was computer architecture, but I do kinda understand that one. I doubt you can teach anything about any modern architecture to any bachelor student 15:20 < bridge> I liked architecture a lot. Learning about MOSFET, MUX, Latches, Boolean Algebra and all that stuff. That was fun 15:20 < bridge> is it just me or it looks like cum(new wallpapers btw) :greenthing: 15:20 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192110162622812250/image.png?ex=65a7e21b&is=65956d1b&hm=794bd2331701ca05b67de25c47f188371351043c49df615acd01b8e88ec3ddd4& 15:20 < bridge> btw von neumann is a genius among geniuses 15:20 < bridge> the guy did everything 15:20 < bridge> And the RISC-V, but term ended too soon 15:20 < bridge> I’m a sucker for old computer architecture. Back then everything made so much sense 15:20 < bridge> > ohn von Neumann (/vɒn ˈnɔɪmən/ von NOY-mən; Hungarian: Neumann János Lajos [ˈnɒjmɒn ˈjaːnoʃ ˈlɒjoʃ]; December 28, 1903 – February 8, 1957) was a Hungarian-American mathematician, physicist, computer scientist, engineer and polymath. He had perhaps the widest coverage of any mathematician of his time,[9] integrating pure and applied sciences and making major contributions to many fields, including mathematics, physics, economics, 15:21 < bridge> > John von Neumann (/vɒn ˈnɔɪmən/ von NOY-mən; Hungarian: Neumann János Lajos [ˈnɒjmɒn ˈjaːnoʃ ˈlɒjoʃ]; December 28, 1903 – February 8, 1957) was a Hungarian-American mathematician, physicist, computer scientist, engineer and polymath. He had perhaps the widest coverage of any mathematician of his time,[9] integrating pure and applied sciences and making major contributions to many fields, including mathematics, physics, economics 15:21 < bridge> Pipelines were nice and short, caches MSI 15:21 < bridge> 3rd term out of 7 now and I want to give up because its either boring or too much 15:22 < bridge> @stnwtr i recommend this book, its post uni stuff tho https://en.algorithmica.org/hpc/ 15:22 < bridge> but its rly rly interesting 15:22 < bridge> Yeah, truly a genius 15:24 < bridge> Also got a few recommendations for books about building compilers? Need some for a presentation / paper I need to write 15:24 < bridge> Is it 4 terms a year? 15:24 < bridge> thanks 15:24 < bridge> 3 1/2 years 15:24 < bridge> 1 year = 2 terms 15:24 < bridge> The classic recommendation for compiler theory is the dragon book 15:24 < bridge> the book if for making truly perfomant code tho 15:24 < bridge> Yep, already got the dragon book 15:24 < bridge> But I don’t think it’s very beginner friendly 15:24 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192111340593086514/dennard.png?ex=65a7e333&is=65956e33&hm=f2f262d9b4dd46c7175dfaac9248f810ce5390c5726705255eeb852c4835f6c3& 15:25 < bridge> I am not *that much* a beginner in compilers I think. Did the craftinginterpreters thing and some stuff. And I only need to write about 15 pages, that's done fast I hope 15:26 < bridge> Nice 15:26 < bridge> Ah, I was just about to recommend crafting interpreters 15:26 < bridge> https://os.phil-opp.com/ 15:27 < bridge> https://llvm.org/docs/tutorial/ :troller: 15:28 < bridge> troller? D: 15:28 < bridge> You don't recommend the llvm tutorial? 15:28 < bridge> oh i do 15:28 < bridge> but its not simple xd 15:28 < bridge> probably too high for me then 15:29 < bridge> A friend of mine recommended me “Appel. Modern Compiler implementation in C” but I never got around to reading it so not sure if good 15:29 < bridge> Might be worth looking into 15:29 < bridge> oh i didnt read this 15:29 < bridge> well i currently work making compilers :d 15:29 < bridge> Hope libgen has this books :hAA: 15:29 < bridge> but did u do a compiler or a interpreter 15:29 < bridge> It should, it’s a classic recommendation 15:30 < bridge> It was an interpreter for the so called "lox" language 15:30 < bridge> Lexing, Parsing and stuff is similar in building compilers/interpreters i think 15:31 < bridge> that part is similar in both yeah 15:31 < bridge> learn llvm 15:31 < bridge> then learn MLIR 15:31 < bridge> :BASED: 15:32 < bridge> :BASEDDEPT: 15:32 < bridge> ☕ 15:32 < bridge> @stnwtr did u do type analysis 15:32 < bridge> or is it dynamic 15:32 < bridge> mlir? something like llvm-ir? 15:32 < bridge> mlir is a new thing 15:33 < bridge> above llvm ir 15:33 < bridge> sounds nice 15:33 < bridge> my blog https://edgarluque.com/blog/mlir-with-rust/ 15:33 < bridge> ah nice, thanks 15:33 < bridge> dynamic as far as i remember? hmmm 15:33 < bridge> im not rly good blogger but hope its ok :d 15:33 < bridge> its fine :D 15:37 < bridge> And the reason I got into computer science is teeworlds. I started playing 7 or 8 years ago and since then always wanted to create a custom gamemode xD 15:37 < bridge> Now I am starting learning c++, woah xD 15:37 < bridge> Progress :stonks: 15:38 < bridge> kinda same 15:38 < bridge> but i started c++ in 2015 xd 15:39 < bridge> I never did 15:39 < bridge> Metoo 15:39 < bridge> Well, just some hello world, but stopped right there xD 15:41 < bridge> Now uni forces me to do 15:46 < bridge> your name is edgar? 15:46 < bridge> yes 15:46 < bridge> its nothing new here btw 15:46 < bridge> xd 15:47 < bridge> Katerina and Natasha missing you❤️ 15:47 < bridge> https://discord.gg/katyalove 15:47 < bridge> @everyone 15:57 < bridge> well, you probably learned newton dynamics in high school, yet it's outdated for more than 100 yers 15:58 < bridge> similarly, you learn 70's electronic stuff to better understand nowadays electronics and computer architecture 15:58 < bridge> you can't completely understand these if you don't study what has been made before and why it has been made this way 15:59 < bridge> also geometry 15:59 < bridge> non euclidean rules the world 15:59 < bridge> but u dont learn that 15:59 < bridge> I find this comparison really poor. Physics haven't changed in the last millions of years, computers have evolved a lot in these last few ones. 15:59 < bridge> I kinda get your point but meh 16:00 < bridge> logic hasnt changed as far as i know 16:00 < bridge> you need it because implementation choice were made back then and still hold today although technical constraint has been lifted 16:00 < bridge> @learath2 16:00 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192120428639043714/GC3iR5wW4AA2Wh8.png?ex=65a7ebaa&is=659576aa&hm=4c6fe2917638dd88e8e57372c0983a045ef7b1612eb43d28562d90f383bbd77b& 16:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192120449287594104/GC3iSImX0AAgK3-.png?ex=65a7ebaf&is=659576af&hm=6a22af59f56dd993884537c2c1ae4795c4854d9200ea2654c1aafa0c822ff727& 16:01 < bridge> XD 16:01 < bridge> its public domain now 16:01 < bridge> 16:09 < bridge> How it should be😏 😏 😏 16:26 < bridge> yo 16:26 < bridge> i copied the code from the hook coll width to make some gameplay visualisations 16:26 < bridge> for whatever reason when making very smol lines they dissapear. 16:26 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192126773681467453/image.png?ex=65a7f193&is=65957c93&hm=7b8cc6f97dc816289121347619cff887c7b0a3676ed129d019685fe50dcd0df5& 16:49 < bridge> increedibly stupid 17:30 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192142983995326494/RDT_20240103_2306536694716059660985511.png?ex=65a800ac&is=65958bac&hm=50b4b7e86b1bff6126c9fa0d5fd13cbfe023001f4ec8c75274f48996c1df765d& 17:38 < bridge> use rust :santatrollet: 17:41 < bridge> Rust++ or what 17:55 < bridge> he clearly did not understand the meme 18:05 < bridge> i did but u better use rust still 18:23 < bridge> someone actually clonned my repo with passwords :justatest: 18:23 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192156187437826118/image.png?ex=65a80cf8&is=659597f8&hm=bc8f03b567aee9edf10aac5786e8fed9826687d8bda22043a9cb376a84da72f7& 18:24 < bridge> so why did you clone them? 18:24 < bridge> i didnt 18:24 < bridge> 4 unique cloners :justatest: 18:25 < bridge> what even is a git clone? 18:25 < bridge> 18:25 < bridge> does downloading as zip also count as clone? 18:25 < bridge> do you have money on your bank? 😏 18:25 < bridge> asking for a friend 18:25 < bridge> no 18:26 < bridge> im poor as fuck 18:26 < bridge> i saved a bit to host ddts who 18:26 < bridge> if i ever finish it 😏 18:26 < bridge> ez 18:26 < bridge> ddnet tournament with 2000€ price pool 18:27 < bridge> downloading as .zip doesnt seem to count as clone 18:27 < bridge> only `git clone` counts 18:28 < bridge> maybe it takes a while before popping up in stats 18:28 < bridge> or some bots downloaded it xd 18:29 < bridge> 15 unique clones for websites. am so popular 😏 18:29 < bridge> not even me, the website! 18:29 < bridge> where did u find these stats even? 18:30 < bridge> https://github.com/ddnet/ddnet/graphs/traffic 18:30 < bridge> ah here 18:30 < bridge> insights tab in github repo 18:32 < bridge> cant see that :feelsbadman: 18:32 < bridge> lol 18:32 < bridge> contribute to ddnet and get member 18:32 < bridge> 😏 18:33 < bridge> is there any task for dum dum? 18:33 < bridge> is there any task for dum dums? 18:33 < bridge> i dunno 18:33 < bridge> i can change commetns :justatest: 18:33 < bridge> i can change comments :justatest: 18:33 < bridge> i am working on safe rc> still 18:33 < bridge> but i have trouble, bcs without static_assert & typeof in rust it's hard 18:33 < bridge> to do what i need 18:34 < bridge> i opened an easy issue on ddnet-web 18:34 < bridge> @milkeeycat u web dev right? 18:34 < bridge> i wont get a role if i contribute to website, will i? 18:34 < bridge> wanna continue my react ddnet version? 😏 18:35 < bridge> im react hater but sure :justatest: 18:35 < bridge> https://github.com/Jupeyy/ddnet-web/tree/testing_nextjs 18:35 < bridge> good luck 18:35 < bridge> the "nextjs" dir is it 18:37 < bridge> i got a google play dev acc 18:37 < bridge> now i can do apps to make money :justatest: 18:37 < bridge> my company name is RustWorks 18:37 < bridge> im original 18:37 < bridge> its not a legal name tho xd 18:38 < bridge> why is it not legal? xd 18:38 < bridge> cuz its not a real company 18:38 < bridge> they just ask a business mame 18:38 < bridge> name 18:39 < bridge> but you just made it 18:39 < bridge> so it's real 18:39 < bridge> on google play yesxd 18:40 < bridge> so when can i join 18:40 < bridge> did you submit any app already? 18:40 < bridge> and create awesome apps with u 18:40 < bridge> not yet 18:40 < bridge> it only cost me 20€ and my personal info kek 18:43 < bridge> chillerdragon: did u mean this https://github.com/ddnet/ddnet-web/issues/278 18:47 < bridge> https://discord.com/channels/252358080522747904/293493549758939136/1192120621539283064 18:58 < bridge> I tried usa1 and ger2 and I still get the dropped weird message 'invalid' (0), failed on '(type out of range)' message on my 0.7 client when a 0.6 client finishes 18:59 < bridge> you can check /info to see which version the server runs 19:03 < bridge> commit 083c8c77bfe7de6e, which is 7 days ago 19:04 < bridge> in both servers 19:06 < bridge> so it doesn't have your commit from https://github.com/ddnet/ddnet/pull/7741 yes 19:06 < bridge> so it doesn't have your commit from https://github.com/ddnet/ddnet/pull/7741 yet 19:14 < bridge> xd 19:14 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192169033282359367/image.png?ex=65a818ee&is=6595a3ee&hm=7fa42c1de2ec594e64c2032df0e884f2a92fd984c346f9b6576fe4a3d6507d72& 19:15 < bridge> yup, Im waiting xd 19:16 < bridge> well u cant take that serious xd 19:16 < bridge> npm packages update every 5 seconds so yeah :justatest: 19:17 < bridge> https://dayssincelastjavascriptframework.com/ 19:17 < bridge> tell me when u started it, if u like it 😏 19:18 < bridge> ravie hated it, but i think was quite ok 19:18 < bridge> its so pretty :owo: 19:18 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192170060123484261/image.png?ex=65a819e3&is=6595a4e3&hm=3e56dd171074e3578b51b298edefc72925ea13e2b67dada1c2578964fea20094& 19:18 < bridge> ez 19:21 < bridge> these vulnerabilities are often in not even used code paths 19:31 < bridge> but they can help when multiple vulnerabilities are combined which is almost always the case 19:33 < bridge> if they're not in used code paths, how are they useful? 19:34 < bridge> you can force jumps to unused code with other vulnerabilities such as return oriented programming 19:34 < bridge> can you give an example of chained vulnerabilities in JS that use (otherwise) dead code 19:34 < bridge> that's not the case for JS AFAIK 19:35 < bridge> if there's a buffer overflow somewhere that is exploitable, you can make the program jump to another vulnerability 19:36 < bridge> also not applicable to JS? 19:36 < bridge> whats the url to use skins.tw skins? Xd 19:36 < bridge> are js programs memory safe? 19:36 < bridge> well, i don't know for JS, but in c/c++, it's certainly the case 19:37 < bridge> i think u cant get a segfault in js 19:37 < bridge> Yes that should be fun 19:37 < bridge> surely 😬 19:37 < bridge> this is about JS 19:37 < bridge> unless u find a vuln in the runtime 19:37 < bridge> Top Gs use scrumplex proxy 19:37 < bridge> well, i already had a segfault in python, so i wouldn't bet on that 😄 19:38 < bridge> unlike cpython, JS is designed to be a safe environment 19:38 < bridge> cpython extensions are routinely implemented in C/C++, and python even has ffi which can obviously crash 19:39 < bridge> ok how to set that thing xd 19:39 < bridge> I forgot ping scrumpley 19:39 < bridge> @scrumplex hallo 19:44 < ws-client> hi i am totally the real scrumplex 19:44 < ws-client> https://skins.scrumplex.net/ 19:44 < ws-client> this is a legit url 19:45 < ws-client> click it 19:45 < ChillerDragon> its a proxy which combines all dl skin vendors into one 19:45 < ChillerDragon> for maximal skin madness 19:46 < ChillerDragon> code is here https://codeberg.org/Scrumplex/skinprox 19:47 < bridge> @scrumplex why rewritten from go to rust? 19:47 < bridge> based 19:48 < bridge> @heinrich5991 https://assets.ddstats.org/ 19:48 < bridge> do u think this would work 19:48 < bridge> with ddnet 19:48 < bridge> what would work? I don't understand 19:48 < bridge> a directory listing? 19:48 < bridge> as the url to get skins on ddnet client 19:48 < bridge> yea, should work, I think 19:48 < ChillerDragon> wowo so even github? 19:49 < bridge> ah it needs to be this one right https://assets.ddstats.org/skins/ 19:49 < bridge> yes 19:49 < bridge> chiller this is my skin asset server 19:49 < bridge> what the hell is codeberg 19:49 < bridge> it's like github 19:49 < bridge> why not github? xd 19:49 < bridge> it steals from skins.tw closed source database 19:49 < ChillerDragon> https://raw.githubusercontent.com/TeeworldsDB/skins/master/06/ 19:50 < ChillerDragon> so this works too for dl url? o.O 19:50 < bridge> it says invalid request 19:50 < ChillerDragon> ye bcs no skin 19:50 < ChillerDragon> https://raw.githubusercontent.com/TeeworldsDB/skins/master/06/0001-default.png 19:50 < ChillerDragon> it just appends the skin name at the end i assume? 19:50 < ChillerDragon> if yes @Scrumplex go add to proxy 19:51 < ChillerDragon> @ryozuki stealer 19:51 < ChillerDragon> @milkeeycat github is owned by microsoft and closed source 19:51 < bridge> i steal in name of free software foundation 19:51 < bridge> what about gitlab 19:51 < bridge> Because packaging Rust projects in Nix is a lot nicer ^^ 19:51 < bridge> ? 19:51 < ChillerDragon> @milkeeycat gitlab is dutch 19:51 < bridge> yup 19:51 < bridge> interesting ^^ 19:52 < bridge> quite a heavy hammer for making it nicer to package though ^^ 19:52 < bridge> chillerdragon: understadable 19:52 < ChillerDragon> xd 19:52 < bridge> It was also an opportunity to improve my Rust skills and get more familiar with the ecosystem 19:52 < bridge> Scrumplex can u add my url 19:52 < bridge> to ur repo? 19:52 < bridge> https://assets.ddstats.org/skins/ 19:52 < bridge> sure 19:52 < ChillerDragon> henlo scrumpleggs 19:53 < bridge> hello im scrumpled eggs 19:53 < ChillerDragon> scrambled eggs 19:53 < bridge> i like scrambled eggs 19:53 < ChillerDragon> yes very nice food 19:53 < bridge> Is this order okay? 19:53 < bridge> ``` 19:53 < ChillerDragon> jospti the vegan misses out 19:53 < bridge> "https://scrumplex.rocks/skin/" 19:53 < bridge> "https://skins.ddnet.org/skin/community/" 19:53 < bridge> "https://skins.tee.world/" 19:53 < bridge> "https://assets.ddstats.org/skins/" 19:53 < bridge> "https://api.skins.tw/api/resolve/skins/" 19:53 < bridge> ``` 19:53 < bridge> It will pick the first skin it finds in that order 19:53 < ChillerDragon> u forgot mine :c 19:53 < ChillerDragon> https://raw.githubusercontent.com/TeeworldsDB/skins/master/06/ 19:53 < bridge> sure sure 19:53 < bridge> good put the skins.tw closed source last 19:54 < ChillerDragon> put mine last 19:54 < ChillerDragon> its ass collections 19:54 < bridge> skins.tw is super slow and has many intermittent timeouts ^^ 19:54 < ChillerDragon> mine is github 19:54 < bridge> typical closed source 19:54 < ChillerDragon> its 500 half of the time 19:54 < bridge> i dont like eggs anyway 19:54 < ChillerDragon> jopsti cope 19:54 < bridge> they were going to be open source 19:54 < bridge> you should use GitHub pages tbh 19:54 < bridge> once their dev goes back 19:54 < bridge> my only grip is they dont have a dir listing like https://assets.ddstats.org/skins/ 19:54 < bridge> or ddnet 19:54 < bridge> they put it behind a weird ass query thing 19:55 < bridge> so u cant get all 19:55 < bridge> ``` 19:55 < bridge> "https://scrumplex.rocks/skin/" 19:55 < bridge> "https://skins.ddnet.org/skin/community/" 19:55 < bridge> "https://skins.tee.world/" 19:55 < bridge> "https://assets.ddstats.org/skins/" 19:55 < bridge> "https://api.skins.tw/api/resolve/skins/" 19:55 < bridge> "https://raw.githubusercontent.com/TeeworldsDB/skins/master/06/" 19:55 < bridge> ``` 19:55 < bridge> 19:55 < bridge> so this? 19:55 < ChillerDragon> lgtm 19:55 < ChillerDragon> if it gets a 200 it stops there? 19:55 < ChillerDragon> do you cache? 19:55 < bridge> yes and yes 19:56 < ChillerDragon> sounds pog 19:56 < ChillerDragon> cool project 19:56 < bridge> I also only do HEAD requests btw 19:56 < ChillerDragon> tru web user 19:56 < bridge> And redirect clients 19:56 < ChillerDragon> idk what that is but seend it before 19:56 < ChillerDragon> seen* 19:56 < bridge> And redirect clients to the final skin 19:57 < bridge> https://codeberg.org/Scrumplex/infrastructure/commit/9daacf0cd3b4d96704b0bf486b7f1085512e93d3 19:57 < bridge> there you go 19:57 < bridge> should be live in a moment 19:57 < bridge> https://skins.tw/_next/data/3nnNl9-8mmKbpfLpiKHmd/skins.json 19:57 < bridge> this looks like what you're looking for 19:58 < bridge> lol 19:58 < bridge> quite obscure 20:04 < bridge> @scrumplex do u recommend codeberg 20:04 < bridge> does it have good ecosystem 20:04 < bridge> I was looking for skins in the ddstats DB that aren't in any other DB yet. https://skins.scrumplex.net/skin/火娃.png this one redirects to ddstats ^^ 20:04 < bridge> epic 20:04 < bridge> I was looking for skins in the ddstats DB that aren't in any other DB yet. this one redirects to ddstats ^^ 20:04 < bridge> ddstats is mine btw 20:05 < bridge> I like it very much. The CI is good enough, it has everything you need (container registry, pages, LFS) 20:05 < bridge> yeah 20:05 < bridge> ppl only use github because discoverabilityy 20:06 < bridge> and because it was the best option at some point in time 20:08 < bridge> @scrumplex does it have a mirroring feature like gitea? 20:08 < bridge> Only push mirror 20:08 < bridge> does it beat the speed of my cgit? https://git.edgarluque.com/ 20:08 < bridge> :troller: 20:08 < bridge> Though you can ask them with a support ticket to get pull mirroring 20:08 < bridge> They don't want to provide pull mirroring to everyone, as people set and forget about them and use codeberg's resources for no reason 20:09 < bridge> ic 20:09 < bridge> i have a automatic gh mirror on the url i sent 20:09 < bridge> using cgit 20:09 < bridge> It's a non profit registered in Berlin so it's not like they have immense amount of cash on hand 20:19 < bridge> @scrumplex im sure ur in this space 20:19 < bridge> did u use https://joinfirefish.org/ 20:19 < bridge> saw it on top repos in codeberg 20:20 < bridge> such a fancy website 20:20 < bridge> nope. No idea what this is :O 20:20 < bridge> very fancy! xD 20:20 < bridge> I dont really use any social media 20:20 < bridge> its a foss activitypub microbblogging 20:20 < bridge> microblogging = twitter-like 20:21 < bridge> The only microblogging i do is for https://floss.social/@PrismLauncher 20:21 < bridge> pog u famous 20:21 < bridge> can u mention ddnet 20:22 < bridge> and we mention prismlauncher in our non existent social media 20:22 < bridge> 🤝 20:22 < bridge> lol 20:22 < bridge> xD 20:22 < bridge> I should add tees to Prism Launcher 20:22 < bridge> do it 20:22 < bridge> best easter egg 20:22 < bridge> https://scrumplex.rocks/img/1704309765_ieng3O.png 20:22 < bridge> we already have "teawie" 20:22 < bridge> so tee isn't too far off 20:23 < bridge> too small im blind 20:23 < bridge> looks anime 20:23 < bridge> https://scrumplex.rocks/img/1704309803_ku2ouJ.png 20:23 < bridge> you shood ad skib toilet 20:23 < bridge> https://scrumplex.rocks/img/1704309818_Ahwei0.png 20:23 < bridge> https://scrumplex.rocks/img/1704309823_aePh5u.png 20:24 < bridge> mention that prism is Ryozuki, llvm & rust contributor, approved 20:24 < bridge> xd 20:24 < bridge> It is sadly not recognized by Arch Linux so it's no use 😔 20:24 < bridge> @scrumplex btw 20:24 < bridge> wait lemme find the irc logs 20:24 < bridge> is prism easily packagable 20:24 < bridge> yup 20:24 < bridge> i can maintain the guru package 20:24 < bridge> i do it for ddnet already 20:24 < bridge> gentoo guru 20:25 < bridge> there is a gentoo overlay iirc 20:25 < bridge> https://packages.gentoo.org/packages/games-action/prismlauncher 20:25 < bridge> nevermind 20:25 < bridge> nvm 20:25 < bridge> yup 20:25 < bridge> u got a oficial one! 20:25 < bridge> is it bothersome? 20:25 < bridge> well guru is seamless and i can update it in a day 20:25 < bridge> It's even maintained by one of the former project maintainers! ^^ 20:26 < bridge> https://gitweb.gentoo.org/repo/proj/guru.git/tree/games-action/ddnet 20:26 < bridge> dunno. I'd assume that it isn't too annoying 20:26 < bridge> we don't release very often so it doesn't matter really if it takes a day or two to get it updated 20:27 < bridge> at the end of the day there is only so much you can do with a legacy Qt codebase :( 20:27 < bridge> https://wiki.gentoo.org/wiki/Project:Proxy_Maintainers/User_Guide 20:27 < bridge> ah i can become a proxy maintainer 20:27 < bridge> hmm 20:27 < bridge> but guru works fine xd 20:27 < bridge> im proud of my insta releases :d 20:28 < bridge> I forgot where I put my IRC logs from `archlinux-aur` 20:30 < bridge> So context: I was asking if a Arch packager/dev wanted to adopt Prism Launcher into official repos, because it has been in the top 15 on the AUR for over a year at that point (note that most packages in the top 15 are AUR helpers, proprietary or -bin packages) 20:30 < bridge> 20:30 < bridge> A major ArchWiki contributor chimed in and was opposed because of the supposed toxicity around Minecraft projects. 20:30 < bridge> 20:30 < bridge> Later on that same individual dropped this epic message: 20:30 < bridge> 20:30 < bridge> ``` 20:30 < bridge> [19:01:40] Also maybe I am sinnical, but when a developer asks for their software to be adopted... it feels like you are trying to get your software out there... being adopted into the official repos gives you a lot of recognition... and I can say with experience I will install from official repositories over the AUR... 20:30 < bridge> ``` 20:31 < bridge> > A major ArchWiki contributor chimed in and was opposed because of the supposed toxicity around Minecraft projects. 20:31 < bridge> so what 20:31 < bridge> thats such a bad reason XD 20:31 < bridge> im sure they host suckless software 20:31 < bridge> where the authors are nazis 20:31 < bridge> Yeah I just thought it was funny that they labeled the Minecraft community as toxic and then later proceed to be elitist about Arch 20:32 < bridge> i think he is projecting his own reasons xD 20:32 < bridge> I mean at the end of the day, that person isn't an Arch dev/maintainer 20:32 < bridge> a.k.a he thinks this because its what he would do 20:33 < bridge> so it's just an opinion not the project's final decision 20:33 < bridge> ic 20:33 < bridge> hello who can help me to open a server I have a virtual server 20:33 < bridge> when rewrite prism in rust? 20:33 < bridge> https://wiki.ddnet.org/wiki/LAN_Server 20:33 < bridge> dont dm me btw, im just sending this link on a public channel 20:33 < bridge> But no one else joined in on the conversation apart from some other users. Even though some arch maintainers/devs were talking about other stuff 20:34 < bridge> vds bro 20:34 < bridge> And from that day on, I stopped caring about Arch Linux altogether 20:34 < bridge> idc about arch too 20:34 < bridge> im too based for that 20:34 < bridge> i use gentoo :ez: 20:34 < bridge> One day the copium will run out and we will all be running NixOS 😎 20:34 < bridge> but gentoo ppl can be special too XD i read in some place they said that static libraries are a bug 20:35 < bridge> I'm so happy that you are a gentoo person now 20:35 < bridge> probably snorted too much of that GNU 20:35 < bridge> i religiously run emerge everyday morning 20:35 < bridge> You can be our marketing department. Gentoo people have been suffering from bad PR forever. Your skills from Rust can carry on 20:35 < bridge> xD 20:36 < bridge> i tried nixos 20:36 < bridge> but its too bothersome 20:37 < bridge> maybe there is tooling to automate some stuff but idk 20:37 < bridge> im in gentoo for now 20:37 < bridge> oh yeah running native march on nixos was weird 20:37 < bridge> NixOS is really great if you have a lot of machines 20:37 < bridge> reproducible yes 20:37 < bridge> i find it nice for servers 20:37 < bridge> but i only have 1 server 20:37 < bridge> xd 20:38 < bridge> I can share my configurations between my desktop, laptop, work laptop, Raspberry Pi, home server, VPS and even my phone (Termux with Nix) 20:38 < bridge> Though rn my server and personal stuff is separated 20:38 < bridge> they do share a tiny bit though 20:39 < bridge> I think Gentoo having binaries now is great though! 20:39 < bridge> It was one of the major advantages of Nix (the package manager), because you could still modify packages very easily while still getting most things from the binary cache 20:40 < bridge> binaries are not common 20:40 < bridge> just for big like chrome 20:40 < bridge> https://www.gentoo.org/news/2023/12/29/Gentoo-binary.html 👀 20:40 < bridge> but u can make ur local binkpkg server 20:40 < bridge> oh 20:40 < bridge> didnt know 20:40 < bridge> just a few days ago ^^ 20:41 < bridge> nice 20:41 < bridge> I don't like that nix doesn't specify expected output hashes (interesting for actually reproducible builds) 20:41 < bridge> but i use gentoo for that native march 20:42 < bridge> my only complain about gentoo is portage is in python and takes a bit to resolve deps 20:42 < bridge> im sure it can be heavily optimized 20:42 < bridge> maybe with rust 20:43 < bridge> go lead the effort 😮 20:43 < bridge> would be cool ^^ 20:43 < bridge> i thought about it 20:43 < bridge> need to look how complex portage is xd 20:43 < bridge> So normal Nix derivations (or packages) use their inputs to calculate the final output hash. So the actual content doesn't really matter. The only difference are "fixed-output derivations" that are usually things that download something from the internet 20:43 < bridge> it does matter, because it can't take into account all environmental differences 20:43 < bridge> by specifying the output hash, you notice when something breaks 20:44 < bridge> e.g. IIRC it doesn't take into account the kernel that is being run 20:44 < bridge> Yes. Nix has a handy `--rebuild` flag which will just rebuild an already existing derivation and compare both 20:44 < bridge> Yes. But if that produces different outputs, it can be considered a bug 20:44 < bridge> NixOS provides this service to test reproducibility: https://reproducible.nixos.org/ 20:45 < bridge> And the only important packages left are pipewire related one 20:45 < bridge> NixOS provides this service to test reproducibility: https://reproducible.nixos.org/s 20:45 < bridge> And the only important packages left are pipewire related ones 20:45 < bridge> NixOS provides this service to test reproducibility: https://reproducible.nixos.org 20:45 < bridge> i use pipewire 20:45 < bridge> i recommend `export SDL_AUDIODRIVER=pipewire` 20:45 < bridge> to force sdl to use pipewire 20:45 < bridge> instead of pulseaudi which gets translated to pipewire 20:45 < bridge> like here is a diff between two "identical" (in the sense that they use the same inputs) builds: 20:45 < bridge> 20:45 < bridge> https://reproducible.nixos.org/nixos-iso-gnome-runtime/diff/1f94ef23aa9064bad6ef9a768dc4ade7615e03b16310ebaae6465643f3aae86b-5cea5bc75b287db1b30f4232aae2920949ccec4ec459113f3f2a342a62680bc1.html 20:45 < bridge> would be nice if that was encoded in the package 20:46 < bridge> Fair. But that would basically make everything unreproducible 20:46 < bridge> because not everyone is gonna run the same kernel 20:46 < bridge> you have to draw a line somewhere 20:46 < bridge> no, the output hash, I mean 20:46 < bridge> because not everyone has the same CPU either. What if one CPU has a bug that doesn't exist on another 20:47 < bridge> yeah, but even if it was encoded it wouldn't actually do anything as it is right now 20:47 < bridge> it'd help notice problems more prominently 20:47 < bridge> Yeah but so does rebuilding the package and using the builtin check 20:47 < bridge> 99% of reproducibility mismatches are timestamps and other trivial things like that 20:48 < bridge> Because the Nix sandbox tries to ensure that the build environment itself is reproducible 20:48 < bridge> only use percentages if you know the stats 20:48 < bridge> (like disallowing network access) 20:48 < bridge> ~~99% of~~ most reproducibility mismatches are timestamps and other trivial things like that 20:49 < bridge> yes, to a point. they usually fail to mention where the boundary lies 20:49 < bridge> i.e. pointing out that kernel (and as you mentioned cpu) differences are unaccounted for 20:49 < bridge> fair 20:50 < bridge> But honestly I don't think it's a big problem in practice 20:50 < bridge> Linux prominently doesn't break userspace and unless your compiler is using really new kernel features, it shouldn't really matter 20:51 < bridge> yea, sounds like a sensible place for the boundary 20:51 < bridge> Things like your compiler or rather your entire toolchain are much more important 20:51 < bridge> Sadly full perfect reproducibility would mean that we can't reuse anything between machines because every system would be different 20:51 < bridge> Sadly full perfect reproducibility would mean that we can't reuse anything between machines because every physical system would be different 20:52 < bridge> debian etc. are leading the effort for full reproducibility 20:52 < bridge> https://reproducible-builds.org/ 20:52 < bridge> does debian encode output hashes in packages? :O 20:52 < bridge> or rather, does it keep track of them? 20:52 < bridge> or rather, does it keep track of them for repro? 20:54 < bridge> debian checks that their packages are reproducible and treats non-reproducibility as a bug: https://tests.reproducible-builds.org/debian/reproducible.html 20:54 < bridge> the initiative fixed a lot of projects 20:55 < bridge> I mean NixOS has that too: https://reproducible.nixos.org/ 20:55 < bridge> 20:55 < bridge> The packages that are left here are usually just not trivial to make reproducible 20:57 < bridge> does it have stats somewhere? 20:57 < bridge> not sure 20:57 < bridge> we definitely have some issues here; https://github.com/NixOS/nixpkgs/issues?q=is%3Aopen+is%3Aissue+label%3A%226.topic%3A+reproducible+builds%22 20:57 < bridge> we definitely have some issues here: https://github.com/NixOS/nixpkgs/issues?q=is%3Aopen+is%3Aissue+label%3A%226.topic%3A+reproducible+builds%22 21:03 < bridge> @scrumplex ah look, nix is actually moving into this direction? https://nixos.wiki/wiki/Ca-derivations 21:08 < bridge> Yeah but I didn't feel like there was much push on this so far 21:21 < bridge> I have a virtual server how do I set up a server 21:22 < bridge> download ddnet with the server 21:23 < bridge> and in the autoexec.cfg in the sv_register 0 change to 1 21:24 < bridge> oky go 21:24 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1192201884379926548/image.png?ex=65a83787&is=6595c287&hm=07efdf89689d2c59079fe6614e2cc3a2e528a1aada4ba85410d936d7bad26c97& 21:26 < bridge> says I need to open firewall 21:53 < ChillerDragon> @ryozuki wtf suckless is nazi?! 21:54 < bridge> > 21:54 < bridge> > dijit on Jan 12, 2021 | root | parent | next [–] 21:54 < bridge> > 21:54 < bridge> > I actually like suckless software and I'm a little (lot) annoyed by the overwhelming "sides" of politics, especially the left because a lot of US tech comes from a left wing belief and sometimes people online beat me over the head with it and make me annoyed. 21:54 < bridge> > 21:54 < bridge> > But, to be clear, there are three things here: 21:54 < bridge> > 21:54 < bridge> > 1) They're doing a Tiki Torch walk, during a time when it was heavily politicised. 21:54 < bridge> > 21:54 < bridge> > 2) They're adapting Nazi slogans as hostnames 21:54 < bridge> > 21:54 < bridge> > 3) They're denigrating "Cultural Marxism". 21:54 < bridge> > 21:54 < bridge> > Any one of these alone I would probably defend, but 3 is a pattern and not a good one. 21:54 < bridge> https://news.ycombinator.com/item?id=25754374 21:57 < ChillerDragon> yikes 22:19 < bridge> @heinrich5991 https://blog.redteam-pentesting.de/2024/bitwarden-heist/ 22:33 < bridge> when make a Cow in cpp 22:33 < bridge> what cow 22:33 < bridge> copy on write 22:33 < bridge> smart ptr 22:33 < bridge> for what? 22:33 < bridge> https://doc.rust-lang.org/std/borrow/enum.Cow.html 22:34 < bridge> idk 22:34 < bridge> i know but do you find that useful? 22:34 < bridge> but i use cow a lot in rust 22:34 < bridge> oh 22:34 < bridge> it allows mixing string literals with Strings 22:34 < bridge> which does mooo 22:34 < bridge> which does moo 22:35 < bridge> https://tenor.com/view/cowanimated-cow-cows-gif-13671727856550360343 22:44 < bridge> If you say "cultural marxism" I just don't want to hear anything else you say 22:44 < bridge> Modern "cultural bolshevism" andys can go fuck themselves 22:44 < bridge> idk what any of that means xd 22:44 < bridge> i just copy pasted 23:54 < bridge> ouch