 So this is a In the beginning was like over our enough talk so I squeezed down squeeze down several presentations So I'm gonna try to do an in a little bit less than an hour, but I want to try to cover as much code sample as I can Gonna travel to spend 25 minutes In the slides concept there is some code in the slides to but I'm gonna jump in a in a code I'm gonna play with that. I should have a Some cool stuff in the hand that always get excited if I run it run it always pretty cool stuff so Just a feeling how many you're familiar with f-sharp All right, cool. Very cool. All right And what about ACA slash ACA don't net all right All right. All right. Yeah, there are so the scala flavors be more mature there are The aka donets try to you know, the catching kind of game But there are some stuff the aka don't net has that the scala or the JVM Doesn't and vice versa. Actually Especially with the f-sharp API that we show in the end There's definitely something that when I show to the ACA JVM people what you can do They say whoa, that's something so that's actually what's why I'm here, right? So I'm gonna just get started So this is the agenda. I'm gonna go through I'll be what's going on out there, you know in a word Briefly about the act of manifesto we discussed what it is and Why should the care about the actor model? You're familiar with a sharp. So I would discuss briefly about if a sharp agent or My box processor just really two minutes to introduce The difference between agent and actor because I found out that people usually in conversations use both term meaning the same thing But there are some differences and then I'm gonna check what is the aka don't net and the awesome f-sharp API and a lot of code sample All the slides and co-material are already on github I'll provide the link in the end. So we're able to download and play with so Briefly about me. I'm originally from Italy But I relocate and I live in Washington DC for 10 years now Almost 18 years professional programming and I organize of the CF sharp user group I'm currently working for Microsoft and of course, you know, we are all passionate about technology. That's why we're here subtle the morning So I will cover a lot of material My primary there are three objective. I want to take away that one is that Today is never before application must be with concateness in mind, right and especially Possibly from the beginning and the actor. I'm a bias, but I think it's the best But is a great programming concurrent programming model really and to solve the problem was coming out and scaling up and Both in a more important really and the reason because all this presentation in the aka don't net and f-sharp really Is a very powerful combination of these two technology So In the last 10 years early we saw a significant change in the world of computing. Hello. Welcome. I just started so beside This is the boring part so So dramatic change in a world of computer right today The demand of the stability system is exploded, right? Our customer had high expectation for the application they wanted immediate response no failure and With that also the requirement to write the application or change, right? So if you search online for the hottest Technology right now you found you know cloud computing reactive application and so on and possible You know with a big data war in the hand everybody like that so With this trend really we need a tool that allows developers like us to Bend this technology in the request the requirement to our will right? and overall we still want to build application with this kind of Requirement or it is maintainable testable reusable and so on so it's not easy right so how do I achieve this? So this is a couple quotes of published book But what really means that? The landscape or they're still with a cloud computer they represent a dramatic change for the modern programmer right and In top of that we're talking about the city with the computing But we'll still you know arguing about how to solve the concurrency issue So we still have like the single machine multi-core problem to solve But we are already facing other challenge with you the distributed system and we do this question in issue there's also the Raise or answer solutions, you know such as the rack to manifest on how many of you are familiar with the rack to manifest All right, so really the active manifest or set what your application need to meet this model, right? So really briefly responsive. I mean that the system must be Work on the same way no matter if under stress or with kind of load has the system in the back Message driven architecture, you know, it's loosely couple Asynchronous no blocking which is really the secret to build a high-skillable application Resilient is mean that the system is able to react on failure I isolate Exception and react accordingly and bring back the system in shape as it was in the beginning right and we talk about all this in detail later In the last degree, this is the key for distributed system. It means that the system is able to contract or Spend on demand according to to to the request right to the to the load man's is able to add or remove nodes So it's not just sculling up or sculling out But also be able to sculling down right recite himself So this is the classic slide that you know, everybody saw in the last five years I like this one with the color combination be easier to read But what really need what really means that Today we've been seeing these concurrency programming model right everybody had devise it with multiple core today and There is the evolution right that Hardware multiple core and bring us this new challenge. So in the 65 more Predict that the density and the speed of the chip was doubling every 18 months But this is not possible anymore, right? So Programs a programmer cannot anymore leverage one single CPU. They go faster and faster, right? But instead we're programming to need to run in parallel and benefit leverage all the resource of the machine. So The free lunch is over they said and these days and more in the future computer we ship multiple cores and Which is great because enables the computer to process several tasks at the same time and But the problem that the majority of mainstream languages out there weren't designed we concurrency mind, right? So it's not easy. So today you run no application. You found, you know that your CPU. Hello, welcome That you're on your application you see that your resources actually are no Use all right, there's only one CPU to do all the work and the other just idle there So what you're gonna do is a no problem, you know, I'm gonna spend several threads You know my run my old application and run a multi-tread application, right? This is theories pretty easy there right in the paper, but in practice a bit more complicated than that, right? so What's the problem the problem the shadow state, right? so I think that Everybody knows that right concurrent application is hard or Actually, I take it back right correct concurrent application is hard, right? They might be no deadlock race condition and so on and so What's the solution with that? Well, you know in the traditional way you start to use the primitive such as you know lock semaphore mutex and so on and There are several problems with that First of all, there is not really the bugger tool that can tell you to put the lock in the right place, right? You're running your machine you ship in production and a few months later. You have that the lock in the server How you can produce that bug pretty hard, right? almost impossible and Really the lock it doesn't it prevents to run in parallel. It just allowed you to run the system without Crushing when the the the share is corrupted. So really actually they Then grow the performance, right? And beside maybe you need the piece of code to be Lock maybe one time every 10,000 calls, but because you put in that lock Well, you call the lock every single time so the performance and ungrounded, right? You like the slides with a trend so I look at each other so Okay, this is a Great, but you know we are a lambda coffee or so good news for functional programmer. We know all this is not prominent for us, right? We know that Function programming as out-of-the-box solution for this because support for immutability, right? And so function programming It doesn't run in parallel right out of the box But to change to be running parallel it doesn't require big change your code base Is ready to to run in parallel right thanks to immutability So this is great news for for functional programmer By the same time we're not a problem. So who knows I'm not as loud here all right, so These guys here wake up one day and decide that no matter how many resources to use to your program But you're gonna reach one limit and the limit is that the constraint to the portion of your code that they can Only run sequential right so this the for instance here in the slide said that if your code can be parallelized 95% No matter what you're gonna do you're gonna reach the limit that your code can run 25 20 time faster. That's it, right? well It seems we can no win, but it turns out that With the actor base programming model You can deal pretty well with this program and and and how well because the actor model use these Interconnection between you know processes and and computer that can cooperate To the solution right so we can distribute of the work right so It's some sort of unbounded scalability so I We discussed a bit about immutability and definitely mutability is a Is a great and important tool for building Concurrent software a predictable software, but another very important characteristic is that natural isolation, right? See this is really at the two Ingredients for the secret sauce to to build your best concurrent programming model and It was now that actor model actually Support both out the box right we have immutability because Actor communicate by messages that are possible by value so they're immutable and because They communicate by messages. They share nothing approach right they'll they can no access the state or their actor They can only send messages to communicate each other. So this is a Simple code that you majority of you are familiar. There's a F sharp how you can can you see the code there everybody? Okay well This is how you Create an an agent in F sharp, right? So what it really does here is a synchronous function And you just a synchronous receive a message and then just use a pattern match, you know to They construct your message you compute the message but the more it means interesting part here. Oh, sorry. It is part here, right? This is a collection. They actually is immutable right immutable. So It's not trade safe. But because he's inside the agent is isolated. So it's trade safe So it's about isolation too. All right. Let's bring us to talk about the actor so Actors is a independent computational unit They contain a message queue you can see in the slide and React when they receive a message, right? So they act they did the actor a compose of three main component the mailbox the behavior and the state as I mentioned so the actor can no access other actor state, right because only send messages and Per nature actor are single-threaded Which is great because provide out-the-box a very simplified no programming model, right? So the actor received a message which is a synchronous for out the world. So it's no blocking Receive the message and react to the message to compute the message now While computing the message all the other income messages. They are not lost. They are buffer, right? This is Depend that they did the framework but is an unbounded queue. So just receive a message ready to be computed So But think about an actor as a rental car You want a car you you call a rental company. They deliver a car, right? You drive around and the car breaks You don't care to fix the car, right? You call a rental company. They send you ship you a new car Any questions so far and dr. Maldice know no at all New rise me around for a while so that really is a is a mathematical model for a Conquering computation that was originated in a 73. So it's over 40 years old by this man car you it and so really Actor what they like about the actor is really raised at the level of abstraction and provide these Simplified programming model to write a lock-free application, right? The actor I have three axioms So actor can send messages to other actors Actor can create other actors and also actor can Determinate how to respond To the next message means they can change internal behavior, right? We see action in the code sample They can change according to the message. They can change state. Both of them can change behavior So actor really can make a local decision Now you say that because actor can send message to other actor Actor one actor is no actor actor will come in system. Yeah, it's true But in real world I found myself to use actor just to write Verifying state machine just because you can change behaviors inside that so actually I found myself very useful just for you know the daily programming model and The actor I should have a great reputation, right? That's why actually it's getting more and more interested today and You know, they're all the Cinderella story like what's up using this technology but the the the the first major adoption success was by Ericsson using our language in 80s, right? it was able to use Embrace completely the actor model and and for the telephone industry and and build this which they was able to run 99 99 as per year, which means 30 millisecond down per year, right? So pretty crazy how you think we were to measure that you should make a research about that pretty interesting, but How do you achieve that? Well, we discussed later but really the actor model also they embrace these let the crash concept really and We are more details about that coming So really the actor model is no new, but it's solve all this great problem and great benefit, but ultimately more important Doctor model as I Said in an introduction is full compliant to the actor manifesto, right? is event to even driven per nature use a Synchronous master pass is semantic to interact with each other, right? So they can send message to each other and in a synchronous manner. So it's not blocking and in scalable and And we see later also for the the the elasticity when talk about remoting how it easy it is to Scaling up and scaling out your system. So very elastic So I have sharp as building this agent, right? Which has pretty much the same characteristic of an actor. So I have the mailbox, you know, the behavior of the state and I have full support for the async workflow. So out of the box great support for for Distributed system But there is a problem with this so Again, this is a How you create your agent? So there is a problem with the piece of code. It's not a bug, right? And the problem is here and the problem is because It's not a bug but you You can a accent agent now by an address by by an explicit reference by an explicit instance, right? So what does it mean? It means that an agent is not out the process is a is in memory, right? It's only in process but There are some benefit with an agent, right? Think about an agent is a memory slot You can put in a slot any kind of primitive type a rate integer whenever but because it's a memory You can even send a function, right? You can send behavior You can compose function together and send it to the agent and then agent can get this function and And apply atomically to all the behavior, right? So actually agent Technically it's more functional than an actor, right? Because I like to write more functional manner Concern application versus an actor, but again agent as in process. There are no all these No durable mailbox or supervision functionality built-in there are helper library for that, but again Agent is not an actor, right? Any question about this part? All right. I try to Speed up to call the code sample that I could stuff So let's bring us to the aka.net, right? which is the port of the JVM aka to the.net platform and This is actually the definition of the actor from the JVM and what it is is they define a toolkit and Is a toolkit ready to use to achieve better performance? With a very simple a simplified programming model, right and actor are cheap So compared it to tread you can fit 2.7 million actor in one gig, right? And that's actually if it's a crazy number allowed you to really Give you a lot of freedom how you can model and express your domain with actors, right? So how do we achieve this? Well actors are reactive So when the actor have no message to process is idle which mean the resources that tread is sent back to the scheduler Right when they receive the message then the schedule is sent back to the tread and process the message so How do you keep your actor system from filling apart right when? Think over wrong because you know think of wrong, right? Well The answer is supervision and is called parental supervision meaning that as I mentioned earlier actor create other actor So when the actor that create the actor is responsible for the supervision of the child So and how the supervision can help her to resolve the error, right? Well can apply strategies, right? So when there is an exception or there's a problem So the child send notification to the supervisor and the supervisor apply the strategy, which is pretty great because The notification and all the information such as the type of the case exception Why the error will was thrown the failure and according with that the supervisor can can can apply the specific Strategy every an example about this but more important like when I as I mentioned with with Erlang approach This is great This is healthy Right, so let's stop it to be paranoid to program such in a defensive way to you know put try catch everywhere and You know be worried that your application go down because anyways, they're gonna go down so later, right? You know that so at this point the best solution Don't get worried sit back and just you know make the system taking care of that job Apply your strategy and when this exception you're gonna take care for you. That's pretty cool, right? I mean 99ers so it's a good result. So it must work, right? So super briefly about the strategy here There are several but the two more uses one for one supervision Which mean if one node go down the supervisor Catch the failure and apply the strategy for the single node and bring back the system otherwise One for all If one node go down Well apply the strategy for all the sibling for all the know the belong for all the child to belong to that node, right? And bring back the system Well remotely and this is a So I can really design for the system and as I mentioned really When you send a message between actor you really don't need to know where you send the message, right? The system gonna take care for you. It's really transparent for you And this is awesome because you send the message to an actor I can be anywhere and use exactly the same API can be same process same machine out the network anywhere so Really the the the fact they provide unified programming model is great and this concept we call location transparency Which as I mentioned mean that whenever you send a message to an actor You don't bother to know where it is where it is located, right? So this is the secret for sculling up and also sculling out, right? think about for instance, if my wife is looking for me and She didn't know that where I am now here Boulder or shopping or you know, Redmond Seattle He just get the cell phone. She need to know my cell phone number, right? She called me and then That's it. It's so simple. That's pretty much our location transparency But now this is the slide that work worth all the presentation. Okay, so pay attention here This is why I'm sure especially I call the sample in a hand and I call the grand finale. I Would like you to go home when you have time to unload the code sample and play with this is pretty awesome. So Akadonette and F sharp really as This powerful combination between these two technology F sharp at this future building called code rotation. So when you wrap pistol code between, you know, the arrow at The compiler create for you an abstract syntax tree that represents your code. Okay, and The PI in Akadonette is able to serialize this code Send them out and deploy your actor. Okay, I didn't see any impressive face, but I have some nice code sample so again In a remote machine with no actor nothing I'm able to in a code sample later Remote deploy any kind of actor. I want you to send messages. We pretty cool This is very powerful concept. It simulates very close of what Erlang can do, right? So routing Router used to spawn multiple instance of an actor and to distribute it and load balance the work between them, right and Each actor is independent dimension on mailbox and so on. There are different kind of strategies For instance You can create a group actor So you create manually your actor and group together and send the message to the router that responsible to send the message to the Routy or better You just tell the system how many actor you want now I figure out that this actually Doesn't recover the power because there are different strategy They call elastic mailbox and so on actually in a config here You can set a threshold you can set I want a minimum to to maximum 30 actors and accordingly to Thresholds such as the mailbox, you know have more than I know 50 messages, right? React accordingly so the the queue reach more than 50 messages Spawn a new actor for me and distribute the work, right? So this is all built-in an API and By the way documentation for academic rock solid, which sure Super briefly because I want to jump in a code sample Broadcast I think everybody knows what it is. I really want to jump in a code sample here rather out round robin, you know just to evenly distribute the work between actors and Run robin here group is just a combination between broadcast and and and round robin Now the last slide before go to the code sample that anyways are gonna still five minutes because we start late, right? Is a type and untyped actor. That's something that even the aca from the JVM Don't have them working on it, right? So generally speaking the actor are untyped and then when you send a message You check what type of message it is and react accordingly type actor really As you can imagine is a statically type version of the the actor and there are some pro and cons, right? As I mentioned here, so really this type actor is great when you want to combine an existing imperative In the system building with imperative language, so from them side for and from their high You just call a function, right? You just call a method. That's it, but I Recommend to use an type actor behind that Because especially with the f-sharp API you can hot swap change behavior, right? But you cannot change a signature So Yeah, this is how you create an untyped actor by gonna jump in a code sample, right? So let's go to the code samples better All right, so I have several example here So I'm gonna be incremental and it's gonna start simple to Until the grand finale as I call it so how you start well First of all, you create your system, right? You give it a name And the system with the root to use to create or your actor, right? You define your actor in this case in untyped. This is our receive message and The message here because typing fair is left sharp, you know, it's an object type You can be explicit. I use an object, but it's smart enough to recognize that I use pattern matching to figure out What kind of message it is If he's a string I use the test in fixed operator and F sharp. I gonna send out the hello Otherwise is anything else with the underscore, you know, just group anything else. I gonna just print out What should I do? I Create my actor and then I send the messages with a tell there's a tell and ask and we're gonna see later What it does? So let me select all this code here Send to the Rappel Which is by the way is a great tool right there up or just send the code there and run right away So right now in a Rappel I just Define my actor. Now I create my actor So you can see here The actor create they already provide me the address which is The other of the actor that can use for location transparency. It's a dollar B, right, but if you cause any specified a name, right? If a specified name Which is recommended You tell me, you know There with it so easy for me to reference to reference the actor. So I send a message now, which is a string so I'm expecting Hello, I'm back off because a string if I send an integer because I don't know what to do It print this message. Okay. This is pretty straightforward. Okay cool This is a type actor Stop if any question So this is a Yeah, this was untyped because the message is object type This is a type actor So I create two type messages increment and decrement discriminator union, right? So the message can be increment. I do some incremented print or decrement. So Then I have a mutable state, but because isolated is tried safe and Here I create a function for each message that I want to handle, right? So in this case, I receive that handle the increment message or receive for decrement message When I send the message the actor Handle and encode the function accordingly for this message type that I said, right? So in this case, simply I Increment the state and print the state or decrement the state variable in line 21 and display the state pretty simple, right? now interesting The type actor and also this method that you can override which is called hand handle It does exactly what an untyped actor does, right? So if you send a message that you didn't specify it when you define your actor It doesn't turn exception. It just get lost But you have the option to override this this method and actually do something can be some logging deadlock or whenever All right, I'm gonna select this code here sent to my rappel. I Create my system and Okay, now I create my simple actor So if I send the print and you can see Zero, right? Now I've send increment I say three time one two three and I tell print again, of course the state is print, right? Now I send the other Message display or decrement in this case, which is the other message type So now is the second receive function call one two and display is one The state is one now the left arrow bank is a part of the F sharp EPI this the same as tell now We have left arrow question mark for ask ask is when you send a message and then you receive in a task asynchronous future waiting for the result, right? and of course, I'm from Italy sent chow, which is No message that was defined so it got to my unendled message and print. I don't know what to do with this stuff All right, that was cool almost now a better implementation Is Be functional, right? So let's start to have a little Feeling of what is the F sharp API? So this I'll create an actor using the F sharp API. So I create my message type function message type here By the way, what if Amelia with discriminator union the the syntax F sharp a little bit isn't okay If you any question, please stop The system you can see is a bit different now is system dot create a lower case if you check here is actor system dot create. This is a Traditional way the F sharp API use this way to create your system because under the needed is Handle the sterilization for the code quotation for a more deployment other few thing about the F sharp API To define your actor use the of course a function the spawn function take a system the name of the actor and a function that a pie back that is a The function of your mailbox, right? So the actor here is a computation expression And what he does is just synthetic sugar that is spent for you in a synchronous recursive function So you send the message compute the message and then you know recursively Wait again for the next income message. And of course you're able to keep some state Which is very handy. Yeah Which one This one. Yes So That's actually I didn't want to cover the top because take a while but so The actor is a synchronous for out the world, right? You send a message and you keep going. That's okay actor a single-traded but You can compute a synchronously inside the actor to right now I have a code sample that It take some time to cover But inside here you see they used the bank in F sharp, you know what it is, right? Now the message is a message for removed the bank here the message become IO action in this case because he's inside the actor computation expression is a synchronous So let's say that you wanted inside the actor send out in a synchronous call to a service or a file system, right? Well, you have to be careful. There is an API you call pipe, too, right? Because if you call a synchronously And you'll be careful maybe the actor because Send out a synchronous the computation you keep going exit the loop and get the next message from the loop, right? Well, maybe there are some dependency from the state. You don't know you can break something. So it's your food there are some API to to to program defensively and I have the code sample here So you can download it and play with this call really ask and actually these three file here Synchronize ask ask and ask I think actually walk you through To what to do and what not to do actually You can see here Briefly I have this pipe which is pipe to In fix operator in F sharp and actually the code sample Another file. This is actually I you can work it through and actually I think I Can tell you actually this is bad practice, right? So I don't want to cover this goes on a much time But is a code sample go down and you can play with this stuff and it's all there But yeah, good question. Good question. So I'm going by time All right, so Let's go back briefly here to better incrementation. So this is how you create your actor in in F sharp So I'm not gonna run it because pretty much to what the other actor does it So but this how you create an actor in F sharp more functional approach you and state machine as I mentioned the actor as The option to have different state machine, right? So in this case I create my hitting actor They have my heat state machine Cool state machine and normal state machine, right? So in accord only with the message Right, like the actors start start in a normal state but If I send a message to heat up, you're gonna change the state to heat, right? So it's pretty simple how simple how to change state Let's actually start to run something more interesting, right? So I want to start with a chat then I know time to cover the supervision, but I'm gonna jump to the grand finale Directly because we start late and damn it. So let's start with a chat. Okay, so Three project. This is just, you know, the message library. I just use the Types here to open my message IQ discriminated union. It just provide different approach different idea So to connect request Send a message. So Very simple messages, right? The server here It's just an actor I Define some configuration with I enable my remote in with my TCP and listening in port 8080 in the local host and then the chat server start to Listen and keep state of the client the register here, right? So start to loop And I might asynchronously wait for for for the message income So in this case for instance the first function connect request I create a response a welcome to send back to the client. I can access the sender So when you send a message the actor see the message you can access the reference the the address Not the address who send the message is send back, right? And send back the welcome and then of course I keep the state and Not the the the sender to my current state. So if I send a message everybody I just You know loop I send a message to everybody when I send a message pretty pretty a chat system, right? the client here The same functionality That a client could have I make some configuration initially here. I said my nickname. I reference Use the address of the server here, right? So when I send a message I send a message to the server So for instance when I have my connects request, I send my nickname to the server, right in the server register and Send the message I send the message to the server dispatch and so on here in the hand I I send my nickname to the server Me to the correct or send to the server and loop for messages. So pretty straightforward implementation But let's see how does it work, right? I create just a simple script to call this executable file. So let's start The server is up and running. Okay, I Start three clients because you want somebody to talk. Otherwise something is said, right? So register Ricky you're connecting and the server receive the Ricky here, right different all different processes I'm Brian he She's connecting All right, so Brian you say hello Now Ricky receive the message Ricky say ciao because I'm from Italy. Okay. Ciao pretty straightforward But very simple powerful how you start to communicate between processes, right? You just get a the address send the messages everything take care for you. All right I'm not gonna check the supervision because time but let's start with the last two example about remote deployment So All right, so this is the one of the very powerful concept You have in F sharp and and Akadonette, right? As I mentioned, we use code quotation to serialize the code and remote deploy So here I have two other per function. So don't worry about how they're implemented. They just They deploy remotely accept a string as argument and just return a deploy type With a remote scope this power mode accept a system as argument the remote address, which is a string the actor name X is The code quotation, right? So I use this function plus the code quotation and and remote deploy my actor. I Create my system and here is the magic, right? So I use my hyper function and I remote deploy This is a simple actor the grand finale something more sophisticated, of course, but so to prove This is gonna work. Everybody give me a number 42 any color beside pink because apparently it's not pink. All right It's not a friction Magenta magenta is good. All right, so This is a so far. I work in my favorite VM tool in Windows, which is Visual Studio This is and I was in my VM in the Mac, right? This is Xamarin. So this is a I'm gonna run a system in Xamarin. So different machine, right to different VMs, okay? The Xamarin just the library to run ACA. There is no reference to any kind of actor implementation So I run this you can see it's a configuration. They all support and there is no any Printing anything so let's run it Okay, it's small. So let's make it bigger. Okay. Cool Now let's go here to my Visual Studio, which is my Windows operational system I send everything. Okay, until here. So here nothing happened. Okay So let's remote deploy the actor Okay Something arrived there. There is some handshaking and say, okay, I received this actor. I'm happy. I trust you I have no time to talk about security, but it's okay. I trust you. What are gonna do with this stuff? Well, how about I send you some messages, right? I say hello lambda com I could remote and What's your name All right, I just put Chris, okay And send messages. So the messages they're not printing the current console because they are here Right pretty cool. Now. Let's go to the grand finale, right? Now. This is something that you're gonna love it The grand finale is worth this presentation so the fractal so what is the fractal so this is a Very bad implementation C sharp or the man that brought algorithm. I'm not gonna spend time here But just to have you know different kind of implementation The remote here it does exactly what we just saw It does some configuration and it is what nothing There is no implementation any actor in reference no library. Okay now The actor here the remote the the the the fractal there's some ugly code For some window form. So what's going on here? I gonna spawn a remote system with no implementation any actor. Okay, I gonna create Windform application with a picture box empty. I gonna break in tile Send that the empty tile to my remote deploy actor We're gonna make some magic massage the entire send them back in my wind form and Display my map over there. So pretty cool, right? So here's some configuration I mean, I tried to explain this to my wife. She's no guy excited. So I hope you understand This is pretty cool So here that's some configuration some picture box in wind form. So this is no Nothing fancy I prefer function. I received from my remote actor deploy I receive a Bites already right so I convert to an image and Here the render I get the image I mean the the bytes they coordinated use the helper function and Stack it to my picture box. Okay Display tile is a local actor that received messages from my remote actor that I'm on the ploy And I use dispatcher the synchronized dispatcher to avoid, you know martial trading exception Here I'm gonna remote deploy my act to use a robin Unrobin routing This is my presentation my actors. Let's start to be more sophisticated, right? I get some memory strings save the image everything. I reference my mail brought in C sharp wrapping up everything and Remote deploy all right Now here the last part I gonna break apart My picture and start to send to the remote actor I just deployed the information my coordinate and also the address on my local Actor so in massage the MP tile and send back the image. Okay Let's run it Are you excited? All right This is a remote actor. That's a remote system. There is no actor here. There is nothing here, right? This time I put everything logging but now let's start it. So All right, so the wind from is up and running. So I click start I Remote deploy the actor. This is the log or the remote actor actually the remote system. It was no actor, right? So now I send I receive back the tile We might be over here. That's pretty cool, right? All right All right, so any it's cool. Yeah, all right That's that's awesome. Now I have something a little bit better How about right so and again, I Put a number there. It can be dynamically expanded for you, right? You can set that for you But what's happened now? I'm expecting a crisp performance, right? And especially when you have This motivation you can tell your wife. That's why I get the couple as very pie so it can dispatch the war You know, you have some good material to explain why right? All right, so let's remote deploy this boy Remotely now You're gonna create 16 instances of the actor. That's pretty cool, right? Now the black tile Arrive earlier of course because there is not much work And here I'm gonna be and of course you're gonna go to check the performance is all hundred percent Pretty cool, right? question Yeah, yeah, yeah, so This was my grand finale Yeah, yeah, I know Well, we start late, you know, so I feel this is my information Twitter account get a presentation aka a promote is all there and if any question, unfortunately, they cut me off But that's all and I'm around so