00:18 <+bridge> [ddnet] opera 00:18 <+bridge> [ddnet] edge 00:24 <+bridge> [ddnet] both are just chrome skins 04:37 <+bridge> [ddnet] @heinrich5991 send more useful firefox extensions 07:18 <+bridge> [ddnet] @heinrich5991 I'm an old enough eu citizen that isn't allowed to vote in the eu yet 😛 09:24 <+bridge> [ddnet] @heinrich5991 that works 09:24 <+bridge> [ddnet] update-desktop-database 09:38 <+bridge> [ddnet] I will upgrade to 32GB because of pci passthrough. Sadly the linux kernel is swapping when you have 16GB and give 12GB to the VM even with just a webbrowser on the host. There is ram left, it's just at 85-95% but it's still swapping my browser. I tried playing with swappiness but didn't help. 09:41 <+bridge> [ddnet] @heinrich5991 deen's blog is based on an older version of https://github.com/poole/poole, when they had a single css file without sass, so you might try version 1.1.0 https://github.com/poole/poole/tree/v1.1.0 09:46 <+bridge> [ddnet] i think poole doesn't come with tags 10:20 <+bridge> [ddnet] @timakro is the seemingly empty ram maybe given to the igpu? 10:32 <+bridge> [ddnet] @deen do you know how i can check? 10:32 <+bridge> [ddnet] but i didn't think about that, might be 10:42 <+bridge> [ddnet] i set it in the bios 10:43 <+bridge> [ddnet] okay, i will check in the bios 11:05 <+bridge> [ddnet] Heh: https://github.com/mstorsjo/msvc-wine 11:05 <+bridge> [ddnet] Anyone want to try this out with DDNet? 13:33 <+bridge> [ddnet] ```#define TS Server()->TickSpeed() 13:33 <+bridge> [ddnet] #define TICK Server()->Tick() 13:33 <+bridge> [ddnet] #define GS GameServer() 13:33 <+bridge> [ddnet] #define CHAR(C) (((C) < 0 || (C) >= MAX_CLIENTS) ? 0 : GS->GetPlayerChar(C)) 13:33 <+bridge> [ddnet] #define PLAYER(C) (((C) < 0 || (C) >= MAX_CLIENTS) ? 0 : GS->m_apPlayers[C]) 13:33 <+bridge> [ddnet] #define TPLAYER(C) (((C) < 0 || (C) >= MAX_CLIENTS) ? 0 : (GS->IsClientReady(C) && GS->IsClientPlayer(C)) ? GS->m_apPlayers[C] : 0) 13:33 <+bridge> [ddnet] #define CFG(A) g_Config.m_Sv ## A``` 13:33 <+bridge> [ddnet] this is pretty cool :o 13:37 <+bridge> [ddnet] nice 13:54 <+bridge> [ddnet] There's no reason to use macros for those though 13:55 <+bridge> [ddnet] its faster than typing all that stuff isnt it 13:56 <+bridge> [ddnet] macro magic is harder to read imho 13:56 <+bridge> [ddnet] You can just use a small function and make it inline 13:56 <+bridge> [ddnet] only use macros when necessary 13:56 <+bridge> [ddnet] yeah 13:56 <+bridge> [ddnet] Since macros are simple text replacements you'll run into all sorts of trouble, like multiple evaluations if C is some function 14:01 <+bridge> [ddnet] ive seen this in another mod and found it cool, since i never saw this in teeworlds before 14:06 <+bridge> [ddnet] @ZimE I assume you already use an adblocker (use 'ublock origin') ­– container tabs is also a useful addon 14:07 <+bridge> [ddnet] it allows you to be logged into a single website with multiple accoutns 14:07 <+bridge> [ddnet] :o 14:09 <+bridge> [ddnet] https://addons.mozilla.org/es/firefox/addon/multi-account-containers 14:09 <+bridge> [ddnet] es 14:09 <+bridge> [ddnet] u 14:33 <+bridge> [ddnet] I have an hour or two free, anything that needs fixing? 😛 14:33 <+bridge> [ddnet] the opened issues? 14:33 <+bridge> [ddnet] xd 14:33 <+bridge> [ddnet] that's what I'll do if there is nothing urgent 14:34 <+bridge> [ddnet] idk if theres things to be fixed in my latest commit 14:34 <+bridge> [ddnet] but its not that urgent tho xd 14:35 <+bridge> [ddnet] well your notices are still not thread-safe 14:35 <+bridge> [ddnet] ik xd 14:36 <+bridge> [ddnet] you told me you would leave them like that coz there's actually no things to make that thread safe 14:36 <+bridge> [ddnet] yeah but @heinrich5991 doesn't seem too thrilled about that idea 😄 14:36 <+bridge> [ddnet] how to fix then, do i need to create a thread safe thing idk what? xd 14:37 <+bridge> [ddnet] get rid of the notice 14:37 <+bridge> [ddnet] well you'd need a thread safe queue 14:37 <+bridge> [ddnet] or you could drop the notice yeah 14:37 <+bridge> [ddnet] @jao oof 14:37 <+bridge> [ddnet] but 14:37 <+bridge> [ddnet] how to "notify" the user then 14:38 <+bridge> [ddnet] either way, currently you are leaking m_CurrentNotification 14:38 <+bridge> [ddnet] in console 14:38 <+bridge> [ddnet] oh you aren't hmm 14:38 <+bridge> [ddnet] yea but they won't open console each time they would save a replay 14:38 <+bridge> [ddnet] they need an info on the actual screen 14:38 <+bridge> [ddnet] how do you save a replay if not from console 14:38 <+bridge> [ddnet] key bind 14:39 <+bridge> [ddnet] then they will know to look in console if they want that info 14:40 <+bridge> [ddnet] yeah but they will not do that each time and maybe they will have replay disabled and they will save a replay but not take a look in console, then realize that replay was disabled and they lost the replay 14:40 <+bridge> [ddnet] @jao some feedback that the replay has been recorded is a good idea 14:40 <+bridge> [ddnet] maybe a chat message? 14:40 <+bridge> [ddnet] can we 14:41 <+bridge> [ddnet] chat messages are sent by the server no? 14:41 <+bridge> [ddnet] I don't remember what it's called but the client can print blue local chat messages 14:41 <+bridge> [ddnet] oh really? xd 14:41 <+bridge> [ddnet] client messages 14:41 <+bridge> [ddnet] system messages 14:41 <+bridge> [ddnet] one of these 14:41 <+bridge> [ddnet] do we use that anywhere currently? 14:41 <+bridge> [ddnet] `CChat::ConEcho` 14:42 <+bridge> [ddnet] ok i'll try that way 14:42 <+bridge> [ddnet] I'd first add a method in `CChat` to echo stuff 14:42 <+bridge> [ddnet] then use that, and rewrite `ConEcho` to use that aswell 14:42 <+bridge> [ddnet] ok 14:42 <+bridge> [ddnet] but even that won't be thread safe without a queue :/ 14:42 <+bridge> [ddnet] .. xd 14:44 <+bridge> [ddnet] this isn't too too easy to implement tbh 14:45 <+bridge> [ddnet] yea i imagine 14:45 <+bridge> [ddnet] I mean it's quite easy to implement for your case 14:45 <+bridge> [ddnet] you can just poll for it 14:45 <+bridge> [ddnet] but in general I guess the proper solution is a queue of CJob-like things that get executed in `CClient::Tick` 14:46 <+bridge> [ddnet] but 14:46 <+bridge> [ddnet] the `Engine` already have a queue no? 14:46 <+bridge> [ddnet] a queue of `Job` 14:46 <+bridge> [ddnet] you mean the jobpool? 14:46 <+bridge> [ddnet] ye 14:46 <+bridge> [ddnet] those are ran in threads 14:47 <+bridge> [ddnet] what we need is a queue of jobs that are ran synchronously 14:47 <+bridge> [ddnet] ahh 14:47 <+bridge> [ddnet] currently when you call into the client to do sth from a thread it's quite unsafe 14:47 <+bridge> [ddnet] because you don't know at what point the main thread is in it's execution 14:49 <+bridge> [ddnet] yeah 14:55 <+bridge> [ddnet] is there a way to know when a task has finished other than in the task itself? 14:57 <+bridge> [ddnet] well heinrich rewrote a lot of the job code, but if he didn't remove them I had callbacks available 14:57 <+bridge> [ddnet] those would also be in the thread 14:57 <+bridge> [ddnet] or were they 14:58 <+bridge> [ddnet] idk, look where the callbacks are executed 14:59 <+bridge> [ddnet] you can poll for the jobs state as I said before 14:59 <+bridge> [ddnet] yeah 14:59 <+bridge> [ddnet] yeah heinrich removed the callbacks 😛 15:00 <+bridge> [ddnet] so what i can do is wait for my job to finish then in the client loop when its finished show the notification? 15:00 <+bridge> [ddnet] yeah 15:00 <+bridge> [ddnet] so that its outside of the thread 15:00 <+bridge> [ddnet] yep, that'd work 15:01 <+bridge> [ddnet] atleast until someone gets a decent queue there 15:01 <+bridge> [ddnet] yup, i'll try that then xd 15:05 <+bridge> [ddnet] in hindsight this update system i made is quite horrible 15:05 <+bridge> [ddnet] why didn't anyone stop me? 😄 15:06 <+bridge> [ddnet] idk xd 15:07 <+bridge> [ddnet] @Learath2 my apologies for not warning u 15:09 <+bridge> [ddnet] xd 15:10 <+bridge> [ddnet] I guess it works 16:06 <+bridge> [ddnet] @Learath2 the callbacks can still be had by subclassing IJob or CJob or so IIRC 16:06 <+bridge> [ddnet] @heinrich5991 yeah but they'd be called in the worker thread right? 16:07 <+bridge> [ddnet] yes 16:07 <+bridge> [ddnet] you should poll for completion if you want to do stuff in the main thread 16:07 <+bridge> [ddnet] that's actually a good idea for this PR I think 16:09 <+bridge> [ddnet] @heinrich5991 I think we should maybe get a queue of things to be done in the main thread 16:09 <+bridge> [ddnet] Same as the planned one for the server 16:11 <+bridge> [ddnet] yes, but too much for this PR I guess 16:13 <+bridge> [ddnet] Thats why i suggested he poll 16:15 <+bridge> [ddnet] hmm i think about that but if there's more than 1 job how can i keep track of all of them 16:20 <+bridge> [ddnet] store a list of jobs to poll 16:24 <+bridge> [ddnet] @Learath2 have you continued working on the sql refactor? 16:30 <+bridge> [ddnet] Yes 16:30 <+bridge> [ddnet] i said i would do it but i never did it xd 16:30 <+bridge> [ddnet] Well not too too far yet 16:30 <+bridge> [ddnet] I said I would do it but I never finished 16:30 <+bridge> [ddnet] I started writing all the prepared statements 16:31 <+bridge> [ddnet] Mostly need to code a threadsafe queue but I keep rewriting that 16:32 <+bridge> [ddnet] When making basic components like those i keep scrapping work to get it as good as possible :P 16:32 <+bridge> [ddnet] @Learath2 how would the queue work? 16:32 <+bridge> [ddnet] Fifo, things go in, things go out 16:33 <+bridge> [ddnet] but still, when u are executing the task in a thread u shouldnt access the gameclient cuz its not thread safe right? 16:33 <+bridge> [ddnet] Yeah the thread puts a callback in the queue 16:34 <+bridge> [ddnet] When it gets executed it'll be in the main thread 16:34 <+bridge> [ddnet] hmm 16:35 <+bridge> [ddnet] so u want to make something like a asynchronous main loop or smth 16:35 <+bridge> [ddnet] ? 16:36 <+bridge> [ddnet] In the run loop 16:36 <+bridge> [ddnet] After/before everything is done look at the queue 16:37 <+bridge> [ddnet] If there are things to do, do them 16:37 <+bridge> [ddnet] Preferably limit it to a couple tasks so that the frametime isnt too long 16:37 <+bridge> [ddnet] so its purpose is not for multithreading ah 16:37 <+bridge> [ddnet] just toqueue tasks 16:38 <+bridge> [ddnet] Well its mostly to allow worker threads to communicate with the main thread in a safe way 16:46 <+bridge> [ddnet] bru my github is full xd 16:46 <+bridge> [ddnet] Storage: 1.41 GB / 1 GB (141%) 16:47 <+bridge> [ddnet] wtf 1GB is max 16:47 <+bridge> [ddnet] 😂 17:28 <+bridge> [ddnet] Tf are you storing? 17:28 <+bridge> [ddnet] his bots 18:15 <+bridge> [ddnet] only some of my cutted tw demos 18:15 <+bridge> [ddnet] oh and my maps 18:16 <+bridge> [ddnet] screenshots... 18:16 <+bridge> [ddnet] medias 18:17 <+bridge> [ddnet] i probably have to setup my own git server agian ._. but lazyness and im scared that i kill my server one day 18:19 <+bridge> [ddnet] any ideas how to sync tw data for free? 19:19 <@deen> tw data? 19:19 <@deen> rsync, unison, git? 22:19 <+bridge> [ddnet] oop 22:19 <+bridge> [ddnet] 22:19 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/582664165446123530/unknown.png 22:19 <+bridge> [ddnet] what is that 😂 22:39 <+bridge> [ddnet] with siO nothing is surprising 22:51 <+bridge> [ddnet] its weird tho xd 23:53 <+bridge> [ddnet] again 23:53 <+bridge> [ddnet] 23:53 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/582687974345408513/unknown.png 23:54 <+bridge> [ddnet] 23:54 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/582688012790399009/unknown.png 23:58 <+bridge> [ddnet] ok when i'm in solo hookline does shit, when i'm not everything is fine