WEBVTT 00:00.000 --> 00:13.000 Thank you so much for this warm welcome. 00:13.000 --> 00:19.320 So I'm Julia Nock, so I have to protect our data scale and commit there on Eclipse 00:19.320 --> 00:27.120 Zeno and yes, I am here with my colleague, you are on our rune. 00:27.120 --> 00:32.480 So you are also at data scale is the main developer of RZ, the project we will demonstrate today 00:32.480 --> 00:38.800 and you are also of course maintainer on MWZ no for RZ. 00:38.800 --> 00:43.920 So what's journey we had to go to RZ, right? 00:43.920 --> 00:50.840 We started working on Zeno of course, I guess a lot of you have already a but the no right 00:50.840 --> 00:58.480 or what we use it using it and we developed MWZ no for RZ 2 with the help of Intranciac, 00:58.480 --> 01:02.720 we collaborate with Intranciac for this with UME. 01:02.720 --> 01:09.920 And first let's have a dive into the lasagna plates as HSTV call it, the big lasagna of 01:09.920 --> 01:17.920 RZ 2 with all the layers that we have, your application on top, based on several different API 01:17.920 --> 01:23.920 in different language, C++, Python, Java, the RCL API which is a command layer for 01:23.920 --> 01:29.800 high level concept in the in-house like actions, parameters, names and the R&W which is an 01:29.800 --> 01:37.000 abstraction of MW and we have the MW implementation, traditionally based on DDS, starting with 01:37.000 --> 01:43.000 fast DDS, being the default currently, cyclone DDS as another option and in the last 01:43.000 --> 01:50.560 year we worked on Zeno, MW based on Eclipse Zeno and Eclipse Zeno is the lock in RZ, right? 01:50.560 --> 01:58.280 So we have RZ at the very bottom on this architecture and because all the RZ stack starting 01:58.280 --> 02:06.160 with R&W are developed in C and C++, we leverage in R&W Zeno, Zeno, C and Zeno, Cpp and 02:06.160 --> 02:12.280 the core of R&W Zeno is the lock in C++. 02:12.280 --> 02:14.800 How is it developed using Zeno? 02:14.800 --> 02:19.880 It's quite simple, Zeno provides pubs sub, provides queries based on what we name key expression, 02:19.880 --> 02:26.480 key expression is just a string with slashes as separator, so Ross need a convention to use 02:26.480 --> 02:31.720 Zeno in the way to express all the ross concept in Zeno. 02:31.720 --> 02:35.720 So topic service and names are mapped on key expression in this key expression you can find 02:35.720 --> 02:41.240 the domain ID which is still used, you can find the namespace, you can find the topic name 02:41.240 --> 02:45.880 that you can find also the topic description with the type name, string for instance, and 02:45.880 --> 02:48.040 I type hash. 02:48.040 --> 02:53.720 That's the way R&W Zeno is mapping all the ross concept into Zeno. 02:53.720 --> 03:00.260 For graph declaration, when you declare a node to be discovered by all the nodes and 03:00.260 --> 03:04.720 pubs share sub fiber to discover by all the nodes. 03:04.720 --> 03:09.040 We are using live nestocone, so live nestocone is a concept in Zeno where you can declare 03:09.040 --> 03:19.040 a simple R&W, this key expression is tied to the Zeno session declaring the live nestocone, 03:19.040 --> 03:24.800 and as soon as there is a disconnection or there is a loss of communication with the 03:24.800 --> 03:30.160 session, the client is a live nestocone, every other session can receive an notification, 03:30.160 --> 03:32.160 the live nestocone is gone. 03:32.160 --> 03:38.040 So we can build a full discovery and also a monitoring for totally distributed between all 03:38.040 --> 03:41.720 the nodes using live nestocone. 03:41.720 --> 03:47.160 Once you have this, you need to send data in it, so data are just saying like in the DS with 03:47.160 --> 03:52.000 CDR encoding as a payload as a buffer, and we add some attachments for the second number 03:52.000 --> 03:54.320 to attach funds and the group ID. 03:54.320 --> 04:01.360 So why I'm explaining this, it's because already any Zeno application, any user developing 04:01.360 --> 04:06.920 Zeno can do exactly the same to be interoperable with R&W Zeno and with us too, right? 04:06.920 --> 04:14.600 That's actually what did a company named UBQT robotic, the leverage or Deno product for 04:14.600 --> 04:20.440 embedded, which is named Zeno Pico, and on top of this there will pick us, because it's just 04:20.440 --> 04:26.920 a thin wrapper on Zeno Pico, using the same pattern, and then you can have Mico controller 04:27.000 --> 04:32.840 communicating with your Rost2 stack using R&W Zeno. 04:32.840 --> 04:39.280 And then we wonder, okay, we have this big Lzanya plate with Rost on the bottom, and we 04:39.280 --> 04:42.880 would like to have, of course, Rost API. 04:42.880 --> 04:48.440 So what about a pure Rost stack, right? 04:48.480 --> 04:57.440 If you look at what the Rost2Rost project is doing, and no, don't get me wrong on this, 04:57.440 --> 05:01.320 I have a good respect for what they are doing, and it's really important because it's 05:01.320 --> 05:07.560 open all the Rost ecosystem for a complete Rost stack, but the constraint is that they need 05:07.560 --> 05:14.040 to cope with the existing Rost2 ecosystem, and to add up to also the existing middleware, 05:14.040 --> 05:15.040 right? 05:15.040 --> 05:20.960 Anyway, they need to have this FFI, this Interface between the RostCode, and the C-Code, 05:20.960 --> 05:28.120 because all the core of RCL and R&W, some middleware, like FSDDS or Cyclone, are developing 05:28.120 --> 05:29.600 C, right? 05:29.600 --> 05:33.960 But when you go to use R&W Zeno, you will come back to Rost. 05:33.960 --> 05:41.760 So you will cross the FFI at a second time from C to Rost, and we were wondering, is it 05:41.760 --> 05:42.760 a PTE? 05:42.760 --> 05:50.320 What can we gain if we have a complete Rost stack from the user application down to Zeno? 05:50.320 --> 05:59.120 And that what we are trying to achieve with RostZ, a complete Rost stack, implementing, for 05:59.120 --> 06:07.440 no, it's a very basic Rost2 concept, such as actions, purposes, services, discovery, but 06:07.480 --> 06:09.120 also type the adaptation, right? 06:09.120 --> 06:18.120 Because you want to use Rost type with your application, and to have Executory Stalkio, 06:18.120 --> 06:26.160 which is a famous Async and quite used with Rost, still maintaining the Interoperability 06:26.160 --> 06:28.360 with R&W Zeno. 06:28.360 --> 06:30.360 So what does it open? 06:30.360 --> 06:36.080 As I still mention, it opens the safety of the core, because you are fully in Rost, noise, 06:36.080 --> 06:38.160 signal, and safeguard in here. 06:38.160 --> 06:43.840 It opens also the possibility in the future to certify, or the stack, right, and to certify 06:43.840 --> 06:48.440 from end to end, from the middle way up to the user application. 06:48.440 --> 06:54.840 And it will open a lot of the Rost case, as we will discuss in the next slide. 06:54.840 --> 07:02.040 So the main goal was to have a 100% Rost stack using Builder Patents for Avalu TVT, so the 07:02.040 --> 07:08.360 Builder Patents are traditionally used in Rost in order to expand an API without breaking 07:08.360 --> 07:10.920 the backward compatibility. 07:10.920 --> 07:15.120 Cargo build, so because the stack is full of Rost, right? 07:15.120 --> 07:19.560 We don't need to have dependency on other packages like C package, so we don't need 07:19.560 --> 07:26.880 any more core currency resultant, so we can use just Cargo. 07:26.920 --> 07:32.040 Rost that if Rost to application, so prep serve service action, and Rost discovery, 07:32.040 --> 07:35.240 that's a minimum minimum we would like. 07:35.240 --> 07:40.160 But we included, meaning zero Rost to dependency requires, meaning implying that you can deploy 07:40.160 --> 07:44.240 Rosts on any target supported by Rost. 07:44.240 --> 07:51.040 So any Rost platform, and of course, interoperability with RMW Zeno, but also we wanted 07:51.040 --> 07:57.440 to open the possibility to have alternative encoding, because a lot of people want to 07:57.440 --> 08:02.440 explore, probably using, for instance, protobuff, c-bore, or maybe JSON in some time, if 08:02.440 --> 08:10.440 you want to communicate with a UI, JSON might be also some time, a good solution. 08:10.440 --> 08:13.800 So let's dive into the details with UUAN. 08:14.120 --> 08:15.120 Okay. 08:15.120 --> 08:16.120 Let me go. 08:16.120 --> 08:17.120 I already have one. 08:17.120 --> 08:18.120 Okay. 08:18.120 --> 08:21.120 I was all nervous. 08:21.120 --> 08:22.120 Okay. 08:22.120 --> 08:24.960 Hi, everyone. 08:24.960 --> 08:29.960 So although I will dive in, but I will make it very easy to understand. 08:29.960 --> 08:35.440 So let's read the three main pillars of Rostset, the left-hand side is the current one, 08:35.440 --> 08:44.720 I'm the original CPP, let we cooperate with Intrinsics, I'm the original C++ binding, 08:44.720 --> 08:50.120 I'm top of the Xeno C++ binding, I'm top of the Xeno Rost, Xeno is ready in Rost. 08:50.120 --> 08:58.400 And the right one is our new POC, let we use the Rostset, which I'm the features enabled, 08:58.400 --> 09:04.160 and then we can, I'm top of it, have a Rost version of W, okay. 09:04.160 --> 09:08.560 And then we also support RCO and the UUU Rost 2X. 09:08.560 --> 09:15.360 And in the middle one, it's a less text, let's use the Rost and use Rostset as a framework, 09:15.360 --> 09:21.200 then we can build any Rostset on top of it, with the R&W-Zeno C++ binding, okay. 09:21.200 --> 09:28.400 So this is a very overview that I'm getting, okay. 09:28.400 --> 09:35.040 In case this audience is not familiar with how R&W works. 09:35.040 --> 09:43.080 So R&W in Rost is some easy way to switch the underlying transportation layers. 09:43.080 --> 09:48.560 So for example, you want to talk her and listen her, they would like to communicate 09:48.560 --> 09:54.480 with each other and you want to customize the transportation, then you set an environment 09:54.560 --> 10:02.320 variable to switch R&W you want to set, like here, R&W-Zeno Rost, okay. 10:02.320 --> 10:10.240 But in Rostset, we have more, like, is somehow like RCO layer. 10:10.240 --> 10:16.160 So you can spawn a node like this one, this is Rost English, and you can use a builder 10:16.240 --> 10:21.920 pattern, like with some specific QOS, lift the others, use a default values, 10:21.920 --> 10:24.560 and you can customize your service. 10:24.560 --> 10:28.000 If you want to use a CDR, you don't need to use it because it's by default. 10:28.000 --> 10:30.720 But if you want to use PoloBuff, we also support it. 10:30.720 --> 10:37.840 So the Rost message build with Rostset, you can build with PoloBuff support, directly. 10:37.840 --> 10:41.200 It's just a feature-flake, okay. 10:42.160 --> 10:53.040 And for a more, if someone already used CDRs and they used to use Deno Pronging DDS, Rost2DDS, 10:53.040 --> 11:00.320 or Deno Brig Rost2DDS, they used two different schema, or I call it key expression backend. 11:00.320 --> 11:04.400 In Rostset, we also support easy switch to support it. 11:04.400 --> 11:10.640 So if you still want to use CDRs and also leverage the power of Deno, in Rostset, 11:10.640 --> 11:13.600 you can direct switch it by with backend. 11:13.600 --> 11:16.640 So we have a very strong compatibility, okay. 11:20.880 --> 11:26.480 And in Rost, we have very ergonomic ACing API. 11:26.480 --> 11:33.040 So in Rostset, you can call D-pop publish, or D-pop ACing publish.au, 11:33.040 --> 11:35.280 but you need an ACing runtime. 11:35.280 --> 11:41.280 Then you can leverage the ACing I-O to not block the ACing schedule. 11:41.280 --> 11:44.880 And also we support two patterns of subscriber co-peck. 11:44.880 --> 11:48.480 One is a co-peck, and another one is a pouring style. 11:48.480 --> 11:53.040 So this one is common one using the Rostset or CBP. 11:53.040 --> 11:56.720 You build with a co-peck and feed in a function. 11:56.720 --> 12:02.720 Another way is PoloSile, let you can hear that, okay, and until you receive some message. 12:02.720 --> 12:06.560 And this receive could be an ACing code as a function code. 12:06.560 --> 12:10.720 So you can say sub.acingReceive.au. 12:10.720 --> 12:16.160 So you can have a streaming style, very easy to write a code. 12:19.760 --> 12:26.560 Okay, and we also support action service, like server and client here, 12:26.560 --> 12:28.560 also very easy to use. 12:29.280 --> 12:36.720 But there's something I want to highlight this one, co-co-tock. 12:36.720 --> 12:40.160 So why we want to use RostEnglish? 12:40.160 --> 12:47.760 Because you can have a very detailed documentation, or this one. 12:47.760 --> 12:50.800 In Rostset, you can build up this. 12:50.800 --> 12:56.160 For example, you can query the definition of Z-pop builders, 12:56.160 --> 12:59.680 and then you can know what's the type on it. 12:59.680 --> 13:04.240 So let you can select, I want to use CDR, or PoloPath. 13:04.240 --> 13:09.600 And you can know the fields, these Christians here, 13:09.600 --> 13:14.160 I want to attach something, or enable share memory. 13:14.160 --> 13:16.880 Okay, so for example here, I demonstrated, 13:16.880 --> 13:21.600 you can customize per publishers, share memory like this. 13:21.600 --> 13:24.560 This is not even possible in RostEnglish.cpp. 13:24.640 --> 13:29.120 You can customize each node, each publishers, 13:29.120 --> 13:35.200 a very fine-grained control, and send it with your customized share memory. 13:38.400 --> 13:41.680 So every detail can be found in the cargo duct. 13:42.000 --> 13:52.240 Okay, and for the more Python API is also supported. 13:52.240 --> 13:58.880 So you can write easy Python code with the same patterns, build up a context, 13:58.880 --> 14:02.160 and build out a node from the context, and build out the publishers, 14:02.160 --> 14:07.280 and the subscriber, also a very easy polling style. 14:07.280 --> 14:10.000 So receive and then do a processing. 14:10.800 --> 14:13.360 CodeBag is also supported. 14:13.360 --> 14:15.600 And this one might be very cool. 14:15.600 --> 14:18.240 If you follow RostEnglish course, 14:18.240 --> 14:22.080 there's a recent discussions on the SEO native's buffer, 14:22.080 --> 14:26.880 and developers may want to leverage the CUDA tensor, 14:26.880 --> 14:30.800 or use the CUDA IPC, but the buffer needs to be 14:30.800 --> 14:34.880 aware of the transportation and best transportation for CUDA, 14:34.880 --> 14:37.440 for other GPU buffers. 14:37.440 --> 14:40.560 So in RostEnglish, we try to provide another solution 14:40.560 --> 14:43.200 to possibly achieve it. 14:43.200 --> 14:47.600 So the left hand side is a point-out definitions in Rost, 14:47.600 --> 14:53.280 which contains a lot of headers, but there is a U8 array data. 14:53.280 --> 14:56.000 This one could be very huge, right? 14:56.000 --> 14:59.360 And in RostEnglish, while we do the code generations, 14:59.360 --> 15:02.720 we will wrap it in general buffer. 15:02.720 --> 15:06.160 And this general buffer respects the share memory. 15:07.120 --> 15:12.320 So you can use this, I can customize my share memory provider. 15:12.320 --> 15:16.480 This one is so far, it's just a passage share memory, 15:16.480 --> 15:23.280 but it could be extend to CUDA or GPU device 15:23.280 --> 15:25.680 aware providers. 15:25.680 --> 15:33.520 And then they will respect the area or the device to send it. 15:33.520 --> 15:38.480 If you find the data is in the same area or in the same group, 15:38.480 --> 15:41.680 you will send over the share memory. 15:41.680 --> 15:44.400 OK, so there's a little things we do. 15:44.400 --> 15:49.600 We will translate the important data like this, 15:49.600 --> 15:52.880 could be huge, and we wrap it as share memory buffer. 15:56.000 --> 16:00.560 OK, and then I also want to demonstrate a cool features 16:00.560 --> 16:03.360 that is called RostEnglish. 16:03.680 --> 16:06.720 OK. 16:14.560 --> 16:16.640 Is it Peri? 16:18.960 --> 16:22.160 This no network here. 16:22.160 --> 16:25.200 So it forced me to do a live demo. 16:27.680 --> 16:30.240 Don't worry, I have backup plan. 16:30.240 --> 16:32.800 Yeah, so just a quick call on this, 16:32.800 --> 16:39.000 rights, because we are in rust and because rust are such a rich ecosystem, maybe you heard 16:39.000 --> 16:46.720 about right at U.A., which is a very nice cool framework to build in the shell consoles. 16:46.720 --> 16:53.040 And what you and did is really using right at U.A., to incongruption with us, to have something 16:53.040 --> 16:55.040 to explore our system. 16:56.040 --> 17:02.040 Thank you so much. 17:02.040 --> 17:05.040 Thank you so much. 17:05.040 --> 17:07.040 Thank you so much. 17:07.040 --> 17:08.040 Okay. 17:08.040 --> 17:10.040 So this lifetime moment demonstrated. 17:10.040 --> 17:12.040 You'll spawn a usual general router. 17:12.040 --> 17:15.040 And then I'll spawn the talker. 17:15.040 --> 17:19.040 Let's repeat the published laser scan. 17:20.040 --> 17:28.040 And then as you can see here, I can have about three versions. 17:28.040 --> 17:29.040 Okay. 17:29.040 --> 17:40.040 And then I can select it to major, major, major, major, and then boom. 17:40.040 --> 17:41.040 Yeah. 17:41.040 --> 17:48.040 And I can press record to store it in a SQLite database and also filter to find out 17:48.040 --> 17:50.040 your interesting topics. 17:50.040 --> 17:52.040 Yeah. 17:52.040 --> 17:53.040 Okay. 17:53.040 --> 18:01.040 So it is a quick demo session. 18:01.040 --> 18:02.040 Okay. 18:02.040 --> 18:03.040 But I still have time. 18:03.040 --> 18:17.040 So I want to show you something more interesting. 18:17.040 --> 18:23.040 I'm not sure you guys know what is type description and dynamic subscriber. 18:23.040 --> 18:27.040 So in Rust, it's possible to create a dynamic subscriber, right? 18:27.040 --> 18:32.040 But a dynamic subscriber could be once in very interesting set. 18:32.040 --> 18:38.040 If you support the type descriptions, you can pass the message schema already. 18:38.040 --> 18:40.040 We only have it in Rust. 18:40.040 --> 18:42.040 There's no Rust package dependency. 18:42.040 --> 18:45.040 You can even run in MegaOS. 18:45.040 --> 18:51.040 And I try to pass it. 18:51.040 --> 18:54.040 And you will print out the message here. 18:54.040 --> 19:03.040 So as you can see here is, oops. 19:03.040 --> 19:04.040 Okay. 19:04.040 --> 19:11.040 I can even do something like this along. 19:11.040 --> 19:12.040 Oops. 19:15.040 --> 19:21.040 I can do something like I even disabled a co-com. 19:21.040 --> 19:26.040 So remove any Rust to dependency. 19:26.040 --> 19:28.040 But it still can print it. 19:28.040 --> 19:30.040 Dynamic pass it. 19:30.040 --> 19:33.040 So you can, I can provide a standard loan. 19:33.040 --> 19:34.040 Cancel. 19:34.040 --> 19:36.040 Let work on any platform. 19:36.040 --> 19:37.040 Okay. 19:37.040 --> 19:41.040 So let's go back to the slides here. 19:42.040 --> 19:49.040 And then they will attack, that doesn't work well. 19:49.040 --> 19:58.040 So, so about this, I want to quickly go through this one. 19:58.040 --> 20:02.040 So this is so far our benchmark with the others. 20:02.040 --> 20:06.040 Maybe you, you guys will be interested in this one is Rust set. 20:06.040 --> 20:09.040 Python by the, Rust API in general. 20:10.040 --> 20:13.040 And Rust set, that is our characters. 20:13.040 --> 20:16.040 And as you rust, and as you see, 20:16.040 --> 20:18.040 both of them use general. 20:18.040 --> 20:20.040 And that is for small messages. 20:20.040 --> 20:23.040 And as you can see, Rust set is the best. 20:23.040 --> 20:24.040 For. 20:30.040 --> 20:32.040 Hi for conces, small panels. 20:32.040 --> 20:34.040 Hi for conces, middle panel. 20:34.040 --> 20:37.040 Hi for conces, what make up, bite. 20:37.040 --> 20:40.040 And. 20:40.040 --> 20:45.040 The streaming test, with economic advice. 20:45.040 --> 20:46.040 Okay. 20:46.040 --> 20:48.040 So that is Rust set. 20:48.040 --> 20:49.040 This one. 20:49.040 --> 20:51.040 Okay. 20:51.040 --> 20:52.040 Okay. 20:57.040 --> 20:58.040 Yeah. 20:58.040 --> 21:00.040 So. 21:00.040 --> 21:02.040 But you can. 21:02.040 --> 21:05.040 There are something interesting here is as you can see, 21:05.040 --> 21:08.040 our Rust set Python by the, is quite efficient. 21:08.040 --> 21:12.040 It's just a little overhead compared to Rust by the, 21:12.040 --> 21:15.040 for example, here almost equivalent. 21:15.040 --> 21:19.040 But we, we, we still need to improve low serializations, 21:19.040 --> 21:24.040 because our Rust API is still worse than our Rust by the, 21:24.040 --> 21:25.040 a lot. 21:25.040 --> 21:28.040 But better than Rust API. 21:28.040 --> 21:30.040 Okay. 21:30.040 --> 21:33.040 So if you want to use a Python by the, 21:33.040 --> 21:37.040 I suggest you to use Rust API. 21:37.040 --> 21:38.040 Okay. 21:38.040 --> 21:42.040 So finally, let us have a wish list. 21:42.040 --> 21:45.040 The goal by the, we are coding working on, 21:45.040 --> 21:47.040 because we found sponsors. 21:47.040 --> 21:50.040 And the next one is, 21:50.040 --> 21:53.040 many people want us to implement 21:53.040 --> 21:55.040 Lakuda. 21:55.040 --> 21:59.040 Poverse or support the Python sensors. 21:59.040 --> 22:00.040 Okay. 22:00.040 --> 22:04.040 So we also know it's the features to make it run and embedded devices. 22:04.040 --> 22:06.040 It's also possible. 22:06.040 --> 22:10.040 And for scarves support a better lunch and systems in Rust, 22:10.040 --> 22:13.040 more efficient with Rust set. 22:13.040 --> 22:14.040 Yeah. 22:14.040 --> 22:17.040 So let us, the end of our talk. 22:17.040 --> 22:18.040 Any questions? 22:18.040 --> 22:20.040 I think we have a few more slides just, 22:20.040 --> 22:22.040 some acknowledgement slides. 22:22.040 --> 22:23.040 Sorry. Yes. 22:23.040 --> 22:24.040 Because. 22:24.040 --> 22:25.040 Yes. 22:25.040 --> 22:26.040 We have some, some sort of right. 22:26.040 --> 22:28.040 We are participating in some European projects. 22:28.040 --> 22:31.040 And so they know is partially funded with, 22:31.040 --> 22:34.040 by all those European project, right? 22:34.040 --> 22:36.040 And the last one. 22:36.040 --> 22:37.040 And the last one. 22:37.040 --> 22:38.040 Yeah. 22:38.040 --> 22:40.040 Also the, the code here. 22:40.040 --> 22:41.040 Oh. 22:41.040 --> 22:43.040 The QR code to test the node to test host Z. 22:43.040 --> 22:45.040 And the last one is the Coscop. 22:45.040 --> 22:46.040 Yeah. 22:46.040 --> 22:49.040 Coscop is our open source Taiwan foundations. 22:49.040 --> 22:51.040 And we are called for. 22:51.040 --> 22:54.040 Talks in August of this year. 22:54.040 --> 22:55.040 We're coming to Taiwan. 22:55.040 --> 22:57.040 If you, you guys want to visit. 22:57.040 --> 22:58.040 Yeah. 22:58.040 --> 22:59.040 Yeah. 22:59.040 --> 23:00.040 Yeah. And so thank you. 23:00.040 --> 23:03.040 No, please start our project. 23:03.040 --> 23:04.040 Yeah. 23:04.040 --> 23:06.040 And thank you Coscop to finance the. 23:06.040 --> 23:07.040 Yeah. 23:07.040 --> 23:08.040 Yeah. 23:08.040 --> 23:09.040 To first them. 23:09.040 --> 23:10.040 A lot of them. 23:10.040 --> 23:12.040 Pondigion support me to come here. 23:12.040 --> 23:13.040 Yeah. 23:13.040 --> 23:14.040 Any questions? 23:14.040 --> 23:15.040 Thank you. 23:15.040 --> 23:17.040 Thank you. 23:17.040 --> 23:19.040 Thank you. 23:19.040 --> 23:20.040 Thank you. 23:20.040 --> 23:21.040 Thank you. 23:21.040 --> 23:22.040 Thank you. 23:22.040 --> 23:23.040 Thank you. 23:23.040 --> 23:24.040 Thank you. 23:24.040 --> 23:26.040 Thank you. 23:27.040 --> 23:29.040 Hi. Thank you for the talk. 23:29.040 --> 23:30.040 It was really interesting. 23:30.040 --> 23:32.040 I'm wondering if you're not. 23:32.040 --> 23:35.040 If you can run with us dependencies. 23:35.040 --> 23:36.040 How do you under. 23:36.040 --> 23:39.040 Uh, message generation going from. 23:39.040 --> 23:40.040 There is a question. 23:40.040 --> 23:41.040 There is a question. 23:41.040 --> 23:43.040 Actually, we almost. 23:43.040 --> 23:44.040 Hack. 23:44.040 --> 23:45.040 Love. 23:45.040 --> 23:46.040 Message schema. 23:46.040 --> 23:47.040 La Cogian. 23:47.040 --> 23:49.040 The message generations. 23:49.040 --> 23:52.040 And the, the rich for trade systems. 23:52.040 --> 23:54.040 Let can easily support the go by things. 23:54.040 --> 23:56.040 And the price and buy things. 23:56.040 --> 23:58.040 And the, the trade like the polo path. 23:58.040 --> 24:00.040 Any serializations. 24:00.040 --> 24:02.040 Comedy using rust. 24:02.040 --> 24:03.040 Framework. 24:03.040 --> 24:06.040 So we almost have all the season. 24:06.040 --> 24:09.040 So just basically it's. 24:09.040 --> 24:13.040 Uh, implementation of what's ideal, but in rest with. 24:13.040 --> 24:15.040 Uh, back ends that we can plug. 24:15.040 --> 24:16.040 Yeah. 24:16.040 --> 24:21.040 Question one more question. 24:21.040 --> 24:23.040 Um, I think we finally fix. 24:23.040 --> 24:24.040 Roth. 24:24.040 --> 24:27.040 And the only thing I think we really should get rid of CDR. 24:27.040 --> 24:31.040 And then just go to Fledberg or something that's serial copy. 24:31.040 --> 24:34.040 And then I guess we can outperform Dora and the corporate even. 24:34.040 --> 24:35.040 Yes. 24:35.040 --> 24:36.040 Yes. 24:36.040 --> 24:37.040 Yes. 24:37.040 --> 24:38.040 Thank you. 24:38.040 --> 24:42.040 Um. 24:42.040 --> 24:43.040 Uh, just one more. 24:43.040 --> 24:44.040 One. 24:44.040 --> 24:45.040 Yeah. 24:45.040 --> 24:46.040 Just out of curiosity. 24:46.040 --> 24:48.040 You said you're missing. 24:48.040 --> 24:50.040 Uh, a fox club format support. 24:50.040 --> 24:51.040 What do you mean by that? 24:51.040 --> 24:54.040 It's like M caps or something else. 24:54.040 --> 24:56.040 Uh, is open for discussions. 24:56.040 --> 25:00.040 Of course, we can make it support the the rust to fall back. 25:00.040 --> 25:03.040 But I'd like to put a provided support for native. 25:03.040 --> 25:05.040 First graph message. 25:05.040 --> 25:07.040 I would I would like to do so. 25:15.040 --> 25:16.040 Thank you. 25:16.040 --> 25:17.040 Thank you.