 It's the fourth LXC Meetup, amazing to have it again. Thanks for engineers for recording this session. Just some logistics. Downstairs is a fridge. There's some beer, water, and soft drinks, I think Coke Zero. Short on supplies at the moment, but yeah. There's also wine tasting next to the door. But it's not included. And the toilets are just the stairs down and straight ahead. And then you see the toilets just in case the LXC is too much. I'm Christian. I'm the host of tonight. And also Craig helped me organizing it. Thank you so much for kicking this off. I'd like to give you an overview of what happened in Europe in May 12, I think. There was a LXC conference in Europe for the second time. And I want to report how it was and share the interesting things that happened there. And then we tried something new. If you have some code that doesn't compile, for example, or you have a question around this, we can share it here on the screen and then talk about it and solve your issues, hopefully. Also share some best practices and so on. And yeah, oh, technology. How does it work? I have to make a confession. Again, I did it in the first LXC meet-up. And I do it today in the fourth meet-up. And I'm still very new to LXC. I just stumbled around this Dave Thomas from Prakprak video. And he was so amazed about this. And he elaborated how he fell in love with LXC. And I said, OK, if this man is excited around it, I have a look at it. And I created the meet-ups to gather some amazing people around this topic. And there are always amazing people in Singapore also. And yeah, with that background, no production running code, no real LXC coding experience. But some is called OK. It's very much to improve, I would say. I went to Germany and was like, oh, let's see what the pros are doing. And let's see what's happening. Good news is that the next European LXC conference is happening in Barcelona and Spain. Really looking forward for this. Nice place to visit. I've got a question. How has it chosen who decides about the next place? The Oracle. I don't know. OK. You look at the European Ruby Compress had a nice tradition that there were a few groups that wanted to organize the next conference. And the participants were both in which which place would be the next one, yes. Maybe they said they had a final closing keynote. They made a question, OK, where do you want to see the next LXC company in Europe? And it starts with B. And everybody was, OK, Berlin again, because it's a great venue, actually. And then it's Barcelona. So it's also nice. It's a very vibrant city I've heard, looking forward to it. So with very basic LXC skills, more excitement than knowledge, I went to Berlin and I was like, OK, let's see what's happening. So this is a room, I don't know, actually, hundreds of people fully booked, it seems. And very friendly folks, very nice food. I gained a lot of weight. And met the master, Jose, and had a very short talk. And he actually, I tried to ask him if he likes to come to visit us in Singapore. And he said, yeah, he likes Singapore and he's open for that. Maybe if we hear it, would love to have you here. It was nice. And I brought some stickers here. And here are some stickers. Thank you for giving me these. I really negotiated with the organizers because it's the last batch they had. And I said, I bring it to Singapore and I promise I'll spread it in the meetup. So here they are. Thank you. Is it? Do you want to keep some? Please, sped it off. This is very important. OK, the things I really enjoyed was to talk about Credo. If you don't know about Credo and you're still new to LXC, I really recommend to have a look at it. It started as a static code analyzer, like a check-style if you come from Java. And Rene was giving a talk around this and he was elaborating on the philosophy about the real code analyzer should do in his opinion. And I really liked his approach because it should be a learning tool also. And that's what he tries to implement. He has some categories and gives you real human-friendly hints on the code it analyzed. So if you're new to LXC or even if you think you can really code LXC, have a look. I think you get a lot of benefit from this tool. It's available as hex. It's easy to install package. And it can be a mix command then, like a mix Credo. And you get some nice overview of what things can be maybe improved. But also it was great to see who's using LXC. And I was actually amazed that so many people showed up. I was expecting a smaller conference, but it was a huge hall and a full hall, actually. And there were a lot of conversations going on and so on. Can you see the warnings? Or can you use it also so that we can save the file if it's already scanned? You can use it, for example, as a hook, of course. And then you get the report, probably. It's very highly configurable. And you can introduce it to your workflow, like a CI, for example, to check code style first. I have a report. I show you a screenshot around this tool. You can also try it out later on your code, for example. It's very helpful. You can tell me how bad I am. It compared to other check style, for example, it doesn't hurt feelings. It's really supportive. Josie, OK, do you think you want to do this because it tends to go in this direction? It's really communicative. It's really helpful and focused on teaching. Check style is more like white space, not correct, online 20. And this repeats 20 times because you always have to white space wrong. Very useful, in a way, but not really teaching me something. And also, of course, it was nice to hear from Josie and Chris McCord, what's going on in the future. It was planned. And they were talking about things like Proka or a Gen Proka and all that crazy concepts they have. And they're implemented, actually, by exit and dimension. Which was blowing my mind. OK, that's really cool. Where can I use it? I don't know yet. So I'm more from a consultant side. And then seeing things moving in this direction is amazing, actually. So this is greater in action. It's a bit blur. We can fix this. Can we? No, we cannot. So it's more like the categories I mentioned. It's the code readability. You should add the documentation for your module, for example. Refactoring opportunities. It's not error. It's more like, hey, you could improve here. And please have a look, warnings. There seems to be something. Really wrong. And there's a better way to do this. You have some configuration file, because it's just like that. Black size of the function is 30. So you have the file, right? Totally. It's like a check style. And compared with that, it's not really fair, because it's much more advanced from what I see. There's a configuration file, also per project. And you can have super specific. You can also ignore issues, if you like. How do you make fix? That was a question, actually, from the auditorium. Is there a way to auto fix my issues? It gives recommendations, right? Can we fix? It's right, 99% of the time. And above 5% we introduce black. Take a breeze. I think that is all right. You know, it's a test for your test, right? So you have to run it the second time, then it fixes the issues it made. He was mentioning that it's a nice idea, but the way it's implemented, it's very difficult, actually, to auto fix code. But he gives recommendations, and he was thinking about this, and he mentioned that he's looking for a sponsor for this, and if people are interested in that feature, we can think about this together. So he was not totally, no, no, this is impossible, but it's more like, we can do this, we can plan this for the future, as a future feature, yes, technically it's possible. But it's not yet implemented. Yeah, a lot of sponsors supporting the conference, people talking about running it in production also. There are a lot of game companies. Alexia, if you're very new to Alexia, it's very nice implementation, along actually of the actor-based model, like the actor pattern. And I think about it as a, it's our picture, it's like, I have an online character, and this is the model, and this is talking to other models that it meets in the online world and then they communicate through messages. And this is actually how Alexia Elang is, I think that's the concept, the core concept of Elang, that there are processes talking to each other through messages, and there's no shared state. This was very exciting to see that games are using this, banks and think tech are using it and monitoring like log analyzers. IoT robots, the NERV project was mentioned, the NERV project is hacking hardware with Elang or Alexia. So we saw a robot moving with Alexia doing things and reacting to the outside world by playing some instruments, and it was actually very funny. So if you're into IoT and a lot of things, Elang can also be for you or Alexia. And of course telecommunications, they used Elang, now they're getting into this new Alexia mood and it was very interesting to see. There's a list of... An example that... You're not saying telecom companies are using Elang or... No, I think they're using Elang. They're coming from Elang. Now they get excited about Alexia because they see all the developers, the community is much more vibrant. We talked about this in the introduction, so more context for the online auditorium. Ericsson didn't make a big fuss around Elang. It was invented to solve a problem at Ericsson, but they didn't put a lot of marketing efforts. It worked for them and that's... If people want to use it outside of Ericsson, it seems to be okay. Compared to Sun, for example, which pushed Java... We should blame Ericsson for the current state. Blame? Blame Ericsson. If they pushed a bit more, maybe Java wasn't... Who's to blame? Really? In Aids. Oh, okay. I also heard that they didn't really want to spread it. So there's a list of companies that use Alexia obviously in production. Nice read. It's a good repository, so... Okay, yeah. It's the first thing I found during the Google search. Maybe there are some more official resources, I don't know. Doomspoke, I don't know. It's an official resource, but it was a very elaborate list of resources. The nice thing I'd like to mention, and I'll do that later in the slide, is that Ericsson helped a lot of other things to make it happen. Like Couchabees based on Elam, for example. Couchabees are a key value store, like a NoSQL database, and it was used by CERN, like the European... How do you call it in English? They smash atoms, and then they find new elements. Thank you. And then they used the Elam database based on Elam to find new elements. It's interesting to get into this Elam world, in my opinion, because it opens so much more than just the language. Yes, RabbitMQ. React. So, this is the scaling. There's a nice slide share, presentation, why I love Alexia. There's a link actually on the bottom. And this is the table I would like to highlight, because I also come from a DevOps perspective, and I feel that the pains with Java applications, for example, or Ruby every day, it's okay, but it's more like the overhead, in quotes, you need for the traditional languages and approaches, I would say, is significant more than having everything with Elam. I'm not saying that Elam's off everything magically, but it can handle a lot of things. We try to solve this add-ons like load balancer or monitoring for the processes. It has everything inside already. The language has these concepts that we reinvented for traditional languages. This is pretty amazing, and I like to explore this actually more in the future. It gives a nice overview of what I'm trying to say. The Phoenix, for example, the Phoenix web framework runs out of the box better than a traditional Rails application with caching. It was a metric that showed in the conference. It was mind-blowing. And one thing we recognized when installing the Phoenix web framework that there's a strange symbol like the mew, like microseconds. I have to get used to this actually because I never saw it before in the terminal. It's so fast, it's faster than microseconds, which is the normal measurement. It's so fast that this symbol comes, displayed most of the time. This is the side note that I learned so much on my journey to Berlin and back. Also, from this wonderful article on pragmatic programmers from the inventor himself, and then I realized, okay, I was always asking myself, where's Erlang? I don't see it in production. There's nobody really passing around and saying, I'm using Erlang in production. It's already used in the LTE and CG network we're using every day when doing the connections. And it's like, okay, I cannot imagine actually. And he's quoting, this is some years ago, I think, that article, but he's quoting the 40% of the world's data communication is running on these networks written in Erlang. Quite impressive. I also lost my fear about Erlang, not Alexia, also Alexia, but Erlang itself because I heard about Erlang, I don't know, around 2000 by somebody who was really excited about it and he showed some code and I was like, no, it doesn't work in my brain, I don't know why. But now revisiting this, it's actually very compact. The code is very small and you can get instant benefit and I actually understood the pattern matching here. So this is actually Erlang code. We define a geometry module and we export a function and we have some patterns that we want to match. Like we want a rectangle area function which calculates the area from the height or we want to have the square and so on. Like you get the idea, right? This is like P and then having the area for these 2 key questions. I don't know. I know that it compiles. Does anyone else? That's a good question. Isn't it that the dot is the variable name and something like this? The dot is the regular line anywhere you normally use a semi-problem. I actually thought that that was always the case but I saw some semi-problems there. Is it just because it's got another method? It's an interactive mode. The dot means a semi-problem. This is a specific function. At the end of one function you've got semi-colour, right? And at the end of the last function you've got dot. Yeah, it's a semi-problem. So I could use the dot in the end of other functions as well? No, I don't think so. Because they're all sort of evaluated as a single function. Exactly. Because it's one function with just a few different signatures, right? So maybe I need to use semi-colour when I want to have the same function. But I'm not sure. Another question I have is what is the circle or square there? Is it because it doesn't look like a string? I know this one. They're basically the equivalent of an atom. So anything with a lower case is an atom. And all variables have an uppercase. Very important. So I like that. Thank you. Simba, but confusing at first. What is it again? A convention or a topic-region thing? It follows convention. As you said, anything with a lower case is an item. It must actually be understood by the compiler. Yeah, so it's not convention anymore. It's convention. No, I'm talking about the uppercase and lower case of the parameters. So it makes a difference. The lower case, it makes it a product and action. Yeah. This is an atom. Yeah. So we want to match it. This is something I really had to get used to. To use the same method name again for something else. It's like, okay, interesting. So what's happening here is that we have the same function to get an area for rectangles, squares, and cycles. And with different parameters even. And we want to match, for example, a square. And allow one parameter that we used to multiply with itself. So this is the call. And it used the better match for this. And used the R to get the result back. So this made a click in my brain. It's very simple to write and to reason about, actually. And yeah, it works, obviously. So you can try this data also. Then object-oriented model. So I just want to hear about Elan and got more annoyed by Java. This is how it would look in Java, actually. You have to compile it then also. And yeah, it's not fitting on one page. Just as a side note. Not rolling intended. Yeah. Do you write Java at work? What's that? Do you write Java at work? Of course. Yes. Yes. So yeah. I try to avoid it. Official analytics. You didn't, in fact. You didn't, in higher extent, your square from rectangle. This is called from the official purpose. I didn't write it myself. That's a tricky part. I didn't even want to compile it. OK. So the multiple inheritance. A joke from Alexi Komp is, what's worse than inheritance? Multiple inheritance. There's a very funny talk about OOP. Yes. OOP in Alexia. We can watch it later to have some fun about OOP. As I said, what's coming up in Alexia. Many nice improvements that look promising. Again, I'm not so deep into the programming language. But it made all sense to me. So there's a nice summary of the features here. And there are also talks on this from Jose and so on. More detail. I don't know why you said that at the moment, but it's a great future. It awaits us, my dear friends. It was very intense and interesting to challenge my brain thinking in these terms. I think there's a bright future. Thank you so much. Questions? Yeah, the features. OK. I'll take it. Does sleep take a parameter? Yeah. You cannot sleep. It takes a parameter. Duration number. We can go through the blog post. The date. The calendar types made sense to me because I tried to do some calendar programming in the past. Will it replace the need for the Timex library? That library will be the same. It gives it a basis. It was talking with Timex and another date library coming up. He's hoping that it will become the common struct across all the date libraries. But it's just going to provide basic functionality. And then the other libraries can still add functionality on top of these. OK. So it will not give 100% functionality of the libraries? No. OK. He's trying to address the whole when you deal with a lot of dates, it's like you convert to the way narrative meant back. I understand. To match all the different frameworks. We've got a standard struct to deal with. Yeah. But the functionality is pretty basic. It's the idea of dealing with actual data. Yes. Yes. So how do you use Timex? It's different and useful and very separate. That was a question. Finally, I'll mention again, how about the libraries around LSE and other libraries or how do we use libraries actually? Is that community? I think the community is growing as a team. There's Hex as a standard packaging. And also the rebars we've come from Amazon. You can use both. You can interchange and use other libraries in LSE and LSE is kind of like that. Basically, it compiles the same. So the product is solid. I don't know about like, Erlang using Elix's stuff, but I assume so. I just don't know how that works. So we can use very solid libraries coming from Elang in the LSE applications. And I think to note actually is it's also again a mind shift. At least for me, when an Elang library hasn't been changed for 10 years, it's considered stable. If a Rubik's and an MVD package didn't change in 10 days, it's considered updated. So this is something I have to be very comfortable with. So yeah, just keep that in mind when we search for Elang using old patterns, looking for good quality code might need to be updated here. Do you know if the mix file, when you add dependencies, if there is some syntax for fetching the Erlang libraries, because I normally use just like Erlang library, but I need to provide the github URL to fetch it. So I don't know. Yes, so I use mix, yeah, this is the package manager, and I add dependencies. But when I add the dependency that is in Elix here, I just provide the name of the library, right? Because then it fetches it from hex. But when I provide the Erlang, because I use some Elang libraries, I can't just provide the name of the library, I need to provide the github URL as well. I think some Erlang libraries are in hex. Oh yes, okay, yeah. So it's up to the Erlang library whether it's in hex or not? Yes, yes, absolutely. No, I just think that the question is if it's available on Rebar, I can use it or not. I don't think so, yeah, that's it. So you can use it? Yeah, because when I have like, I fetch the library that is in Elix here, then I see like I get a message that is outdated, that it has some new version, etc. But when I'm using the one from Erlang, I have no idea, I'm just fetching the one that I specified in the dependency because I need to provide URL and the version. And the only way to check if there is a new version is just go to that repository on github and see if there is something new. Yeah, so I guess that's one of the problems still to be solved. First issue. And push a hex. Yeah. It probably helps now that in it, like when we go. Oh yeah, so it supports, okay. It supports. Here, Slice, you also mentioned make. What does it mean? Is it make file or what? It is a minus, right? Minus for like 4. C limit. I'll give you details. I'd love to show you top post, right? William, I didn't get my hands dirty on this yet. So, I apologize. Bye. Please give me a board check back at Elix or I'll have to go. It's all right, please. You're welcome. We are hiring. You say. Details. So, it's all right. Keep that for post. It needs more consideration from the server. Okay, so it will just execute the make. Using make file and will compile some code for you when you need, I don't know, C extensions or something like this. Okay. What about this X unit div? Can you go to that section? I'm curious about it. Sure. Ah, this is how it works. This is very nice, actually. It reminds me. I don't know. Credo is about teaching Elix here, the output of the error messages, compiler error messages, and also the test results are very much to teach you on the spot. The error is faster and also if you're familiar with Elix, compiler is a very useful hint to search what you could probably fix to resolve the issue. So, what I saw very strongly is that people seem to rediscover that computers can actually be helpful for us. For us, instead of throwing a stack phrase, we have to search for those things that give us opportunity to learn. So, there was one quote, every error message is an interaction with the user and a chance to improve the knowledge or something. So, our phrase now is this enlightened art. We think about the user programs, our language, and help them do quite better work. I think that it's astounding. It's the only language where I feel it's wrong to try to improve this language. Correct me if I'm wrong in Java. I don't feel it so much. Sorry, I said the actual language. It's not about Java at all. It's close to every day. Do you see that in other languages? It's also, bam, there's a stack phrase. Here you have it. I have to figure out why I get failed. It's very impressive. But I'm not failed because of the huge stack phrase. I have to get a bit of knowledge to understand why I get the stack phrase. Do you have a picture of a new language? To get back to the 1.3 that's the old format. You have it and then you can see the left hand side. Actually, this is the spot you want to improve. This idea has been around for many years. There was an idea called approval test. You don't write a test. You just format everything into a string. Then the first awkward, you check it and then you approve it. The next time it will be checked against this approved version. The next time it will be different. It will show you the difference. It can be a failure or you approve it again. That's it. There's a lot of movement in this. It's more easy for me to mix tasks. A very fundamental question. What is OTP? Very exciting. What's OTP? Transaction. Open telephone. OTP is active platform. Telecom for sure. It's a protocol. Open telephone. It's a set of libraries. It's basically the message system. It's a concept. This is not a video. It's an open telephone protocol. It means that there are some concepts. It's a terrible name for the French. It's coming to our web context. It's not only in the router doing all the communication things. It's more like a super-wise process. We start them and then we spin up many processes and we start all of them in their favor. It's more tools at hand to write a full telephone code that was needed or required. It's also very useful for all internet users. Have you tried using GenServer or Agent in Alexia? No. For me it's always easier to explain that because people know what is GenServer. They know what's Agent. This is part of OTP. It's a one-time password. I want to see the other people in here. This is what I got. Actually I thought about OTP. In the invitation you just mentioned it. It's just very common term. One-time pairing officially. The way I thought about it is OTP is something with Java where the RLM of B is the JVM. It's nothing to do with the JVM. That would be the equivalent of B. It's more like the Java threading framework. Or like Boost and C++. It's a set of libraries that without them you can't really use the full power of the language. You can write it on your own, of course. It is possible because it's written there. The whole thing about Alexia is that it's written in LLM when I use it in my course. LLM is more like a toolset for finding your own language. It's a bit too interesting to write. So I want to make it beautiful and have some more ideas. So you use the LLM concept to define the language. A nice resource for learning OTP is the one. It's an open telecom platform. It's okay. It's all over the world. It's very elaborated and interesting to read. I have to reread it, actually. Mindful. How to make the full tolerant applications. It also works very well with web applications. So when you spin up the finished web framework in LLM and Alexia, you already have OTP and you have a supervisor for the program. Write together processes. Yeah. It gives you a framework for creating new processes. Very nice. Again, what we read about with other tools is in the OTP language and the core of the language. I find it very interesting. Like supervisors, process supervisors. It's kind of the whole point of using it at the time. And it's not an operation process. It's a LLM VM process. It's a very lively process. And again, bad naming because they call it processes and you've got tunics processes and everyone produces them. How does it compare with Java? Java is your last name. I suppose that's good news to you. It's a framework. I guess there's a lot of bad namings. Naming is one of the hardest problems I've ever had. Yeah. The documentation of LLM and Alexia is very, very good. It's also the first class certificate. It's very helpful for the developer and really conforming. Yeah. I hope I could enlighten you and share some of the amazing things that happened in Germany. I might have a lot in my brain because I'm seriously amazed by this. Are all the videos already out or will there be out? Yeah. You just said channel. YouTube. Speakers, for example. Jose's channel is really good. He talks a lot about the new OTP style stuff that he's trying to introduce. Can you click on some presentation and see the concept video of it there? Yeah. Oh yeah, there is already a video. Ah, are you interested in the OOP? Yeah. We wanted to share some code, if you would allow me. Before I talk, I'd like to make a scene for fun and a profit. I need a point. Can I play OOP? Yeah. OOP. And the video for OOP? The flash tool. Ah, thanks. Well, I thought this was OOP. Too many. Where is it? OOP is here. So, here we should have some reference content as well. Separate. You just put it all together. You can do this. You can do my new one. This is really important. You can do this. You can do this. You can do this. You can do this. So, we have a class of two. We can also have final classes. So, after we have a class of two, the user data, the access. So, this data is kind of fiber, so we can package it as such. If you have been trying to access it from outside, it's not very, but inside it's going to be fine. It's not going to be as safe, but it's going to be hard to understand. Anything that's possible, do you know what it's doing by the way? Friends. Every time. Every single area has been shared. Questions or comments, are you going to share some hope? Do you want to see Cradle in action? Someone has some code to share. Wish me today. Thank you again for your attention.