 Staff is quite a horror show. It's also called the Death of SW Climb. We are here using this myself to learn a little bit about what the oldest parts of the rider, which unfortunately is low everything and everything is getting so topical. And that's SW Climb and SW Modified. So, what is SW Climb? Well, SW Climb is a bogey attack observer attack. This is how it's defined with behavior. So, you want to have some way to communicate changes and events. The three things that are usually coupled. One example on the rider probably. You have the day-all engine and the call engine, which is the old stuff. And then you have the human-engined phase on top of it. And you don't want to have that call and trying to go in the human parts. So, you create events in the call. And you have the human part. Listen and register the events at the object's call. And let the hand get events and handle the human-engined phase. So, that you have a good company. The beauty will be the call you don't have for, you know, so much for the theory. You promise? I've stopped counting. I just wait for this in the form of you. And you will find all of you more thoroughly. But in the end, they should be grateful to say that the SW Climb and SW Modified is not particularly needed. For example, the SBT does not broadcast on it. It can't be pretty much the same. It's actually lower in the stack. But I've just started applying it. I've just started modifying it. It can't be much better on it. So, you will find this comment. If you go for XKCD standards. And this is pretty much what happened. So, you draw this and it will try to add a new representation of this super stuff. So, how does SW Modified apply in the world? SW Modified is the stuff that you want to observe. It has events. The example that I gave you is to write a call or an error engine on the one side. That will be the stuff that is in the layer engine. And then you have something that wants to know if things change. For example, new objects. And what that happens if there is an event. You send a message or an event. And you let it be handled by the event. Which is called the functions called Modified or things. And the writer, in particular implementation, Yes, the event is two more items. And two main pointers to provide the implementation. And try it in a double context. So, one of them. This is problematic in many ways. It will show you why in a bit. And this is a motivation to actually move the notification. To observe some other implementation. You don't need to create yet another one. You have enough. And just move it to one of the existing ones. So, one thing that happens is that you have this object. It calls some other. You have to try into it. And notifies about the event. This event triggers the callback there to handle something. Which causes other events. Which again, for example, cause something to happen at the original object. And one of the things that can happen is that there are other objects created that listen to the same object. Which just fire an event. So, you fire an event on an object. Someone else listens to it. Reacts to it and forces another object to be added to the first one. Which is interesting because you're iterating over this list of event headers. And you don't know where the new object is added to sort of. You're notified to a group who will receive the same event that by which it was created. Or if it will not. By the handling of the event. It will remove themselves from this thing to modify it while in the event header. The modifier is a double-edged list. It needs to be aware of that. Because otherwise, it just will have a pointer to the object that it's going to be executed in the event header. So, you can go on the double-edged list. This forces the SW modifier to have a list of all the iterators that are currently iterating over it. And then updating them. For example, one listener to remove sort of one client. So, you see it's already getting very complex objects checking each other. So, you can write almost everything that's not your client. Because the easiest way to get this to use is the limitations. To derive from as not your client or as not your modified not your client. So, and when you set if you want to do anything essentially in writer you have to be derived from some exceptions. But, in general, if you want an object that's available here actually. That's kind of unfortunate that we have this piece of code. I don't know if you can see this. Can you read that? It gets notified. Which our approach is, checks if it gets the message actually from the thing that thinks it's which subject. So, it assumes that the interesting part is this. So, as I said I'm listening to it. One of the things that in my cabinet is that the modifier tells the point I'm actually dying right now. Clients will not kill themselves. But before this they look at if the modifier is itself a client living of everything which again has things in double lists and they are called to the objects registered in you have one big marker have logging or parallelization or anything like that because essentially if you touch everything in writer everything else might fall and that means the only thing that falls is everything. If you drag for it like if you don't know what to be doing it's a toy that makes terms a bit different. It's a charter looks like if you're running around if you're coming past the same piece of code for the 20th time and if that happens because obviously I'm running on servers. So, it's not really deterministic if you run into these cases listening to something and because it's undoubtedly an interesting number of cases it can only listen to one thing which is not great and more so it means that you can actually ask what is the one thing that I'm listening to and that it runs in SW Client that SW Client and if you drag for this I try to remove a lot of those but there are still 96 cases where someone says oh yeah I have this stuff that I'm registered to and after that I'm just doing set a cost because I know I'm just confusing the form behavior that if modified times go to the object that the modifier says that she is listening to so, there is no way that you can assume that you can set a cost once you set a time but we're doing that 5 to 6 times so it's mostly there both the clients manually so they are much sending and managing everything but they actually get the result of everything that is registered and then say, oh yeah what is it that you should have to do and just filter on those things you do so the modifier says, oh yeah I know someone is listening to me that it's of this specific type and I want to get the instance once or now this is essentially and then it's just SW Client pointer so Client set yellow all the functions of the client which cause additional problems to the listener and somehow the listener forgets to he would just turn the thereby causes memory to leave and the wife project of a consultation times all this to be a future not a bug and actually used the SW Client modified thing mostly for memory management you just have a header that listens to the client that the client puts itself to finally we have SW Client or master or 6.1 as I told you the clients are in a double list which means you can only listen to one thing and solution was well if you want to listen to two things the solution was that you have a tiny helper class that is applied and that forwards to the class that you actually want to trigger just what actually is happening and just to add one more or no more story of course because you are dividing from almost everything from client you might actually get a general guidance situation an object that drives from to right objects and then you have two listeners and there is actually a code that somehow is used that there is just one way to be in a list or something so that might actually you can avoid that I'm sure but it is one case where we have to fix issues that are not really obvious what you are going to be most of the obvious so what I'm telling you here is that the client is a wonderful way to create surprises but programming which is not exactly what you want and it intends to actually to be sure that what I have re-implemented all these holes in the same way or it can still migrate away from them safely while we then have a contact code which was there touch that code while we were working the unit in this side gave a lot of confidence to some of the organization they have introduced lexical lexical model findings which you have three objects the stuff that is listening the stuff that is sending events and events for the messages that you are sending them and if you want to migrate away from that the first thing you need to migrate away from is to get the messages in the form of that you can use elsewhere 54 what I mean is lexivodified which is the basic stuff from the SMT listener and you can set those with the old implementation now so that you can migrate off to some point in time should it use the SMT broadcast so that we can listen on both sides so you are essentially breaking with the organization in the internal automation simplifiable thing I told you about how to interact with all of your clients finding the first part of the specific type that was all done with the old tools type thingy which from the tools like which is not very reliable and essentially re-implements the C++ type system so I made that a bit more type-safe with standard classes and also I had some C++ then I created some new broadcasting which is essentially SMT broadcasts so that you can easily use the new stuff when you're going to be migrating away from the old mechanism to move to these new listeners and because the new listeners are not in a double big list they can have a list of multiple parts and multiple objects that means that you don't need to like a heavy work around but then I mostly cleared the new code the SMT broadcast the new code the next thing would be accessibility actually there's no much left there and the fact that we'll start actually migrating the right thing is unfortunately there have been some regressions like to fix this go for immediately finding a bi-wisectic to microsoft fix a few of those we took one of them back 6-1 so I think some of them are not the last one was friday and it's an interesting question so fix the remaining ones here and then the results go on