00:00 <+bridge> [ddnet] Yea it’s on my todo forever 00:00 <+bridge> [ddnet] uh isnt that on every client or server start ever? 00:00 <+bridge> [ddnet] if you can reproduce it ez, you could do it now 00:00 <+bridge> [ddnet] not sure which one though 00:00 <+bridge> [ddnet] It’s kinda a reminder for me cuz it’s late again already 00:00 <+bridge> [ddnet] Yes every client close 00:00 <+bridge> [ddnet] On quit I get it 00:01 <+bridge> [ddnet] No now I sleep 00:01 <+bridge> [ddnet] \:p 00:01 <+bridge> [ddnet] i sadly dont get it 00:01 <+bridge> [ddnet] Buy Linux 00:01 <+bridge> [ddnet] if you always get it, see what calls it 00:01 <+bridge> [ddnet] hm no I'm also not getting it rn, but I remember getting it very often so I didn't worry about it ^^ 00:01 <+bridge> [ddnet] has nothing todo with linux 00:02 <+bridge> [ddnet] No? 00:02 <+bridge> [ddnet] Hm 00:02 <+bridge> [ddnet] i use linux as you probably know xd 00:02 <+bridge> [ddnet] Yea anyways if I don’t forget I’ll look into it 00:02 <+bridge> [ddnet] Soon 00:02 <+bridge> [ddnet] if @Patiga also gets it, he can also do it 00:02 <+bridge> [ddnet] No in my mind you are windows maximalist 00:03 <+bridge> [ddnet] Idk why 00:03 <+bridge> [ddnet] You should say „I use BTW“ more often 00:03 <+bridge> [ddnet] i rarely use windows xD 00:03 <+bridge> [ddnet] Wow did it strip my \< 00:27 <+bridge> [ddnet] I think it was just a harmless `rmdir()` 09:12 <+bridge> [ddnet] https://github.com/ddnet/ddnet/blob/b216b6744ab2ad4aa2efa03f7b4385424f97f6d2/src/engine/client/client.cpp#L838 09:12 <+bridge> [ddnet] that boi throws the remove error 09:12 <+bridge> [ddnet] So replays need to be on 09:18 <+bridge> [ddnet] true 09:30 <+bridge> [ddnet] omaigat 09:31 <+bridge> [ddnet] can a docker container with a more modern kernel run on a older host kernel? 09:31 <+bridge> [ddnet] never rly went into this docker stuff 09:47 <+bridge> [ddnet] docker containers doesn't have a kernel 09:47 <+bridge> [ddnet] the point of a container is to share the kernel with the host 09:52 <+bridge> [ddnet] ah understood the question now, should work fine 09:55 <+bridge> [ddnet] there might be some containers that wouldn't work properly on way older kernel versions such as cilium but in general should be fine 09:57 <+bridge> [ddnet] there might be some containers that wouldn't work properly on way older kernel versions such as cilium but in general should be fine, everything just depend on what u're doing on it 11:49 <+bridge> [ddnet] ah ty chillerdragon. 11:49 <+bridge> [ddnet] Looks harmless but would be nice if still be fixed 12:39 <+bridge> [ddnet] chillerdragon: can you fix my heart. 12:39 <+bridge> [ddnet] huh? 12:40 <+bridge> [ddnet] emm, nvm 12:40 <+bridge> [ddnet] wat u mean @TsFreddie 12:40 <+bridge> [ddnet] watfaka 12:40 <+bridge> [ddnet] @Jupstar ✪\: how to make nulled gfx backends with interfaces for headless client? 12:41 <+bridge> [ddnet] overload igraphics_backend and the processors 12:41 <+bridge> [ddnet] Watafaka mazafaka 12:41 <+bridge> [ddnet] yea thats what i thought 12:41 <+bridge> [ddnet] im a bit stuck on the details 12:41 <+bridge> [ddnet] do we have a overload somewhere else in thew code that i can look at? 12:41 <+bridge> [ddnet] https://youtu.be/9nyE1jn57rg 12:42 <+bridge> [ddnet] quite alot yeah 12:42 <+bridge> [ddnet] pretty much every I class 12:42 <+bridge> [ddnet] xd 12:42 <+bridge> [ddnet] so graphics too? 12:43 <+bridge> [ddnet] yes 12:43 <+bridge> [ddnet] class CGraphics\_Threaded \: public IEngineGraphics 12:43 <+bridge> [ddnet] like this? 12:43 <+bridge> [ddnet] wait thats basic inheritance 12:43 <+bridge> [ddnet] isnt it 12:45 <+bridge> [ddnet] yes 12:45 <+bridge> [ddnet] ``` 12:45 <+bridge> [ddnet] class CGraphics_ThreadedNull : public IEngineGraphics 12:45 <+bridge> [ddnet] { 12:45 <+bridge> [ddnet] 12:45 <+bridge> [ddnet] } 12:45 <+bridge> [ddnet] 12:45 <+bridge> [ddnet] class CGraphics_Threaded : public IEngineGraphics 12:45 <+bridge> [ddnet] { 12:45 <+bridge> [ddnet] enu 12:45 <+bridge> [ddnet] ``` 12:45 <+bridge> [ddnet] then add all methods with empty bodies? 12:46 <+bridge> [ddnet] i'd also write a null processor 12:46 <+bridge> [ddnet] watafaka is dat 12:46 <+bridge> [ddnet] e.g. textures are sent as pointers and deleted on the backend side 12:46 <+bridge> [ddnet] look into backend_opengl.h or backend_sdl.h 12:46 <+bridge> [ddnet] they should have all classes 12:47 <+bridge> [ddnet] i wanna start with one thing to understand the nulling concept 12:48 <+bridge> [ddnet] yeah you just make empty bodies basically 12:48 <+bridge> [ddnet] ```c 12:48 <+bridge> [ddnet] #ifdef CONF_HEADLESS 12:48 <+bridge> [ddnet] extern IEngineGraphics *CreateEngineGraphicsThreaded() { return new CGraphics_ThreadedNull(); } 12:48 <+bridge> [ddnet] #else 12:48 <+bridge> [ddnet] extern IEngineGraphics *CreateEngineGraphicsThreaded() { return new CGraphics_Threaded(); } 12:48 <+bridge> [ddnet] #endif 12:48 <+bridge> [ddnet] ``` 12:48 <+bridge> [ddnet] and then this? 12:49 <+bridge> [ddnet] yeah or conditionally compile with one .cpp file or the other 12:49 <+bridge> [ddnet] so you recommend a graphics\_null.cpp 12:49 <+bridge> [ddnet] i guess u dont want to add all this stuff into the existing files do you? 12:49 <+bridge> [ddnet] yes 12:49 <+bridge> [ddnet] oke 12:49 <+bridge> [ddnet] so we dupe most of the gfx files? 12:49 <+bridge> [ddnet] headers plus c++ 12:50 <+bridge> [ddnet] ah wait 12:50 <+bridge> [ddnet] empty bodies are okay in headers i guess 13:12 <+bridge> [ddnet] no way lul that worked faster and better than expected 13:12 <+bridge> [ddnet] i only nulled CGraphics\_Threaded and it compiles and launches in non graphical environment 13:30 <+bridge> [ddnet] yes but remember the memory leaks 13:31 <+bridge> [ddnet] ah i see, you nulled that graphics 😄 13:31 <+bridge> [ddnet] not the backend 13:32 <+bridge> [ddnet] troll @TsFreddie 13:32 <+bridge> [ddnet] @Jupstar ✪\: ok i published a working example i did not understand what you mean by nullprocessor tho and why i need to null other classes too. Could you have a look at https://github.com/ddnet/ddnet/pull/4147 and check for flaws pls? 13:33 <+bridge> [ddnet] ye memory leaks 13:33 <+bridge> [ddnet] thats what i ask you to look at you know much more about the gfx code 13:36 <+bridge> [ddnet] i assume it can just work like that 13:36 <+bridge> [ddnet] as far as i can see the graphics\_threaded.cpp deletes memory that it also allocated there 13:36 <+bridge> [ddnet] so i hope no other class allocates memory and expects CGraphics\_Threaded to delete it 13:36 <+bridge> [ddnet] yea it works suprsingly well 13:37 <+bridge> [ddnet] its so odd to have a terminal application with sounds \:D 13:37 <+bridge> [ddnet] yeah i assume it shouldn't do that, backend mostly deletes textues and some buffers 13:38 <+bridge> [ddnet] oh i get a few valgrind errors 13:38 <+bridge> [ddnet] lemme compare with headless off 13:38 <+bridge> [ddnet] but since the class reports all `Is*BufferingEnabled` as false, it shouldnt even create those buffers, and textures seem to be alloced by that class 13:38 <+bridge> [ddnet] yea one has to fiddle around a bit wat returns false and what true 13:39 <+bridge> [ddnet] btw you can remove all non override functions 13:39 <+bridge> [ddnet] i just fixed a bug in my strip\_gfx.py script this morning that would false and 0 everything but then the components OnRender() wouldnt get called anymore 13:39 <+bridge> [ddnet] ah ye sounds good 13:40 <+bridge> [ddnet] oh okay so the valrgind warnings i see come from the headless \:/ 13:40 <+bridge> [ddnet] show backtrace xxd 13:40 <+bridge> [ddnet] yea 13:41 <+bridge> [ddnet] ``` 13:41 <+bridge> [ddnet] ==84133== at 0x1DDF7E: float maximum(float, float) (math.h:103) 13:41 <+bridge> [ddnet] ==84133== by 0x1E3CE5: CTextRender::TextEx(CTextCursor*, char const*, int) (text.cpp:1064) 13:41 <+bridge> [ddnet] ==84133== by 0x1E28F7: CTextRender::Text(void*, float, float, float, char const*, float) (text.cpp:797) 13:41 <+bridge> [ddnet] ==84133== by 0x303F3E: CUI::DoLabel(CUIRect const*, char const*, float, int, float, int) (ui.cpp:462) 13:41 <+bridge> [ddnet] ==84133== by 0x2595C7: CMenus::RenderLoading() (menus.cpp:1141) 13:41 <+bridge> [ddnet] ==84133== by 0x2C2DF1: CSoundLoading::Run() (sounds.cpp:32) 13:41 <+bridge> [ddnet] ==84133== by 0x2C321A: CSounds::OnInit() (sounds.cpp:85) 13:41 <+bridge> [ddnet] ==84133== by 0x2CEC57: CGameClient::OnInit() (gameclient.cpp:248) 13:41 <+bridge> [ddnet] ==84133== by 0x17B04A: CClient::Run() (client.cpp:3115) 13:41 <+bridge> [ddnet] ==84133== by 0x182310: main (client.cpp:4453) 13:41 <+bridge> [ddnet] 13:41 <+bridge> [ddnet] ``` 13:42 <+bridge> [ddnet] ``` 13:42 <+bridge> [ddnet] pCursor->m_MaxCharacterHeight = maximum(pCursor->m_MaxCharacterHeight, CharHeight + BearingY); 13:42 <+bridge> [ddnet] ``` 13:42 <+bridge> [ddnet] in maximum? 13:42 <+bridge> [ddnet] what even is the error? 13:42 <+bridge> [ddnet] maximum shouldnt allocate memory xD 13:42 <+bridge> [ddnet] thats odd huh 13:43 <+bridge> [ddnet] i assume its the line that calls maximum 13:43 <+bridge> [ddnet] maybe pCursor 13:44 <+bridge> [ddnet] ``` 13:44 <+bridge> [ddnet] CTextCursor Cursor; 13:44 <+bridge> [ddnet] SetCursor(&Cursor, x, y, Size, TEXTFLAG_RENDER); 13:44 <+bridge> [ddnet] Cursor.m_LineWidth = LineWidth; 13:44 <+bridge> [ddnet] int OldRenderFlags = m_RenderFlags; 13:44 <+bridge> [ddnet] if(LineWidth <= 0) 13:44 <+bridge> [ddnet] SetRenderFlags(OldRenderFlags | ETextRenderFlags::TEXT_RENDER_FLAG_NO_FIRST_CHARACTER_X_BEARING | ETextRenderFlags::TEXT_RENDER_FLAG_NO_LAST_CHARACTER_ADVANCE); 13:44 <+bridge> [ddnet] TextEx(&Cursor, pText, -1); 13:44 <+bridge> [ddnet] ``` 13:44 <+bridge> [ddnet] ah btw valgrind says "Conditional jump or move depends on uninitialised value(s)" 13:44 <+bridge> [ddnet] ah 13:44 <+bridge> [ddnet] yea i kinda swallowed that sry 13:44 <+bridge> [ddnet] but that looks initialized to me 13:45 <+bridge> [ddnet] i'd make sure u have a fake screen 13:45 <+bridge> [ddnet] GetScreen 13:45 <+bridge> [ddnet] MapScreen 13:45 <+bridge> [ddnet] ScreenWidth 13:46 <+bridge> [ddnet] ah ye 13:46 <+bridge> [ddnet] i wasnt sure about that 13:46 <+bridge> [ddnet] because then other code might do gfx stuff and allocate shit if it finds a screen 13:47 <+bridge> [ddnet] i'd say if its null, we devide by null somewhere 😄 13:47 <+bridge> [ddnet] yas 13:47 <+bridge> [ddnet] i doubt our impl is that safe, it just assumes a working screen 13:47 <+bridge> [ddnet] i had that issue in vanilla 13:50 <+bridge> [ddnet] wait uhm what exactly would u do? 13:50 <+bridge> [ddnet] initialize m_screenwidth and desktop widht with like 800 and height with 600 13:50 <+bridge> [ddnet] and return something at getscreen 13:51 <+bridge> [ddnet] getscreen is a void 13:51 <+bridge> [ddnet] it takes them as parameter 13:51 <+bridge> [ddnet] u mean fill the pointers given? 13:51 <+bridge> [ddnet] ya 13:51 <+bridge> [ddnet] ``` 13:51 <+bridge> [ddnet] 13:52 <+bridge> [ddnet] *pTopLeftX = 0; 13:52 <+bridge> [ddnet] *pTopLeftY =0; 13:52 <+bridge> [ddnet] *pBottomRightX = 800; 13:52 <+bridge> [ddnet] *pBottomRightY = 600; 13:52 <+bridge> [ddnet] ``` 13:52 <+bridge> [ddnet] smth like this 13:52 <+bridge> [ddnet] i take that 13:52 <+bridge> [ddnet] 4\:3 ? \:D 13:52 <+bridge> [ddnet] 1920 1080 masterrace 13:52 <+bridge> [ddnet] you can also just save what comes in mapscreen 13:52 <+bridge> [ddnet] bcs that's what the client calls anyway 13:53 <+bridge> [ddnet] valgrind warnings still there 13:53 <+bridge> [ddnet] i only added GetScreen tho 13:54 <+bridge> [ddnet] and GetScreenWidht()? 13:54 <+bridge> [ddnet] thats a different class isnt it\`? 13:54 <+bridge> [ddnet] initialize everything from IGraphics 13:54 <+bridge> [ddnet] with valid stuff 13:54 <+bridge> [ddnet] thats the base class 13:54 <+bridge> [ddnet] ``` 13:54 <+bridge> [ddnet] 13:54 <+bridge> [ddnet] int m_ScreenWidth; 13:55 <+bridge> [ddnet] int m_ScreenHeight; 13:55 <+bridge> [ddnet] int m_ScreenRefreshRate; 13:55 <+bridge> [ddnet] float m_ScreenHiDPIScale; 13:55 <+bridge> [ddnet] ``` 14:01 <+bridge> [ddnet] wats high dpi scale 14:01 <+bridge> [ddnet] wats a sane headless value for that 14:02 <+bridge> [ddnet] yay the unconditional jump is gone 14:02 <+bridge> [ddnet] i can connect to servers without a single additional valgrind warning 14:02 <+bridge> [ddnet] poggers 14:02 <+bridge> [ddnet] definitely lost\: 0 bytes in 0 blocks 14:02 <+bridge> [ddnet] indirectly lost\: 0 bytes in 0 blocks 14:03 <+bridge> [ddnet] 1 14:04 <+bridge> [ddnet] except you want a headless hdpi client xd 14:04 <+bridge> [ddnet] yas! 14:04 <+bridge> [ddnet] i have big screen 14:04 <+bridge> [ddnet] big dpi 14:04 <+bridge> [ddnet] yaaaaa 14:04 <+bridge> [ddnet] xxxD 14:08 <+bridge> [ddnet] next step is a fully functional ncurses client \:) 17:49 <+bridge> [ddnet] @heinrich5991 I wanted to write a program using libtw2, noticed it’s teehistorian support doesn’t know about the server_version field of the header 17:51 <+bridge> [ddnet] I ended up having to just skip the magic and use serde_json to read the json. (Kinda annoying since serde_json will by default error on trailing bytes) 17:53 <+bridge> [ddnet] Still better than my earlier ugly solution of looking for `}\x00` 😛 18:36 <+bridge> [ddnet] have any of you used NoSQL databases? I'm trying to think of good uses for it 18:47 <+bridge> [ddnet] none 18:47 <+bridge> [ddnet] i prefer structured data 18:47 <+bridge> [ddnet] i tried mongodb 18:47 <+bridge> [ddnet] imho postgres is rly good 18:47 <+bridge> [ddnet] it supports lot of stuff 18:48 <+bridge> [ddnet] @Learath2 for teehistorian there is also the alternative parser from Zwelf, not sure how they compare https://gitlab.com/zwelf/teehistorian 18:48 <+bridge> [ddnet] included json 18:49 <+bridge> [ddnet] I prefer structured data aswell, which is why I never looked much into nosql stuff. It seems to be fairly popular amongst the web 69.420 crowd so I wanted to know if there were some good example uses for it 18:50 <+bridge> [ddnet] https://www.geeksforgeeks.org/use-of-nosql-in-industry/ 18:50 <+bridge> [ddnet] it doesnt convince me 18:50 <+bridge> [ddnet] any of those arguments tho 18:51 <+bridge> [ddnet] kek 18:51 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/885568206062899290/unknown.png 18:53 <+bridge> [ddnet] https://www.youtube.com/watch?v=b2F-DItXtZs&t=19s 18:53 <+bridge> [ddnet] lmao 18:53 <+bridge> [ddnet] the internet is beautiful 18:54 <+bridge> [ddnet] xdd "mongo db is web scale" 18:54 <+bridge> [ddnet] this video is gold 18:54 <+bridge> [ddnet] actually educational too 18:55 <+bridge> [ddnet] MongoDB seems like a very easy way to make a working-ish product extremely quick. The only benefit I see from it is the extreme scalability (which is due to having on ACID guarantees at all, how desirable that is is at best questionable) 18:55 <+bridge> [ddnet] due to not* 18:55 <+bridge> [ddnet] u mean right? 18:56 <+bridge> [ddnet] I meant s\/on/no/ 18:57 <+bridge> [ddnet] listen to the video xd 18:59 <+bridge> [ddnet] "Relational dbs don't scale" 18:59 <+bridge> [ddnet] This video is 10/10 19:00 <+bridge> [ddnet] ye 19:00 <+bridge> [ddnet] its a series btw 19:00 <+bridge> [ddnet] xd 19:00 <+bridge> [ddnet] it gets even better at the end 19:19 <+bridge> [ddnet] When is having a non-reliable database even desirable? 19:29 <+bridge> [ddnet] when you hadn't structured your data xd 19:30 <+bridge> [ddnet] there are two way to use any nosql solution: 19:30 <+bridge> [ddnet] you have no brain 19:30 <+bridge> [ddnet] your deadline is really near or your project manager has no brain 19:34 <+bridge> [ddnet] Actually now that I think about it when do you ever have data that's not at all relational in an application? 19:35 <+bridge> [ddnet] If the data has no relation to anything in your application, why are you storing it? 19:39 <+bridge> [ddnet] Ah, you know where it could be useful? Search engines, it could be more efficient to store text as a blob of non-structured data if you want to search through it and don't care at what point a match occurs 20:06 <+bridge> [ddnet] when your service becomes really big, you have no other choice probably 20:06 <+bridge> [ddnet] even Discord uses Cassandra 20:06 <+bridge> [ddnet] https://blog.discord.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7 20:09 <+bridge> [ddnet] if u are that big maybe 20:09 <+bridge> [ddnet] but u probs wont ever need it 20:12 <+bridge> [ddnet] luckily 😄 20:12 <+bridge> [ddnet] it's written in Java 20:22 <+bridge> [ddnet] I don't see why you can't use a rdbms to store things like discord messages that are pretty structured, you can even tack on an elasticsearch index to get good searching on it 20:22 <+bridge> [ddnet] rdbms? 20:23 <+bridge> [ddnet] ah got it 20:23 <+bridge> [ddnet] maybe they don't want to migrate whole database or something 20:23 <+bridge> [ddnet] or just lazy 20:23 <+bridge> [ddnet] discord team is really lazy it seems 20:24 <+bridge> [ddnet] Oh surely if you are going from mongodb to some other solution it makes sense to go for a document based one, much easier. I just don't see how it's beneficial to give up reliability in order to get scalability, when e.g. postgres can shard just fine and not give it up 20:25 <+bridge> [ddnet] so why would you ever go "oh mongodb is perfect for my application"? 20:25 <+bridge> [ddnet] i don't think they decided to use mongo with such phrase 20:25 <+bridge> [ddnet] it was like "lol cool technology lets use it" 20:25 <+bridge> [ddnet] "anyway its small app that will die in near future" 20:26 <+bridge> [ddnet] who knows 20:26 <+bridge> [ddnet] because mongodb made a rly strong marketing campaign 20:29 <+bridge> [ddnet] actually we can ask same shit for electron 20:29 <+bridge> [ddnet] why discord team decided to use it - fast scalable cross-platform 20:30 <+bridge> [ddnet] why discord team decided to use mongodb - scalable as mongo said xd 20:30 <+bridge> [ddnet] https://en.wikipedia.org/wiki/CAP_theorem hm, apparently if you don't give up consistency you can't have availability 20:31 <+bridge> [ddnet] Now is availability actually desirable? When is stale information acceptable? 20:33 <+bridge> [ddnet] now that we talking about scalign and stuff 20:33 <+bridge> [ddnet] https://mangadex.dev/mangadex-v5-infrastructure-overview/ 20:33 <+bridge> [ddnet] this is a rly good blog post 20:33 <+bridge> [ddnet] (tldr how to handle shitload of users with a low budget) 20:33 <+bridge> [ddnet] its interesting