Jupyter Notebook so in the first two lines by the way if you have any queries at this moment because next few minutes I will try to talk about code feel free to ask in the channel so that you can follow it up and again I'll try to make it even a little bit bigger just in case so the first line again I'm importing the module and creating a new key store dot slash store that is the directory if I go to the terminal and you can see in the directory I have the store that to empty actually empty directory store store 2 for our demo purpose and the ipython notebook which one the terminal of here can you read this well this just about but the terminal is very small we have the information some people are watching on the phone screen so whatever is possible is great I guess okay so I will try not to go to the terminal much like I will just issue one command I can say that you will understand so I hope this font size is good so in the first step we again importing the module and creating a key store I'll run it done next I'm going to create a new key with a password and this is the name first name is our name and email address and I'm saying we're going to create a curve 25519 key I'm going to take the public key out and write it in a file and also print the fingerprints so I will execute this you can see that it took some time because it had to generate the key save it in the database everything and then prints the key Johnny can actually internally uses SQLite so in that store directory where we created the key store it actually contains a SQLite dv with the encrypted secret key next I'm also saving the secret key out here like I'm saying that let's export the secret key encrypted format this is not decrypted as you can see I'm not passing any password or anything I'm just directly writing it to a file done as I said Johnny can encrypt is written in Rust so the module itself will provide right now provides to call those functions written in Rust directly from Python and that module is actually inside of Johnny can encrypt and the same name so I'm just importing it as rjce rstand like helps me to understand this is the last part and here are some interesting API for the smart card access the first function call is we said ubiquity it took some time and we did the reset on my ubiquity so now if I do a get card details I will see that the key is empty with the default values it contains a serial number of the card name URL and all the signatures everything is empty at this moment the signatures are actually the bytes itself directly so now I can say to set a particular name this is the format we have to provide it and by default the ubiquity is admin pin is 1, 2, 3, 4, 5, 6, 7, 8 so I'm going to use that so I'm also going to set an URL to some random file which does not exist in this case just for future research if we want it goes and then I can say the key we created the secret key please upload it to the smart card and we'll notice that this will take some time it's doing the work and it's done so if I do the card details now it contains the serial same serial number it contains the name the URL and the signature details and I can say to use the same key to encrypt a file now here you can see I'm encrypting a file called m.txt and the output file name is m.asc and before I do that I need to create that m.txt so I'll just run the I'll just run the date command into m.txt if you don't see the screen size as big it's okay because it's just the output of the date command that I'm doing it like coming back to the slides so to verify first okay let's encrypt the file it says true the file is there now to verify that I can actually decrypt using the UV key I'm going to create a new key store which is the key store 2 and I'm going to import only the public key and you can see here that imported the part which I imported is actually a public key and then I can say that this key store is to sync the smart card that is to make sure that the key store knows which secret keys are available in this smart card and now we know it's the same the fingerprint now again I'm just taking out the public key in the same way we encrypted before to make sure that this is the public key just to show and then I can call decrypt the file on the card using this public key and the output would be decrypted text and by default the phrase UV key will have a normal user pin as 1, 2, 3, 4, 5, 6 so I'm going to use that to decrypt and it's done so if I go back to the terminal and then get the decrypted file it's the same time as encrypted value that's the major part of my live demo now if I go back to the original slides why johnny can encrypt you know I talked about one part the other part I believe it will help us to enable is to have better UX in secured applications better usability, better to help the developers to write better code with same defaults and that's not something like my python model is doing actually that is provided by the secure the upstream itself like a much better center defaults for everything we do and the key operations so using this johnny can encrypt module one of my friend that is we created a project called tumpa it's actually a GUI application which right now this live the gif is on tails but this also works on mac and this will allow you to create keys using this GUI and then just click click click and upload it to a smart card because anyone here who is watching this talk who had to go through the steps or I should say pain of creating keys and then uploading it to a smart card properly and makes sure that it works you know what I am talking about and for the people who never saw like people trying to upload keys to a smart card you should just ask around what people think about it like how much time it takes or how much pain point it is to upload keys to smart cards so this particular GUI application hopefully will enable everyone to access their smart cards in much easier form and you can like all the things I showed during the demo you can do the similar things using the UI that is setting names URLs what kind of cards etc now the name part because again if you are into this community for long enough you will hear a lot of things about encryption and OpenPGP and there was this famous paper about why Johnny can't encrypt so the name of my project started from there and it started just as a fun project name and it just stayed there as of now you can read, you should read the paper because that talks a lot about what are the troubles people get when people using OpenPGP and I believe Sikoya and related all different projects will help to overcome this issue and with this I think I am coming to the end of my talk that's the link to the documentation and I also write regular blog post on Kusheldash.in and it is given to Kusheldash so if you want to check it the documentation and the source code on GitHub and then maybe if you have any queries come and talk to us so we have a couple of questions in the shared notes in a couple of minutes to grab them unless Mario wishes to step in and start the next session but all three from Niko I think they are do you build Python wheels for Donik and Encrypt so users do not need a Rust compiler to install them I don't think that makes sense do key stores need to be directories can you also store keys in other places or objects what are the advantages right now it's using file systems so it's the directory where inside of it we'll just store up a split file and can you provide the Jupyter Notebook link in the shared notes so we can experiment with it I will upload now and then you can try it out like it's not uploaded thanks for the idea and I'll also add a link to the my slides so that you can find it easily fantastic Mario are you stepping in now or shall I yeah I'm here so let's move forward with moderation Roland you've moderated a very long time right so thank you very much for that I'm now going to bed still with my presentation slides for my presentation so I'll add what you call the notebook link there it will be here cool maybe you can also publish it here in the chat on the event so wherever people find it thank you very much we have the next speaker lining up already good to see you hope to catch up soon again thank you very much and Roland thank you to you too it's been a fantastic time listening to you listening to the questions and comments how you interacted with the speakers really enjoyed it thank you very much security and privacy is my favourite part of the conference apart from the drinking which we'll do next year thanks Mario good night all see you tomorrow okay and we are getting started now with the next session so let's set up the speaker it's Nico Kunzmann Nico are you there I probably have to give you additional rights here in the session and let me so you should be able now to switch on your microphone and your camera but I'll give you presenter rights did you also unlock yes I unlocked Nico so Nico you should be able to activate your webcam and activate your sound just there's a headphones symbol icon okay so I see he's coming on and Nico will talk about Caleta events in Python an open source library so Kuschel just talked about Python and Nico is a fan of Python apparently too about Nico Kunzmann Nico studied IT systems engineering he likes open source work founded Koder Dojo in Potsdam in Germany and Nico is living in an eco village Nico are you able to talk to us please activate your microphone hello can you hear me yes perfect so wow I didn't know that you are living in an eco village you have been at the first Asia summit quite a few times that you trained a lot of students in the community so how is life in the eco village yeah it's challenging and quite nice can you understand me well when I'm standing here yes we can still understand you well very good I get my own vote I'm closer to nature and that's quite nice I'll show a picture perfect so yeah bringing tech and ecology together and a lot of other things I think we'll learn a little bit about your work here in this session it's half an hour but hope to see you also like sometime soon face to face to learn more about your work and anyways it's great to have you here and we're really looking forward to your session so I hand over to you here we go thank you Nico for joining thank you very much yeah hello and welcome to my talk so why do this talk is basically I wrote an open source library which I thought only I need and then I did a few years later and it has 120,000 downloads and per month so I would like to take you on a journey with me to explore a bit how could that have happened so and yeah this is a library specifically working in python working on online calendars see oh no to do that yeah for the structure of the talk whenever you have a question there are the show notes and you can write your question in the notes maybe I can address them while I'm talking maybe I can do this in the end when we have time for questions and answers the slides are also online you can find the link in the show notes so that you can click through the slides go up and down click on some links there and you can basically follow your own rhythm I'll start with talking about the history of the library and then go into the different factors that I see as a success factor for your open source project and to name that I'm just an open source developer who does hobby projects I'm not part of any big company or any organization but still I could do something that people use and so can you yeah a little bit about myself I've got a website but I'm living in the eco village T.P. Valley right now I live in the U.S. with my family together in the United Kingdom in Wales and when I'm coding that looks like that I sit in front of my burner get my knees warmed get my knees while I make some porridge and some tea and basically I'm offline maybe once or twice speak I push my code and listen to some emails from issues and that's basically it so you can become a full developer of libraries and everything you don't need to have a computer or something like this or a stable internet connection so that helps now about the library so a few years back we were in Brandenburg we just created a network of different hacker and maker spaces in this rural area of Germany where nothing much is going on in the digital world and we were faced with this question of how can we tell people when something happens somewhere else so that they can go from one village to another from one place to another so we wanted to have a joint calendar and all these maker spaces they already had calendars where they put in their few events that they made and they shared them in an open format the iCalendar format WordPress at that time provided a solution so that we could join different calendars and put a website up with one calendar but I wanted to go a bit further and make that easier for everyone just without hosting and also highly configurable so that other places can show calendars in different ways without needing to set up the WordPress again and I created the OpenBab calendar project so you could have static site find an ICS a calendar link online somewhere and display your calendar on your page now that's they already started facing the issue having the online calendars the ICS files how do I display these events and the code for that became increasingly complex so that I decided to carve that little thing out and put it into a known library and when I look at it now it has like 120,000 downloads per month and I don't know even who uses it only it's useful for people and yeah I want to explore with you how this could have happened yeah so I think one of the factors for the usefulness of the library is that I have the use case myself so when I started I just had these calendar files they take one calendar and I get all the events out of it and of two years and put it up on the website so problem solved for me everything's fine I carve this little question out and put it into a library of between start and end which events do take place and it has an easy interface just one function and I put that out into the world I added a license to it I wanted to make it open source and I chose the LGPL license that is because I'm again just a hobby developer and I do like it if I share my code and I get something back that I can just click merge and so I like the copy left aspect of the GPL that I do not need any contributed license agreements and that also people who use that library they can be sure if there's a merge request and they use that they also have the right to use it and they don't need to make anything else more sure and I didn't use the GPL because I just wanted to try out the LGPL that's my reason behind that and with that I had a use case a very small one a very rough one I had the license to it it suddenly became a common use case and now people can use it and there's two functions so add the date for getting the events of a date a month a day maybe and the between functions still for a time range in which you can receive events and another important thing is the interoperable base so then you host your iCalendar your online calendar somewhere and to download it you have this file and the iCalendar module was around for a long time already to read these files and use them in Python as an object structure and these these functions they basically take this object structure and give back this object structure so there is nothing new that people need to know it's basically everything is known plus a little function that you need to read up on so I think this one makes it quite easy for people to actually use the library one of another factor is the documentation first so I do like documentation a while ago I read this blog post about write your readme file first and I want to stress the point that this is quite something nice because when I write my readme file first I think about how do I feel comfortable with using my library what would I like it to be and on the other hand if I write the code first and then the readme then it's more like how all these technical specialities all these technical little things they come creeping through as parameters or as heavy thoughts in my head of how I need to pass that on to the user but actually I don't have to yeah and with that also it becomes clear for other people what my library should do and what it shouldn't so when the readme file says this is what library should do people come back and tell you hey it doesn't do what it should here that's the example yeah but if I just have a sparse readme no real documentation then people will be wondering there's a mistake is it my mistake is that the mistake of the library should I maybe write a wrapper around the library so I can fix this use case something like that here but if the readme file just states boldly yeah that's what I can do it doesn't do it it actually is a good thing because people come back and tell you that yeah what I did also with the documentation is just a few answers on-stack overflow of hey you could use that library by the way and no people start to find it and use it yeah and another factor of I think what contributed at least for me to this library is the feedback before yeah I had this this open web calendar and I had my library in it and I would get feedback only from the users of the open web calendar library which isn't much maybe all this event was displayed a bit falsely yeah but now this library is used in many many many other places and I get weird calendar files that people think should work and we can like smooth the edges of this library and let also improve the main software that I wrote so actually sharing these little pieces of my code where other people improve my main software this is one of the learnings that I had in that place here and they get a much higher quality in the end yeah and then there is the tests that I do like I call it test second because I do read me first yeah other people call it test first and yeah I do write this library in a test driven way because I like green dots yeah no it also has other advantages that are not just the visual for example the knowledge isn't lost over time so this library is around for a few years now and I do not want to sit in front of the library and ask myself this line of code should I change it or maybe should I leave it for later I know that when the tests are green I did a good job and and now when the tests are green it allows me to say I also did a good refactoring yeah there was a time when my initial way of dealing with the calendar standard was not enough to reflect the complexity of what is going on so I needed to do a major refactoring of all the code and the test helped me tremendously without them I would have probably broken half of what other people would have expected right so with that with the tests you get a long term maintainability also and that's probably the place where you choose if you have your software project you may have this really just small function that's useful for you that might be useful for other people if you like cut that out put it into a library like this one you may find that the input and the output is quite known it's like a unit from the unit tests so we have the calendar files we have the times at which we want to know which events take place and this is the third thing we do have the events we can look at another calendar that works properly and with that the whole function is 100% testable and we can get a really really high test coverage for our code so that enables us with another with something else that follows out of that because when we have these tests and people start to create pull requests after a year or two we can actually deal with them fast we can get the example we can write a test and so on and when people want to look around for solutions they look at the library and if they see there is no release and no commitment in the last five years they'll think like I do at times if I use that library and I run into a problem I guess nobody will fix my problem and I'll be left alone so they'll look around for other solutions but if the last commit is from one month ago or maybe half a year ago for quite stable ones then you would think I can use that one so having these tests in place also allows you to actually have faster feedback and more feedback and I'm really excited about pie test and I want to show you why so if you look at the way that we do deal with issues in this library because it can be tested pretty well we find an issue, we get the example file we write the tests and then we implement the change and the test may look really easy like this three line I have basically it's a function that takes the list of the calendars that we have all the events from the calendar named issue one at a certain date and then it makes sure in line three that there's only one event and you may think that this function only runs once no it doesn't, pie test allows us to run this function several times in several different environments so for example we want to test it on the calendar that we got issue one but I also test it on the calendar with all the events in a different order so that I make sure that the result does not depend on the order of the events because they can be ordered like they want to be at least in the standard and also a third time because Python has its own, its old time zone implementation called fits or pie tset and this is quite old now and shouldn't be used anymore you should migrate to the newer one which is called zone info which is available from Python 3.7 and upwards so pie test allows us to run all the tests on the old time zone implementation and on the new time zone implementation and with that, with this parametrization of tests that pie test makes so easy you can make sure that the module works on the latest versions and on the older versions so that's about the tests I like green dots too I can multiply the tests with 3 or 4 if I want to so I can get more tests and one point that I would like to say is I'd like to put the complexity last we have this open specification for the iCalendar format which is called RFC5545 and it includes events and time zones it includes journal entries, alarms to-dos and free busy times and many many more features but if we can hide some of the complexity from people then they are quite grateful just looking at the events here we have an example if you open such a file it begins with an event then we have a start time in line 3 it is in a certain time zone which is due to see at this place in line 4 we say this event repeats each Monday in line 5 we say but the second one doesn't happen by the way in line 6 we say we reschedule the whole thing to the 26th of March and then the event ends so if you can hide this complexity away and we just say give us the past calendar is the output the list of events that take place when you want to know it then that's quite a contribution and we already reduce some complexity we don't need to import much much more like alarms and so on and another thing is I guess the relationship of the ecosystems one is for example we have the iCalendar as a base that's already quite known and we just plug something on top and basically give the same stuff back so people are not they don't need to learn so much and that's easily achieved I think with shipping your small functions over to other people and the second one is the iCal Events Library it does about the same as the recurring events library to also download stuff and again I didn't find that in the right time or I didn't like the documentation of it that's why I wrote my own stuff there's the ICSPI Library that if you just want to give you a value event but you don't want to read them you can do that easily with that one there's the open back calendar which is again where this library was created from one example of an application that sits on top and the XWR time zone library and that was created because major players like Google are so big they say I don't need to work with the standard so much I add this little attribute called XWR time zone into the calendar and that kind of completely changes how the events are being evaluated and then other people have a guesswork of what could that have meant or not and this library follows the same idea as I just showed in my talk the factors it has the use case for that library to take a non-standard calendar and produce a standard calendar so that we can query the events at certain times it has an open license that is open source and we wrote the documentation first we wrote a lot of tests the complexity again is hidden or it's like reduced because now people know I just need to deal with standard calendars and it's again a carved out little piece that could have been in the Recurring Equivalence Library but instead there's another piece here and we already got the feedback like one pull request that went to this library to fix one broken evaluation the ecosystems' relationships are the same with this I would like to end my talk I hope I have inspired you or if you're writing your own source code also in your hobby time you can think about this little function maybe I can just ship it off as a different library on some platform and then people can use it independently of what I do you get a lot of engagement you may get a lot of engagement with it you may get improvements because it was used in places that you couldn't have thought of and that's basically my motivation so even if you are just on a smartphone you can do something that people want to use and want to develop with you so thank you for your attention and I'm happy to hear some questions I also want to thank for the presentation engine this is a website the first Azure Summit for being here and many different ways which this is my possible also just developing on a smartphone so I leave the factors slide open so we have an overview of what has happened in the talk and I'm happy to hear some questions yeah so we have a few questions so first how important is marketing in your library it would be really nice to get user feedback so for me it's like I do not use the internet so often so I don't really do marketing I just put it on Stack Overflow a few years ago and basically it's used now I think it's more that people Google hey how can I do this with Python and then they go through the list of solutions and then they find there is one and if it works for them they use it yeah so I don't really do any marketing okay then one question that I have here so the challenge with online calendars is that some things work well on one calendar app some on others for example there is an issue with links and rich text in the event descriptions in calendars and they display well on some calendars and they display as HTML on others it seems like some aspects of calendars aren't fully standardized or none of the calendar apps follows the standard do you have some insights here yeah I also encountered that if you look at the when you subscribe from the first to the first Asia calendar from event you see that there is HTML code in there and the one of the things I think is that there are that maybe there are recommendations for how to parse it in the standard or there might be a non-standard attribute that specifically targets HTML things and it's the way that sometimes it's just easy to copy and paste the thing in without putting it through something that removes the HTML code and yeah so that is still there the standard is quite expressive in many ways and as end user you will probably recognize when the description is bit weird whereas it's I think mostly the apps support then displaying the lines at the right time which is I guess most of something that would be wrong or bad if it wouldn't be right so yeah yeah so yeah I also wonder for example like especially like here with the event j calendar and the description and so it seems to work for example on Google calendar it doesn't work on Thunderbird but Thunderbird has an issue that people work on like already for over a year because like Google calendar on Thunderbird is the same issue and then like outlaw calendars a lot of businesses still use outlaw yeah so it's a I wish it would be easier and they would just all follow one standard that everyone else can also stick to right yes yes so then there's a question here from Mark Mark is wondering as where exactly in Germany is that equal village but I thought I heard that it's and does it hinder you working on tech I could say it would hinder me to work on tech in the ways that people in the normal society work on tech yeah because when you live in an equal village or in this place your your rhythm is more in tune with nature and you slow down much more yeah and now I'm here in Germany in a house yeah and I since I've got more sensitive through living in nature I what I was here before yeah but I didn't recognize like that I get like anxiety sometimes or just stress out of nothing nothing yeah so yeah so there's a different way of living and so there's a different way of working with tech even another thing is that what we did is what we used to say is that we don't use the internet but we use the human net that is something that we have forgotten to use it's like when you calm down and you ask the universe for something then answers will arrive yeah and you don't need to use WhatsApp and do it now but you can kind of trust that solution will arrive at the time that is like convenient to everyone and not just to the haste of needing to do it now yeah so we are going calendars then right because I'm quite detached from that at the moment there I don't even know which weekday it is so yeah it's not a hindrance it's just a different way of doing it and I think it is not considered in many places to have software run offline but for example the apps of an asteroid are open source and generally people publishing open source software also keep in mind that they don't need to like keep people with them yeah like put their claws into them but they are more freely giving and with that they also allow people to work offline without the dependency and the oversight of a big company behind it so that's also something that I value open source of that work yeah okay so yeah nice to hear that you always have some interesting things to share from your life always some exciting things happening and yeah what is left for me is to say thank you very much for this presentation it's useful application for many users I also wonder how we can use it more in the for Asia community so I hope a lot of people are inspired and also look at the project and check how they can integrate it potentially so I think in that way you're quite good at marketing yeah so please send regards from myself and also I think from the whole team to your family and to the people around you and I wish you a very nice evening thank you I wish you a nice further conference I'll be checking in and listening and see you okay thank you okay and we have a next talk coming up soon and we are moving now from Python topics to other topics and the next talk will be about Kotlin sealed classes versus Java sealed classes hashtag Sliglass from Lothar Schultz and yeah please give us a couple of minutes to set Lothar up here and then we will start with this session so Lothar I just unlocked you here and so you should now be able to switch on your cam and you also need to activate your microphone so there's an option on the bottom of the screen for you where you can click the headphone symbol and there's a pop-up then and you need to choose the microphone option for the pop-up you still have the headphones like on the bottom of the screen there are a few symbols like in blue one of those symbols is the headphones please click that one again no no no you need to click again two times click two times and now you have the option to activate your microphone yes perfect thank you easy so well done and Lothar I don't know will you be sharing any slides do you have PDF or web share so no slides but IDE so I need to share my screen yes you should already have that option still disabled yeah so I think a screen share you have the presenter writes already so there are also four buttons and the bottom on the right is the screen share yeah so I need to change my preferences so potentially I have to restart my browser but let's see okay yeah no problem we are here we still have a couple of minutes don't worry take your time okay so I need to restart my browser I'll be back soon cool we are here and yeah I just want to have some conversation here with the audience then so if you're here at the live event I know a lot of people are watching this on YouTube or on China or elsewhere so China but if you're here in this session I'd be very interested where are people tuning in from if you would like to share where you are right now that would be interesting so please put in the chat your city or region and the country where you are to have a bit of a feeling where are people here in this session where people coming from I see a lot of different names yeah we just also heard Nico is always like between the UK and Germany now so we have a few people here in the European region but I also see Japanese names I see Arabic names maybe or is it Indian I don't know so if you like to share where you are from then please edit here in the chat you can also edit later whenever you have time just like so we get a bit of a feeling and who we are reaching here with this event and I see already some people posting here right now and Saeed for example from China and India or like here we have somebody from Kanto in Vietnam so that's really nice yeah please guys interact we can't be together here we can't be right in the in the same space like at the usual events but we are connected we can try to connect with each other I see Lota is back now and I will unlock Lota again so Lota you need to do the same procedure that you just did you please do it again and yeah okay I see you already coming up and the same thing with a microphone again perfect yeah because in the past we had some people who said oh yeah they switched on let me try out the video and so on and it was in the middle of a session so we decided okay let's unlock the people so they don't do something wrong by chance can you test the microphone please can you hear me yes perfect like crystal clear fantastic and we also see your slides there's still this height button maybe your height that you are sharing the slides so we have them nice and blue and focus on your content yes perfect and yeah we are all set then for this session and I would like to introduce you Lota so Lota Schultz is the head of engineering at Myro or Miro Myro I think in English and yeah Lota is a communicative enthusiastic and dedicated manager with extensive experience of software development and software life cycle management in the mobility retail internet mobile telecommunications and font industries he's able to initiate projects and give new impulses with a proven leadership skills and involving motivating teams to achieve their objectives first class analytical and problem solving skills he's able to adapt very quickly to fast moving in international environments cope with pressure and set priorities keeping track of the full picture therefore knowing thoroughly what needs to be done in all fields and then Lota I find an interesting fact which means you are fluent in English and love to code well I think otherwise you would not be here and we are very pleased to read that and yeah excited to have you so thank you very much for joining and the floor is yours thank you very much thanks Mario for those nice intro words today I want to talk to you about Java seed classes and Kotlin seed classes and I promised this to be slightless and what you see right now is not a slide right it's a myro board I work for myro we do boards that's why I use of course myro boards and in case you want to follow up with that very small myro board please scan the qr code and then you can you can have those information Mario gave a longer intro than I wanted to introduce myself so just in case you want to follow up with more social media stuff I do please follow the links I do all of that in my spare time as Mario correctly said so I'm ahead of engineering the teams that I serve we own back end representation of all myro boards which is a lot let's go into the topic real quick I start first with Java seed classes and then Kotlin seed classes I want to show you some code I want to do some life coding with you and at the end I'm happy to get your questions Java seed classes what was actually the point that made me propose this talk because with 17 the JDK 17 which is LTS I came across that I used Kotlin seed classes before I was interested on how does it look in Java and once I dive deep into that I found out it existed as previously already with JDK 15 and the main the main point of seed classes in Java is that the way also seed interfaces exist in Java to define their permitted subtypes and it can look like this very simplistic example here we would use a keyword seed we would define our class and with the keyword permits we would define the subtypes that for that seed class and in the definition of the subtypes we would have to extend the parent class and we would have to use keywords like final or others to make that sound for the compiler and that setup Java comes with that setup with some constraints that are important to keep in mind so those subclasses they must belong to the same module as the seed class and they must explicitly extend the seed class with the extend keyword for example if you use a class and you'll have to define modifiers I showed you final before and seed non-seed are also options now let's look at how coden-seed classes look like in my mind those are super enums so this is not an official definition or official description but still this is how I think of those and the reason for that is that in coden-seed classes you'll define a lot of subclasses often as data classes and those data classes often save state and there are super because you are very very free in how you define those subclasses and I hope later I can also show that to you more like an official way of describing coden-seed classes is that those allow developers to fix type hierarchies and also have a handle on who is allowed to create new subclasses and who isn't alright that was it for the introduction now let's look at some code this is IntelliJ this is some codling code and this overall project does the following it reads a github organization and prints out the list of repositories and I hope my code works right now so let's check it out the build is successful and this looks also good so in this specific organization I have two repositories and they are correctly read so that's the organization in case you want to find it on github and I also share the link later with you and now I have one function and that function verifies the github organization so I'm going to use a library the library is the library is the github API library for Java it's initiated by KK he was also the initiator of the Jenkins CI server and that library provides a github object and that github object has a method sorry it has a method that get me the organization and unfortunately that method can throw an IO exception and in this implementation if an IO exception is thrown it returns null and in Kotlin and in many other languages we don't like to return null and now with CIIT classes I try to explain to you how this code can be improved before we can actually improve the function itself or I need to start a new CIIT class that holds those data that I want and for that it's impossible to increase the font size a bit yes let me do that oh wait I thought it was possible maybe in view or something up there maybe there is so let's assume I'm gonna do I'm gonna use this would that help yes perfect looks very good okay good I now need to switch from time to time back and forth because I need to create some classes but whenever possible I go with the with the presentation so first I need to create a CIIT class and I'm gonna call I'm gonna use that I'm gonna call this class GitHub organization and now I have the CIIT class and now I need something in there and for that I'm lazy right as any other developer I'm also lazy so I'm gonna use another CIIT class that I wrote before and I use that as an inspiration source and now I enter the okay very good that works so I use the same mechanics as in this CIIT class I want to be able to react on the success states so the GitHub organization exists or the failure case the GitHub organization does not exist for example because there is a string provided that references an organization that doesn't exist so in the success case I'm gonna define a data class and in the data class I want to hold the handle to the actual GitHub organization from the library and that is a GH org for me and now the IDE is smart enough to to give me a hint what type that could be so that's the type that I'm gonna use and I make it short and CIIT classes in Kotlin they request you to refer to the implicit constructor and this is how I do this and now I have a first data class for my CIIT class which is for the success case I'm gonna do the same for the failure case and in the failure case there will be some error message so something will tell me whatever went wrong at least I hope so so I'm gonna define an arrow and that's just a string because that's the error message and as before I'm gonna use the implicit constructor to make the compiler happy now I have this CIIT class with two data classes and now you may spot already the super notion of the super enums so this type is completely different than that type and in Kotlin you can do anything you want and you can give it any type you want for those data classes and that's something that really makes it kind of super to me and that's why I like so much the super part in super enums so he's not happy with that but we don't need this data class anyway so let's look on how we can use this so I need to exit the mode for a minute and need to go back to my original code so here we have now the function and I want to use this data class so I'm gonna wait where is my class I'm gonna put this on the side so we can see this and now again go into the presentation mode and here's my function that I want to change in the success case what I want is I want a class data class to be invoked once I do this I need as a parameter this phorg type gh organization and access instance is provided to me with the get organization call so now I have usage of my data class and now the compiler is not because the return value is different from what I defined above so see here I defined here that the return value is of type gh organization it can be null or it can be an instance and now the return value is different now I use my data class as a return value and then the compiler is happy for the success case but unhappy for the failure case and luckily I prepared the failure case and now I can do something similar then in the success case and I can use the data class in order to have a container for this and I'm going to use a localized message for the failure case in case exception habit so now for my perspective the code of the function looks way better because there is no null returned anymore and failure and success in many other cases can be handed with the data class that I called GitHub organization you may notice that the footprint now changed the return value is different so let's look on how this function is called and what we can do about this so here we go and here the compiler gives me yet another error so the earlier the code was in a way that GitHub organization in line 43 can be null so I had to deal with the fact that it's null I used the let statement to make sure only if it's not null the list of repositories is generated and then print it out now this method sorry this value is of different type so we need to deal differently with the situation and Kotlin has a nice way of dealing with those data classes which is pattern matching and what is used here is the when statement so when that value has a certain type we can ask for the type and we start with a GitHub organization success case and in case of success we do something and let's do this something I'm going to reuse some of the code I have down here and now I need to provide the right value because the compiler is not happy with that it because it doesn't exist anymore and here the right value is the org that I defined in the data class so let me show you this one more time see here this is the g.h.org that is of type g.h. organization like the library provides and that is exactly what the list org repo expects and now we are almost ready to go but I forgot one thing which is you use pattern matching this whenever you use pattern matching with when it needs to be exhausted and you know also see the hint that the IDE provides and there are two options one option is that you say else and I encourage you not to do that because this is a catch all and in case you define additional data classes on your C class then you may forget to handle those cases differently so I'm going to be explicit and I say in case it's a failure I do something else and in this case I just say print me the error message that is describing the failure on the command line again I believe the code is much improved but instead of handling nulls with the last statement we are very explicit because we have a value which refers to a seed class that seed class can be pattern matched and you have those cases that you defined in the data class where you pattern match on and where you decide what is the actual logic that you want to this is logic number one and this is logic number two so hopefully that whole code works for that I need to exit the presentation mode and start the terminal one more time and start the code one more time so hopefully that works the build is successful which looks good and also the repositories are as expected now let's see how that looks in Java by the way Mario how much more time do I have do you have around 7 minutes more time? okay good I won't be able to finish that in 7 minutes at least not what I planned to do anyway let me try to give you a hint on how it works with Java so in Java I prepared a similar situation and this method is repositories and again there is an IO exception that can be thrown and if that happens it returns null and that's not the way I expect the code to be that's why I want to change that and I do change that with a new package and I call it so the package is only there for the college repository and the package is only there because I want the code a little bit to be all that and here so I actually I wanted to show you sealed classes in Java but now I'm going to shortcut and I start with a sealed interfaces in the code on GitHub you also find the examples for sealed classes so that's an interface and what I want here is a GitHub repository and again I'm lazy I'm going to use another code that I wrote before and here let me enter the presentation mode one more time so I'm going to use the sealed keyword for the interface and then I'm going to define the sub classes in this case those are not sub classes permits in this case those are records and to define what is allowed and it's one success case I'm pretty sure you know what is the next which is now I need to define those classes and for that I need to exit the presentation mode I'm sorry for this jumping back and forth and I'm going to do again yet another cheating so I need a new Java class which is a record and it's a success oops sorry this was wrong this was wrong it needs to go here record and another record which is failing and now I need to define what is the parent class and I use the implement keyword for that and that's the parent class and I do that for the success case too and similar to the Kotlin case I define an arrow stream that holds the arrow for me I define a GH organization object that contains the GH organization now that looks promising and now I need to go back to my method to change the code so let me enter the presentation mode one more time now I'm going to return a new GitHub repository access in case this repositories returns me the list that I want and now what's wrong about this one ah it's a list it's a list let me fix that later and also what would have been an issue in case I wouldn't change this so I'm going to change the return value it's my data class in this specific case my sealed interface and also for the for the case I'm going to return similar to the Kotlin example I'm going to return a record which gets me the localized message in the arrow now the the list repository returns a list but GitHub repository does not have a list but only one organization and that must be a list of each organizations and now that needs to be imported I come on new imported please yes import class okay good that looks good and now this needs to be imported as well and now it still has this this GH repository was I wrong with with the definition that I did here yes it was wrong so that must be GH repository that needs to have a serial caller okay good now the function works at least from a compile perspective and there is still one problem because the return value is different Mario do you have three more minutes I think we can extend like a couple of minutes sure thank you now I need to react on the success and on the failure case and what is so far expected is a GH repository item from the actual library but what I provide is my own sealed interface slash there are the specific records that implement that interface so in Java you would do take those cases with an if statement and you would ask this reports which instance of is that guy and the instance would be github organization repository success and if it's a success then let's do something about this and in case it's not a success and the instance is different in this case then handle the failure oops sorry now I need to go back I clicked on the wrong thing sorry for that so this is where I wanted to click so I need to go through the failure case and now let's double check what is the arrow here ah the type is wrong so now something it doesn't make in the success case I can I can use the object retrieve wait this is strange so this was wrongly named I'm sorry for this this is really confusing now nevertheless what what happens here is that I can iterate over this and I can execute for each that I wanted that should have been called a repository and not this was my bet and in the in the failure case github organization failure there is this error message and similar to the Kotlin case I would just print that out in case an error happens and last but not least I want to tell you one thing about this Java case what is really nice about this instance operator is you don't only check for the type in this specific case for the record type you can also give it a label and that label is a handle to the instance so I can use that instance and I can call methods or methods that are defined for that and to wrap it up if you if you want to compare Java and Kotlin and you come across sealed classes from my perspective there is no major difference with JDK 17 Java really caught up especially this sealed interfaces slash records approach that Java now offers is from my perspective on par with the Kotlin approach personally I still like the Kotlin approach a little bit better because the sealed class cluster data classes they all fit nice into one file whereas in Java you will have interfaces and records in my version in different files but that's such a small difference that you can't really say one approach is better than the other in case you need to decide Kotlin or Java for a given project there are other things like how good are the developers that you work with in one or the other language are way more important the sealed class approach is at least from a conceptual point of view almost the same and I hope that code helps you to remember that and in case you can't remember please scan one more time the QR code you will find down there the GitHub repository with the code also with the sealed classes in Java that I couldn't live code with you and now I want to take questions if there is time for questions okay thank you very much yes a question one thing about the repository I think the QR code shows the correct link but the link below is like GitHub there's probably the user account missing I tried that link this is an organization so I created an extra organization but let me check afterwards if that organization is available publicly maybe I made a mistake then I'm going to think yes I think that's the issue just make it public then probably the link works perfect and there's a question from Miko in OOP one would put the dispatch into a case statement but into the object for example use the null object pattern how would you evaluate these two approaches with pro and cons for your personal coding style and the code base you find useful working with them which one is more practiced or convenient sorry the line broke also in the shared nodes look at this the brother on the left hand side is also in the shared nodes so you can read it and also Miko has another question on the chat but maybe we can get your idea about this probably Miko is right I can't verify that right now whenever I do Kotlin my personal style of Kotlin is functional functional programming in terms of pure programming so specific return values no side effects and that's why I use this when from in my mind this fits better into that functional style of programming this is a personal pro I can't really come up with objective pros and cons right now I hope my personal pro points helps you okay perfect maybe you can also check out the chat there are some other comments after waltz we are now at the end of this session I think we should definitely go deeper into this topic in future like Kotlin was promised as the future and now we find that Java is catching up very interesting to learn about it looking forward to seeing what's going on next steps with these programming languages Luta, thank you very much for joining us and giving us those insights life other people always pre-record and if there's an issue they can record again you do it live Shapo for that thank you very much for joining have a good evening hope we stay in touch thank you very much Luta thanks for having me okay and yeah we have now the next session coming up in a moment which is about Eta, the first open source 5G LTE connected Edge Cloud platform with Aris I'm giving you now the rights to join us in this session I make you also a presenter and I unlock you so Aris you should be able to activate your microphone now by clicking the headphones symbol and then clicking it again and I see already putting on the webcam awesome so Aris perfect, okay please does the microphone work for you yeah yeah awesome Aris Luzant with you Aris may I know where are you from and how do we pronounce your name correctly because I feel a bit it's a bit like Spanish influence it's a bit like Asian influence it's a bit a lot of influences and I think in English English we pronounce it in one way how do you say your full name my name is Aris and then Ristianto or how is it Cahyadi Ristianto Cahyadi Ristianto okay well always name and where do you come from where is your name from I'm from Indonesia but currently I'm in Singapore okay great and so your name is Indonesian or also some European influences there are so many influences in Indonesia right yeah yeah okay I think I have some same problem maybe I need to restart the browser ah okay no problem but you already know how to get in we wait for you thank you very much then just come back in a moment okay I will restart my browser sure we have this different screen resolutions we have the browser permissions actually right now for like probably a lot of people who are into security they know about this there are a lot of browser updates recently and these browser updates change security permissions and some people said to me oh you should do it online events anytime but not in this month because at the moment a lot of updates are happening people need to give additional permissions and so on if anyone here who's listening knows something how we can avoid any issues please let us know we're always open for it but these are the challenges of this time however we made it all happen nevertheless and I see Aries is already coming back in so we are getting to the end of the event but still a few sessions so guys stay tuned we have some other interesting sessions coming up we have different topics today security with Python and so on and now we are coming to the topic of Cloud and DevOps again so the upcoming sessions will be focusing on this topic and I unlock Aries again and make you presenter Aries so you should be able to activate yourself again and I see like quite some exchange here on the chat so this is the advantage if you are watching in a stream all is good but if you want to get in touch with the speakers I recommend to you come to the eventier website sign up and get a ticket and join us here at the session live the advantages you always have the possibility to interact directly with speakers in the chat or post the question here in the shared notes but anyway we love you guys we are happy if you join us I see like more and more people dropping in especially for your talk very nice you are perfectly prepared let's check your microphone again before we start the session you need to unmute still how about now? perfect so cool so let's start so welcome everyone to the session ATTA the first open source 5G LTE connected edge cloud platform session here the session is done by Aris I think it wasn't perfect but Aris if you can tell us your name in a moment in this session again would be nice there are some interesting facts about you Aris is interested in the future internet architecture and open source networking including SDN software defined networking function virtualization and cloud computing Aris was selected as an ambassador for the open networking foundation organization since 2018 and the ambassadors steering team as of in 2019 he is currently working as a research fellow or senior researcher at the national university of Singapore also known as NUS and assistant program director in technology at the national cyber security R&D laboratory NCL Singapore to build the future internet cloud computing and cyber security test beds so an international person here at the session Aris great having you here and we are really excited to hear more about you here we go thank you very much for joining okay okay thank you for the opportunity so I repeat my name is Aris Cahyadiris Dianto you can call me Aris okay officially I'm a research fellow at NUS national university of Singapore but today I'm re-send O&F open networking foundation to discuss about the Aether project which is first open source 5G LTE connected 8-slot platform okay before we go to the details let me give you some highlight or maybe introductions to the what is the hybrid cloud services okay this was my presentations in one of the events in epicot so in here I want to emphasize that we have slightly changes in our internet architecture as you can see here now you can say like the main internet right on the core of the internet basically is owned by a big big company like Google, Facebook, Amazon or any other OTTs and then left with very small part of the network actually is done by the internet service provider okay it's known it's already known very huge trend and efforts but the good thing is it gives you a different way to provide networking it can be global network interconnect virtual private cloud hybrid cloud networking and so on okay and then if we take a look more closely on the cloud side so it's very obvious that you will have the community cloud like Amazon Google cloud or what they say Azure and then you will have telco cloud which is usually is having by the provider and then now everybody shifting a little bit to the X cloud users to give more what they say very good user experience and then the issue is somebody say that maybe is complicated like adding some complexity but some other people say it may have to give you another what they say opportunity where we can deploy what we call hybrid cloud services okay okay now the example of hybrid cloud services I mean one of the example is 5G connected it's cloud and then if we relate with the what they say the current transformations in the digital era they call it like enabling digital transformations 5G technology so I just gave you a little bit what they say background why this 5G what they say it's like open enterprise transformations so they can use the 5G connections to pull their I don't know IT sensors networking or maybe like AI ML and AR and VR to support what we call industry for 4.0 so everybody will try to what they say compete in this what they say transformations to build the infrastructure based on the 5G okay and then you can see here some numbers that actually in I mean to do this transformations actually the connectivity software, hardware and services together okay and then the problem is how we can provide this kind of platform that can support these transformations okay of course we can always come back to the history and history may be repeat okay here in the in the old days we know the and we all know we also know the Symbian OS right and then in that time I think it's very clear that they can give very good what they say like solutions to I mean for different type of services different type of what they say innovations but the issue with that solution actually is purposefully built only working for some specific hardware and cannot be shared with others vendor and so on so what we call close and proprietary and then after that Linux and Android games right so it's began the what they say like the transformations of the operating system and it's becomes the transmissions of the mobile operating system okay and then why this to to become very powerful on the for the solutions for the transformations because put of them actually generally purpose built and then of course open source right so you can always use it and then enhance it and then keep it back to the community okay so imagine if in the what they say 5G connected as part form right so if we can have some similar solutions like Android okay that can run in many different hardware okay can be CPU it can be what they say what they say the LED can be what is the processor and all those things right and then of course some additional hardware libraries and then you have some platform okay that similar to Android for the phones and then you can also add some specific build platform okay IOT, AI or whatever and then in the top of this one you can build many many different applications and it's not fine I mean it's not really what they say dependent on the hardware itself okay so and then the most important actually this platform can be connected to the cloud so imagine if your Android phones right actually is connected to the cloud and then doing updates seamlessly storing some data automatically and so on and so on even sometimes you can push some configurations in your phones right so that you may be able to push some of the configurations from the central public cloud into the enterprise its cloud so this is the idea of the main Aether that want to achieve okay so that's why O&F as one of the foundation for open source networking so try to build platform called Aether specially for 5G connected it's called platform okay so basically the main reasons as we mentioned want to use this platform to enable 5G driven industry 4.0 initiative so the main key actually we I mean it can be provide connectivity services either 5G 5G or CPRS or any other type of connectivity okay and then what they say it should be robust similar that provide by the service providers okay and then this connectivity services actually is connected to the clouds so you can do many things that you cannot do in here you can offload some of the what they say services in here like doing the AI or machinery okay and then the last but not least actually it can be used for any different applications whether the applications is required high bandwidth, low bandwidth what they say low latency and so on it should be capable to manage this type of applications by doing the end to end slices okay and then all this surface or the solution actually is managed by the cloud managed open source platform okay so what actually what they say I mean what is the unique of this platform that want to offer to the community okay basically there are many innovations that actually what they say already done previously or currently still ongoing but in this specific platform we try to combine all together for example like the 5G, 4G, it's cloud and then cloud native it's platform end to end slicing SDN network programming verification and so on and the last but not least actually this is the more important the platforms will be able to run in the open source software and then in the you can select open source hardware okay so the benefits yeah of course it's similar that the main the main purpose of the the ether is was built okay the economics of course because we want to have platform which is what they say efficient in terms of the other cost to be built and then secure of course you need to have some some hardware that can be programmable specifically programs for your needs okay so you can remove all these functions that you may not require and then similarly you can control what they say the traffic I mean from the for your network and then of course hybrid cloud as I mentioned right so you able to deploy some of the components in the it's cloud but some of the central cloud so this is some of the benefits that actually ether want to achieve in this software okay in other view you can see the ether platform is in the middle okay try to provide these three components that we haven't discussed before and then running in the top of the white boxes it can be CPU it can be GPU it can be TPU TPU or any other type of hardware that can be easily programmable and then of course in the top you may also have the third party additional platform special for AI or IoT or anything else and then the applications should be easy for the user to be developed similar like you develop the applications in android right so you don't care about all the almost don't care about the hardware and all those things as long it can run in the platform it will be run in any hardware and then the purpose can be used in many different industries can be office for the surveillance and then the sensors in the factory or IoT and so on and so on okay so let's talk a little bit more details about the components of the Aether because we talk about the Hcloud platform we need to have these two different part of the components of Aether one is what we call Aether connected H or ACE basically it's all the physical connections that connected to the users will be here and then some of the like here is programmable switches and then it control by what we call ONOS is one of the SDN controllers and then in radio side we have what we call RIC Radio Intelligent Controller that's specifically what they say the radio communications between all the users and devices and then in the top of these two different type of controllers so you need to have these applications different applications for different purposes and then of course there is some additional applications that we can build in the top of these platform components and then imagine if you have many different sites or different ACE components so you need to have the centralized management system so that's why we control these distributed ACEs with these two different functions one is the Aether quality control and the other is Aether management platform so basically what operation that did by the AMP basically is how what operation that did by the AMP basically is how to prepare the infrastructure based on the SDN software dependent working and then how to provide the software dependent radio access cross-loop control for example if there is any attack in the system the system will be able to react and so on and so on so let's look more detail on the management platform because the AMP is placed in the cloud environment it can be in public cloud like Google, Amazon or Aether so basically it's already full on software so basically what we use in here actually all the open source software that use for different purposes so we use it for the runtime operation control like all the controllers has been used here and then for locking monitoring I think everybody knows that we have Prometheus, Grafana and GLK and then for lifecycle management I mean how you push your any changes in the platform in the software patch or even new versions and how you will push into the platform so you have a different type of tools like Jenkins, Terraform or Docker container or whatever so basically it's because it's already in the cloud so any cloud based solutions can be used to deploy this at the management platform so platform is only part from if we not really deploy in the real world so basically in the simple case we may need to have a central public cloud for the management and then we will have many sites here and then of course some controllers to control the network and then some applications need to be in place so this is the current situations of the Ether network that deploy in the worldwide and operated by ONF so imagine ONF is one of the operators of the 5G, 4G network across the globe so there is some collaborations that voluntarily deploy the Ether and then connect to the ONF platform and then in terms of the management platform is also hosted in the public cloud like Google and then there are more sites coming to become the connected page okay and then it's maintained totally similar to the cloud native applications so you have the CICT pipelines you have a cycle and so on and so on okay so there is an example of the applications that can be deployed in Ether platform basically it's doing the something like AI things in the centralized cloud by using some sensors in the connected page and then it's done in almost real time and then in terms of the management because all the components are built on the software so of course we should be able to monitor all the components performance right, connectivity load utilization and so on using web-available open source too here the example we use the Grafana and then we also use Renser to deploy the Kubernetes cluster okay so what's next this is some example how some of the organizations like what they say responding to this initiative so department of defense US gave some project to build what they say they call it like closed loop control of the network okay and then there is some some new company initiate by the ONF to focus on generating or creating the solutions or applications for the 5G for enterprise and then recently there is an announcement that the Ether is released as open source software under the progressive FHC 2.0 open source license so I mean some of the members already have what they say capability to build the platform and then they want to share with the more bigger community so they can also try the same thing okay so we are not alone so many you can say like hardware vendors operators try to help in this efforts to build this either build the testbed or even build the platform itself and then the most important actually we invite many of the different type of communities to join the efforts whether you are enterprise, whether you are ecosystem partners whether you are university campuses or maybe only open source developer so to join and contribute to this open source so if you want to test don't worry when FGIF the example of the customized box that can run the full set of the ATAR okay so and then to know how the ATAR works, how the ATAR is being developed, how the ATAR is being operated and so on so you may try this the GitHub code and then see whether you have any interest that can be what they say as a contribution to the point. Thank you, I will be happy to take some questions. Thank you very much for this talk and I see we have questions for example from Nico. Nico would you like to ask your question directly personally because I know that your microphone is working go ahead. I personally have heard the first time about Edge Clouds it sounds very interesting and just from a perspective of somebody wanting to understand this virtual thing that happens there is like right now I imagine it like the server code is split up and is running in many many different components and kind of when I walk through the town from one mass to another the server code kind of like to another is that the idea can I understand it like this? Yes, basically imagine you have I mean you are the enterprise or company right you have many branches right and then in some of your branches you have the factory and then you want to build network for each of your brands right and then all the brands will be connected so that's why you will deploy the Edge component in each branch and then you will maintain centralized from your headquarters so whether it is clear? Yeah that makes sense thank you very much I have another question too you would like to my question is like again first time I hear about this who has an interest in developing this and where is it that I would encounter that like maybe as a person who just has a smartphone on the street how does it benefit me or which companies or which services will most likely be going towards Edge cloud? Okay I think because the presentation of the everything the internet now the access part is become very small and everybody can go in and deploy the network so now all the providers or even some enterprises is battling to deploy this kind of access network the idea is how you can give the platform that everybody can deploy by yourself whether it is service provider or whether it is enterprise you have the hardware the minimal hardware and then you can put the platform into it so you can deploy it so the target basically can be service provider it can be like private enterprises that want to build the high performance you can say like it is connected cloud network Yeah and I see some more questions and maybe you would like to discuss more details here in the chat a few more minutes so definitely nice and interesting here and we have something new for some people so new things are always interesting and Aris thank you very much for sharing insights you were already here last year and we see it here again so it's very nice to keep in touch and yeah we continue to stay in touch and hope to see you around okay thank you good evening bye bye thank you bye thank you and yeah next is a talk from Ilja Wierbicki please give us a couple of minutes to share everything up and share the details here and the session will be on building scalable WordPress site on AWS so we are here in a moment and just set it quickly up so Ilja I see you are here already and I will give you the presenter rights and unlock you and give you the presenter rights so you need to click the headphones symbol twice in order to activate your microphone and then we can check how things are working and start the session in a moment hi Maya okay perfect we can hear you how about your webcam okay good try hello perfect okay very nice hello the slides okay and the slides so you have pdf or you will share pdf yes so pdf please go to the like the plus icon on the left hand side and there's an option like to share media please upload the pdf there okay loading okay perfect yeah so Ilja you're in Singapore or where are you right now in Singapore yes my short movement here just travel around Asia and I'm being like a four plus here yes exactly right so long and so how things for you how did you go through the pandemic things worked out or like let's see actually in Singapore it was quite smooth you know it was safe environment and not that many sick people and they could yeah it was okay and since I worked like current person at home I haven't seen the change yeah okay excellent so you made us okay yes and you are gonna talk about us on building scalable web personas is that something you are doing for customers or is it something yes exactly so you know I have my small consultancy in Czech Republic and it's still running we still have some clients and like one of the service we provide right now it's like cloud migration and like cloud consultancy and one of the things we work mostly in e-commerce fields and multiple clients asked for WordPress because yeah I can probably start the presentation let me introduce you quickly because a lot of people in the first Asia community know you but not everyone who is watching here today and I would like everyone to know a little bit about yourself before we dive too much in so for everyone Ilya is the co-founder of web storing you might read it already on the slide and Ilya is a solution architect in the finance and e-commerce sectors with over 15 years of experience developing complex software in teams large and small and before starting his own business he worked in Europe, Southeast Asia and North America for several multinational companies and now he has web-stoting web-stoting is an agency helping companies to create a successful online business and outside of work he also has a life of course he's a husband he's a father he enjoys sports and games and learning everything about everything so we have a curious mind who will share insights about a curious topic and something that a lot of people need Ilya thank you very much I leave you to it thank you thank you hello everyone and welcome to my presentation today we'll talk about WordPress and how we can scale them up believe me or not but WordPress is still probably number one platform if you want to build a small or medium side business or small or medium size website over the internet and last year in the end of the last year it powered up to 40% websites that's a lot it's almost like every third website you visit probably uses WordPress and WordPress itself is a framework because if you install it out of the box you have nothing but luck the power of WordPress is coming from themes and plugins and they it's an open source ecosystem and community builds like thousands and thousands of plugins and themes of course they have different quality and some of them are quite good some of them are pretty bad rubbish that can even break your website that's a sad life but we have 50 plus thousand plugins there's a lot of choice and it's also available in multiple languages and it's open sources like one of the eldest open source products in the web world I believe but you know nothing comes for free so with WordPress it's easy to keep your website open running usually what I've seen from my customers they just go to theme forest or any other marketplace by theme they like install when you look WordPress like to this website and change some text and load images and they're done you can keep the box and get the website up and running in a couple of hours if you build it from existing components but once your business will start growing and mature once traffic will come to your website you may see some particular challenges here on the screen you may see the most common problems it's like inconsistent backend so for example if you build a normal application with a react normal content and some door to Python on the backend usually you come up with an architecture you design a system and you connect the components to work smoothly in WordPress that's a different story in WordPress you have a framework and it's very basic it's almost like a user friendly interface with a database and a way to upload plugins that can call your plugins and that's it and then you start storing plugins usually major plugins they frame with themselves so the developers come with their own architectures and somehow build it on top of WordPress what comes next other developers will build plugins for the plugins awful themes following their architectures your website might look like a big giant mess if you want to see it from the code point of view but on the other side it works and it's good it needs customization so when you have 50 plus thousand plugins you definitely need to choose the correct ones and you need to install a thing, install some antispan filters, install some your plugins it's a lot of work and you need to know the ecosystem security issues it's a good and bad thing WordPress is well known for being hacked quite often that's the bad news the good news are most of the security issues are not coming from the platform itself so WordPress as of today is quite secure system because it was reviewed by hundreds of hackers and security search companies the problem are coming from plugins when you install a random plugin you will never know if it has a malware if it has any security vulnerabilities if it's falling any security best practices and designs it's a black box so that's why I always suggest to do a code review never try to install a random plugin from the internet it may have some malware inside updates are difficult to keep up with WordPress update is a major problem unfortunately since they don't have common architecture they have a plugin architecture but it changes from version to version when you update the platform usually transmutes a till the time when WordPress will decide to change something under the hood and change the way how things work because many plugins and themes they they know the WordPress code itself and they use some hacks to somehow avoid and do like some workarounds in the platform so one day you update your platform to a newer version and then magically some plugins stops working unfortunately it happens quite often that's why I always suggest to use the well known plugins like major plugins usually they pay it because you pay for support but at least you'll have some guarantee that WordPress upgrade will probably not break the ecosystem 5th problem is the page speed WordPress is slow especially if you deploy it to any like a random hosting something cheap it might be quite slow because it's a database read heavy system it comes with some learning curve yes unfortunately if you want to use a WordPress to publish a few posts it's easy if you want to build a solution on top of that like e-commerce system web store or forum or even in internet I've seen such projects in the past then you need to learn it and there's a good manual from WordPress it's called Codex but from my own experience it's not enough and you will see some pieces of information here and there some of them are quite good and deep like high level so in case you need to you want to learn WordPress I highly recommend to go and read the source code it's too much of reading honestly it has no built-in backups unfortunately it's just PHP website there's my SQL database nothing shiny out of the box and you have to take care of your backups and there are some frequent error messages in case you don't configure your PHP error output you might be in a situation that some random PHP errors will come up and your users will see it and especially it happens when developers build plugins when you use some other plugins for other PHP versions so the plugin doesn't have a good clean code now we deploy it to PHP 8 it's like a most language and once you run the website you see some random errors happening okay so let's see how cloud can help us here because we're talking about cloud we're talking about deployments unfortunately we can cloud AWS for example build a consistent backend that's your job and it will not help you with customization but it may help you to reduce risk of having security issues if you go with some application firewall options and it may help you with some updates and the way how you can provision up like test updates and provision them to production systems it definitely can help you with page speed and it also helps you back up quite a lot like AWS can help you with WordPress linker and this is your PHP coding style so if you have some problem in your code you'll have to fix it so let me show you some journey this is a journey for one of the customers I had in the past and it shows how a small company positions to like a medium to larger organization like growing WordPress and this is the evolution that you may see yourself if you think so for example if you have a small store and then accidentally you're booming then you may have the same route okay so let's say you want to open a small shop that wants to have a landing page and I don't like a contact us form where customers can go and order something like home delivery for example most of the usually if you want to deploy it on AWS you will come up with a really really simple solution you need just one easy to instance and you install everything to your easy to instance now put it to your public subnet and make it publicly available to whoever wants to see it it's a great approach and if for a small website it works perfectly and it's a bit more troublesome than hosting on when I can share hosting but on the other side you have better performance so from my experience I would suggest to use nginx and php8 if you want to deploy the website today and you have AWS instances that you may use from my experience memory optimized instances work much better when you deploy LAMP stack so you have your database server and your nginx server and your php on the same machine so I would suggest memory optimized instances that's because database likes memory so memory gives you the database now even with this approach you can do some optimization on the backups because you can go and use EBS EBS step shots and lifecycle manager in AWS you can you have EBS that's like a little drive that you attach to your instance based on all the data and you can do it in every way that every 12 hours so like every hour EBS will back it up create a copy and store it to S3 and next time we'll see if your website reaction was hacked or something that happened you can just go and restore the data back up it's two minutes work and it saves you a lot of time and you can attach to your website and in this architecture your main bottleneck is the database in the most of the cases when you're running WordPress and this architecture you're not happy with this yes you can go for like a large instance with more memory and your database is consumed so you have better performance database is the problem one of the work around is there are plugins for WordPress that do like static page pre-rendering so when you request a URL first time it will go to the database and generate HTML for you then it will store this HTML on the disk when subsequent requests will come there will be no call the database and the data will come from static HTML pre-rendered cache it's quite useful and for such simple setup it reduces a lot quite a lot since the database is a problem and when our machine crashes we lose our database and that's life the next iteration of this design will be decoupling we move the database out of WordPress instance and use AWS RDS AWS RDS it's a managed database service where you upload all DB tasks to Amazon and you just say hey Amazon I want my DB and here you go if you want to go this road which means that your business gets you generate some revenue because it will be definitely more expensive than the previous solution and I usually recommend to go with RDS multi-AZ installation because in this case you're deploying just one database server you're deploying two servers one is master, one is slave and one will be active but in case your active database server will go down like it will fail and in Amazon it happens so Amazon doesn't guarantee you that everything runs like 100% SLA so in case it will fail then the secondary instance will become primary and your database will come up back online in a couple of minutes or maybe even seconds so yeah if you have any then I would suggest to go this route again you will use your EBS snapshots and you also can do can use RDS backups because RDS comes up with its own backup for the database system so now you have like a more granular backups you can do like a I know once a day or once a week backup for your virtual machine but probably your page is not changing that often but you can do like more backups for your database but again yes here our database is still a bottleneck because no matter what you use database to render HTML and also recently not recently because probably like a one year old now AWS has come up with Graviton 2 instances those are ARM processors and I was running some testing for LAMP stack it's like Nginx with PHP 8 on Graviton and I saw the boost of performance like by 20 like 20-30% so if you're running such workloads definitely give you like try ARM and see if it will like help you if you'll get more performance for the same or even less money the third iteration of the design and this time they're trying to solve the problem of database because since it's a bottleneck we have to take care of it okay so first of all I would suggest to you if you're living in Amazon infrastructure I suggest you to migrate from my ADB on RDS to Amazon Aurora so Amazon Aurora is a proprietary database yes unfortunately they don't share a source code that's Amazon and it supports Postgres and MySQL interface so you can take your my ADB like 412 database restore it to Aurora and it will work as it was like your ADB will look like my ADB for your PHP code so Aurora brings you in some better performance it's more optimized for ADB infrastructure and it comes with the concept of ease of application so basically you can use them even with other database systems but when you go with Aurora you have more ease of application so ease of application it's the only version of your database normally when you write there is only one master node where you can write your data so all your inserts and updates operations will go to a particular node but then when you need to read content and that's what WordPress is doing WordPress is like it's a read heavy system it's not a write heavy system so when you go with read heavy system instead of going to your master node all the time you can get the same data from read Africa that will reduce a lot of your database and boost your website performance WordPress doesn't support it out of the box so you can just go to the magic checkbox but there's a plugin it's called HyperDB at least that's the one that I use and HyperDB lets you separate your PHP SQL operations from all your private operations will go to your master node and a particular IP address and all read applications will go to your master node because you just configure your IP addresses and done I haven't seen any issues on production of WordPress with that plugin so that's the database but we also have to start like have to introduce caching because even if you reduce your database load you still go to database all the time and that's the reason for sending data between your database server and your database servers so one of the caching solutions that comes on AWS is called Amazon Elastic Cache so it's nothing more than managed memcached or it is that you can use with your WordPress and WordPress I think supports both okay WordPress doesn't support your caching out of the box you need to install plugins but you can use radius or memcached plugins in my experience you get better performance when you go with memcached like memcached cluster probably because memcached is a really simple cache nothing fancy it's just a piece of memory where you can store data and read from it but on the other side since it's simple it was a bit faster than radius where you have some advanced operations that you don't need in our read heavy copy management system and finally you can start using AWS Backup it's a managed server that helps you managing your backup schedules and because before you had to go and configure your EBS volumes to take snapshots and then you have to go to RDS configure how you want your database to be backed up if you live in AWS infrastructure you can go and use take one service that wraps up all those backup operations across multiple services and it doesn't cost that much so I would definitely suggest to take a look and do simplify your life just a little bit so we more or less slope the problem of our data store but now but now the bottleneck is our main server our Nginx and PHP server because we still have only one machine and for a smaller medium website that's more than enough but in case you have some crazy marketing campaign and you're expecting to see like 100,000 users coming to your shop then you need to think about scaling up even your web server because otherwise if you're just on one server probably you will not survive like a crazy load as anything on AWS there are multiple things how you can do it so first of all as you can see on this diagram in our public subnet if you just keep a load balancer we use in AWS two main types of load balancers a network load balancer that's used mostly for TCP, IP traffic like a low level traffic and the application load balancer that is used for HTTP and HTTPS traffic in our case it's definitely like we have to use ALB because it gives you some like easy configuration and it's optimized for HTTP protocol so we will install in our public subnet load balancer and then our load balancer will go into Auto Scaling Group so Auto Scaling Group that's a concept technology in AWS where you say AWS that's an image of my operating system it's all pre-configured and in case something happens that your CPU utilization is more than 80% for 5-10 minutes let's create another server that is exact copy of Alkali server so that's what we have here and but since it's a WordPress we have a slight problem because in WordPress there's a magic folder called content in dp content you store your steam and your plugins that's most of the time you don't change often but when there's an upgrade you must upgrade so all the code changes will go to this folder but also it has some static assets so whenever you upload images many pictures media files they will go to that folder and once you manage content images you have to be sure that your vp content folder is always populated to every single server that you create automatically during your scale-up operations the goal to solution for that and that's probably the easiest one is use EFS EFS is a network file system provided by Amazon so basically it's a nfs but managed by Amazon so you can go with EFS you create it and you can put it so once you have EFS you register a new nfs volume in your Linux operating system and point your vp content to be stored there so this solution works perfectly fine but if your website is popular it happens to me so once I had a call early morning from my client and he was shocked he was like the website was up and running for almost six months and it was running smoothly no issues, good performance but they were running some marketing campaign and accidentally it was successful so a lot of traffic came and what happened was since our content especially static assets was stored on EFS there were too many IO operations on EFS and EFS when you use a general performance version it's optimized for high throughput so it works in such a way that as you can see it's too much throughput like too much IO operations it burst your high throughput for your EFS but it's only for a short period of time and you have something that's called burst credit balance so you have some credits you cannot burst for high throughput forever so once you're in a situation that too many websites are asking for hey please give me this fancy image you are burning your credits and once your credit goes to zero EFS becomes absolutely slow it's super slow and you do like LS command on this network folder and it takes seconds that's what happened to me and then I've learned that this is burst credit balance and you can pay it to Amazon to get it up and you can pay it to burst it but it may be very expensive so EFS is not cheap service EFS is actually expensive service and be quite careful if you want to use it for things like CMS and also from this diagram I added a web application firewall here so since we need to solve the problem of hackers who wants to hack us we can go and use AWS they give you some some solution for that okay so since we've been talking about this EFS problem and it happens often when your website is popular what's the solution the solution that I found for myself is I always try to move my assets to S3 if it's AWS of course so for AWS you can tell WordPress to store your static assets on S3 and moreover AWS has its own CDN it's called CloudFont so you can configure your WordPress in such a way that all assets that you upload inside your WordPress they will go to S3 and then whenever they serve to the outside world the URL that you will get will be your CloudFont and so and also you when you configure your CloudFont for such use case it will be on your front and then CloudFont will decide okay should I go to S3 and get an image file or I should go to my ALB and pull some PHP script to get executed and get HTML or something else and when you configure your CloudFont you must restrict access to your ALB in such a way that only CloudFont can request HTML from that load dancer because otherwise what may happen is let's say if you if someone wants to do like DDoS attack against you if they will do DDoS against CloudFont then probably it won't be successful because you need to take a big bite but if they somehow figure out what is your ALB and if they attack your ALB they might be successful of course AWS comes out with AWS shield product that protects it from DDoS but if you want to mitigate this risk even more I would recommend use CloudFont and then you set up your ALB in such a way that only CloudFont can do it but normally you set up a special secret HTTP header that only CloudFont knows and it sends to the ALB and again please apply your bof to CloudFont to get even like better protection this is the final design so we have here we have our web application firewall so it will try to mitigate risk of having security injections or cross-activating attacks or if you want to do like a GUIP field drain so then CloudFont will go to CloudFont that is responsible for traffic distribution and in case it's an image it will go to your images folder and otherwise it goes to your ALB and run WordPress and one comment here AWS bof product because I use like different bofs and it's quite good and it's not too expensive but again it's a bit more basic so for example you can go with CloudFont they also have a web application firewall product I see we have more rules and maybe you can replace this one with Cloudflare ok so here you can see like some basic configuration for CloudFont and you can get it from the internet or like from my slides and finally the WordPress update so as you saw in the past it's probably magic to have like all your plugins and platforms and themes that are updated and you always need to have a particular version a particular image of your operating system that you can use in your other scaling group so like how I usually do it so we have a schedule let's say every two weeks or every week depending on a project so we go and review all the plugins and changes what needs to be upgraded in the staging environment we do upgrade, we upgrade all the plugins and themes and then test the website stable and we can build an EC2 and AMI image there's a commission image in AWS infrastructure and then what we do we just use like EC2 image builder to automate those like existing packaging and patches and apply like plugin upgrades and then you have your image, your AMI and next what you do you just do like automatic upgrade so on your load balancer let's say one auto scaling group that runs your old version and then on your load balancer you create another auto scaling group with a new version of your operating system basically new WordPress and new plugins and then you just switch traffic it's quite simple in cloud and yeah so here we go here you can see some reference to the plugins I've been talking about and thank you any question? Thank you very much there is a short question but I also wonder like this question some of them come in early and it seems to me you're starting to answer already like during your session so there is one question here for example, how would you rate AWS compared to other cloud providers why is it better than Google cloud? Oh my gosh that's a holy war question I wouldn't rate any of them so from my opinion they just pop each other and again I use three cloud providers I use GCP, I use AWS and I use Azure from my experience if you go for enterprises like large organizations they usually go with AWS because it was on the market like forever and probably Azure is picking it up because Azure is quite popular GCP is still like beyond but I see them more in a startup space or medium to small size because they are cheaper especially if you go with if you use only like Kubernetes and if you build like all your info on Kubernetes Kubernetes offering from GCP may save you some I don't know the exact percentage I didn't calculate it, sorry but I see it's cheaper any experience with European cloud providers let's say plus server one and one OVH I'm not an info guy, sorry I just use digital ocean for my pet projects because it's cheap and I always know how much I pay them because it's all cloud providers whenever you go to use calculator you will pay X dollars and that's your lower bound you always pay more unfortunately so like with digital ocean when they say hey you're going to pay 10 dollars, 16 dollars, 20 dollars that's what they charge me yeah so these things one has to keep in mind well thank you very much for sharing here today great to see you again we're also planning some social events as like it seems to be opening up more and more in Singapore so we'll ping you and anyone else who we have the contact in Singapore for a social event to have a kind of follow up speaker something like that finally yeah I look forward to that okay great so I wish you all the best thanks for joining okay very cool and yeah one more speakers coming up Christian Adele and Chris I give you the rights right now unlock you, you can try to make like available here and join the session with the sound so Chris and so you need to like you know these headphones that you see on the bottom the blue button you just need to click on it and click on it again and then you should have the sound I see you have it already and just need to unmute yourself and also activate the screen okay great so I think that you are seeing me now yes we see you, where are you I'm in Barcelona Barcelona Spain it looks like the sun is shining yeah we are in 27, 22 degrees so actually the Celsius degrees yes okay so I have to say in Singapore it's very hot too in Singapore there's not the beach like it is in Barcelona in Catalonia right and yeah I just like getting the info that we still have like around over 100 people still also watching for example on Chinese channels and yeah people are watching on YouTube we're getting the numbers later so actually it is late now in Singapore but you know we're streaming around the world and yeah I think people are very looking forward to your session okay so your session will be about open source network automation in 2022 you had already a session on network automation topic at foster I mean it's a huge topic right and even two sessions we can't have enough but looking forward to your like to your follow-up here and I would like to introduce you a bit to the audience whoever hasn't seen your session maybe at foster and they can learn about it more now here and yeah about Christian so Christian is currently working as a principal architect in network automation at network to code so a lot of network everything's about network with Christian he has been working on improving network manageability and resiliency for more than 15 years up to now serving in different roles as a network reliability engineer DevOps engineer you say if there's actually such a thing I think everyone should be a DevOps engineer we need things to work right and you're also a network automation engineer Christian loves developing software to improve network operations and build network services and also contributing back to the community by open source projects and promoting knowledge sharing in Barcelona and now here also at the first Asia summit Christian thank you very much for joining us and please take all the time here that you need for your session thank you very much thank you very much Mario for your introduction to share the screen can you tell me where is the button I'm trying to find Chris and also made you presenter you can upload PDF or share your web can I can manage presentation the thing is the one I think that is the screen I have it now from that and this is the one it's loading and I guess that everyone can see it it's still loading if it's big it takes a moment but afterwards it should be fine so we can see it open source network automation in 2022 welcome thank you very much excellent so thank you very much for having me today and being the last session I would like to make it easy to digest and to move forward because the topic is a really interesting topic at least for me and I think that for everyone around but before jumping into the actual content of the session I would like to present myself and also the company that I'm working on as you said before Mario Neto2Code is a relatively small solutions company focus 100% around providing network automation solutions and within this company there is the architecture team that I'm part of and here you also see in the screen Marek and Michael that they are working together creating the different teams that are providing new solutions a holistic view about how the different components can work together what makes the company different is that we make everything as open source projects so we try to create the solutions build the solutions composing the different pieces that are available obviously we can work with multiple vendor solutions but if there is a gap there is always an option to put an open source piece and everything that we do we bring it back to the community and also we create and we sponsor projects by ourselves then we try to narrow down the topic because we actually had a network related session before myself one before what we are going to talk today here when I talk about network automation this is a really open question you can think about networking in a not really concrete way because actually we are working in different planes so if we look at the bottom of the stack we see the data plane that is where the actual packets are forwarded so one packet is coming in one port and it's going in another port this has been pretty static for a long time but since the ratio of SDN with OpenFlow and other protocols like before or just directly programming the A6 you can change the behavior of that but we are not focusing on that on top of that we also have the control plane the control plane is where traditionally the network routing protocols work so they work together they bring a distributed understanding of the network and then this representation of this state is pushed into the A6 just to change via tables the behavior of the packets where the packets are defined is the definition but the topic for today is in the upper plane in the management plane where we as engineers as architects we can define how the control plane how the data plane is going to look like so simply set is the way that you connect to the devices traditionally via a common line interface and you change the behavior being this set I think that is good for me to give context about one of the main reasons that I'm here today as I said at the beginning with the introduction I already mentioned that I have been working I have been working in networking for more than 15 years and for the first 7, 8 years my main focus was about network architecture network operations and I have been working mostly as a CLI focus engineer so I had knowledge of multiple vendors, multiple syntax and I was able to translate my knowledge into the network behavior but there was a moment that I understood with the DevOps ideas to change the way that we operate the infrastructure not only the network, the infrastructure as a whole and I changed my career I went to a company where I started as a DevOps network engineer and I remember perfectly the moment that my mind blow up and I discovered the beautiful of open source I was debugging a problem with an SNP client for a monitoring solution that was open source so we were trying to understand what was going on we understood that there was not behaving as expected and my third reaction as I was used to was okay we detected the problem we just called the vendor and at some point the solution will be solved this was my default but luckily for me side by side I had a smarter guy than me with more experience and he took the keyboard and went today into the PDV session in Python because it was a Python application and he was able to understand what was going on he was able to fix the issue so we had a working solution at the moment and finally he contributed back to the community to the AppStem project as you can imagine for myself that was used to interact with the devices with the operations in a predefined in a common line with really narrow options this completely braved my mind and this was the reason that I jumped into natural automation as a whole and the same journey that I did a lot of people is doing these days there are a lot of companies doing with them that are doing this transition from traditional network operations they are used to understand how the network should work but the way to communicate the way to enforce that has been really manual way up to date but this has been changing and open source has a big role here there are tooling as we are going to see later that help you to do this transition you can use Ansible framework to change the configuration management like you are doing for the servers this is not new this has been for a while there but we are seeing as working with multiple customers multiple projects that there is a big dilemma a big decision that you have to take one thing is just focus on the tools and specific project and just move forward with that project or try to think on your network automation strategy the way that you provide solutions to manage your network in a more overall understanding so you understand the whole picture not only how a tool solves a specific problem because maybe it is not solving the whole solution and this decision is the one that we are going to try to solve today the approach of the presentation is as simple as try to share the same framework mindset that we in the architecture team in network to code and network to code as a whole applies to all the projects that we are working on we try to focus not on the tools we focus on the different functionalities that compose a network automation solution and then when you have the solutions the functionalities you can then place the different components that can solve the problem so we have to start first on the network automation framework this is not rocket science but really really helps for everyone to understand what we are talking about and we define our framework network automation framework in these seven different components remember that we are talking about network automation so in the bottom layer should be network infrastructure for sure this network infrastructure we are going to see there could be different types but then if we go to the top we have the user the user is the one that is going to use all automation in the middle there will be different pieces the source of truth, telemetry, orchestration we are going to go one by one and in the left side we have the CICD process we have to not forget that this is network automation but this is a software development project so any tooling that we are using for developing any kind of application these days can be applied to this and we try to keep this in mind always as we work on these projects so let's try to start one by one the user interactions, really important one because everything starts here you have multiple options here and you have to select the one that solves the problem for your user maybe there is a user that wants a user interface, a graphical user interface there are options maybe there are other users that they want a programmatic interface, an API maybe they want a GraphQL API, maybe another one another one wants a dashboard just to visualize the data so it's the work of the architect when thinks about the network automation solution to understand which are the user interfaces that has to be implemented because maybe not all of them should be in the project once you have the user interfaces you have to start focusing on defining how your network should look like traditionally the way that network operations have been working is that the state of the network is the state of the network, there is no reference if the reference, if there is is in your head, so you remember how the network should look like or maybe in some diagram, in some wall but nothing more sophisticated the idea is to achieve the goal of automating your network, you have to properly define what is the intended state, what the network should look like call this the source of truth where your variables are defined about how your data how your network is going to be modeled to eventually move into the desired state, how we want the network to behave, how we want the routing protocols to be controlled, all this information should be properly defined in the source of truth when we have the source of truth because we are automating a process, you can imagine that there should be an orchestrator, a workflow orchestration in some place the future, the functionality of the orchestration is nothing else than coordinate the multiple steps of the execution, maybe there are multiple steps that have to be executed in order to fulfill a solution and has to be in the middle of everything, we are going to see in an example how this fits together then we move into what actually is more specific of network automation while the automation engine is the place where we put the different tooling that is going to help us to move the intended state that is a data model a reference into something that the network infrastructure understands because on the network infrastructure what we have are routers firewalls for multiple vendors supporting different interfaces, maybe one only supports CLI because it's a legacy device but we have to actually deal with new interfaces like GNMI or even dealing with cloud network services you have to interact with custom APIs whatever it is the automation engine is going to take the reference, the model and translate, simply a translation to move from one to something that we can actually activate then the network infrastructure is really heterogeneous we have multiple devices that are physical boxes, virtualized cloud network services, everything we should be adaptive to whatever we have and just offer the different interfaces just to be able to get an operational state and to set an operational state, so first we can take the configuration and then we have to be able to show, to communicate what's the operational state and this is what the telemetry and analytics block is going to do it's going to collect information enrich the information because information without metadata sometimes is useless when we collect information from a device because we know which device we are connecting to maybe we can enrich this data via the source of truth and maybe a part of the device we can get the different information inside more information that then when we visualize this data in a dashboard we can enrich and classify the data in a more educated way finally all this data because it's a lot of data has to be stored as we are going to see when we talk about the related open source projects the beautiful that we have here is that we are not reinventing the wheel when it's not needed obviously we have to talk within the interfaces devices have but for the rest for transferring the different messages we are going to use open source projects to store we are going to use other open source projects when I say open source projects I mean general proposed open source projects finally as I said before CICD is helping us to deploy a network automation logic that takes care of not breaking production so the same practices that we apply to the software development lifecycle we are going to apply to the networking automation obviously taking into account the different specificities of the network devices and now we are going to try to do an overview it's not exhaustive at all but we are going to try to do an overview of what the different projects in the different areas belong to and this is only taking into account open source projects we are always using this in a brownfield environment where there are some vendor solutions that we integrate but here today we only mention some relevant open source projects first an important piece the source of truth where we can define this data obviously the data has different particularities different characteristics depending if the data has to be changed super often or by a user it can be stored in different places like in GIT or maybe in relational databases here we have an example of two pretty common source of truths that are complete for data centers infrastructure management IPAM management multiple of them like netbooks and now to it there are two on multiple available solutions for source of truth that are tackling different parts of the data information that we have to store when we define this information in the source of truth what's coming next obviously someone has to change this I'm here we can offer multiple solutions in open source projects we have chat applications like matter most we can build our CLI applications in python with click in go with cobra multiple of them we also have complete IT service management like glpi or itop and to visualize we have Kibana or Grafana that can help us to get data from the telemetry storage then to orchestrate everything just to name two of them AWX, Runbeck are orchestrators that help to play with the different components that are part of this architecture here there are multiple of them because all any kind of tool that can be used to orchestrate processes can be used in the natural automation ecosystem and as I said before what makes natural automation a bit special are the different libraries that we have available to automation engine the automation engine is using first languages that I have not pictured here that is for instance ginger to render templates of configurations from the data that we have in the source of truth and then we have multiple projects like napalm, nanico page in mi, nor near scarpy, multiple applications that work in different languages to connect to the different interfaces to each network device and change the state the same device applications or libraries that work to change the state can also be used later in the telemetry part as I said before you set the state and you actually get the state but I added here just to be more specific on the place but here also you have to notice there is amsible, there is cell stack just as configuration management you can configure servers, you can configure network devices and also terraform because a part of configuration management there is also the provisioning of network services if you are running in the cloud this is also part of these features that we have to fulfill and the definition of the state is going to come from the source of truth we have in the telemetry part obviously what makes this special is the interface so how we connect to the devices because usually a lot of devices cannot install an agent so you have to do an agentless telegraph helps a lot here hosting multiple libraries to connect to the devices get the information and reach from the source of truth and finally consolidate into a time series database like Prometheus or others we also have to use Kafka because in some places we have a lot of data to transfer and to distribute to multiple receivers but there are also specific tools for network automation as for instance sugq that helps to get the information from network devices and when we talk about network monitoring we are not only talking about metrics and logs we are also talking about flows, flows of data tools like tncct or goflow can help you in order to get all this information together with the logs and the metrics and this is really important because network automation here works together with application monitoring so all the information from network servers and applications could go together to the same place and you can imagine what can make possible this convergence of information last as relevant open source projects as I said before all the things that you can use on software development lifecycle can be used here but you also have a specific tooling for networking like the simulation tool called BATFIS that help you to get a configuration and create an analytic model to represent how this network device is going to behave or you can even simply run the network operating system like a container or a virtual machine with different projects like container lab or Kubernetes network emulator, multiple of them that can help you in the way of deploying a new change on the network automation infrastructure we are talking about management you can first speed up network device push the configuration, see that the configuration is good and then you can happily deploy it to the network as I said before this is a really, really quick summary of all the different development open source projects but the best way to understand this is to see in an example a really quick example imagine that you want to implement a network using this architecture this framework we can understand that the first thing that we have is a user that we present an interface that is a chat application, matter most so he can set what's the state that he wants to change on the network what happens next is that this change in the intended state has to be pushed to the source of truth in this case we receive this change from the chat ops integration in notebook which is the state of the intended state and automatically triggers a workflow a workflow that eventually will deploy this change to the network so AWS takes care of connecting to Ansible I'm saying okay with this information that we want to change get some templates from another source of truth from GIT and render the configuration what's the configuration that we have to push to the network then thinking on making a reliable configuration we can spin up a bad fish container just to test if this configuration is syntactically correct if the outcome of the configuration is what we expect to be and when we are comfortable that we are not going to break anything it's Friday afternoon so we should not break anything it's time to deploy it's time to connect to the different networking devices could be physical devices or could be in the cloud but this is not over when we change the state what's next we have to close the loop we have to in the telemetry and analytics part we are going to collect the flows from these devices and see via feedback to the AWS are these flows that I am seeing consistent with the change on the source of truth I mean if we have created a rule that enables the flows the flows that I should be seeing should be accepted so this is the point we are changing the state observing the state and validating that if not the loop can be continuously doing until we get into a state that we are comfortable with the same that I mentioned for firewall automation here there is a quick summary of multiple real use cases that we have been solving in multiple places from managing all the great firewall companies