20:32 < bridge> :FeelsCross: 20:32 < bridge> actually, as long as you have a loop in a system, you can probably use some control theory on it 20:40 < bridge> Is there even any value to representing a compiler as a dynamical system? It'd be such a high order system, could you even solve a matrix of that size even? 20:42 < bridge> well, for compilers i don't really know 22:38 < bridge> https://docs.rs/effing-mad/0.1.0/effing_mad/fn.transform.html 22:38 < bridge> kek 22:38 < bridge> https://news.ycombinator.com/item?id=35358336 23:39 < bridge> wtff 23:49 < bridge> @Jupeyy_Keks do you think it matters if I write a 2KB gpu buffer each frame or a 8KB? 23:50 < bridge> depends 23:50 < bridge> also, if I have two positive floats a and b, which are neither NaN nor inf, then a % b < b should hold true 23:51 < bridge> no? 23:51 < bridge> i dunno, but from feeling i'd say yes 23:53 < bridge> about this 23:53 < bridge> 23:53 < bridge> it will not kill perf completely if u upload it at once, the size is not the problem if that's your concern 23:53 < bridge> 23:53 < bridge> only thing i can say is, that with OpenGL i never matched OGL 1.x perf(which has API that directly takes RAM pointer) 23:53 < bridge> with vk i could match and beat it 23:54 < bridge> yeah the thing I was considering is whether the size actually matters 23:55 < bridge> I would have supposed that those numbers are so small that it won't really make a difference 00:14 < bridge> Yeah^^ 00:19 < bridge> :jaouis: 00:20 < bridge> i saw this out of contexy 00:20 < bridge> i saw this out of context 08:18 < bridge> % is not defined for floats 08:24 < bridge> Shouldn't it be a % b <= b? 08:24 < bridge> When a is smaller than b? 08:24 < bridge> Nvm i m dumb 08:33 < bridge> give me example floats because I can't image some rn 08:34 < bridge> you are dividing a with b and check if the recess is bigger-equal than b 08:34 < bridge> for what do you need this 08:35 < bridge> oh yea that makes sense 08:37 < bridge> 100 % 1 = 0 -> 0 < 1 = true 08:37 < bridge> 1 % 100 = 99 -> 99 < 100 = true 08:37 < bridge> The whole operation is moot 08:38 < bridge> 1.0f % anything is undefined because it uses the remainder of integer division 08:38 < bridge> It will error on compile 08:49 < bridge> 1. we talk about a custom shading language, not about cpp or smth 08:49 < bridge> 2. GLSL defines a modulo between floats like this: "mod returns the value of x modulo y. This is computed as x - y * floor(x/y)." 08:51 < bridge> ahh 09:04 < bridge> for webgpu the definition is: 09:04 < bridge> "e1 % e2 : T 09:04 < bridge> If T is a floating point type, the result is equal to: 09:04 < bridge> e1 - e2 * trunc(e1 / e2)" 09:04 < bridge> 09:04 < bridge> GLSL: 09:04 < bridge> "The operator modulus (%) is not defined for any other data types (non-integer types)." 09:04 < bridge> 09:04 < bridge> So maybe better use the mod function instead. Or look into the WGPU shading language spec 09:39 < bridge> @fokkonaut 09:39 < bridge> Hi, I want to ask you if you have done any optimizations in your server with threading? 09:39 < bridge> I know there are a few places that can be threaded: 09:39 < bridge> 1. network thread 09:39 < bridge> 2. server info update thread 09:39 < bridge> 3. snap thread 09:39 < bridge> 4. translated map update thread 09:39 < bridge> But half of these items seems to me very insecure for multithreading, so I want to know if you have done any of this list. 09:39 < bridge> 09:39 < bridge> To test I wrapped PumpNetwork in a thread (similar to how it is done in BW) and it works, but it seems to me that this is an extremely controversial solution... 09:39 < bridge> If you're interested, here's the commit https://github.com/0xfaulty/ddnet/commit/3b591364ffdff6e3eb265dcbf809845f2510c484 09:41 < bridge> I never checked how its done in BW, could you explain a bit? 09:41 < bridge> And I had a prototype of Snap threading once, it worked, but it was not thread safe and I didnt want to create like huge copies of everything in order to fill the snaps correctly from a thread 09:43 < bridge> The map update algorithm would probably be very easy to put in a thread, but at least my version of it isnt so expensive. 09:43 < bridge> 09:43 < bridge> Snapping and Networking are the most expensive things in tw 09:45 < bridge> receiving and processing data from the network takes place in a thread, but triggers data reception in the main thread, done on lock+semophor, in my commit I have done this as I understand how it should work 09:46 < bridge> Really? Could you tell me where exactly? Havent checked their code buts its somewhere on my desktop 09:46 < bridge> it would be a solution to my issue aswell 09:46 < bridge> could you just look at my commit by link?) 09:47 < bridge> that I sent u above 09:47 < bridge> Is that exatcly the way bw does it? 09:49 < bridge> > 2. GLSL defines a modulo between floats like this 09:49 < bridge> > GLSL: "The operator modulus (%) is not defined for any other data types (non-integer types)." 09:49 < bridge> 09:49 < bridge> ???????? 09:49 < bridge> which one is it 09:49 < bridge> mod 09:50 < bridge> but he doesnt use GLSL, just to be clear about that 09:56 < bridge> very similar, in original approach it pass pointer to CServer to thread and have duplicated code copied from PumpNetwork, but inside thread method, so like pServer-> so I think yes, I just refactored it without code duplication and make crossplatform, if I didn't miss something ofc 10:01 < bridge> But that isnt thread safe is it? 10:03 < bridge> yes, at least I don't see any thread safe mechanisms 10:04 < bridge> xd 10:05 < bridge> Maybe it would be good to only thread the net_udp_recv function 10:05 < bridge> then use the data from it just as usual, and only run the thread again once the old data got processed 10:06 < bridge> or keep the thread running, but block it with a global variable or smth from receiving 10:06 < bridge> think im gonna do that later 10:08 < bridge> I think about this also, maybe will try this later also 10:08 < bridge> sounds too complex imo 10:08 < bridge> Is it performance expensive running and stopping this thread like every tick? 10:09 < bridge> I would just pass a pointer to a variabe 10:09 < bridge> Bool run 10:09 < bridge> It would only read this value from the thread 10:10 < bridge> ah, I didn't quite read your answer correctly, but we need to test anyway 10:10 < bridge> Maybe making it volatile works here, I think I saw volatile being used as a guard in another function 10:10 < bridge> yea 10:12 < bridge> atomicbool is what u want 10:13 < bridge> network is defs the easiest to put in a thread, if it would also unpack the msgs beforehand it would simplify the game code too 10:14 < bridge> oop didn't write enough context, its in rust. but wrote it just because I found the thought interesting :) 10:17 < bridge> bad 10:17 < bridge> it looks strange to me that ddnet does not threaded any of the places I described earlier, but maybe I don't know what either, at the moment I am extremely unsure how this will affect client prediction for example 10:17 < bridge> If you know of anyone who can be mentioned who is knowledgeable about this, let me know 10:19 < bridge> if u mean this 10:19 < bridge> 1. should work 10:19 < bridge> 2. could work, but makes the code much more complex since suddenly all game state needs to be sharable between threads 10:19 < bridge> 3. will probably make it even more complex and much harder to do thread safe 10:19 < bridge> 4. sounds unsafe if you dont do synchronization properly after the update (e.g. before it is used the next time) 10:20 < bridge> many things that could be threaded arent due to physics 10:20 < bridge> i also doubt that except network, which involves a system call and kinda lot of copying you will gain a lot by these 10:20 < bridge> iirc 10:20 < bridge> float calculations in the game core are probably more expensive 10:21 < bridge> in this regard bevy engine is amazing it allows u to define systemd and their happens before and after order 10:21 < bridge> in this regard bevy engine is amazing it allows u to define systems and their happens before and after order 10:23 < bridge> Networking is definitely worth it. At least for me, cuz I have a second socket on port 8304 to bring serverinfo 2/2 to 0.7 10:23 < bridge> well i am always bit sceptical tbh 10:23 < bridge> 10:23 < bridge> movement can often be split from stuff like chatting/UI related stuff 10:23 < bridge> 10:23 < bridge> and if u have expensive calculations somewhere... sure maybe its worth it 10:24 < bridge> 10:24 < bridge> but generally mutices and all sync techniques have quite a bit of overhead 10:24 < bridge> Very noticable delays when calling net udp recv twice a tick 10:26 < bridge> about point 2 10:26 < bridge> I mean collecting information about the server and players. There's a fairly limited set of data that need to be shared with thread once every n seconds. And the thread will send this data until the next update, won't it? 10:26 < bridge> 2 would work imo 10:27 < bridge> @Faulty i can suggest you one thing that often works: 10:27 < bridge> 10:27 < bridge> Try to look what data is needed in the thread and simply make a full copy. 10:27 < bridge> 10:27 < bridge> e.g. memcpy is extremly optimized and if your calculation is expensive enough its still easier to copy the full state and process ur stuff in a thread and then maybe copy it back 10:28 < bridge> i dunno how exactly your code works. 10:28 < bridge> 10:28 < bridge> But alone the fact that it shares data between threads, while the other thread writes to it is extremly unsafe 10:28 < bridge> Its about DDNets serverinfo 10:28 < bridge> yes 10:29 < bridge> yeah, but if someone renames for example it might create weird behavior 10:29 < bridge> 10:29 < bridge> Even if it might not crash your server. 10:29 < bridge> 10:29 < bridge> Anyway, best is you run your server with TSAN to be sure 10:30 < bridge> it will catch stuff u dont see easily if you arent very experienced with threading 10:31 < bridge> 10:31 < bridge> c++ is really not the best language for threading that involves shared data like in this case. 10:31 < bridge> 10:31 < bridge> and with rust for example you probably would have a hard time to even get it to compile and then u'd understand how much more complicated the code must be 😄 10:31 < bridge> xddd 10:31 < bridge> in place locking can also be costly 10:58 < bridge> poggers 10:58 < bridge> super reacted kek 10:59 < bridge> lmao 10:59 < bridge> in 2 days we should release ddnet 2 10:59 < bridge> for april fools 10:59 < bridge> kek 10:59 < bridge> ez 11:00 < bridge> fool the normies 11:00 < bridge> written in javascript for more performance 11:00 < bridge> "We have rewritten ddnet in javascript after extensive debating, we hope you enjoy the new iteration of the game on ur web browsers, with ads to combat ddos, at 30 fps" 11:03 < bridge> "The input delay could not be improved for now and is worse than on V-Sync, maybe we will work on this in the future." 11:03 < bridge> and it uses 8GB RAM 11:04 < bridge> "Need a dummy? Open another Tab and let Chrome use twice as much RAM. Additionally we have added a bitcoin miner in order to keep the servers running!" 11:06 < bridge> Actually so sad this is not supported anymore: http://teewebs.net/ 11:06 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1090925090943799377/image.png 11:06 < bridge> Was the best part of it :sadge: 11:07 < bridge> we still support a webasm version tho 11:07 < bridge> Ew, the old sliders 11:07 < bridge> someone would just need to enable websockets again 11:08 < bridge> The old sliders werent even symetrical, due to floating points 11:09 < bridge> if you move them slightly one side can have less rounded corners than the other 11:09 < bridge> https://aliveclan.de/ddnet/minimal.html 11:09 < bridge> has no internet access tho 11:10 < bridge> Wow, accessing the browser causes huge lags 11:11 < bridge> Or anyting than the main menu 11:11 < bridge> but u on your phone rn? 11:12 < bridge> Work laptop 11:12 < bridge> 32 GB RAM 11:13 < bridge> Is there some C++ to JS conversion tool, or how does it work to convert a full program into this? :D 11:13 < bridge> wasm 11:13 < bridge> web assembly 11:13 < bridge> Ahhh yes 11:13 < bridge> web assembly 11:13 < bridge> so its not javascript anymore, tho it still uses some js 11:14 < bridge> wasm is actually quite cool.. a unix like system in the browser 11:14 < bridge> its cool this kinda stuff works 11:15 < bridge> yeah 😄 11:15 < bridge> i think at some point everything will work through web browsers xd 11:15 < bridge> they are quite powerful already 11:16 < bridge> Btw 11:17 < bridge> did you try xbox cloud gaming? 11:18 < bridge> I tried it with Skate 3 once, but I found the input to be too delayed and the screen had heavy tearing 11:24 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1090929449211543592/RDT_20230330_1123543583594879352715447.jpg 11:24 < bridge> i tried stadia.. for casual games maybe good enough.. but yeah action games no chance 11:25 < bridge> and the compression is ofc not nice.. sometimes a game simply has very noisy textures and they are not captured cleanly 11:26 < bridge> Some day in the future this will be an optimized standard tho, probably :D 11:26 < bridge> wasm is pog, they just need to allow it to modify the DOM without using js 11:26 < bridge> and then js can die in hell 11:26 < bridge> i guess latency will never be gone? so maybe we'll never be able to use it for action games 11:27 < bridge> tru xd 11:27 < bridge> I just found this on the KoG discord. My autism really gets triggered by these guys, cuz on the technical side GORES IS DDRACE xD 11:27 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1090930308511170630/connection_lost_loading_meme.png 11:27 < bridge> Maybe 11:27 < bridge> and rust has first class wasm 11:28 < bridge> yeah but strictly speaking i'd say gores is vanilla movement with freeze and unfreeze 11:29 < bridge> ddrace is a big superset 😄 11:29 < bridge> ddrace > gores 11:30 < bridge> ddnet = { quality gameplay, creative parts, gores parts, even worse parts } 11:30 < bridge> gores = { gores parts, even worse parts} } 11:30 < bridge> ddrace = mapper wants to be creative but the part often makes no real fun xd 11:30 < bridge> 11:30 < bridge> 11:30 < bridge> but yeah ddrace kinda has more potential since it could also simply be gores 11:31 < bridge> exactly 11:31 < bridge> i guess there is a reason why ddrace more shifted to hammer hitting etc. 11:31 < bridge> 11:31 < bridge> ddmax is really always the same xDD 11:32 < bridge> Yeah, not only that but also the gameplay is just not fluid enough for it to be fun imo. 11:32 < bridge> I mean, I dont want to play hh maps only, but if I play smth else then it has to be nice parts still 11:32 < bridge> hh ftw tho 11:33 < bridge> corneum maps for example are often very creative, fun and not comparable to hh maps 11:33 < bridge> true 11:33 < bridge> sickcunt maps pog 11:34 < bridge> naufrage used to be THE map back then imo 11:34 < bridge> yeah 11:34 < bridge> it was top 11:34 < bridge> the naufrage 2 11:34 < bridge> yes 11:34 < bridge> and then nostalgia 11:34 < bridge> oh yes 11:34 < bridge> it all started with this imo 11:34 < bridge> that map was s big hit 11:34 < bridge> that hf part 11:34 < bridge> rly hud 11:34 < bridge> xD 11:34 < bridge> gud 11:35 < bridge> hud 11:35 < bridge> cl_showhud 11:35 < bridge> cl_show_ninja 0 11:35 < bridge> best 11:35 < bridge> never remove, thanks 11:38 < bridge> naufrage and nostalgia are still some of the best maps, nothing mind blowing but really well executed and fun classic ddrace gameplay 11:45 < bridge> Funny how nameless tee never really had explosive growth, its pretty linear 11:45 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1090934935394730085/points_nameless_tee.png 11:47 < bridge> neither did it have times where no points were gained 12:39 < bridge> nameless tee so addicted (I'm pretty sure these are stats since 2021) 12:39 < bridge> 12:39 < bridge> Showing overall playtime for player, `nameless tee` ``` 12:39 < bridge> Map Playtime (hours) 12:39 < bridge> ------------- ---------------- 12:39 < bridge> Multeasymap 12089 12:39 < bridge> ctf5 5764 12:39 < bridge> TeeTown 4198 12:40 < bridge> Kobra 3663 12:40 < bridge> Blmap4 2763 12:40 < bridge> BlmapChill 2724 12:40 < bridge> fng 2708 12:40 < bridge> Copy Love Box 2370 12:40 < bridge> Tutorial 1554 12:40 < bridge> blmapV3ROYAL 1470 12:40 < bridge> Grandma 1279 12:40 < bridge> Kobra 2 1275 12:40 < bridge> Sunny Side Up 1155 12:40 < bridge> Kobra 4 1152 12:40 < bridge> Sunny Land 1142 12:40 < bridge> 12:40 < bridge> Category Playtime (hours) 12:40 < bridge> ---------- ---------------- 12:40 < bridge> Novice 31464 12:40 < bridge> Brutal 6532 12:40 < bridge> Moderate 5835 12:40 < bridge> Solo 2056 12:40 < bridge> Oldschool 1792 12:40 < bridge> DDmaX.Next 1634 12:40 < bridge> Insane 1389 12:40 < bridge> Dummy 1080 12:40 < bridge> Top 6 👍 12:41 < bridge> whose top5 12:41 < bridge> whos top5 12:41 < bridge> Can you share the query, im too lazy to write it :okSanya: 12:41 < bridge> blmap4 :( 12:42 < bridge> this is from a custom bot made by furo, not a query i made 12:42 < bridge> a 12:42 < bridge> !bencie show results 12:42 < bridge> 💀 12:42 < bridge> bot moment 12:42 < bridge> :think_bot: 12:42 < bridge> discord bot 12:42 < bridge> :think_bot: 12:42 < bridge> discord bot* :justatest: 12:43 < bridge> bot == bot || bot != bot ?? 12:43 < bridge> True 12:43 < bridge> xD 12:43 < bridge> return true; 13:32 < bridge> <<~{Barsik}~>> furo? 13:32 < bridge> <<~{Barsik}~>> this bot somehow knows that i played on 2xp_std 13:32 < bridge> <<~{Barsik}~>> its a secret information :troll: 15:15 < bridge> can't you keep a spectator bot on all of your servers that record a demo that could be used as proof for #reports? 15:15 < bridge> just thought about it. sounds smart. 15:16 < bridge> can't you keep a spectator bot on all of your servers that record a demo that could be used as proof for #reports or to look up by a moderator? 15:17 < bridge> you could wipe the demo every hour or so. and even change a tiny bit of the server code to hide the spectator name. 15:18 < bridge> you could wipe the demo every hour or so to not fill disk space. and even change a tiny bit of the server code to hide the spectator name. 15:20 < bridge> you don't need a spectator bot 15:20 < bridge> you need one 15:20 < bridge> because ask deen 15:20 < bridge> why that lol when inputs are sent to server 15:21 < bridge> all the footage players provide doesn't get trusted 15:21 < bridge> because it could be faked 15:21 < bridge> just save inputs & play them again 15:21 < bridge> yea that's what they should have 15:21 < bridge> thought a demo does exactly that 15:21 < bridge> but then remembered it only records your tee 15:22 < bridge> you would need a demo that records everyone 15:22 < bridge> if that is possible 15:22 < bridge> you would need a demo that records everyone in a single file 15:28 < bridge> and the dream would be that the discord bot is capable of accessing these and rendering starting from a timestamp that people reporting someone would provide 15:29 < bridge> obviously a staff only command 15:34 < bridge> thats teehistorian 15:35 < bridge> we have terabytes of data 15:35 < bridge> but we dont use it yet 15:35 < bridge> cuz we dont have the tool to reproduce it iirc 15:35 < bridge> https://tenor.com/view/do-it-what-are-you-waiting-for-determined-angry-gif-5247874 15:35 < bridge> gib time & money please 15:35 < bridge> mostly time though 😄 15:36 < bridge> i can give money and code (in exchange for example data to parse - can be anonymized or whatever) 15:36 < bridge> i can give money and code (in exchange for example data to parse to develop with - can be anonymized or whatever) 15:41 < bridge> Isnt that the same case for server demos? Or can they be played in the meantime 15:42 < bridge> I mean, that we dont have a tool to play it* 16:13 < bridge> <<~{Barsik}~>> teehistorian is more accurate 16:14 < bridge> @Learath2 what was your control theory question btw? 16:14 < bridge> If one of you does the remaining part of my degree for me I can get the teehistorian thing done, np 16:14 < bridge> I was looking for some deeper intuition in the controllable canonical form. It feels so extremely structured yet I fail to grasp how it works 16:15 < bridge> hmm, probably not called lioke that in french, that doesn't ring a bell 16:15 < bridge> It's technically unimportant, I can just memorize it and go on but I find that not to be learning at all 16:15 < bridge> It's a way to realize a system given it's transfer function. One of the many possible realizations 16:17 < bridge> It's the realization where all the input is injected through one single state variable 16:17 < bridge> cant find anything in my files 16:17 < bridge> but looking at them reminded me why i didn't like control throey 😄 16:18 < bridge> I find it rather elegant that you can actually formally answer questions like reachability for states of very complex systems 16:19 < bridge> Though I also despise it because I have to study it. Things become very painful for me when I have to do them and it's at someone elses pace 16:19 < bridge> ah, i think canonical means it's the form that allows you to derive all system parameters 16:20 < bridge> especially, you can try to control only one of the ouput if there are several, without touching the others 16:20 < bridge> you just have to invert the system, it should be solvable in all cases i believe 16:20 < bridge> otherwise, the system is non linear 16:20 < bridge> There isn't just one canonical form though. There is also observable canonical form 16:20 < bridge> this one is different 16:21 < bridge> the first one is if the system is controllable, like you can literally choose the output of the system with the correct set of inputs 16:21 < bridge> observable means that by just having the outputs, you can deduce the inner system state variables 16:22 < bridge> some variables may be hidden and not retrievable from outputs, in which case the system is not observable (but still controllable) 16:22 < bridge> some variables may be hidden and not retrievable from outputs, in which case the system is not observable (but may still be controllable) 16:23 < bridge> i cant find any example out of my head, but there are probably plenty of them 16:24 < bridge> i hope i helped you, not my field of expertise 16:25 < bridge> Not particularly in this case, but it did help me with another question I've been pondering 16:28 < bridge> What question is open 16:28 < bridge> What question is open still 16:28 < bridge> You talked about that controller thing for two days now. I didn't follow. 16:40 < bridge> My question is very abstract anyway, it's not easy to answer. I'm just looking for how people came up with the CCF realization of a system without resorting to mathematical trickery 16:48 < bridge> e.g. you have `H = Y/U => UH = Y => UH = CX + DU => H = CX/U + D => H = C((sI-A)^{-1}(x(0) + BU))/U + D` H, U, X are functions of s, x is a function of t, H is known, how would you go about picking A, B, C and D 16:48 < bridge> Picking a D is trivial, make the transfer function strictly proper and D can just be set equal to whatever remainder you have from the numerator 16:50 < bridge> I love how random topics are generated here everyday 16:50 < bridge> I wonder where the CCF first appeared anyway, maybe the person who first documented it documented what he was thinking about 16:52 < bridge> There are just too many free variables, you just have to set some things and solve for the rest, but I don't know what they set, or why they set it that way 16:52 < bridge> Y is output, X is state matrix, C is command transfer, U is your input irrc 16:52 < bridge> Y is output, X is state matrix, C is command transfer, U is your input iirc 16:52 < bridge> yep 16:52 < bridge> do you know Max Planck? 16:52 < bridge> he did something like that as well 16:53 < bridge> he just used a letter that would resolve itself in the end 16:53 < bridge> he just used a letter in his letter that would resolve itself in the end 16:53 < bridge> so it's just easier to handle that way, as each matrix/vector is completely separated from the rest 16:53 < bridge> maybe same applies here 16:53 < bridge> he just used a letter in his formula that would resolve itself in the end 16:53 < bridge> A is the state transition matrix, B is the input matrix, C is the output matrix, D is the feedforward matrix 16:54 < bridge> We are also only working with LTI SISO systems so that simplifies a bit, D is just a scalar, B and C are just vectors 16:54 < bridge> well, as i said, it's to simplify the representation as you don't mix everything 16:55 < bridge> now, no idea who came up with this 16:55 < bridge> or do you want to know how a computer would know these relations? 16:56 < bridge> because I think it doesn't if it isn't too obvious 16:56 < bridge> I want to go from H to A, B, C, D. I understand that there are prescribed forms for figuring out possible A, B, C, D. I'm curious how one figures out one of these themselves 16:56 < bridge> humans ordered them in such a way 16:57 < bridge> oh you want to create formulas yourself? 16:57 < bridge> A computer solving these just employ one of the many prescribed forms. It'll put it in CCF, OCF or JNF 16:58 < bridge> I'm curious how one comes up with the forms in the first place. You only have H to go off from and you need to figure out A, B, C and D which has many more variables than H has 16:58 < bridge> you got the result 16:58 < bridge> then you just think about ways to achieve the same result 16:58 < bridge> but with added math 16:59 < bridge> but with added math. then you want to have everything on one side and the other side gets a new letter 16:59 < bridge> can't you decompose H? 16:59 < bridge> For example, I could say let's get D out of the way, it's a scalar, for an LTI SISO system that is proper I can get a scalar remainder by polynomial long division, if it's strictly proper then D = 0 works. One out of the way, 3 to go 17:00 < bridge> but with added math. then you want to have everything on one side and the other side gets a new letter. usually these are ways to achieve the same result in an easier way. 17:00 < bridge> just write the product, and solve the system seems the way to go 17:00 < bridge> for an LTI SISO system it's given that it'll be in the form of `polynomial/polynomial` where the denominator has higher or equal degree to denominator 17:01 < bridge> I can also turn `(sI - A)^{-1}` into `adj(sI-A)/det(sI-A)` which doesn't help much since I still don't have A alone anywhere 😛 17:02 < bridge> but you can guess from this equation 17:02 < bridge> computes each H term from A term in symbolic form 17:02 < bridge> Though to be fair, I can't solve for `(sI-A)` either so that's not too big an issue 17:02 < bridge> solve the system 17:02 < bridge> i feel like im missing part of the problem 17:03 < bridge> The entire problem is you have `H(s)` for an LTI SISO system. How do you come up with the state space representation A, B, C, D 17:04 < bridge> if you solve to that, you can * (-1) everything so you got A. then sI is negative. then you can do + sI and it's on the other side. 17:04 < bridge> if you solve to that, you can * (-1) everything so you got positive A. then sI is negative. then you can do + sI and it's on the other side. 17:04 < bridge> if you solve to that, you can * (-1) everything so you got positive A. then sI is negative. then you can do + sI and it's on the other side. then you just have A 17:04 < bridge> if you solve to that, you can * (-1) everything so you got positive A. then sI is negative. then you can do + sI and it's on the other side. then you just have A. 17:05 < bridge> Yep, it is fixable if I can solve for that one too, anyway, I'll just keep digging around in many proofs that CCF, OCF do indeed work and maybe I can glimpse some inspiration from those 17:05 < bridge> i mean I mentioned Max Planck 17:05 < bridge> he did something important 17:06 < bridge> and used something that wasn't solved in their formula at first 17:06 < bridge> Or maybe I'm just making a mistake and I should work with the individual differential equations instead of trying to solve the entire system, my linear algebra is weak anyway, so maybe I just don't have the tools 17:06 < bridge> just to have a formula that makes sense 17:06 < bridge> https://en.wikipedia.org/wiki/Planck%27s_law 17:06 < bridge> Problem here is that just leaving one of them unknown doesn't help me much 😄 17:06 < bridge> i don't understand your problem then 17:07 < bridge> you know how to solve to something 17:07 < bridge> so you got all your letters 17:07 < bridge> wasn't that your question 17:08 < bridge> The question is this in it's entirety 17:08 < bridge> The answer you'll find in books will give you a prescription in how to structure your A, B, C and D such that it works. I'm trying to understand how one comes up with such a prescription 17:09 < bridge> did you ask chatgpt 17:09 < bridge> i don't know how to explain 17:09 < bridge> result is what you want 17:09 < bridge> usually the outcome of invented math/known math fundamentals 17:09 < bridge> usually the outcome of invented math/known math and physics fundamentals 17:09 < bridge> so you want to know how to invent a formula? 17:10 < bridge> Well what I want is a deeper understanding. I don't seek a solution to an already solved problem it'd be absurd 17:10 < bridge> well. if we would know. we would invent every single second. 17:10 < bridge> you just observe 17:10 < bridge> and if you are smart you set-up theories 17:10 < bridge> and then you want to prove your theory 17:10 < bridge> existing formulas were invented like this 17:11 < bridge> letters can be compressed math or constants 17:12 < bridge> and that thing that you can have multiple paths to get to a letter is just the outcome of math itself 17:12 < bridge> @Learath2 ask ur teacher maybe xd 17:13 < bridge> I doubt there is no method to figuring out these forms, did some dude just theorize that if he randomly threw the coefficients of the denominator of the transfer function into the bottom row of the state transition matrix he would get a working form? 😄 17:13 < bridge> That'd be absurd 17:13 < bridge> if that is rather new 17:13 < bridge> they probably did 17:13 < bridge> but with a computer! 17:13 < bridge> It's not new. It's ancient at this point 17:14 < bridge> then yes 17:14 < bridge> some smartass woke up one day and wasn't satisfied with their life 17:14 < bridge> I highly doubt that, It's far more likely that they made saner assumptions and solved for the state transition matrix 17:14 < bridge> so that's your answer you are asking for 17:14 < bridge> no? 17:15 < bridge> isn't there a write up about this theory if it is ancient? 17:15 < bridge> wouldn't that tell you how they did come up with it? 17:16 < bridge> But what are the assumptions, D is trivial to solve for, maybe they fixed B? but why is it obvious that the input being injected into only one variable is enough? did they just make a guess there? 17:16 < bridge> Those are the sorts of things I'm curious about 17:16 < bridge> This is actually a good idea, I'll show up to her next office hours, see if she'd be willing to try explain 17:17 < bridge> maybe it's purely experimental 17:17 < bridge> hence the name ABCD 17:17 < bridge> fuck around and find out 17:17 < bridge> isn't that what your teacher taught you? 17:18 < bridge> They do kinda have formal meanings though, not like it's just any variable. A is always used for the state transition matrix 17:18 < bridge> fuck around and find out 17:18 < bridge> https://www.youtube.com/watch?v=mH9NzJwldok 17:18 < bridge> tbh idk what u talking about but its fun to read 17:19 < bridge> Anyway, we steered this channel far off-topic. I'll go dig around in more books, see if I spot something. Again, it is always possible that my linear algebra just isn't good enough yet 17:19 < bridge> #developer is #general but for nerds 17:19 < bridge> so is #off-topic 17:19 < bridge> developer is more 17:19 < bridge> its a way of life 17:19 < bridge> https://tenor.com/view/developers-gif-13292051 17:19 < bridge> matrix users can summarize everything using chatgpt 17:19 < bridge> nerd safespace 17:24 < bridge> lul 17:24 < bridge> ``` 17:24 < bridge> Formulas are often invented through a combination of observation, intuition, and experimentation. In many cases, formulas are developed to describe observed phenomena or to solve specific problems. Once a formula has been developed, it can be tested and refined through further observation and experimentation to improve its accuracy and applicability. 17:24 < bridge> 17:24 < bridge> In the case of the state space representation of an LTI SISO system, the formulae A, B, C, and D are derived from the transfer function H(s) using various techniques, such as the pole-zero cancellation method, the controllability and observability concepts, and the similarity transformation technique. These techniques have been developed through years of research and experimentation, and have been shown to be effective in solving a wide range of p 17:24 < bridge> 17:24 < bridge> To understand how the state space representation is derived, it is important to have a solid understanding of the underlying concepts and techniques used. This often requires a strong foundation in mathematics, particularly linear algebra and differential equations. Once these concepts have been mastered, it becomes easier to understand how the various formulae and algorithms are developed and how they can be applied to solve practical problems. 17:24 < bridge> ``` 17:24 < bridge> exactly what I said 17:25 < bridge> It's impressive how chatgpt can give such political answers 17:26 < bridge> Everything it said is technically completely true 😄 17:26 < bridge> its a politcian 17:26 < bridge> but yea. share what your teacher tells you. 17:26 < bridge> i bet she or he doesn't know either 17:26 < bridge> because you would have to invent something to know how you did it 17:26 < bridge> i bet she or he doesn't know either and will give you a similar answer 17:27 < bridge> Not always, sometimes the inspiration is obvious. For example the fast fourier transform 17:27 < bridge> It's trivial to motivate 17:27 < bridge> <<~{Barsik}~>> please don't edit your messages too much on #developer irc bot replicates it everytime you do 17:28 < bridge> <<~{Barsik}~>> chillerdragon will be mad xd 17:28 < bridge> chillerdragon can be as mad as he wants to be 17:28 < bridge> dragons died ages ago 17:28 < bridge> Sure it's hard to come up with if you didn't know it, but as soon as you know it you can also spot the key point in it that makes it possible 17:29 < bridge> Idk what that is. But ChatGPT either explained it to me, or lied to me. 17:29 < bridge> ```The inspiration for the Fast Fourier Transform (FFT) algorithm can be traced back to the seminal work of mathematician Carl Friedrich Gauss, who developed the Discrete Fourier Transform (DFT) in the early 19th century. The DFT is a mathematical technique used to analyze the frequency content of a signal, and it involves performing a series of complex mathematical operations on the signal using Fourier series. 17:29 < bridge> 17:29 < bridge> While the DFT was a powerful tool, it was computationally expensive and time-consuming, especially for large datasets. In the 1960s, Cooley and Tukey independently developed the FFT algorithm, which is a much faster and more efficient way of computing the DFT. 17:29 < bridge> 17:29 < bridge> The key idea behind the FFT algorithm is to break the DFT calculation into smaller, simpler sub-problems, and then use recursion to solve these sub-problems in a more efficient way. By doing this, the FFT algorithm reduces the number of computations required to perform the DFT, making it much faster and more practical for real-world applications. 17:29 < bridge> 17:29 < bridge> The FFT has since become a fundamental tool in many areas of science and engineering, including signal processing, image processing, and numerical analysis. Its development and widespread use have revolutionized the way we analyze and understand complex data sets, and it remains an active area of research and development today.``` 17:29 < bridge> <<~{Barsik}~>> irclogs also get spammed 17:29 < bridge> I am a known spammer sir 17:30 < bridge> https://discord.com/channels/252358080522747904/293493549758939136/1073185154438275142 17:30 < bridge> i should be working 17:30 < bridge> <<~{Barsik}~>> it doesn't make you a hero or something 17:30 < bridge> but life drives me to talk to discord 17:30 < bridge> and be lazy 17:30 < bridge> its ok 17:30 < bridge> never put these words into my mouth 17:31 < bridge> it sort of explains it but it fails to mention why these smaller sub problems are easier to solve, recursion alone wouldn't make it any faster 17:31 < bridge> thats why we need AI 17:31 < bridge> they cant feel lazyness 17:31 < bridge> humans simply weak 17:32 < bridge> Elon Musk wants to stop AI 17:32 < bridge> I'm supposed to be packing a bag, but talking about interesting things is too much fun 17:32 < bridge> so Elon Musk wants to destroy Earth 17:34 < bridge> I wouldn't call that a fail. You just have to know what you are looking for. 17:34 < bridge> Also they probably optimized it in such a way to leave out details because of the limit. 17:35 < bridge> You don't want to get your explanation get cut in half like it does with code 17:35 < bridge> I didn't use "fail" to insult your ai buddy. I used it inplace of "omit" 17:35 < bridge> But if I would ask it why the smaller problems are easier to solve, it probably answers with what you expect it to answer 17:35 < bridge> I'm sure it can deliver the answer if you ask it to elaborate, it's common knowlodge 17:36 < bridge> knowledge* 17:36 < bridge> Excuse you. How dare you assume the AI is my buddy. 17:36 < bridge> https://tenor.com/view/karen-karening-intensifies-done-i-am-done-gif-16742218 19:00 < bridge> oh 19:00 < bridge> i have my magnet yet 19:00 < bridge> from 2 years ago 19:00 < bridge> the og 19:00 < bridge> me2 19:01 < bridge> its on the frame of my door 19:01 < bridge> fridge 19:01 < bridge> xd 19:01 < bridge> @deen can u do tee wiki magnets? 19:01 < bridge> :wiki: 19:01 < bridge> omg i would want one so hard xD 19:01 < bridge> its so good 19:02 < bridge> yeah 19:02 < bridge> epic logo 19:02 < bridge> https://wiki.ddnet.org/images/6/6b/Ddnet-wiki.svg 19:25 < bridge> https://www.reddit.com/r/rust/comments/126qaai/after_years_of_work_and_discussion_once_cell_has/ 19:25 < bridge> @Jupeyy_Keks @ReiTW i warned u all 19:25 < bridge> once_cell > lazy_static 19:25 < bridge> and now in std 19:29 < bridge> but why warn xd 19:29 < bridge> but i cannot imagine a use case rn xd 19:29 < bridge> its often used 19:30 < bridge> a good use case is regex 19:30 < bridge> which wont be needed when all is const 20:38 < bridge> omfg i just remembered i forgot to put my svg thing in a branch so i cant merge anything 20:43 < bridge> i just had a showerthought: god is actually the most fucked person, because everyone says "oh my fucking god" 21:13 < bridge> why not 21:13 < bridge> u can create new branches 21:14 < bridge> git checkout -b pr_new 21:14 < bridge> git reset --hard upstream/master 21:15 < bridge> ohh 21:20 < bridge> deen's inbox: 💯 23:50 <+ChillerDragon> @Jupstar ✪ is saltyElefant mind? 23:57 < bridge> this makes me incredibly happy 23:57 < bridge> 🦒 23:57 < bridge> so i just run these commands in git bash on the folder that has my code? 23:58 < bridge> or do i have to create a new branch in github first? 23:58 <+ChillerDragon> ?? 23:58 <+ChillerDragon> dont create a branch on github 23:59 <+ChillerDragon> create it locally and push it to github using 23:59 <+ChillerDragon> `git push -u remote branchname`