very well made and informative videos, really suprised you don't have any viewers
@bytevigor12 күн бұрын
Thank you so much for your kind words and support! I’m glad you found the videos informative. Building an audience takes time, but comments like yours mean a lot and keep me motivated to keep improving and sharing valuable content. 😊
@ghanembenazzouz324512 күн бұрын
Simple and effective tutorial. It's clear in your mind so you expressed it clearly.
@kungao362318 күн бұрын
Really good series, please keep making more videos like this!
@akshisharma-r3m22 күн бұрын
Thank you so much 😊😊
@naveensundar025 күн бұрын
perfect!
@lpacha33193Ай бұрын
Doesn't ChatMediatorImpl violate single responsibility rule of SOLID principles?? by having 2 behaviors addUser and sendMessage?
@bytevigorАй бұрын
Thank you for the question! Actually, ChatMediatorImpl does not violate the Single Responsibility Principle because its core responsibility is to act as a mediator between users. Both addUser and sendMessage are essential functions within the scope of a mediator’s duties. If these functionalities were split into separate classes, it could lead to scattered responsibilities and increased complexity. However, as the system grows more complex, we could further optimize the design-for instance, by extracting user management or message processing logic into dedicated classes.
@MrJloaАй бұрын
Read only -- use SSE. Need duplex -- use sockets. Why would u need polling? Cant find a single reason to use polling
@bytevigorАй бұрын
Great question! While SSE, WebSockets are more efficient for many use cases, there are still scenarios where polling can be a valid or even necessary choice: 1. Simplicity: Polling is easier to implement and debug, especially for small-scale applications or quick prototypes where advanced bidirectional communication isn’t required. 2. Limited Server Capabilities: Not all servers support persistent connections like WebSockets or SSE. Polling works on virtually any HTTP infrastructure. 3. Firewall/Proxy Restrictions: In environments with restrictive firewalls or proxies that block WebSockets or SSE, polling can still be a reliable fallback. 4. Low-Frequency Updates: If the frequency of updates is low (e.g., every 30 minutes or more), polling is often sufficient and avoids the overhead of maintaining persistent connections. 5. Legacy Systems: Polling can be the only option when working with legacy systems that don’t support more modern protocols. While polling isn’t as efficient as the other methods, it’s not obsolete-it’s just another tool in the toolbox for specific use cases. 😊
@johnrony7962Ай бұрын
Very underrated channel. Short, succinct and to the point. Absolutely shocking that it doesn't have many more views.
@maheshdhavalshankh5974Ай бұрын
A very good explanation in short time. ❤
@yadav-rАй бұрын
Wow. thank you so much.
@prashlovessamosaАй бұрын
thanks
@nfastsАй бұрын
The complex topic explained very well with visuals
@hanik47002 ай бұрын
Great example! Thanks!
@mgk2102 ай бұрын
Why we are not initialising dvd, projector, sound system objects inside HomeTheaterFacade class directly instead of passing as parameter ??
@cameronmalcolm42182 ай бұрын
Thank you so much. This video made it make so much sense
@timur28872 ай бұрын
Why there is always AWS... It's not the only option
@timur28872 ай бұрын
Wouldn't it be more effective making CoffeeMachineState class static instead passing CoffeeMachine instance each state method invocation?
@helloworld47882 ай бұрын
I'm a big fan of your videos. The examples are so easy to understand. I can't wait for more videos about system design.
@bytevigor2 ай бұрын
Thanks so much! More system design videos are coming-stay tuned!
@ilyess51312 ай бұрын
Thank you William.
@bytevigor2 ай бұрын
Welcome!
@amitabhsarkar95712 ай бұрын
You tutorials are great. Can you create a workflow where you show how you have created the a tutorial video, how much work you put behind the sean and how we can make automate it.
@bytevigor2 ай бұрын
Thank you! I’m glad you enjoy the tutorials. Right now, each video is manually created, so there’s a lot of work involved. Automation isn’t possible with the current process, but here’s a quick look at my workflow: I start by writing the script, then use ChatGPT to refine it, generate the voiceover with Fliki, create animations in MotionCanvas (or Revideo) through programming and sync with the audio, add subtitles in CapCut, and finally upload to KZbin. I’m working on getting faster as I get more familiar with the tools!
@helloworld47882 ай бұрын
Loved all the videos about system design, are there any other videos coming on system design
@bytevigor2 ай бұрын
Yes, I’m currently working on some system design case study content. Stay tuned!
@helloworld47882 ай бұрын
@@bytevigor thank you so so much, :)
@fullmentaljacket21512 ай бұрын
great tutorial series, thank you for creating it!
@senthilvel48793 ай бұрын
Keep going on doing videos like this. I searched on these topics. But i never seen a video with these much of good quality. Looking forward more videos. And i am new subscriber !!!
@bytevigor2 ай бұрын
Thanks, will do! I’m currently working on some system design case study content. Stay tuned!
@senthilvel48793 ай бұрын
Nice video
@JaisinghaniSagar3 ай бұрын
Is this not violating single responsibility principle?
@bytevigor3 ай бұрын
The Facade Design Pattern doesn’t violate the Single Responsibility Principle (SRP); instead, it aims to simplify a complex system by providing a streamlined interface, which aligns with SRP. Here’s how it maintains SRP: 1. Facade Role: The facade itself has a single responsibility-to offer a simplified interface. It doesn’t take on the complex internal logic of the subsystems it encapsulates. 2. Subsystems: Each subsystem class still retains its individual responsibility and handles its own complexity. The facade simply coordinates interactions between these subsystems without modifying or taking over their responsibilities. 3. Benefits to Clients: By encapsulating complex subsystems behind a single interface, the facade allows client code to avoid directly interacting with multiple classes, reducing coupling and making the client’s responsibility more focused. This design allows SRP adherence by keeping the facade focused on managing communication between client and subsystems without overloading it with tasks beyond that interface role.
@helloworld47883 ай бұрын
OMG, your videos are top-notch! I learned design patterns and system design from your videos. Now I'm working on a Revideo clone. Thank you so, so much! Could you please upload more backend-related projects?
@bytevigor3 ай бұрын
Noted, thank you for the feedback.
@packagemain3 ай бұрын
Great video! Just published one as well which dives into the main building blocks of Server-Sent Events in Go. kzbin.info/www/bejne/pKfMm5Zrf5J9d7M
@anthonya8803 ай бұрын
Please consider making System Design Primer playlist. Something similar to 'Jordan Has No Life' Channel. We would love to see your explanations. Great work so far.
@bytevigor3 ай бұрын
Noted, thank you for the feedback🙏
@centerfield63393 ай бұрын
Sse and wss also need to maintain a list of stuff to send that hasn't already been sent to a client. Short polling doesn't need that.
@indarkerimota663 ай бұрын
What happened to your "Create Videos with Code" videos?
@bytevigor3 ай бұрын
I’m considering focusing this English channel on system design-related content. As for ‘Create Videos with Code,’ I’m thinking of not making English content and instead focusing only on Chinese, posting it on a video platform in China. The main reason is that my spoken English isn’t very good, and creating videos entirely with Revideo and TTS is quite slow. Sorry!
@bytevigor3 ай бұрын
For MotionCanvas related tutorial, I recommend this channel: www.youtube.com/@tomkotech
@indarkerimota663 ай бұрын
@@bytevigor I discovered your channel recently and you really explain things very well. I hope you come back in the future! To motivate you, there are Indians who surely speak worse English than you. :D.
@98494583003 ай бұрын
Great content... Please post more videos with all concepts. Thank you again :)
@ChandanNayak-lq1pd4 ай бұрын
Great one Subscribed , could you provide the GitHub code link please?
@renanvaz6154 ай бұрын
Great content. Continue with this good work.
@timur28874 ай бұрын
thank you
@tienlucto6164 ай бұрын
Could you make a tutorial video like this with BASE properties
@bytevigor4 ай бұрын
I’ll add it to my list and hope I'll get to it soon.
@bhanukumarkotha42703 ай бұрын
Threads in java in your way
@uszebr4 ай бұрын
Very helpful. Missing grpc
@bytevigor4 ай бұрын
I plan to make a dedicated video on gRPC in the future.
@srishtianand85194 ай бұрын
thank u it was insightful
@b_anil4 ай бұрын
Thanks, very crisp and clear
@Gr8Viddz4 ай бұрын
Nice video, please provide Github link
@jazzochannel4 ай бұрын
1:19 either i'm very hung over or that was a word salad instead of an intro with more dressing than veggies. let me hear that again... ok up to 0:14, falling off by 0:38, and pointless after 0:51. wow. makes you think... a good intro or first impression really does matter. This content seems to be written by someone from eastern europe and read by someone from the us who's not really all that tech-savvy, but good at reading. While the graphics are done by someone in asia. Welcome to youtube and best of luck to you!
@bytevigor4 ай бұрын
I am a Chinese software architect, and I created the original content in Chinese. I translated it into English with the help of ChatGPT for the script and ElevenLabs for the voiceover. I’m trying this approach on KZbin to see if it works. Thank you for your feedback!
@renanvaz6154 ай бұрын
Your content is very good!
@bytevigor4 ай бұрын
Thank you for the feedback!
@r16.official4 ай бұрын
thanks, explained it in simple and clear
@bytevigor4 ай бұрын
Thank you for the feedback!
@timur28874 ай бұрын
thanks! very valuable
@bytevigor4 ай бұрын
Thank you for the feedback!
@anu3494 ай бұрын
Great video
@bytevigor4 ай бұрын
Thanks!
@ClifCollins-k8d4 ай бұрын
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Coffee Machine</title> <script> //********************************************************************************************** // Coffee Machine (Table Drive Logic, see: at bottom) // // Not exactly what I had in mind, but it does localize logic. There is // no change to the source code no matter how many states are defined. // I added a state "coffee ready". The logic table (at the bottom) is what I am after // if I have multiple machines, then it is simple to make multiple logic tables // Oh, one more thing, Do not use "Please", Just more professional (I was told) // Clif Collins, 49 years programming (just an example) (I hate coding) // // 1/2 of this example is just to load the control table. I left it in because // what I want is a logic definition table that is editable, readable, and easy to enhance //********************************************************************************************** //====================================================================================== // stateTransition$ //====================================================================================== function stateTransition$(sourceCode) { this.parse = stateTransition$parse; this.changeState = stateTransition$changeState; this.parse(sourceCode); this.changeState(0); //====================================================================================== // stateTransition$changeState //====================================================================================== function stateTransition$changeState(index) { var stateName; stateName = this.machine.stateNames[index]; if (! this.currentState || index == this.currentState.nextState) { this.currentState = this.states[index]; myCurrentState.innerText = stateName; myOutput.value += ' set state ' + stateName; return; } message = this.currentState.messages[index]; myOutput.value += ' ' + message; return; } //====================================================================================== // stateTransition$parse //====================================================================================== function stateTransition$parse(sourceCode) { var i,a,record,list,name,state; this.sourceCode = sourceCode; this.states = []; list = sourceCode.split(' '); for (i=0; i < list.length; ++i) { record = list[i].trim(); if (record == '') continue; a = record.split(','); name = a[0].trim().toLowerCase(); switch (name) { case 'machine': this.machine = parse_machine.call(this,a); break; case 'state': state = parse_state.call(this,a); this.states.push(state); break; } } //-------------------------- parse_machine ------------------------- function parse_machine(a) { var machine; machine = {stateNames:[], name: a[1].trim()}; return machine; } //-------------------------- parse_state ------------------------- function parse_state(a) { var i, state, name; name = a[1].trim(); this.machine.stateNames.push(name); state = {name: name, nextState:parseInt(a[2]), messages:[] }; for (i=3; i < a.length; ++i) state.messages.push(a[i].trim()); return state; } } } //=========================================================================== // build_state_buttons //=========================================================================== function build_state_buttons() { var i,name,names,buttons; buttons = ''; names = window.myApplication.stateTransition.machine.stateNames; for (i=0; i < names.length; ++i) { buttons += ' <button onClick="window.myApplication.stateTransition.changeState(' + i + ')" style="margin-left:20px;">' + names[i] + '</button>'; } myButtons.innerHTML = buttons; } //=========================================================================== // test //=========================================================================== function test() { window.myApplication = {}; window.myApplication.stateTransition = new stateTransition$(myData.value); build_state_buttons(); } </script> </head> <body> <button onclick="test()">Test</button><div id="myCurrentState" style="font-size:18pt; width:500px;text-align:right"></div> <br><br><span id="myButtons"></span><br> <textarea id="myOutput" style="width:100%; height:900px"></textarea> <! ---------------------------- External Logic Declaration (could just be JSON, in a file, ...) ----------------------------------------------------------> <textarea id="myData" style="display:none"> machine, Coffee Machine state, Idle, 1, Idealing, Coin Inserted, ** Insert Coin, ** Insert coin, ** Insert coin state, Coin Inserted, 2, ** Ignored, ** Do not insert coin again , Coffee Selected, ** Select Coffee, ** select coffee state, Coffee Selected, 3, ** Ignored, ** Do not insert coin again , ** Coffee is begin made, Start dispensing, Coffee is ready state, Dispensing Coffee, 4, ** Ignored, ** Coffee is begin made, ** Coffee is begin made, ** still dispensing, Coffee is ready state, Coffee Ready, 0, ** Ignored, ** Coffee is begin made, ** Coffee is begin made, ** Coffee is begin made, Coffee is ready </textarea> </body></html>
@von-fur-wegen-gegenolli91964 ай бұрын
If you use long polling on a server like Apache Web Server with PHP support, you may run out of threads as the number of users increase!