 Hello everyone. So today I will give this lightning talks system integration with the integrand. I'm not sure how many of you have used the integrand. No. How many of you use the component or no component? Okay. Okay. Actually, this is stolen from the creator of integrand. What we think about our application in a functional word, it's like tree. All the branches are our libraries or our functions. Then we have a way to composite them together to become this trunk, our application. So in our function words, in a functional word, we try to get a proper way to composite all these libraries and integrate all of them to become our application. I think component is our first try. Then we have mounts, we have all the things. But I think integrand is the best for now. So you can see we have our domain, we have our database, our API, we have our JT, everything. So how we integrate them together. Or from another, how do you say, another way, normally we are developing our libraries or because in closure or list forward, we're doing work bottom up. So normally what we're doing is we try everything small or then we have our own libraries. Then we integrate them together. So how to do that? If you have no experience of any components or integrands, or any of you have some closure experience to develop application. Okay. So normally how do you do? How do you integrate different libraries together? It's just a regular webnet. So I just use ring and composure. Ring composure. So you put everything in one name space. Okay. Database? Do you have database? Mongols. So how you manage your connection? Deaf. Then global thing. Global thing we all know cannot be reloaded. So every time where you try to do something, you need to stop or actually something not good may happen because of the state. So you could try the way later. Normally we use components or integrands. Both of them now works on closure and the closure script. It may cause can do our to use the reload workflow. So everything you change, you reset, then it will start to get to the whole system back for you. So you don't need to concern about the state which may broken or your connection lost everything. But why we say integrands is the best for from our experience. Integrrands is data driven. So that's the essence. That's the prefer way in closure or list forward. Components is code driven. I'm not sure whether you use it. It's need you to write the code to you say I build a map, then I use this map. I need to create one instance to create web or create DB to do all these things. It can finish all your job but it's all in the code. Integrrands is more functional. If you use components, you know every instance you need to do, you need to create, use a record to wrap it. Then you need to use the lifecycle protocol to have the start and the stop method. But in integrand it's do it in a functional way. So you don't have to have any protocol. You don't have to have the record to wrap the things. So this is a basic configuration used by integrands which I copied from the GitHub. So you can see it's very easy. You can define your handler, you can define what you have. So this is maybe the two libraries. So then you can see that in JT you could see it's handler depends on the handler grid I defined. Sorry. And also you have two ways to do it. One you can define your config in the code. Or another way is you can put this map into your EDN because it's an EDN. You just replace that IG ref with a read function, the tag ref like a read micro. So then you read it. So what integrands do is, in next page, it has, okay, sorry, here, then you define your instance with some init key or, so the init key is to bring up the instance. So you can see it's run JT, it's called get the handler from what you defined previously. And also you can define the hot key, suspend key, resume key. The hot key is similar to what components provide the store. But in component because they use the protocol. So you must to put something there for the stop method. But in integrands you don't need. So just you ignore the hot key. If your instance no need to stop. And it also provides you suspend and resume. So you want to keep your connection pool not touched. Then you just need to reboot your services or web application, web server, then to hook back. You can do this with suspend and resume. And to do the reload work, you can use the method called init suspend resume hot. So everything is a function. And it's very clear. So there is some advanced topic. It can use some derived keys. So you can derive some like web. Then JT is a web. Then maybe immutant is a web. So when you start the web, you say init all the web. So it will bring up everything you derived from that keys. Make sense? It also provides you to define the specs. So it will use these specs to check the options you provided or your config options provided to the instance. Like what the pot should be a number, or the range of that pot number, so kinds of things. So when you init this instance, it's check all the instance, all your configurations to meet the specs or not. It can load from a namespace. With intergrounds, you need to pick up the key carefully. For example, in here, you see the adapt JT. Normally, you can use your namespace qualified key to do that. Then you load that namespace. Everything defines every init this intergrounds method. Defining that namespace will be loaded. And also the last is the duct framework. If you are interested, you can have a look. It's a framework use the intergrounds. It already provides you the SQL, JT, ring, all these kinds of things. You can use immediately. You just put the configurations and the keys there. You can use immediately. So I think that's all my part for this lightning talk. I think next time, the left time is for you to, you can ask some questions. Actually, this also changed a bit of our workflow. So we can focus on the small piece of our application. For example, we use def to do some temporary work. Maybe just below the namespace. Other things below the namespace. Later, we remove all such kinds of things than using the intergrounds to integrate all other things like graphql, composure, api. I'm not sure. You can try. You can think about it. We're using our work. It's quite amazing. Any questions? Could you explain a bit more about how this reloaded workflow actually works? For the reload workflow, there is called intergrounds to repo. What it did is it's user atom to store your system. When you call the unit of intergrounds, it's use the maps. Then use your reference to do the initiation for you. It's use the reference to bring up to get a graph of the dependencies. Then it will initiate all of them to inject these dependencies. Then it will save into an atom. After you do the reset, it will actually do the similar work again. Use the tools namespace to reset your code. Then do the reload. But is the point of this system just so that you have a better development experience, or do you actually use intergrounds during the deployment time as well? In the deployment time, actually it's... I think I use, but more capability provided by ducts framework. It's doing some policy. It can overwrite your configs. For example, it provides your product config in ADN. Then you can specify your DEV config, tester config. Then you can give the orders to ducts. You'll say, I want to load from the test. It has the sequence. It will use your test to overwrite your production. You can do some change. I think that's used in our CEI and product deployment flow. Thanks.