 This is a poster on Salabim, which is a discrete event simulation package. And I'm not sure whether anybody is familiar with what discrete event simulation is. So I just want to give a little bit of an overview of what that discrete event simulation is. What kind of tooling is available, a short introduction to Salabim. And then I have some, in this poster, some models and output, but I can do some online shows and animations and all that makes it much more interesting, I think. So, this is actually the, this I got from Wikipedia, but it is, it's a models, the operation of systems of discrete sequence of events. Each event occurs at a particular instant in time and much change of state and system. And this is important between concrete concept of events, no change in system is assumed to occur. The simulation can jump directly to the occurrence time of the next event, which is called next events time progression. And that's an enormous difference with fixed time step simulations. And as, for instance, there are a couple of events happening on time one, and maybe also one point one, and then there's absolutely nothing till time 10, it really jumps to time 10, making it a much easier and more powerful tool. What is it used for? Well, all kinds of things that usually have to do with logistics, material handling warehouse systems and production systems, robots, that kind of thing, airports, seaports. There's actually more from this, from this area, simulations in the field of container terminals, hospitals, medical care in general, warehousing, AGVs, automated guided vehicles, robotics. And then there was a talk on simulation by someone for fabric, commonsense, robotics, and that particularly I think warehouse systems and AGVs. But it can be used in a completely different setting as well. There are some users with the network simulations with FEMTO computing, if I get the term right. Performance analysis and all that by simulating. And another thing that's quite important, I'm not very familiar with that field is crowd simulation to see how crowds move and particularly in the COVIDs periods, there are a lot of applications of that to see what the impact of the distancing, social distancing and all that are. It's not really my field. They are available. Well, there are very specialized GUI packages with nice GUI and you just design your system, draw the layout and all that. And those packages are with names like any logic, CME or arena. And they have usually really high quality 3D animations. They are kind of GUI based. So you just draw your system. They usually do have some kind of language connected to it. It's not only the drop in message, but sometimes you can also specify some, particularly for the decisions, specify those things in a domain-specific language or an interface with other languages, which is usually Java or C++. There are a couple of disadvantages. First of all, they are extremely expensive. This is quite a typical price between 10 and 20, sometimes even more per user. They are very powerful, but once you want to have some more complicated decision logic and you want to escape, build your own thing or maybe just use a standard package. For instance, an A-star, a past finding algorithm or something. Some of them have that available already. But if you don't have that or it's very specific, then you have to escape to one of those things, which is usually not so friendly. In that case, it might be easier to go to language-based solutions. There are a lot of different kinds of modules and sometimes they extend a language in some with some special simulation features. We go back to the, it was actually, there was once in the 80s, maybe even the 70s, there was a language called Simula that was actually the first object-oriented language and they had already some possibilities to do some of those simulation things. And there are several packages and languages that are based on that now. There have been several generations of that tooling. I made one myself in the 90s on Pascal and there were several other generations. And now there are some more with the Sport Languages R and Julia and of course, Quora and Python. And in the Python world, there are two. Well, maybe even more, but I'm aware of two. They are the main packages. It seems to be more than these standards. And there are some of them in my package. I'm the developer of some of them. And maybe just to say a little bit about SimPy versus Saladin, particularly for people who are familiar with this SimPy package. There was once the versions one and two of SimPy used a concept like activate and hold and passivate and all that. And that's actually from this language. And in SimPy 3, they decided to change that, make it more event-driven, which makes it more complicated in my opinion to follow, to write your code. So Saladin actually doesn't use that philosophy and uses a slightly different philosophy. Also, in theory, they are more as they cover the same range. And Saladin does much more than that. So we have much more facilities built in than SimPy. SimPy is just the simulation system as such and nothing else. Some of them uses what are called the process description methodology. And that means that you have components and components can be activated and then they come out of times when you can passivate them and hold them. We can request resources. We can interrupt process that's for, particularly for breakdowns. We're all based on code routines, implemented as a generator. That's the same thing as SimPy does. So we don't use threads or async it all. It's just generators and you interact with them with yield statements. We cut to that in a minute. Saladin has one of the most powerful features actually. He supports real-time animation. I'll show you something of that. We have statistical distributions which are based on the standards. Distributions are a bit more versatile and easier to handle. And we do have a lot of features to automatically connect data on the processes. Something I call momentary. So let's go for a sample model. We have a bank with three clerks and there are clients arriving randomly according to a given distribution. We have a couple of bank employees in this case with three of them. They serve the client one at a time with a uniform service distribution. And it's one queue for all clerks. Here I've got the code, but let's just do this in real time. That's nicer. It's always very slow. I'll just close all these. It's extremely slow because of zoom, I think. So we do bank three clerks and that's really standard. So what it does, actually, we make a number of components. There's a key element of some of the simulations. We have a customer. We have a clerk. And we have a customer generator and that's actually it. The first thing we do is we have to define a so-called environment. We put on trace because then we can follow what's going on. There's a customer generator. We define three clerks. This is just a simple one. Comprehension. We have a waiting line. That's also one of the key features of this process. In this case, there's an infinite loop. It makes a customer and then it holds for a certain time. In this case, it's a uniform distribution between 5 and 15 minutes. And it samples from that. Then there's a customer. The customer enters a waiting line. And then just runs over the various clerks and see whether one of them is passive. And if so, it activates this one and it's only to activate one of the clerks. So then it breaks and then it just specifies. And that means it gets a signal from the clerk later in the clerk. Actually, it just checks all the time whether there's something in the waiting line. If so, if there's nothing in there, it just specifies, goes to sleep. And if not, then it's woken up. Then it picks up the first customer from the waiting line. It holds first at the moment. In this case, a constant 30 seconds and then activates the customer again. So let's just run this. Okay. So what you can, you can actually see the exact flow of the, of the program. So now the first is a little bit off. Here it says there's a time zero. We always start this time zero. We can we created a customer generator. We activate it and it's scheduled for time zero and it's going to process the process process. We bake this three clerks and the three clerks also activated time zero. We made the waiting line and we just click carry on running this up to 50,000. Then you can see now in sequence, all those different process become active. So first of all, we have the customer generator. Customer generator is all here. Here it generates a customer. So that's this, this line customer created activated. So the customer generator goes and holds and until 14.6, 20.6 seconds or minutes. And this is that statement. And then, and this is very important and also one of the most complicated things to understand. Then it gives control to some, to someone else. So there's a clerk. The customer is going to, it's this process. Well, the waiting line is zero at the moment. So they all go and precipitate the machine. So if we have a look now, the only first event that's, that's going to be coming active is this one at 14.6. So if we just move on now, you will see that. That's the customer. The customer is also activated time zero. The customer seat enters the waiting line and checks whether there's a passive clerk. Yes, there is one that's clear zero activated for times zero as well. And then it's precipitates itself. Then we see the clerk becoming active. We see the customer zero is leaving waiting line. That's this statement. And then the clerk holds for 30 seconds. So the clerk doesn't become active until 30. Then the customer generator becomes active. This is this, this 14. We saw that here. It's 14.6. It's this one. And then you can just see what's going on. What's a nice feature is that in this trace, you can hear even line numbers. So this, this is on line 13. This, this, this process. And for instance, this activations in mind 17. That's this one. So you can actually follow exactly where, where it's, where it goes. This is it. This is extremely useful for debugging. So then the clerk makes another customer. And customer generator, customer generator, it comes active. Customer generator. Where are we customer one? Yeah, that's the, the, the, so it samples a new. Oh yeah. 21.998. There's another customer being generated at this one. Generate customer two. And you can see at time. This one. I'm 30. That's clear. Let's finish this job. Become a current current. Activate this customer and then the clerk becomes passivated again. So, so we can just go through the whole system. If it just now. I just never tried for a shorter time. Otherwise we have this. We can do this and then turn off the trace. Then we don't see anything, but we come to the print the, to collect automatically the some statistical information. On the, on the cues. So for instance, here we can see this is the waiting line. You raise in 50,000. Was an average was eight. It was eight long. Maximum length was 21. Minimum was, was zero. And then we get a histogram as well. You can also feed it into things like a mockup. If you want. And this is the length of stay in this queue. So that's actually the waiting for, for a clerk. Well, you can see here the minimum is zero. You can see the mean, et cetera. So you can just analyze the whole system. And, but now we come to make it a little bit more complicated. No, not complicated. More useful by doing the. Oops. Sorry. This is just for one. But that makes it much different. Just do this one. Same model, but not just with one clerk. And here you can see the, the animation here. You can see actually the, the waiting line. In this case, there's one. I can just change that. Here we see the waiting line. This is the, the sequence number of the clients. This is the one that is in service. So these go down. And you can see over time is the, the length of the wait line. The lengths. This is actually in service. This one is nearly always. Nearly always one because it's a very busy system. I don't think it's the state. And then we can. I just go and have a look at this code. No, but we just go and see that. But this is extremely easy. The only thing we have to do is hear. Say, animate Q with where it has to be. Show. And we can say animate monitor. Those are just two lines. And that's all we have to do. But let's go into something more complicated. This is that model. So more of this. This is an interesting one as well. It's quite a bit more complex, but let me show you that one as well. And the animation part of this is all quite, quite simple actually. It's all it's more than all the same. This is actually a job shop system in which you can see the task and all that. And we just, just wanted to show you this one, but it's maybe not. Maybe it's too complicated. I just show you something completely different. It's a lock system. What you see here is a lock. Well, there's options. These are the doors. The ship's coming from the right and from the left. The length is actually the length of the vessel. So it can't just hold everything, but we'll just check whether it's okay or not. And then here you can see the actual, the number of waiting ships. So that's this one on the left and the one on the right. The waiting time of the ship left on the time scale. And then we can actually just play with it. Let's just, let's say, okay, we make the vessels a bit smaller. So then it can hold more of the same, more vessels in the, we'll see that now. I suppose, yeah, now there are three in there. And three in there. So we can also, that's a bit busier. So there's more vessels coming in now. Maybe even more. Less is the interval time. So we have to increase it, to decrease it, to get more vessels. You see, it's quite a bit more, maybe the main length is a bit longer. Then you will see the whole system is going into a, to get very busy. We can't keep it up with it actually more. See, it's just, it's just starting. And here we can also see that in the line already. What we can do actually, let me just continue, make this a bit more normal. And then we can make the animation faster. We can just play with that in real time. And this is on a real skill. This dish is, although it's skipped from time to time, it's actually the time. So it's real time synchronized, which is a very nice model itself, maybe a bit too complicated for now. Let me just show something completely different, because that's nice always to see. I don't know whether that's kind of one somewhere available. It's a delivery. That was a program by one of my users to collect for pizza couriers. And there were demands of clients. And here you can see them actually running. So the, let me see what it is. The clients are those gray ones. And those are actually the restaurants. There's a couple of them, four, two, one and three. And you can actually see this is a courier and the green one wins from here to there. This one doesn't have any load. It goes back to our forecoast to here. This one can only serve as a couple of restaurants. The blue one can order a couple of those ones. And here you can actually just see the whole flow. There's a red one as well. It's completely different type of model. And behind this, this was actually, I don't think this is this version, I made a genetic algorithm to do the decision metric, which is one of the nice things of, of doing this in Python, of course, you have all those things available. You can even connect it to machine learning. It's all available. Also here, you can do it faster. You can always see the time here. You can even make it faster. You can see the whole, the whole system here running. And let me do something else. Where is that one? As well as the nice emulations. This is lift system. So here we have a building with, in this case, 15 floors. There's a ground floor. You can see here the visitors. The number is the floor they want to go to. And red is going up. Green is going down. And then you can also see what floor. This one wants to go from, floor 11 to floor zero, from floor 11 to floor five. There are two who want to go to 11. And here are the lists. In this case, there are three lists. And the three, the three lists come, this is what they contain at the moment, the visitors. So if you just run, let it run for a while, you can see here this lift picked up those two for 11. You will see that it's going up to 11. But in the meantime, it might pick up some more. At the moment, there's no one who wants to go up. So it is not very likely, but there might appear some. Yeah, this is just too late to pick this one up. Yeah, here you can see already, this is going to 11. But on floor eight, there's one who wants to go to floor 14. So I'm pretty sure this one will pick up that one. Yeah, picks up the visitors going down. The simulation part is actually rather simple. The most complex is actually the decision logic. How do you pick up which one and all that. And here again, this is all standard. Some of them functionality. We can just play with the number of elevators. Let's say we have one less. We can also say, well, let's make them a bit bigger. We can have five. We can specify the load from here to the other floors. Let's say we want to have some more from the more visitors arriving from the floor level. You will see that there will be more here. And soon it will not be enough. You see this capacity is not enough. I think nearly everything is always to get a passenger from the floor level. And this is the load between the floors. That's how it's modeled. And this is all done with those same type of calls. Let me see the processes, but I can show you those. There's a little bit about the animation part, which is slightly more complicated than usual. There's here a visitor generator. And the visitor generator doesn't do much more than just it gets a, so it wants to generate a visitor. It gets the from floor, from uniform distribution, into uniform distribution. And then it just tries to get the two locations. But if the same, then we just resample actually. So then we do it again. This could be done a bit more efficient, but I didn't do that here. So then we make a visitor with the from floor and to floor. And that's it actually. And then it's sell. And then this is a little bit when there's no load at all. But then this is actually the, the, the, the, the driver type of the visitors. Sampled from a distribution time, say, a, a driver type. The visitor itself. Enter the, the, the from floor requests. This is, this is important. There's something called resources. And maybe I just do that a little bit different than this. We just do this, this three blank three bank system. But now it's resources, which make the model much simpler. Because now all we have to do is. We, we have a so-called resources. We just say there are three of them in there. We, the customer just have to request for a clerk. And if there's one available, it gets that one. And then at the end it releases. So the model is actually quite a bit simpler. Because it's all done by the request. It's extremely powerful feature. So let me just turn back to the. This was the elevator model. Something about the technical details. There are no dependencies. Unless if you want to do animation, you need pill, pill, pillow. You want to do video production. You need open CV. It's even, it's also including the animation runs on the iPad, which is quite different. They have a completely different GUI. But I run on there as well. I have a very active Google groups, user group. It's very easy to install. You can just do pie pie. And there's also, it's just one single source file. You can just put that one in your directory. And then it's also, everything is available. You can even add sound if you want. That's not really necessary for ordinary simulation. But if you want to do some more creative animations, which I do frequently, then that can be, can be useful. And, well, this was actually the announcement of the poster. And, well, let me just show you to do some of the my creative things that I use in, that I also do in, in some of it has nothing to do with the, with the simulation and much more with the animation. Well, I use the simulation engine for it. But let me just show you something. I have to turn on sound. Where's that sound? And then I can just show you the source code for this. As you can see, this is a, it's also a, a, a Salibim application with an environment. We have a component to run the, the different shapes. There's a controller and there are the blocks that are also components and they have the same type of structure. So for instance, here we have a hold state. And so we're here, here if they hold for three seconds, that's the start. And so we can just run through it and the animation, the animation box and you can just play with that. But this is something different. There's nothing to do, really to do with the, the normal application of the, the package. So the statistical sampling is, is interesting. And why is that interesting? Because it's really different than what you usually see with, you could just say, why, why don't you just do random? Well, there's, there are a couple of reasons for that. Let me just open the test file for, for distributions. Can I, can I try to be for a second? Yes, of course. Yes, please. Yes. Cool. I was just wondering, I'm very interested in your, in your tool and I think it's really amazing what functionality you have in there. And just recently I was at the school of my daughter and I went to the secretary and I saw that they have this huge magnet board over there where they arrange and organize all the timetables for each class and each teacher and so on. Yeah. And I was, I was wondering if you could you sell them in some way in order to optimize that? For example, in cases when I don't know, the teacher becomes sick or a room gets renovated, how to basically optimize the arrangement of classes, classrooms, teachers and so on. And do you have any use cases already in your library for optimizing also some, some setting like this? I'm just thinking about what the connection could be. I don't think really be, well, one of the, let me just say, one of the, the, the major things to use this discrete type of event simulation is the random effects. What I can imagine if there's some random effect with those, those, those rosters. So for instance, there's a possibility that a teacher becomes ill, then I visit with a certain probability and say, okay, and out of 10% of the, of the time he's ill or something like that, then I can imagine that you could use a discrete event simulation model to test what will happen if you apply a certain optimization algorithm. The optimization algorithm itself is definitely never in, in Salaby itself, although of course you can connect it to whatever solver you want. There are several solvers available. You can, for instance, think about some linear program or interest your program or constraint programming. There are a lot of those things. You can even think of some kind of machine learning and then test it with Salaby. But for this specific, typical use case, I'm not sure whether there will be really random effects involved in it. Otherwise, if there is, you can. So for instance, in scheduling, scheduling products on a production line, then it's very useful because then you just have a certain decision logic and then you test it under certain conditions. Machines break down. They have different, non-deterministic, runtime and all that. Then you can just test how it actually behaves and you can just run for a year or whatever. But the decision of itself is not, is not included in the package. Does that answer more or less your question? Yeah, that answers the question. I think Salaby is more designed towards time-dependent or dynamic environments, as I see it. So this is more the school organization. It's more like a static setup, I guess. I think so, yeah. Nearly always there are some statistical, well, it's actually always. It's a statistical behavior involved in the simulation models. Otherwise there, you can just run it as such. I just wanted to show you the distribution. So why there's a difference from ordinary distributions. And the key factor is that with the random module, the sampling is actually connected to the module. So if you define a random, then it actually samples it and you can't define the distribution itself with random modules. So for instance, here we have a uniform distribution, but we can also assign that to a function. So what you can do with random, you can't do this. For instance, you can't say x is sim dot. And I just do a uniform distribution, one to two. And then I later, another point, I say x print sample. And let's just say we also do it in a strange condition at the moment. But for instance, I do. And after that, I say the same. And let's just do it differently. I say x is. And I can also say simple constants, for instance, not even sure whether a random supports that constant three. And this, now those ones actually I can design, which come to this in random. And that's very useful for simulations. And what I can even do is you can see that here. I can even say, OK, this comes from a string. And that means that you can have that from a database or a file or whatever, like this. And that's definitely not possible with a random module. It makes it a bit more easy. I can even interface with other modules. So I can, for instance, sci-pi with that. Here's a NumPy distribution. I can define this one as an external distribution, calls that the Laplace distribution for random with some parameters for this one. And then I can just sample from this one. There's here one example of the sci-pi. NumPy. Here. This is a sci-pi distribution. And so here I make a normal distribution. This is from sci-pi and not from random or from NumPy. And then this is the mean. This is a little bit different notation in sci-pi. And then you can just also check for that. So you can just whatever random module you want to do with my functionality. Monitoring is also very, very, very nice. Let me just show you that one. So for instance, you can just collect things. Usually those are system monitors. So Q-links and waiting times and all that. But if you can also make them yourself. So in this case, we've made a monitor called ML, a monitor level, and there's no one. So you can just ask for the beam of the person tiles and the maximum. It can be weighted. You can turn them on and off and you can merge them. You can take slices out of it. It's really, very powerful and quite complicated to build. I can show you. And well, just to impress you, I just opened the file itself. The one and only file action. That's Salabim. So again, there are a lot of people who say this is crazy, but I find it very convenient to have that one. And so here you can see it's 17,000 lines of code in total. But it's structured, of course, in classes and all that. There are some extremely complicated things in it. The mechanism to call those things is the generators. It's actually not that complicated. It's the same as more or less the same as in by, say, the R2Q taken from HIPQ. But the more complicated things is those line numbers that you saw to assess them. That's a more quite tricky part. The animation itself to the synchronization of the animation with the runtime is complicated. So, well, that's more than what I wanted to tell you. Are there any questions? Jan, are you there? I am there. Hi. I don't think there's anyone listening at the moment. He was there before I started. It was very difficult. If you don't have any interaction. He's lost. He's lost himself. Yes, yes. Do you have any questions? I don't think so. I think it can be simpler for me. But you can see the control here in the models. I think it would be easier to do that. It would be nice to try something. But do you see that automatically? I don't see it the same with the vise-forces. Is that what you mean? Because I think I was here somewhere. I don't know if you've noticed that when I started the vise-forces. Yes, I've been in there for a quarter of a year. And that seems a lot better. Do you have any statistical data that you need? That's the beauty of it. Then everything is automatic. Then it automatically keeps the waiting list. It keeps it automatic. Wait, I'll show you something. It's a sample model, I think. And then it's with the resources of this one. Look here. Wait, I can turn it off. Then you can see the statistics. It's a shame. At my point of view, the animations were pretty good. Yes, yes. Even with the lock and the lock. That's a shame indeed. If it has to do with the internet, I don't know. It's a lot slower than normal. If you look at how slow it is now, it would have been worse yesterday. But I hear that with other presenters as well. So it would be very good to have the software in it. Yes, the Zoom software. Yes. Let's see. Oh, I only do the clerks here. That's not so interesting. Oh, yes, wait. Yes, yes, yes. Because these are the critical resources. Or is that something else? Or is it a lock and the method? We don't know what to look at. But of course it's not that bad. It's really very much the same. Let's see. I have to change my idea. This is Visual Studio Coke. I see it, yes. We're all dead. Yes, I have a very big problem. I don't have a hydrangea at the moment. I don't know why. Wing. Wing. To make it with, what was it? Pyflake. It stops completely what I can do. You can start it. Well, I'm very surprised. And it fits me very well, how can I say. It starts much, much faster than Wing. That's also a nice one. Look, Jan, this is the standard that you see here. You have the color, the links of the request. The request is actually the one before that. They are waiting for a color. The links of stay in the queue. The links of the claimers. The claimers are actually the ones that use the resource. That's the service time. So you have the links and the links of stay. The links are now the maximum three, because there are only three, but you can already see a picture here and so on. And then you get the capacity. In this case, the capacity changes completely. So it's expensive, three, of course. But the available quantity, how much is available, that's actually the cost-effectiveness. The claim quantity, the hardest production, occupancy. And that's all free. And you can also set up the animations. It's actually very easy. The only disadvantage of this is that the decision-making here on track, you can't do anything with it. It's pretty fine. And that's what's important. There are no clerks. You can't animate an individual clerk, because they just aren't. I only like a number of them, actually. Oh, okay. That you don't know more than you do. Yes, exactly. And they have been added to, let's say that. You can keep them free by themselves. From that generator. But there's also a possibility of, how do I call that? An enormous resource. Then I don't care who's connected to it. That's actually only important if it's a length, or if it's a lead. But that's used in the log, to keep that length away. But this is a different way of thinking, of course. But I'm curious if you ever think about that. Yes, yes, yes. I like to do that. I saw the last piece of a presentation this morning. And I'm sorry, I'm only talking about that. Something about live music coding. Yes. That was fun. To ask everyone was an awesome enthusiast. But you can all still see those videos. You have to see them for sure, I think. Okay, I think that's really fun. I saw a piece of a story. Yesterday I saw a lot of special things. Oh, that was a nice one. And it was a bit in line with this, actually, about computer generated art. That was also fun, actually. I saw a little piece of it. In processing. I want to know what the story was. Processing. Okay. Is that under Python? Yes, processing is actually, I think, an instrument. But it's kind of implemented under several other languages. Under Python. Because the... I don't know how to say it. I don't know if that's what it is. You see a keyboard computer. Yes. Controllers. Yes, I don't know what it is. I have a big passion for grass. That works in a way under processing. Can you process it? Yes, the structure, of course, is the same. It has a setup and a loop. How does it interface with that? I have to put a link to that in my lesson. Because it also seems a bit like what I do. I have a bit of command line interfaces. Yes. And the packages that it automatically does or something like that? Well, that's what I thought. Or the design of a file for a CLI or something like that. It started out nice. It started with... The old films of quality writers and stuff like that. But it didn't come out that much. It wasn't a design of the language at all. But you can see that when you create a line feed, you only create a line feed and not a return, and then you can program it again. Actually, not at all. So it doesn't matter at all. It doesn't matter at all. It doesn't matter at all. There are more of those types of packages. They generate automatically command line interfaces with Dash help and stuff like that. Dash help. For me, it was already mentioned. But it's a site or something. Well, I was completely distracted. Yes. By the way, you've seen that in the demonstration of Pai Simbukui, I made that black goohie. Black at Interface. That's really handy to have something like that. Because I always had a batch file made of it. But I had to start the command line and so on. And now I can just do it from the right season, from Pai Simbukui. Yes, I have the parameters that I need. And that's what we thought. Because I always have the parameters that I need. So I can select the right one. And there it is. Excuse me. I have a lot of analysis related to log files, planning and planning of the command line. And I always have to take an old file. And what does this do again? And what do I have? It's really handy to be able to do it in a formal way. Yes. And this is really in a couple of minutes, right? Yes. Especially if you have something to write. Then it's all waiting. Yes. I'm going to do that. That's not fun. And Pai Simbukui is really handy for that kind of thing. With Mike Barnett. With Mike Barnett. Well, what did I do? I had a little bit of a walk in the Discord channel. You have some comments about what I did well and so on. Yes. And I had a little bit of, wait a minute, I can't see anything. Share it with Springer. And I had a little bit of a look at where it is. I don't know if you have a look at the breakouts. Yes, sure. Because you mentioned it yesterday, it was very positive. Oh, you have seen it. Yes. Did you press the screen or something? Yes, exactly. The one above is actually ... Oh, here it is. I had just sent this. What you see here. Yes. It was fun. He was enthusiastic. So I'm going to listen now. If that video is available, then I'll send it to you as soon as possible. Yes. I had it fully prepared to code live, but I didn't have the time for it, of course. No. I was surprised to hear that. How long did you think of it? Yes, but anyway, I did do it, but I wanted to show what I wanted and so on. So I'm not very happy with the course. I still have time. I'm playing with a few symbols, because that was the first time I was made with it. I've seen a few strange things, a few strange choices. I have to find a good way to communicate. I have a good name with me, because that's what I really want to go to. You know what's very strange? You have that key, and if you give a key to a field, and you ask a question, you ask that thing up, with that key. You just do that with the key. That's a technical conversation. If you don't have a key, what do you expect to happen? Or an exception? Yes. There are a few things for building, but the default action is that there is a pop-up. I can't find the key. And maybe you mean that you have the wrong name. That's fine. There is no single indication where it is in your program. You just made a mistake with pop-up, but not where. Instead of the exception, you just have to look at it. Yes. That's completely off. You can do something in the pop-up, but if you don't do anything, I expect you to raise an exception. I think that's the default, because it's very easy to do. I'm not expecting that. If you have a pop-up on the wall, where there is no information, and you don't have a pop-up, you don't have a pop-up, you don't have a pop-up, you don't have a pop-up, you don't have a pop-up, and that's very easy to build. But that's something we have a few minutes time. And I thought about it at the same time. With the length of the clever dict, you could also use the same attribute to give. That's very nice, actually. Because now you have to open the window, open the right hook, double quote, number one, double quote, close the hook. But if you do this, you have to say window, point number one. That's the three-quick distro, and it looks a lot better too. Yes, yes, yes. And you don't have to do clever dict, because that filter is just overkill. You have to get it right here. That's the most difficult thing to do. It's so easy to build. The only thing is that if the key is not a variable, you can't do it that way. That's your own fault. If the key isn't a variable? If the key isn't a variable, if the number is one, or number dollar, you can't use that as an attribute. Well, that's a shame, because it's an attribute. You also don't have a fault, because you can't use it that way. And if you get a variable with the same name, that often may not be correct. That's not possible, but that's not possible. No? Well, then you also have the same attribute. So if you choose two by two, that doesn't matter if you have an attribute or not. There is only one attribute with that name. That refers to that item. No, you can't do that anymore. That's another problem with the clever. The clever thing is that it has made it a lot more complex, because it also automatically makes the name. And then you can double it. There you have all the facilities you need. The only thing is that he has a kind of standard that he himself aims to choose from there with less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less, less. I have no idea why he does that. What that advantage is, it just seems clear to me. And then he does something else. Sometimes he puts in the key in the back that the right only should be. Well, I think that's just misuse of a field. That just has to be another parameter. Yes, yes. I have to think about this a little bit before I buy it. Yes. I'm going to get back to work. Okay. Well, you're going on vacation or are you already on vacation? Yes, yes. Well, that's about it. I'm still going to work today. Yes, okay. Yes, yes, yes. Yes. Actually, I have a month, because today I have free, which is not to be booked in our system. No, no. Sorry, we were busy at that time. I'm going to think about it a little bit, but at least I can watch it at 6 o'clock. Yes, I want to see that too. And I'm going to think about it again. It's a Q&A session, you know that. It's not really a key note. Correct, correct. So I'm going to think about it a little bit. I don't think I have anything in mind. Yes, I also have one in mind. Yes, I mean, you have something in mind. Yes. Yes. And you? No, I don't know. Look at what you want to discuss there. Yes, I have no idea if that's too much. Because it's a bit difficult for those people. There's not a lot of reaction. This is so different than a real conference. I don't know if we have much to do with it. Correct, correct. And it's also like that. If you put the discipline in the operating room, I don't have the discipline at all. I just have a few things to add. And then I just go back to work to put the COVID-19 vaccine. Do you have anything else to say? Yes, exactly. Hey, I'm going to make an end to it. Yes, you? And we'll see you in the next session. Okay, bye. Okay, bye.