 So, here we go, thank you for being here, I was not expecting such a crowd, I would have taken a tire, so that's me, not really interesting, no I want just to say that usually I code in Java and Python just because I'm obliged to and I would prefer to code in Ada, but it's not the case in my company, even if I worked also in a European aeronautics company in the past. So the goal of this presentation is to show you how we can distribute some computing in Ada and for this I will first explain what is distribution. So according to Wikipedia, a distributed system is a system where each component are located on different computers on a network and then they can coordinate and communicate using message passing. The problem is that with message passing is never defined and for this task we have several technologies. So different technologies appeared in the last 40 years and they will only take few Soap, soap, yes soap, like the soap, is in fact more a protocol, an XML protocol using a definition language, using Wiesderl as definition language, Wiesderl is a XML file which defines which types you can use, which method you will be able to code and so on. It runs over HTTP and was mostly used from 2000 and 2009 I think. Then we got something called REST, REST does not define anything, it's just you will use get, put, post, delete and so on from HTTP, you don't know what you have to carry inside REST payload, it could be JSON, it could be XML exactly like soap, it could be text, I've seen text in the past, anything you want, really, really good for someone coding in Ada. Koba, we will talk about this one later and DSA, so DSA is a distributed system in the next, it's an index for Ada, which is a part of the standard, a compiler doesn't have to provide a DSA layer, but it's Ada only and you won't be able to talk to other program running something else than Ada. RMI, this is the part for Java, it's remote method in vocation, it's Java only, just like DSA was for Ada only, it's Java only, I decided to put this one just because Microsoft was not there, so distributed common object model, which is the distribution seen by Microsoft, where you will have some components inside the Microsoft world, talking to other components inside the Microsoft world. As far as I remember, we were able to create DCOM objects in wonderful languages, C++, also VisualBasic, and many other things that are really, really related to Microsoft. But among the others, you have a lot of different protocols and ways to communicate. Someone talked to me about Protobuf, Protobuf is protocol buffer, it's a kind of data formatting coming from Google. Okay, so several candidates are possible with Ada, REST, easy, REST you have an Ada web server, AWS, you can do REST because REST is only listening to HTTP verbs and just providing a text in exchange, a text or XML or something else. Anyway, we will agree that it's not really something strict, without strict typing, so for Ada REST, it's not something that we will use. And note for Stefan, OpenAPI is not something to describe data correctly, from my point of view. SOAP, SOAP is supported by AWS, so you can use your Ada web server to provide some SOAP endpoint, but who wants to have XML on the wire, XML everywhere, describe everything in XML, and have a ratio between the payload and the tags, which is on the side of the tags. Compression. Yes, yes, of course, who is Gautier? DSA, okay, DSA is a real good candidate, but it's Ada only and we know that, alas, the word is also with C++ and stuff like that. And finally, CORBA, CORBA is object-oriented, it uses an interface definition language, it's binary on the wire, the same way as protocol buffer. It appeared in 1991, so to compare to protocol buffer, which appeared in, I think it was in 2008 or something like that, so you can see that we are still keeping reinventing everything. And there are some language mappings. So what does it mean? CORBA is Common Object Request Broker Architecture. It's a standard from the UMG Object Management Group, which is a consortium of computer companies, it was released in 1991 for the first version, but the last one was released in 2011 or 2012. It's object-oriented, it uses a definition language, a strict one, but I will show you. And it's language agnostic, but the standard mappings were defined in the standard. So you can have an IDL and map it to C++, Java, Ada, C, Cobol, Lisp, P1, Object Pascal, Python, Ruby, and small talk, so you can talk to everybody, almost, no JavaScript, sorry. CORBA and Ada are not very trendy, but together they do a great job. So you know this is a quote from myself today because I've never been quoted before and I was really, really impatient to be. So nobody quoted me today, so that's it's done. Okay, there is some code already available since almost one week. Yes, but I've done it a long time ago. So suppose we have a program which is very useful. Yes, easy to use and integrate because it's Ada, but not designed for remote access because the main developer decided to put it only at the beginning as a command line tool, neither for scalability. Yes, when you will see what the program is, you will say it's obviously we need scalability for this. So distribution is the solution to our problem. The CBSG stands for Corporate Bullsheet Generator. The aim of the project is to providing the user sentences built against a vast vocabulary and sentence constructions harvested during long boring meetings. So it's another piece of software provided by Gauthier de Montmola. So we had Zipada, Lib Zipada, and we had the Corporate Bullsheet Generator. And obviously you have an online version. Let me show you this. Here is the website for the Corporate Bullsheet Generator, which is using a brand new technology, CGI. And here you can see with a beautiful website and beautiful interface where you can just, if I recover my mouse, a magnificent button. When you click, you get five new sentences. The category manager technically standardize our trends. No problem. I've been working in Airbus and I can tell you that I've heard some kind of sentences like this during the famous long boring meetings. Yes, and I'm pretty sure everybody has. So it's important to make it distributed, so we will define our idea for CBSG. So first, let's take a look at the added specification for the Corporate Bullsheet Generator. It's a generic package where you have to provide the characters that will be used to format your text. Then you will have four functions. Sentence gives you one sentence. Workshop, I think it's 10. Short workshop, which should be five. And financial report, 100 sentences. When you don't know what to do at night, you have to read this. So the idea looks like C++. It's a standard from the UMG. I would say that UMG was mainly C++. So you will find the beautiful curly braces over there. And several, I would say that code formatting looks like C++. Okay, not a great deal. What a module is. A module is equivalent of a package. It's a namespace for C++. It's a package in Ada. You can define struct. Struct are data that you can share from one object to another across the network. And then we define interface. Interface is the definition of the objects that will share some functions with other computer. Unlike the struct, the struct can come across the network. An interface is an object which will stay on its server. You won't get a new object by getting a reference on this. It's really distributed. For this, we will use Poly Orb. Poly Orb is a polymorphic reusable infrastructure for building object-oriented distributed systems. It provides several middlewares through what we call application properties, personalities. So with Poly Orb, you can do DSA. Great, it's Ada. Cobra. And MoMA. MoMA is message-oriented middleware for Ada. That's it. And then, protocol personalities. So you say, how would you use the network to handle the three applications? GIOP is the one which we will use. GIOP is Generic Inter Orb Protocol. And has implementations such as EIIOP, Internet Inter Orb Protocol, SSL-IOP, DIOP, MIOP. And the last one is SRP. It's a simple Y-crash protocol and it's based on HTTP. The standard is to use GIOP with IOP. Poly Orb is maintained by Ada. It's available on GitHub. But yes, I put this one because compiling Poly Orb is not that easy. And so I wanted to put this and to show you that when you configure your Poly Orb, you say which protocol you will use and which application you will use. And for Cobra, there's something else called the Cobra Services. The standard defines several existing distributed objects, naming, event, IR, notification, and time. For those who are interested in the GitHub, you will have the standard code for the distributed corporate bullshit generator and you will have one using naming. Naming is in fact a kind of DNS for objects. We have Poly Orb. We do have our IDL. We generate some code thanks to this command line. So what do we get? Ash, utilities. What we call skeleton, glue between the object request broker and the implementation and the implementation itself. Yes, skeleton. I loved it. So this is the Cobra architecture. We will be on this side. So we call always the object the servant and the server will be the software that will show the servant to the network. So the only things that we have to change is the implementation. I just put the first one, which is quite simple. Instantiate your corporate bullshit with no marker and then just provide the create sentence, which is a wrapper around the simple generator. And we are using corba. So we have to translate the Ada string to the corba string. Quite easy. So the server, the server needs to initialize the bus called the ORB. We have something called the POA for portable object adapter, which is in fact the glue between the server and the server and the ORB. And that will provide you several things such as instantiation characteristics and so on. Recreate the reference. We start the ORB. This is the code. I just create the implementation. Get a reference on what we call the portable object. A reference. Initialize all the machinery there. And use then, I will show you the servant to reference. I have my object and I transform it into a corba object and then print it on the screen. It will print what we call corbaloc, which is a string, describing the object, providing a unique identifier of the object on the network. The client, okay, we will be on the left side. Quite easy. We generate the stub, init the ORB, get the object. It's okay. We call the method. And that's all. The same way we have to get the code from the ideal Ada compiler and then provide the code for the server, which is initializing the ORB. Convert the first parameter, which will be the corba orb, test that it's not new, and then we get the message from the remote computer using the create sentence. For fun, if we can call this fun, I made a C++ client. So you do exactly the same. You generate a stub. You init the ORB, get the object and call the method. And that's all. So it's C++. I won't be talking about this. It's almost the same. Oh, the demo. Yes. So here it is. Okay. I got the corbaloc. I'll copy it. That's the reason why you can use the naming server, because it's easier. Wrong. Yes. The generator answered, and he said, or ends data captures, engage the intelligent cross-pollination. Thank you. And the last one is using the structure, so you can see the timestamp for this. Conclusion. Why using Ada with corba? Because you're using your favorite language. That's one point. You will put safety and readiness of Ada into an iteration system using all those components that will obviously fail because they are not Ada. And you will be using polyob, which is in itself something interesting. And that's all. Here are the links for the further reading. You have 20 seconds for questions. And I'm pretty sure you won't have any more. Oh, no. Because I'm using the decor version of the compiler, and you have to compile the polyob with the same version of the compiler, as far as I remember. At least for DSA. Yes, but I don't have Debian. I just have a Ubuntu. And no, I won't switch to Debian. No. Stop it right now. Yes, of course. Thank you again. You're welcome.