Thank you everyone. Thank you for being here. I am Deepa Karnadurka. I'm a developer. I worked on network technologies for over 10 years Co-presenting with me today is Ramya Bola. She is also a developer. She works at VMware as a software programmer and I work at Ericsson. OF Connect is a library that is open sourced by code checks, which is a nonprofit organization mostly run by volunteering engineers and our core focus is to provide opportunities for technical growth for women in engineering. Ramya and I have been in the core team of contributors for this project and we're very happy to present it to you today. So once I go over what OF Connect is and what it does, we will discuss, we'll go quite deep into the design, show you some code and then the other aspects that came together as part of this project, the first being the unit test automation. The second is how we integrated our library into a real-world controller to prototype it as proof of concept to show that it works and finally the SDN setup that came together for our testing. It's a small minimal setup, but we'll show you what we have used and if we have some time we will also demo and if anybody is interested in joining us, we are still in development phase, if anybody wants to join in contribute, we'll have some pointers on how to get started. Everyone must be familiar with this, but I still for completeness I want to go over a quick introduction of software defined at working. A key concept here is the separation between the control plane and the forwarding plane. This is the control layer right here, which is implemented usually in an SDN controller and the forwarding plane is essentially a network of switches. OpenFlow is the predominant and an early SDN protocol that achieves SDN and our core focus is also of OpenFlow, but even more so our focus is on the communication aspects of OpenFlow which is defined as a channel spec within the OpenFlow protocol and that's what defines how a controller and a switch will talk to each other. So here I will give you some details on what the problem we really saw was. We have a controller and a switch talking OpenFlow channels and we saw several implementations of it and some problems, some glaring problems that came through where every OpenSource implementation had its own source code for achieving this communication, so we saw a lot of duplication even in the OpenSource universe. The second issue we noticed was a very high coupling between the communication, the low-level communication handling and the rest of the OpenFlow implementation. So that directly leads into problems like how do you handle multi-version every time an OpenFlow spec comes out. We have a new transport protocols, we have to make sure there's a version matching between the two sides and so on. It gets a little harder when the code is so highly coupled and not modular enough that maintaining it over a period of time gets very difficult. So our solution to this was to abstract out all the communication, the channel aspects of it into its own library and that's the blue box that you see on the slide and some other things that we thought were cool was to have this library support both the controller and the switch so it could be used on either side of the communication channel, package it into a shared library that can that can be very easily compiled in and finally publish it as free software. So this leads us to the set of requirements that we placed on our library. The very first thing is to hide all kinds of wire protocol details, low-level socket calls and all of that. The second is to manage connections to the channel setup as much as possible. We have had a good start. Right now our library recognizes the OpenFlow identifiers for every channel and in the next phase, excuse me, sorry, in the next phase we intend to include a lot more of the channel setup as part of the library itself and health monitoring of the connection and so on. So we really want this library to be very suited to OpenFlow. Some other requirements that we placed on this was multi-language bindings. So although this library can be used either on the controller or the switch for the purpose of the stock I will stick to the controller also because that's where we have done most of our testing. So multi-language comes in much more strongly on the controller world because we have three predominant languages that are used for the controllers which is C, Java and Python. We have implemented this library in C and we have provided bindings in Java and Python so that's that's covered. The next is the platform independence. I think this is a big open area and we have made some strides by using the G-Lib library which provides platform independent system calls. We can do a lot more so it's work in progress but we have had we have done a good start on this and we have compiled it on different platforms. I'll be talking about some of our design goals for this project. One of our main design goals was to you know handle performance under scale to handle 256k simultaneous connections and we also wanted our library to be capable of supporting multiple transport protocols that OpenFlow supports like TCP, UDP, TLS etc and the library should also be capable of adding new transport protocols as and when OpenFlow supports them. Another goal for us was to provide a common API so that we can integrate our library with both a controller or a switch as well. So the problem that we wanted to tackle in our design is best described by this use case here. A controller which is connected to a switch has one main OpenFlow channel which is the data part channel. It has a DPID of 1 and AUX ID of 0 and a controller can also have up to 256 auxiliary channels with a switch and each of these channels are identified by the same DPID but different AUX IDs. So on the whole we can have up to 256k channels between a controller and a switch and typically a controller can support up to 1000 switches which is normal in the real world today. So that's where we get our scaling number from which is 256k simultaneous connections and that's why scalability is an important design goal for our project. So this is a block diagram representing the various components we have in our library. As Deepa has mentioned a controller or a switch can be written in multiple languages like C, Java or Python. Since we have our API written in C, we have a small layer of SWIG bindings that export our API in Java and Python. Apart from that we have three main components which is the ORF Connect API layer itself and the net services is the component responsible for encapsulating the transport protocols and the elastic pool of threads is the component we have built to address the scalability issue. I'll be talking about our API next. This is not an exhaustive set of API we have but some of the important functions are listed here. We have some functions that we use for the initialization and some functions which are used to handle the channels itself and the third block represents the functions that are needed to actually send and receive OpenFlow messages. One of the goals as I had mentioned earlier was to design a common API for both switch and controller. So we actually have a lib init function wherein a controller or a switch can register itself with the library as a switch or a controller and it can provide the IP address and the L4 port on which it is running using the dev register function and the channel functions, the create channel and destroy channel are the ones which are used to create new OpenFlow channels or destroy them. The ones below the accept and delete channels are the callbacks that any controller needs to implement in order for us to notify it as and when we get new OpenFlow channels or the channels get deleted. So this is a sequence diagram that depicts the OF Channel setup process. As you can see here a controller initializes the library and registers itself with the library. Once that is done the controller doesn't have to worry about the underlying socket function calls. So library is actually hiding it from the controller and once the socket connections are taken care of the OpenFlow channel is set up, this is the stage when the controller and the switch begin to exchange the OpenFlow messages like hello messages and echo messages and you know other things like features request, feature reply. So eventually we plan to handle these messages in the library itself and thus the burden on the controller will be reduced further. So once this OpenFlow channel is set up that's when the controller and the switch can actually exchange messages using our send and receive packet APIs. This is a set of logs we show when during the OpenFlow channel setup process a controller initializes the library and then it registers itself with a particular IP address and L4 port tuple and during the registration process a controller also has to provide the callback functions that it has implemented. As you can see here once a new OpenFlow channel is received we notify the controller using the callback it has provided that a new OpenFlow channel is ready to be accepted. And as you can see we have integrated our library with the mule controller and we've tested it out with the mule controller. This is the next component in our library the net services component which is responsible for encapsulating the transport protocols. So our main idea behind designing this component was to provide a generic framework so that you can support simultaneous multiple protocols and also to be able to add new protocols as and when necessary. So we've provided this net services data structure with a bunch of callbacks so an example on the right is for TCP. So if you want to add TCP support in your library then you need to implement all these set of callbacks and define them. So similarly we can add any any new protocol later on. I'll give you a simple example of how this can be done. These are the basic three steps that need to be done in order to add any new L4 protocol. You need to enumerate the new protocol and then we need to define the net services callback functions for that particular protocol and we also need to define the poll in and poll out callback functions that are responsible for handling the open flow messages as and when they come in or go out. These are some set of logs for our net services component. So as and when a new switch initiates a new connection with our library that's where the the callback for our listen fd will be called and this callback will in turn trigger the TCP accept function which will create a new fd and add it in our poll in thread manager. So from this time the new fd is ready to receive and transmit new packets and every time there is a poll in on this new fd we call the callback poll in function that that handles that message and every time we need to transmit a message open flow message out of this fd we call the poll out callback function that the protocol has given us. So the elastic pool is at the very heart of the infrastructure that we have built and if you ask us one good reason why you should use this library versus another I would say this is it because there were two key factors one is this is basically a pool of threads that we're managing but we're managing it in such a way that we can have up as low as one socket fd or as high as scaled up to 256k without over provisioning or under provisioning the resources and the second aspect is that to be really aware of the you know difference here between stn channels versus a web server kind of connections in that once you set up a channel between a server and a server which is a controller and a switch it is quite permanent it doesn't it's not too much a flux so you don't expect it to go down you know you don't expect it to go up and down too frequently so keeping that in mind what we have designed here is instead of having a pool of threads that are waiting to be load balanced and round in round robin fashion what we have done is to have as few threads as possible and maximize the utilization of the capacity of each of those threads that we already have so until our first thread is really filled to capacity we are not you know provisioning resources to the next thread I'll go a little more into how it's a very simple algorithm but I'll go into the details of how we are managing it but I'll start with the individual thread block the blue box that you see is the the thread itself which has a pooling loop in it and I'll give a few more details on how we set up the pooling thread in the next slide but the yellow box that you're seeing is the interface that allows you to add or delete socket fds out of socket or pipe fds in out of the pooling loop the pooling thread utility which is at the very top the block at the very top is what manages our global data structures and make sure all the counters are up to date inside an individual thread we have a pooling loop but while we set up the thread we also have two administrative pipes that we set up one is for adding or deleting fds which the net services callbacks use it is a it is a control pipe and the interface is provided by the thread manager the second is when we want to send an open flow packet out onto the wire the api directly would can send that packet into this pooling loop and it'll get processed to be pushed out on the wire which I'll get to in a bit so that's the second pipe we have the next is for every fd we need to register a pooling and a pullout callback function and that's done by the net services callbacks which is the point number three that we had to introduce whenever you introduce a new layer for protocol is define these two callbacks the polin and pullout callbacks next up I'll show you how a packet is sent out so when a packet open flow packet arrives at the pooling loop it's a polin that occurs on the fd the pipe fd and at that point we put that packet into a hash table and we set the pullout flag on the corresponding outgoing socket fd and then the next thing that happens is the pullout event occurs and the packet is pulled out of the hash table pushed out on the wire and the pullout flag is reset that's essentially the way the packet is sent out the in path is actually very simple the polin polin flags are always set for all fds and an event occurs and the net services polin callbacks kick in and it's directly sent out to the api out onto the controller on the switch on to the pool at some point we would have we would end up with a bunch of bunch of threads with different capacities of sockets that it can take on right some holes in every thread so the way we organize it is have a decreasing which is I think the next slide has some more information so we have a global list of all the threads with sorted by decreasing number of available sockets so that if you have one thread with five sockets available up to capacity and another with three the first one will be five next will be three and others will be filled to capacity we do that and then anytime we want to add a nft to us to a pooling loop we need to find a specific thread that can accept it so the best thread that can take it and the find or create function is what gives us it iterates to the last thread with availability and gets us to the thread that can accept the new fd these are the two add and delete functions the first one the first one does exactly that it finds the best thread to add the socket fd using the function that I just spoke of and the second one is a delete which deletes the socket from the thread now we have a hole in the thread as in we have capacity in the thread and the list is again resorted this is a poll in and pull out logs I think I'll start by showing you the fd's that are being pulled fd8 is the control pipe fd10 is the data pipe 3132 are two sockets being pulled on we get a poll in on fd32 this is the incoming path of the packet a packet is received and then which which as you have seen earlier to we trigger the callback from the controller the poll out we have two polling events first is the poll in that happens on fd10 which is the data pipe so the packet arrives put it in the hash table set the poll out flag and the next thing that happens is poll out on the outgoing fd we're sending a packet out and resetting the poll out flag unit test automation we have used glib very heavily for unit test automation it has a great framework for it we have two ways to run our tests either through make or through g tester once it's compiled this is we focused most of our coverage on the infrastructure itself so we started with the pole thread we got it fully tested then we started then we went on to the utilities which exercise some of the elastic pool but bear in mind that we have not yet scaled our we're still in development we have not yet scaled all to 256k but we have still tested that infrastructure for a few sessions we've also covered some net services as part of our tests now this is the full list of unit tests that we have the results that that are put up here tc3 for example just test the poll in callback function and on the pole thread and utility c2 is does more of an end-to-end for a single session by using the controller's port itself integrating our library with an existing controller was an interesting challenge so there are some very simple steps to follow if you would like to integrate our library with with a controller these are the basic three steps here the controller has to implement you know the call these basic three callbacks and once that is done it has to initialize and register itself with the library it also has to take care of you know the freeing part of the library to free all the resources which it has used we've come up with a basic sdn setup in order to test our library and this this this picture here represents the whole setup we've used for testing we've integrated our open flow driver with an existing mule controller which is an open source controller written in c and we have deployed mininet which is a framework for testing sdn and in mininet the open flow v switch is is an integrated part of mininet so we have deployed mininet using a minimal topology so we have a single switch and two hosts associated with that switch as you can see here we've specified that the controller is remote here so the open flow switch on mininet will try and connect to the remote controller which is our mule controller with the oath connect library integrated as part of it so this is our whole test setup and we've we've we've brought this up and we kind of tested how the flows are exchanged back and forth between the switch and the controller as part of this this is a small snapshot of our wire shot capture so once we bring up this whole test setup and the open the mule controller which has our open flow right library integrated in it it begins to exchange the open flow messages with the ovs switch as you can see here there are some hello messages that are sent in in the process of initiation of the open flow channels followed by the open flow features request and feature reply this is where the dp id and aux id are exchanged and the protocol actually determine the the two ends actually determine the version of the protocol to be used which is negotiated using these messages and we also have the echo request and reply messages these are kind of heartbeat messages between the switch and the controller to make sure that the channel open flow channels are up and running between them so that was a design and some information on what we do and how we do it what's next we hear a few tracks that we have thought of but we are open to more ideas there are some very obvious gaps we need to fill in tls ipv6 the that's the more obvious thing the greater o f awareness is really where we want to draw the boundary of how much open flow channel work that the library will absorb and there is a lot of scope there right now scaling to 256k we have designed for it we have not yet tested it so we are i'm sure we'll find some interesting problems along the way so that's very exciting personally for me the last one the benchmarking because we have put a lot into making this design put a lot of thought into making design of extensible to make it very stn specific and so on and this is where the rubber meets the road so i'm very curious to find out actually benchmark it and see how it performs against other more well-known implementations so to summarize we have very simple in that our api is a small set it's easy to extend we is easy to integrate we've shown you the steps it's literally one two three it's powerful because we think the thread library the thread model that we've used is pretty unique we haven't seen it being implemented in too many other places in fact i don't remember seeing that any other place so we think this is more suited to stn and that's where the power of this library is it is true open flow will will be implementing the open flow headers as it is defined in the spec easy to integrate goes with simple and it's a very well known open source license that it is published on so what what the motivations were for us to launch this project and get started on it was to actually be able to learn stn using the building blocks that we understand best which is network plumbing so we started with the very simple very well known the socket kind of connection built on top of it got sdn actually working on top of it and now we have we're actually playing with the sdn setup where we have our own code integrated into it which is quite a thrill for us and i think that is a very powerful way of learning a new technology and it has helped the core team the five of us who started this to to really get in get in knee deep with stn and enjoy it so if anybody else also shares that and wants to contribute or give ideas or anything we have a whole bunch of information up on our github wiki we have two repos one for the o f connect library itself and the second repo is that of the integrated mule controller which is also open sourced and feel free to email us drop a line at organizers at code chicks org and we'll be very happy to have you join our team this is a team that made it possible we are toasting to our first completion of the project on your right most is rupa the share who is the founder of code chicks next is swapna ire and kajal bhakar who work at Cisco and then this ramiya working at VMware and i work at Ericsson so we all came together our companies agreed to donate the code to code chicks and this is what we have at the end of it so we have a quick demo that we could show you before taking some questions which would take a couple of minutes so we'll be giving a very short demo on what we have done so far so basically i've set up wireshark so that it can capture packets on the loopback interface currently we are running the switch and the controller on the same host but they can be run remotely so this is the mule controller which has our library integrated in it so i'm going to run the controller now as you can see it does start it is waiting for new connect waiting to accept new connections from any switches and next i'll start mininet so we're having a minimal topology deployed in mininet with one switch and two hosts so you can see that there is a single switch connected to two hosts here and let's look at the wireshark captures now yeah so yeah basically we have our controller running on the local host and port 6633 and you can see that that continuously exchanging open flow messages now so the open flow hello messages is what will initiate the open flow connection followed by let me just stop the capture for a bit yeah the the open flow features request and replies where they negotiate which version of the protocol both of them should be running and they also exchange the dpid ox id of the main channel at this point so the the main open flow channel is fully established and you can see that they also have these heartbeat messages echo request and echo reply messages being constantly exchanged between them to in order to check the health of the open flow channels so that's where we are today but we plan to add support for more protocols like tls and ipv6 soon and we also plan to profile and benchmark our library with some other libraries out there thank you thank you that looks really interesting um can you talk a little bit about what happens if one of the callback functions blocks for some reason doesn't return immediately um how does the library handle that or what will be the effects of that do you mean the socket calls blocking um not so much the socket calls down into the linux side but the callback into the application to say we've received a packet for instance if it doesn't sort of just put the packet in a buffer but instead does something that takes a long time the packet that has to go up to the controller um we would basically have to debug it i guess but so we don't have any handling to specifically take care of you know time it and see if it's still hanging on or doing an exception handling so far what we have developed is basically for the good case so i think that's what we have to start looking at at the negative cases and that's a very good thanks for the idea i think we'll look into it it's an issue i found with the re-u handling which also uses a similar event model as if your okay event thread it blocks for some reason then a whole lot of things can end up being hung up in that right because your open flow messages are not going back and forth okay thank you have you have you thought at all um about ways to make this resilient or um um highly available so you've talked a little bit about scaling and how you can support a lot of switches one um one outstanding issue for a lot of controllers is how you actually take the controller frame we can make it so that it's um highly highly available if you um thought at all about how your library might um help enable that the high availability of the controller um we have had some early discussions on it but um yeah these are i think these are some great ideas we should follow up and we should probably have a discussion with you after this to get more ideas on it so yeah uh if i wanted to play with this um you know if you got a um i haven't looked at your wiki does it um give a um uh does it does it tell me how i can get started with playing with it yes absolutely we have actually a lot of instructions but also the on how to use github workflow that we have uh we recommend and the repository is also online so are you online maybe to show that maybe i think it's on my laptop just give me one second i'll quickly show you the this is what we have right so we have information on the sources the how to install it how to compile it our workflow how to commit a patch test setup on how to bring up your um so this is the test setup where you can um some instructions on how to get started testing with our mule controller um even before you so we have a lot of instruction online which you could use to get started my question is relating to the number of threads you got and particularly python your heavy emphasis on threads and implies to me that there's a lot of uh cpu activity you expect going on on each thread otherwise you wouldn't bother but python doesn't support threads very well does it um how does this interact with your model so could you repeat the very last question you had asked i got that python yeah the threading is you have you have a lot of threads there right um the impression i got that the cpu would be used by the callbacks from your threads so um but python doesn't support multi-threaded callbacks very well at all in fact at all it has this global interpreter lock i was just wondering does this mean in general for python usage it devolves down to one thread so we have python binding so we are you know what we are proposing is to have this library work as a you know keep it in c and then have a python binding that exposes just the api as a pluggable module to python so we want what's that did you have a point so we basically want to exploit the threading capabilities of c that's i think one of the reasons that we even use the programming language thank you one more question yeah i was actually quite um i was actually quite happy to see that it was written in c and had the other ones as bindings because what i found in doing a lot of the stuff in python particularly with um aru is that um you very quickly run out of steam the more open flow flow operations per second that you do so i mean having it having in c and being able to use threading in c would would be you know have a good vantage so yeah well done thanks thank you thank you i have a couple of quick questions so um while you were talking about your scaling test just wanted to know how your test setup was like how how are you testing that scalability the scaling um i think initially we'll want to use as much virtual environments as possible once we are you know once we get the basic bugs out then we want to be able to try out something essentially have a controller in a different host have the network of switches in a different and you know exercise that a little more but i think we will take baby steps we'll start with you know the least we can set up so we can get through our first set of bugs and then and just go through that okay um another quick question so while you were describing about your elastic pool right so you mentioned the blocks what what did each of those block mean is it a single connection between the controller and the switch or each of the blocks in the pool itself they they are thread um let me get the individual blocks right so they are one unit that manage one thread so the blue box is the thread itself but then the rest of the code is running in the context of the main library thread right so we have individual threads for for each of the socket handling we have a we have like a pool of threads but then the library itself runs in the context of the controller so that's where the thread manager and the pool thread utility are existing but we need all of all of this functioning to get one block of pool thread working i know you didn't do any performance measurements yet any metrics but what are your anticipation what are your expectations for performance levels in bandwidth or packets per second or whatever well i think we should we want to start with uh i don't have numbers at this moment but i think we want to start with what's already benchmark for floodlight and other controllers i think there's a lot of numbers that are already published and our first step would be to get there and you know see how we can exploit our own um design for that but sorry i don't have the numbers right now i have time for some more questions if anyone has questions so i'll repeat the question the question is about um integrating the open the o f connect with the switch side we have mostly talked about the controller that is true the api and all of the design is geared to that uh in fact there is some api the create channel that only the switch can really use because we are not expecting the controller to start a channel so we have designed for it but that's again a test effort that has to uh that has to you know be planned coming forward going forward just to point out that you know we are volunteering engineers and that's we do this on a spare time so we do the best we can do it given the resources we have so there is a lot of work to be done we admit but i think we're very proud of where we even got it too um and that it has some good foundation to start off on sorry that was another question i think do you require contributors to sign a contributor license agreement um so right now what we have encountered is we are all employed and we need our employment to release um you know intellectual property rights to your contribution so there will be some some level of that depending on what what kind of um you know day job you may have or if yourself employed or other things so there will be some kind of um but it'll go through code checks so once you contact the organizers i think we should be able to put it together i was wondering about your motivations for doing this work it's um you know there's uh there are some other um projects that uh uh there are other controllers and you know what what motivated you uh was it deficiencies in others or uh an eagerness to explore this area you know like a a creative um a desire to be creative there um i i think it started with the latter uh to explore sdn and to learn as much as we can but uh from the perspective that we understand um and as we were designing we were constantly thinking of how we can how we can make ours different and what the technologies out there are so that was part of the process certainly but our initial motivation was to just learn sdn just you know be students and put together something from scratch make it work and see how far it goes i think that's where it started so that has been quite a ride we have time for one more question okay um please thank our presenters


Hey everyone, good morning. This is Bernice, your community outreach specialist and today we will be spending most of the day with Corporal Bolenbacher while we film the Marine Operations Temporary Duty Tryouts. And Mitch is gonna explain a lot more of that later because it's a tongue twister and it's a mouthful and I do not wanna screw it up for all of you. So stay tuned, let's see what we can get into. I heard that it's gonna be very interesting. Maybe some flailing, I know there's some oral boards, I know there's some people in the water. It's a really pretty day, let's see. Corporal Bolenbacher, what are the nine guys going to have to do today that are trying out for the Marine Operations Temporary Duty Augmented? Augmentation Force? I was so close, I was so close. So today we're out here, we're gonna do more ops tryouts for nine guys who are interested in coming to the Marine Unit as a temporary assignment and as a collateral duty to their regular assignment, whether it be patrol operations, special operations, criminal investigations.  It's a 200 yard swim with five minutes of treading water and then climbing back on the boat from an underway condition. So it means you can't use a swim ladder to simulate if you fell off the boat while it was moving. Gotcha, I wouldn't make it. Once they do that, they'll take this afternoon, they're gonna do an oral board and a small written test. And then if they're chosen, they'll come to us for a period of 60 days to get trained up on the boat. And then for holiday weekends, for scallop season, for big events, they'll come back and be able to come out on the boat with us and help expand our Marine Unit here at the Sheriff's Office. That's awesome. I think I want to come out just for the training so I know more so what to do on personal boat days. That was just a side note. Okay. How you guys feeling? Are you nervous? Yeah, the water's cold. Wait, that's why you're nervous? Cause the water's cold? Are you nervous about anything else? You think you got this? Do you know exactly what you're doing? Say, what are you doing? I'm doing what has to be done. We got that. Holdenbacher, what you doing? Right now we're putting out a 100 yards, 300 feet of line. And then they're going to swim to the buoy and then come back. Gotcha. And we are feeling good about this guys. Yep. Is it cold? Did their swim? Now what are they doing? So they did the 100 yards down and back. So 200 yards swim. Now they're going to charge water for five minutes. Good. So now they've got to get back into the boat from an underway condition.  See if I can just get a cannonball, something that'd be your heaviest, like 10 points, you know? Off the top.  Off the top, the top. We are about to wrap up this video. Corporate Bowenbacher, what else did the guys have to do for the tryouts? So this morning they all did the swim test. Everyone successfully passed the swim test. And getting back on the boat. This afternoon they're going to complete an oral board, five-question written examination, and then through how they do on the oral boards and their experience and everything will make a selection. Good stuff. Congratulations to everyone that tried out today. They will find out by the end of this week whether or not they made it to the Mar-Opps TDY. And maybe I'll bring you guys a video to explain a little bit more about what they do. But this is new. This is new for us. Yeah? It's new. It's new? We love the new stuff. We love the good stuff. So if you haven't already liked this video, like this video, comment, subscribe, and we'll see you next time. Say bye. Bye.


I am Sam Bakmin and I am the author of Malignant Surge Love, Narcissism Revisited. We are surrounded with malignant narcissists. So how come this disorder has hitherto been largely ignored?  Even mental health practitioners are woefully unaware of pathological narcissism in unprepared not ready to assist its victims? Well, the said answer is that narcissism meshes well with our culture. Our civilization itself is narcissistic. There is a kind of narcissistic background radiation, which permeates every social and cultural interaction. It is hard to distinguish the pathological narcissist from the merely self-assertive, self-confident, self-promoting, eccentric, ambitious, or highly individualistic person which are so common in our society. Hard cell, greed, envy, self-centeredness, exploitativeness, diminished empathy, they are all socially condoned features of Western civilization. Our society is atomized, the outcome of individualism, gun or eye. Our society encourages narcissistic leadership and role models. The substructures of our culture, institutionalized religion, political parties, civic organizations, the media, corporations, they are all suffused with narcissism and pervaded by its pernicious outcomes. The very efforts of materialism and capitalism upholds certain narcissistic traits such as reduced empathy, ambitiousness, exploitation, a sense of entitlement, and grandiose fantasies which are euphemistically called vision. Narcissists are aided, abetted, and facilitated by four types of people and institutions, the agulators, the blissfully ignorant, the self-deceiving, and those deceived by the narcissist. The agulators are fully aware of the nefarious and damaging aspects of the narcissist's behavior, but they believe that they are more than balanced by benefits. Benefits to themselves, benefits to the collective or to society at large. The agulators engage in an explicit trade-off between some of their principles and values and their personal profit or the greater good. They believe that narcissists can and do contribute to society. They seek to help the narcissist, promote his agenda, shield him from harm, connect him with like-minded people, do his chores for him, and in general create the conditions in the environment for the narcissist's success. This kind of alliance is especially prevalent in political parties, the government, multinationals, religious organizations, and other hierarchical collectives. Then there are the blissfully ignorant. These are simply unaware of the bad sides of the narcissist and make sure that they remain unaware. They look the other way. They pretend that the narcissist's behavior is normative, or they turn a blind eye to his egregious misbehavior. They are classic deniers of reality. Some of these blissfully ignorant maintain a generally rosy outlook premised on the inbred benevolence of mankind. Consumers simply cannot tolerate dissonance, conflict, and discord. They prefer to live in a fantastic world where everything is harmonious and smooth and heavily banished. They react with rage to any information to the contrary and block it out instantly. This type of denial is well evidenced in dysfunctional families, for instance, where the mother would cover up for the father and deny any wrongdoing on his part. Then there are the self-deceivers. These people are fully aware of the narcissist's transgressions and malice, his indifference, exploitativeness, lack of empathy, and rampant grandiose. But they prefer to displace the causes or the effects of such misconduct on his part. They attribute his pathology to externalities, his going through a rough patch, or they judge it to be temporary. They even go as far as accusing the victim for the narcissist's lapses or for defending themselves. They say she provoked him into abusing her. In a feat of cognitive dissonance, these people, the self-deceivers, deny any connection between the acts of the narcissist and their consequences. They say his wife abandoned him because she was promiscuous, not because of anything he did to her. They are swayed by the narcissist's undeniable charm, intelligence, and attractiveness. But the narcissist needs not invest resources in converting them to his cause, he does not deceive them, they are self-propelled into the abyss that is narcissism. The inverted narcissists and co-dependence are self-deceivers. Finally, they are the deceived. These are people or institutions or collectives deliberately taken for a premeditated right by the narcissist. He feeds them false information, manipulates a judgment, prefers plausible scenarios to account for his indiscretions, soils the opposition, charms them, appeals to their reason or to their emotions, and promises the moon. Again, the narcissist's incontrovertible powers of persuasion and his impressive personality play a role in this predatory ritual. The deceived are especially hard to deprogram. They are often themselves encumbered with narcissistic traits, and find it impossible to admit a mistake or to atone. They are likely to stay on with the narcissist to his and their bitter end. Regrettably, the narcissist rarely pays the price for his offences. His victims pick up the tab. But even here, the malignant optimism of the abused never ceases to amaze. They still claim and believe that they can rescue the narcissist, heal the narcissist, cure the narcissist, change the narcissist. With their love, their empathy. But this is lullalent. It's a kind of grandiose fantasy in the mirror, in reverse.


Hi, my name is Spasti Amato, and today I would like to show you how you can use list objects effectively in Python. Now for this tutorial, I will use Python 3.4 as you can see here, but all the tricks that I will show you are equally applicable to Python 2.7 or any other recent version of Python. Now to start with the basics, what is a list? Well, a list in Python is just a collection of elements, and elements can be anything. So you can have, for example, a list of numbers as you see here, or you can have a list of strings, as you can see here, list 2, and you can even have a list of other lists, as you can see here. So any kind of Python object can be put together into a list. A list is just a collection of arbitrary elements. A list has a particular order, so if we take a look at list 1, you see that the 0 comes before the 1, and the 1 comes before the 2, and lists can be changed, or as they say in Python, lists are mutable, which means that you can change one element from a list, for example, the 1 by another element, for example, the 3, right? So that's a list. A list is a collection of elements, and these elements can be anything. A list has a particular order, and a list can be changed. That's what a list is in Python. Now, let's say that we have a list like this, a list of names in this case, so a list of string objects. How can we access elements from this list? Well, that's very easy. Say that we want to access one element, and this is really elementary Python, you probably notice, you just say, for example, print names 0, and if I select this and I run it, you see that it will print the first name, Joe, to the terminal, right? So at position 0, we start counting at 0, so element 0 is Joe, and you get it from this list just using this square bracket notation. But you can do more. You can also select an entire range, or as you call it in Python, a slice from a list. Say, for example, that I type this print names 0 to 3, I select this, and I run it. You see it will print out Joe, Jean, and Marcel to the terminal, so it will print out from 0 to 1 and 2, and it will add position 3, right? So the 3 is the last, actually the first item that is no longer part of the range. Well, we can even make more complicated slices. Say, now basically what we're doing is we're making steps of 1, right? We're going from Joe at position 0 to Jean at position 1, to Marcel at position 2. Say that we want to make steps of 2, and we just add another column, and we say 2. So if I select this and I run it, you will see we go from Joe at position 0, and then we make a step of 2, and we go right to Marcel at position 2. So a slice can have a starting point 0, an end point 3 in this case, and a step size 2 in this case. Now, so far we've been counting from the start, right? So the first element is element 0, but we can also count from the back. We can say, for example, print names minus 1, and minus 1 is the last element. So we start counting from the back. So if I run this, you see it prints out Eric, which is the last item, right? So minus 1 is the last item, minus 2 is the second to last item, and so on, right? So if we want to count from the end of the list, we just do this with negative numbers. Now, we can even make negative slices in the following way. Say that we want to go print names from the last item to the 4 before last item, right? Item at position number 5. So this would be number 1, Marcel would be number 2, Jean would be number minus 3, Joe would be number minus 4, and number minus 5 would be like just before the list. And then we do this in steps of minus 1. So you see what's going on here? We start at the end of the list, and then with steps of minus 1, so backward steps of 1, we go all the way to the beginning of the list. So if I select this, and I run it, you will see that it prints out the list in reverse order. Now, what you will often see in Python is that people do this. They say names, and then they do column, column minus 1, and this magically reverses the list.  Now, this works because if we do not indicate the start and the end of a slice, right? So we don't do this here, we just put a column, and we just completely omit the start and the end of the slice. Python will automatically use the beginning and the end of the slice, which is why this statement here, minus 5, 2 from minus 1, 2 minus 5 in steps of minus 1, is identical to just saying take a slice with steps of minus 1, right? So column, column minus 1 is just a quick way, convenient way of inverting a list with a slice. But technically what it does is walk through the list with steps of minus 1. Okay, so now you know, essentially all there is to know about how you can access elements and slices from a list. Now, let's go to sorting, right? So because as I mentioned, lists have a particular order, right? In this case, Joe is the first, John is the second, Marcel and Eric. And often, of course, you will want to sort lists, right? And you can do this very simply. Say that we want to print a sorted version of this list, we just say print sorted names. If I select this and I run it, you see it works. It starts by Eric, which is the first because it starts with an E and we sort alphabetically my default. And then John, then Joe, and then Marcel. Now, if you do this, do it like this using the sorted function, you do not change the original list, right? So if I would print out the original function afterward and names, it would still not be sorted, right? So you could say sorted creates a new list that is a sorted variation of the original list, but it doesn't change the original list. If you do want to change the original list, you can do this with the dot sort function. You say names dot sort. And if I do this, I select this, you will see that actually the original list has changed and has become alphabetical, right? So there are basically two common ways of sorting a list using the sorted function, in which case you pass the list as an argument, or you call the dot sort function on a list, in which case you change the actual list itself. Okay, now, so that that that's the basic sorted way to sort lists in Python. But now let's say that we want to do something more complicated. We want to sort a list in a custom way, so not alphabetically, but using some kind of custom criteria. Say, for example, that we want to sort this list by the last letter of the name. Then we can do this using a trick, namely specifying a key to do the sorting. Now, if you specify a key like this using the key keyword, you have to indicate function. So let's say last letter. And then we have to define this function, def last letter, name, return, name, minus one, right? So we define a function that returns the last letter of name. And then we use this last letter to do the sorting by that's what happens here. Now, and if I select this, and I run it, you see that it works, right? We start again with Eric, because it starts the C comes first, then the E, then the L, and then the N. So this works. But we can do it a little bit more elegantly using a so called lambda function. Now, lambda function works like this. We can say names dot sort key is, I will just show it and then explain it key is lambda, name, name, minus one. Okay, now, these two things. Here's by explicitly defining a last letter function. And this way, using a lambda function, do exactly the same. What this lambda function is, basically, it is a way to specify in one line, a very simple function that has no name, but it takes it has no function name, but it takes a name as an argument. And it returns the last letter of this name. So that's what it does with a lambda statement, you can create a function just in a very quick way, just on one line, right? So you define a function that takes a name as an argument and returns the last letter of this name. And then we're going to use this to do the sorting. So if I select this, and I run it, you see that it works, right? And these lambda functions are very convenient, especially in combination with lists. And we will see it a few times more in this tutorial. Okay, so now you know the basic ways of sorting a list. Let's move on to a very convenient function, the map function. Now, to explain what map does, let's start with this very simple scenario in which we have the same list of names. And we want to create a new list in which which has the same names in it, but the first letter of each name is capitalized. Now, we can do this like this, right? We can create a new names list. Then we walk through all names in the list. Then we capitalize each name, and dot capitalize is just a built in function of strings that capitalizes the first letter of a string. And then we add this to our new names function. And then we print it out. Now, if I select this, and I run it, you will see that it works. Sorry, print name, select run, you see that it works, right? There we go. You see that it works, Joe, Jean, Marcel, Eric, right? So and you will see that the first letter is capitalized. But we can do this, we can do this in a more elegant way using the map function. What we can do, I will just type it and then explain how it works. We say new names is map. And then we specify a function that is applied to every element from the list. And to do this, we're going to use again a lambda function. Lambda, name, name, dot capitalize, comma names. Now, if I select this and I run it, you see that it does exactly the same thing, right? It prints out all the names with capitalized first letters. Now, what happens here is that basically, we have specified a function, again, a lambda function that accepts one name as an argument and returns that name with the first letter capitalized. Then we use the map function to apply this lambda function to every element from the names list. And we store the result in new names, right? So map is a very convenient function that applies another function to every element from a list. So it basically, it's a more elegant way to do what many people would do using a kind of for loop, as I showed you before. So that's what you can use map for. Now, let's move on to another function, the filter function, which is in a way quite comparable to map. So let's explain what the filter function does by considering the following scenario in which we again have a list of names. And what we want to do is from this list, we want to select only the names that start with the letter J. Now, so we create a new empty list. We walk through all the names in the original names list. If the name starts with the letter J, we append it to the new names list. And then we print it out, right? I fix this again. So now, and if I select this and I run it, you see that it works, right? It runs out only Joe and Jean, because those are the two names that we start with J. But we can do this in a way that's more elegant using the filter function, which, as the name suggests, is used to filter a list, right? And what we're essentially doing here is filtering this list. Now, filter works as follows. Let's say we remove all this. And we just say that new names is filter. And then as the first argument, we specify a function that should return true if an element should be included and return false if the element should not be included, right? So it's a function that determines what we're going to how we're going to filter the list. So we say lambda name, name dot starts starts with J comma names. Select this and I run it. You will see that it works. It again prints out Joe and Jean. So what happens here is basically we specify a function that accepts a name as an argument and returns true if the name starts with a J and falls if it doesn't start with a J. Now, this function is used to evaluate every name from the names list. And the filter function uses this to select only those names that start with a J and stores the result in this new filter, in this new list, right? So filter is a very convenient function that you can use to select a subset of elements from a list using some kind of criterion. And again, using a lambda function in combination with filter is very convenient, just like using a lambda function in combination with map was very convenient. Okay. Now, let's move on to the next next trick. And that's actually very, very cool trick. And it's called list comprehensions. And it's a bit it's a bit abstract. But if you get the hang of it, it's really very convenient. So let's to explain what what it does. Let's consider the following scenario, which is actually a combination of the two previous scenarios. So what we want is we want to create a new list based on the original names list in which all first letters are capitalized. But we only want to select those names that start with J. Now, then we can do this in the following way with the for loop, right? We can say new names is an empty list. We walk through all names. If a name starts with the letter J, we capitalize it. And we append it to the new names list. And then if we print it out, I select it and I run it. Oh, name, select run. You see that it works. We print out Joe and Jean, both with capitalized first letters. What we can do this in a in a more elegant way, using a list comprehension. And that works as follows. What we do is basically we remove this and we say, okay, we want to capitalize each name, capitalize each name. And what is name? Well, name is for name in names. And this is already a valid, a valid list comprehension. So basically we specify a for loop as part of this weird notation. And on each element of the for loop, we apply the to each element of the for loop, we apply the capitalized function. Now, if I select this and I run it, you see that it works, right? It capitalizes each, each first letter of the name. But then we can also specify an if statement. So we can say if name dot starts with j. If I select this and I run it, you will see it prints out only Joe and Jean and capitalizes the first letter. So a list comprehension is basically a clever way to walk through a list for name in names. Select only those elements that satisfy some criteria if name dot starts with j. And then apply some kind of operation to the elements that are selected. In this case, name dot capitalize. And you can do this with this particular notation that you see here. So you do it between square brackets, you indicate the operation, then for loop. And then if you want, this is optional, you specify an if statement. And list comprehensions are a very, very concise, very short way to work with lists. Okay. Okay, so let's move on to the next function, the zip function, which is really very convenient, really very convenient function. Now, let's say to explain what zip does, let's say that we have two lists, one list of names, and one list of associated birth years, right? So Joe is born in 1980, John's born in 1972, that's answer one. And what we want to do is print out for each name when that person was born. So we can do that again, as always, we can do it with the for loop, right? So we see how many names there are, which is four, then we create a range from that, right? So it would be a range from zero, one, two, and two, three, and including three. We loop through that range, and then we print out first we print out name, name zero, and birth year zero, then name one, and birth year one, et cetera. Now, if I select this, and I run it, you will see that it works. It says Joe was born in 1980, John born in 1972, et cetera. But it's quite ugly, right? Because we have this weird construction in which we have a length nested within a range, which is quite ugly. So we can actually do this in a better way using a zip function. And what we do is very simply we do the following. We say, instead of four i in range length names, we say four name comma, birth year in zip names comma, birth years, and we remove this, and then we print out name and birth year. It's called on here. Now, if I select this, and I run it, you will see that it does exactly the same thing. So basically what zip does is simply it creates a it zips together the names and the birth year list, and it returns first a tuple consisting of the first name and the first birth year, then tuple consisting of the second name and the second birth year, and so on. So zip is a very convenient function to zip together lists if you have separate lists of elements that are really associated by the position of the elements in the list, right, which is the case here, because the elements here are associated by their position in the list. So zip is really a very convenient function to use and remember. Okay, now let's move on to the final function, enumerate. Enumerate is again one of those functions that solves the problem that you see very, very often. Let's say that we have a list the same names as always, and what we want to do is we want to print out for each name the position of that name in the list. Now, we can do this as follows, right, we start with the counter variable i, which is zero, then we loop through every name, we print out the name n i, right, and then we increment i by one. I select this and I run it, you see that it works, it print out zeros, joe, one, et cetera. What we can do is better using the enumerate function, which goes like this. We simply say for i comma name in enumerate names, and then if I select this and I run it, you see it does the same thing, but it has saved us two lines. So basically what enumerate does, it returns a tuple of the position of each element and the element itself, right? So i would be the position of the element and name would be the element itself. So that's very, in a lot of cases, enumerate saves you from having to use kind of counter variables to keep track of where you are in a list. Okay, well, that's basically all I wanted to say. So what we have seen today is that a list is a collection of arbitrary elements that has a particular order and it is mutable, a list can be changed. You can slice through a list by, you can get elements from a list by number, either positive numbers starting from the beginning or negative numbers starting from the back. And you can get slices from a list using a start position and end position and a step size. You can sort lists using the sorted function or the dot sort function. And for custom sorting, you can use a, you can specify a sort key, which has to be a function. We've seen that there is a map function, which applies one particular function, which is usually a lambda function to each and every element from a list. We have seen that there is a filter function, which selects elements from a list based by the result from some kind of filtering function, which is usually also a lambda function. We have seen that you can use list comprehensions to apply an operation to every element from a list, optionally selecting only elements that satisfy some kind of criterion. We've seen that zip allows you to zip multiple lists together. And we've seen that enumerate allows you to walk through a list while at the same time getting the position of each element in that list. Okay. Thank you very much.


Hey, thanks, everyone, for coming for my session. It's the last session for the day. I hope I can keep you engaged with my presentation. So today we'll discuss tapping into the strengths of hybrid cloud. Over the last few years, I think this hybrid cloud is something that is gaining momentum, right? So we had a public cloud and private cloud, and now it's a hybrid cloud. Hybrid cloud is a combination of two or more clouds. And let's take a look at what the, oh, there you go. OK, so in this session, we will take a look at what the introduction to hybrid clouds. And we'll also take a look at what the enterprise IT composition. And then we'll see what are the key enablers for the hybrid cloud, right? And then we at Triller Data how we battle multiple clouds during our testing and development and deployment phase. So let's start with the introduction to hybrid cloud. So how many of you are thinking of deploying hybrid clouds in your enterprise? OK, so do you have any future plans in the two years down the line? Does your IT, looking, leveraging public cloud some form or shape? OK, so based on some stats that we picked right now, the hybrid cloud, Gartner says, ITs will leverage the hybrid cloud in some form or shape. Almost like 50% is going to be like hybrid cloud, right? And other research, it varies from 40% to all the way to 80%. The composition varies. But the key point here is, in some form or shape, the hybrid clouds are gaining momentum and they are here to stay. Now, when I look at the hybrid cloud, I'm only talking from the IT point of view. If you look at Google Mail, Gmail, that is some kind of cloud that you are using. If your enterprise is using Gmail plus something else, it could be some form of hybrid cloud. But we are only looking from enterprise workloads point of view, how we can leverage the on-prem and the public cloud to basically effectively implement a better IT. Now, what is a hybrid cloud? So from a simple definition point of view, the hybrid cloud is a combination or loosely coupled two or more clouds that acts as one cloud, right? And typically, when people say hybrid cloud, it is like you have something on-prem. It could be VMware cloud or OpenStack cloud. And then you combine that with one or two public clouds. Essentially, the idea is to leverage the capabilities that various clouds offers to implement a better IT for yourself. So obviously, if hybrid cloud is done right, it definitely enhances the reliability of our IT, the flexibility of the IT. But more importantly, it can decrease the cost. Like cost of ownership can be enhanced by adapting a hybrid cloud strategy. Now, so the other research says total cost of ownership will be reduced by 54%. That's a big number. Obviously, when you look at the hybrid cloud and you look at the public cloud composition, the thing that we are looking is a utility cloud model. And most of the time, we don't need dedicated resources for the tasks that we are running in our IT. If somehow we can leverage the utility model that the public cloud offers and then only pay as we go, so it definitely reduces the cost of ownership. And also, it enhances the operational efficiency because you spin up the resources and spin down the resources when you don't need them. And the rest of them will fall apart. It facilitates the innovation, meets customer expectations more readily. Obviously, there are very good benefits of employing or adapting hybrid cloud strategy. But what does hybrid cloud strategy really means? If you talk to 10 different people, you may get 10 different answers. And depending on what the vendor that you are talking to, he may spin his own version of what the hybrid cloud is. But if I look at what kind of deployments of hybrid cloud are there, I can boil down them into two categories. One is you have the unified management. So that means you take one or two clouds. It could be on-prem and then the public cloud. And then you layer a unified management layer on top of this cloud so that it can provide you a single pane of glass for your management. And it helps all the details of your individual clouds within the hybrid cloud. And then if you are spinning up some workload based on what is needed from the workload and then analyze what the capabilities that each of these clouds offers, it can determine what the best cloud that best suits your workload and deploy the workload there. And also, they help you provide some governance around who is deploying what in your organization. So this is one of the very popular way of deploying hybrid cloud. Scalar is the product that seems to be very popular. Open source project, but there are other projects out there that can help you implement this unified management for your hybrid cloud. So that's all good things. But what are the disadvantages with this one? So it's still like you have a unified management and you can basically deploy these workloads either cloud one or cloud two. But then you need to plan a complete life cycle of your applications. It's not like you basically identify the cloud and then deploy the application. But what about the rest of it? So here you are essentially building silos. You may have three or four clouds within your hybrid cloud. So you choose one cloud for one workload, one cloud for other workload, and then what? You are basically stuck there. If you choose a cloud one and then you deploy one application, your application purses there. And there is not much synergy that's happening between the clouds. So once you deploy your application and then you want to leverage the capabilities that are available on a different cloud, but it may not have access to the application data so that you can leverage the synergies between the clouds. So this is one popular deployment model for the hybrid cloud. So the next one is the replicate data sets. So you have your on-prem applications and then you have a storage. And then the storage can replicate the data sets, whether it's a LANs or files, back into the public cloud. So you have application data sets available in the public cloud in case you want them. This provides some kind of security and then maybe availability of your data sets. But this one also comes with certain disadvantages. For example, if you are replicating block storage. So essentially, each block is replicated to the public cloud. Now, how do you lay out your application knowledge on this set of LANs? So we don't know if those LANs are used by two VMs or 10 VMs. And then we don't even know whether those LANs are formatted with certain file system or certain applications on the LAN. So unless you have how those LANs are used on your on-prem, you can't make sense of what is being copied onto the public cloud. So now if you look at public cloud and private cloud, people did a lot of research on what makes sense and what doesn't make sense. But overall, I think your hybrid cloud implementation should have a way to utilize the utility model that public cloud offers. Abundant supply of compute and storage resources.  So your hybrid cloud strategy is not utilizing the utility model that the public cloud offer. Your hybrid cloud, you are limited by what you can achieve out of the hybrid cloud. Now, so the two hybrid models that I talked about. One is unified management layer. And the other one is some kind of gateway so where you can replicate your data sets into the public cloud. Those are well and good. But they almost looks like a greenfield opportunities. So if you are starting from clean slate and you are building an IT from ground up, well, these two models make perfect sense. But what about the existing IT? It's not like IT, it's been there for years. And then you have a lot of applications that are already running on enterprise IT. How do you basically deploy hybrid cloud strategy for your enterprises? So this is something that we'll explore in the next few slides. Now, when you look at the enterprises, we do a lot of things in IT on a daily basis. One is the functional requirements. Essentially, these are the business critical processes that need to be up and running all the time. If anyone goes down, that's not good for the business. So it could be your HR payroll or CRM system, email server. So all these are business intelligence or analytical systems that are up and running all the time. And then the next one is non-functional requirement that typically the IT users don't see them, but you still need to execute those things all the time. For example, you need to make sure that your applications are performing at the peak scale so that all the SLAs are met. And you need to implement some kind of BCDR. And then you need to ensure that the data security is preserved and the network security is preserved. And when you are deploying or even you are doing the tech refresh, you need to make sure that you are testing your application. So there are a lot of things that goes behind the scenes. Those are non-functional requirements. Now, let's look at what resources are needed for the functional requirements or some non-functional requirements and then see how we can map it to the hybrid cloud implementation. So when you look at the non-functional requirements, obviously these are dedicated resources. You got to have those applications up and running 24-7 and you probably need the best of the breed hardware resources available for running those things. These are business critical applications. So these are pretty much belongs to the on-prem if you are basically going with the hybrid cloud approach. But then when you look at non-functional requirements, these are not a critical path of the business, but you still need to have those things to have the IT. Those are important for the IT. And some of them are like network scanners. Maybe you need to run some virus scanners or the network security applications to make sure that you have the right security in place. It may be test out. And for these things, you don't need dedicated resources. And for these kind of requirements, you can definitely leverage the public cloud so that you can basically spin up the resource as you need it and then spin down. So you can use that utility model to make your IT more agile, but also most cost effective. So how do we basically dev up these things and then move some of the functionality that you perform on-prem in the IT to the public cloud? So one of the things that we needed is, obviously, access to the same data set between these two requirements, both functional and non-functional requirement. So for example, if you are moving the BCDRR test to the public cloud, so you need to have the right data set from the production application so that your test is effective. So what that means is they need to have access to the same data set that your production is running so that your test and dev can be more effective. So you need to have this layer where this data access flows between on-prem and all the clouds within the hybrid cloud. So I call out like, these are the four. How do you achieve that one? So I called out four key enablers for the hybrid cloud. So one of them is the platform agnostic. So we deploy lots of applications in our IT. But we don't capture these data sets in a way that is consumed across all the clouds. So if you are deploying a hybrid cloud, if you can't consume your data sets that you are deploying on one cloud, on a different cloud, that limits what you can do with the hybrid cloud. The other one is ability to mobile your data sets between the clouds. So on cloud one, you have the application. But you should be able to analyze and run some applications on the same data set on a different cloud. So you should be able to securely move these data sets between the clouds. The third one, orchestrate. So let's say you have an application that is running on-prem. And you capture the data sets in a platform independent way. Now you can access that data between these two or three clouds. But then at some point, you need to go and realize the data set on a different cloud. You need to re-orchestrate that application on a different set so that you basically get the most value out of your data set. And the fourth one is the single pane of glass. So whether you are building your hybrid cloud with one cloud or multiple clouds, you should not expose a lot of complexity to the end user. If you have the single pane of administration between the clouds is under. So these are the key enablers I would say is important for the effective implementation of the hybrid cloud. So let's dig down deep into each one of these attributes. One is the platform agnostic. So it's very, very important that any data we capture in one cloud should be able to consume in a different cloud. But getting a platform agnostic or platform independent way of capturing the data is not that trivial because the current IT uses lots of different platforms. So each capture looks a lot more different. And also when you look at how we basically build the IT over the period of time, there is not much separation between the application and then the platform. So we load our application server with a lot of filters and agents to realize the non-functional requirements. So it basically bloats our IT and then also makes our IT a lot more complex. So that is one of the reasons why it's very, very difficult to yank our applications in a platform independent way so that those applications can be mobile between the cloud. So one of the basic things that we need to do to leverage the hybrid cloud is stand days on a platform like obviously OpenStack. So that at least the on-prem can run a standard platform and all the applications that are running on this can be platform independent and provide the mobility between the clouds. And also, you need to have access to the same data between the clouds. So that means you need to capture your applications in its entirety and also capture them more often. So that all this data can be analyzed or used standard tools, maybe Linux tools or some standard off-the-shelf tools to implement various functionalities in various clouds by leveraging the underlying capabilities of the cloud. Now, the next one is the workload mobility. So according to Cisco study, 64% of the respondents say they need to have an automated way of moving the workloads between the clouds. So the second factor, the workload mobility is also important. So we talked about platform independence and then now we are talking about the workload mobility. So how do we achieve the workload mobility? How do you basically move the data between the clouds? So traditional storage like NFS cannot scale between the clouds. So the best way to move the workloads between the clouds is the cloud storage. For example, S3 is the most popular. And then other cloud storage can also be used to basically persist the application data but also able to access between the clouds within the hybrid cloud. And the third one, the third enabler is the orchestrate. So if you have some application that is built in one cloud and you already captured that in a platform independent way and you have a means to migrate the data to a different cloud, the third step is are you able to re-orchestrate that same application on a public cloud, on a different cloud? So I'm taking this typical application here. So it's like three VM deployment. It has various storage attached to that one. And then we have two or three networks connected to the VMs. And assuming that this is running on an open stack, and how do we re-orchestrate the same application on Amazon? Fortunately, between Amazon and open stack, the mapping of the resource drives that are available between the two clouds, they match very well. So it's pretty straightforward to take whatever is captured on an open stack. For example, if all the VM images and all the sender images are captured in a standard format like QCOW2, they can be converted into AMI images and rest of them can be mapped from open stack resource types to the AWS resource type and then recreate that application relatively easily. And the third one is, obviously, you need to have one administrative domain for managing all the clouds within your hybrid cloud. So if you have one tenant in your hybrid cloud and you log into your hybrid cloud, you should not feel that you need to log into all four different clouds. And the single pane of glass should hide all the details and provide you one simple interface for you to consume all the hybrid clouds. So we talked about four key enablers, right? It's a platform independent of capturing the data and then able to migrate the data between the clouds. And the third one is able to re-orchestrate any of this application set in any of the clouds of the hybrid cloud. And then the fourth one we talked about is the single pane of glass. So assuming that you got what I was trying to tell you correctly, so one trivia for you, what is the most important cloud in your hybrid cloud? Can anyone take that? So if you can get the hybrid cloud strategy right, my answer is none. Because at the end of the day, your business application is the most critical. If you capture the data in a way that is a platform independent, where you are running your application is completely irrelevant. You should be able to leverage any cloud that is there part of your hybrid cloud. So that is the journey that we need to achieve so that our hybrid cloud strategy can be more effective. Now let's take a look at what we do on a daily basis. Trilure data, we battle multiple clouds, even though multiple OpenStack clouds. To just give a quick blip of what we do, we offer data protection as a service for the OpenStack clouds. So just like any other service within the OpenStack, ours is an add-on service to your cloud. And we provide tenant level backups. And so what we do is we don't just capture your sender volume or the files. We capture your entire application. So if you are running a multi-sender volume application, we capture the entire application environment as one snapshot. And we persist across multiple stories like NFS, or Swift, or Safer, in the future, Amazon Web Services. So the reason why I'm saying is that makes our support matrix a lot more complex. We need to test with different sets of the OpenStack distributions and different releases of OpenStack distributions and then different target repositories that we need to do. So most of the time, these are the common questions that the customer get to ask. If you are deploying OpenStack, you don't really limit yourself to one OpenStack. You may be deploying OpenStack on Liberty that's running on production. Now you are planning to upgrade that to the Newton. So it's not like one fine day you go and upgrade your Liberty Newton. That's not it's going to work. Most of the time, you stand up a different cloud that is running the Newton. And then it goes through some testing. And then you want to take the workload that is running in the production and then recreate that on Newton and test the production and make sure that they are working up to the mark before you fail over to the new release. So this is the common theme we see with our customers. So these are the questions that comes because of that. So they have multiple clouds deployed. How do they migrate the workload from one cloud to a different cloud? Or they set up two clouds and they want to use it one cloud, a DR side for the other cloud. So how do they make sure that the workloads can be re-archestrated? So because the way we capture the workloads in an entirety, we can orchestrate these workloads between different versions of the OpenStack cloud. So our support matrix becomes very, very complex. And not only that, for every time we release, we need to test the migration scenarios between any two versions of the cloud. So it's quite common that we take a backup that was done in Kilo and then we should be able to restore to the Newton. So even though these are all same clouds, even though they basically have the same API set, but it is still a challenge taking the complete workload in one cloud and then restore it and make sure the workload is working all right. Because your resource type may be changed, right? So the Kilo version of the OpenStack that you are running may be running on LVM, and then the Newton may be running on CIF, or maybe the network configuration has changed, or maybe the regions has changed. So there are a lot of things that can change between two clouds. So whatever backups that are done on the Kilo, they should be able to run on Newton. So we do constantly test the migration scenario between various clouds. This can be only achieved basically, we adhere to that four principles, try to be a platform agnostic. So all the backups that we do need to be platform agnostic. So we should be able to take that and recreate that on any other OpenStack. And we should have a common way to migrate these data sets between the clouds, either through NFS, or through SWIFT, or the CIF, and then re-orchestrate.  So even though it's not the true private to public hybrid cloud scenario, but it is still nonetheless, it's a multi-cloud management. It basically takes the same challenges as implementing a complete hybrid cloud. Okay, so in summary, we quickly went through like what the hybrid cloud is and what the popular deployment models of the hybrid cloud are. You know, the challenges in the enterprise, I think to make it enterprises more agile. So we need to capture everything in a platform agnostic web. We need to be able to migrate the data sets between the public cloud and private cloud. We should be able to re-orchestrate this application. So these are the things we talked about it, to make it IT is more agile and leverage the hybrid cloud, all the good things about the hybrid cloud. So that's pretty much it. Like any questions made sense? Okay, so we'll be doing a quick demo tomorrow in the theater, essentially demonstrating how we capture the workloads in one cloud and migrate to the different cloud. Please welcome, please, we invite you to join there. Thank you.


Strict when you like I'm a I'm a real Eagle fan, but like oh D gunslinger escape artist Tom Brady. Let's go, baby Whoo, this is why they watch to defeat the cheese Who you got who you got quarterback hurts now either. It's my question. I'll show you my team right now boys I have a strict Eagles team team I don't have no card that didn't play for the Eagles significantly play for the Eagles, too I don't have any like dude that was just here and was asked for half a year Strict Allen you tell him strict strict No, Jack young blood no Allen fanica Zach earths Goddard Keith Jackson E Jack AJ although AJ Brown hasn't played yet, but you know during Davis is not good a man He's his player his player builders too big His player model is too big. Yeah, nomadie. I guess nomadie could be on the Eagles I don't know. Oh, I'm top 10. I'm top 10 top 10. Let's go boys. Let us see a top 10 player Strict is the best way to do it, man, but I feel you know what I feel like though easy money is like I Understand why people would be so mad that their team don't get any cards I'll be feeling it like then where the Packers at no new Packers No new Chargers cuz like if you got a strict team, that's the only cars that matter to you So if you don't get those cards, it's like it's kind of pointless It does make it. I don't want to say more fun, but it does make it a little more fun to play strict when you like I'm a I'm a real Eagle fan, but like OD Gunslinger escape artist Tom Brady. Let's go, baby. Whoo. This is why they watch to defeat the cheese Remind me. I'm switching jerseys at this game. I'm going back to the The yellow jerseys Or he's doing the gun tray. Okay, that's this won't be the tour This is gonna be the tour gun tray is the fake trips tight end. That's in What's the playbook with everything? What's the playbook with everything? Yeah, the gun tray is the fake. It's the fake what you call it Yes, sir. He's just got to run verticals. I mean, you don't really have another play that you want to run What other pretty even run here? No line abilities. Let's see Pick oh my gosh, where Russell Douglas was picking a one off. Do I switch my zone drops third in 23? Nah, nah I mean, bro. Why is nobody on this? like We just were verticals with a million streaks, dude Not see the playbooks are just isn't strict like the playbooks don't represent team like real teams It's just that's just not real dude the tour bro. The Oakland tour That's when you can't pass. They do all this auto-blown around to try to confuse you Escape artists just make so hard to guard Come on Dawkins, why would you run again? Like I just like I literally blew it up for a loss of two yards Then the next play you come back and run the same. Oh, you ran a different run.   Come on.  Like are you kidding me?   Oh, he's always one of these guys one of these glitchers Yo, these kids have no pride Good his stick bro, cuz this is cover three. I swear to God it is.  That was a fun blitz Never mind though with the new slide right block the tight end defense kid It's like this defense glitch like both sides like that the one the guy the D Lot the DN that doesn't have his hand on the ground like in a two-point stance like he glitches So you got to block your Titan on that side to have like a double team naturally on him But then the looping guy glitches too So you gotta have you got a slide to the looper then block your tight end for the glitcher It's like and you can do it so fast Gun split twins. Yeah, that's definitely what you want to run in it Come on stop running the ball. It's big boy football man. Come on.  What type of nasty tour is this? This is always be on this castle. Come on. Let's go Dave this big fella. No huddle Nice nice nice. Nice. They would it stay with a dubby stay with it Come on move back emotions emotions. I'm gonna man up the running back cuz I just I'm feeling I'm a guard this way. Let's go. Go get him. Please go get him This is just disgusting.   Don't worry. I got you W I got you. I got you. What's his name stick them up.  They're just They don't see the quarterback. I swear to God. It's the worst in the world, man Staying bounds bro. Like how many people do I have to rush at the quarterback here? Come on, man There's no way like there's literally no way. It's like dude That was just terrible that play was just absolute. We had contains and like six man rushing He didn't block a soul boys like he didn't block anybody What's up boys? Let me tell you about thrust masters. This is the controller I've been using for over a month now. I was having trouble with all my other ones You know, they're not the best made things so the people at thrust master partnered with me sent me out Their new controller to try it out and show you guys man. I used it for a month to see if I liked it I didn't want to tell you about anything. I didn't like I absolutely love it all the parts are great They actually make flight simulators and racing simulators for all the professional circuits of flight simulating and racing So they said let's take our technology and bring it to Xbox. They've made this controller You guys can click click the link below. Make sure you check it out over there It has buttons on the back, you know, most people have paddles.  You can take these out if you want blue ones red ones green ones You see I just got the all black with a little bit of red. That's more of my style. Whatever you want, man I have green ones orange You can do all that if you want to change the layout switch your d-pad and your thumb stick You can do that as well. All the buttons are super clean Love this controller, man You guys click the link below and check out the control that I'm using myself To put all these gameplays together and then we on sidekick. What else is new boys up by seven on sidekicking? Nice. That's my fault, dude It's just my fault man.  God, where would they be without escape artists, huh boys? Where would they be?   Nice love to see it right boys. Just love to see it Nice nice. I was listening to that white guy worried about how long it's been followed. How long have you been subbed, dude? What's up, please worried about how long it been followed. Come on, man. Let's grow up.   We got play safe You're on the point. I definitely would have went for that right here. Just so we're putting ever in this game Especially when DJ. Oh, I mean the fact that was a throat. That's where my doorway went It was a little crazy, huh? Let's go AJ. You almost smoked me But you should never punt in this game unless it's like a time situation. Definitely not in the third quarter I should just never punt. See now. I think he's in cover two though. So we'll see if he blitzes Bro, like what happened dude?  We're not escape artists, man Lunch meat get your feet in there. It's for the boys Come on, man, and we'll just get an instant shetted by three Eagle's offense align sucks, man. It really does sad Actually sad this extra point is gonna hurt me Balance for me game. Of course. I don't get any bounces Yep Lost a three. He's gonna run again. No watch The tackles third and long 14 carries for 32 yards. Let's say that's good run defense, huh? Pick good job. Good job. No huddle Boom, let's go, baby. Let's go Escape artist that dumb running through a million people man. Just running Just sad. I got it. I got a fall down on michael vick here on the run Good job We run the ball here just to take some time off the clock really feel well It's kind of a big deal here 31 yard line I'm gonna try to run a verts here. I'm gonna try to run verts for touchdown I know half I know 90% of my chat wanted that dude just to run me over right there.  I don't say I shouldn't even have that shovel gear blunt a shovel gear blunt in the game here Ah, dubby you got to run better than that. I feel like flood's gonna get us a free first down here I haven't run an all game I'm gonna slide left That we're gonna double team michael parson's over here. I think that's parson's right. Yep slide right xs's man covered I mean that was great. Good job game slide right worth great right there I'm looking at you the shanjax and I'm looking at you kid If I was up by three, I'd go for this if I was up by three, but I'm up by two I can't lose on feelable. I actually should have fell down that one play.  I panicked a little bit shorter. I got the wind in my back Please catch this kick. I want him at the 16 yard line not the 25 Uh a little bit too short Perfect, that's why I love that kickoff man.   I got a deep post I just want to get it He just rolled the wrong way, but I left the deep post Bro, can we get him bro? Like how fast because yo, I can't lie.  What's his name? Dude, how is he running through these dudes so perfectly? How no dude? He's navigating through. Do y'all see how he Is like put yo Bradbury you got to get off the field now I have never seen some that's my pick though. Thank you gg's I have never seen somebody run around to contain this like just this juke at this crazy I like he got it. He's the best escape artist. I got thank god. He has brady instead of derek hundry.


Thanks Yeah, look up on the distance. I'll rest my hand on your shoulder Red loosens You have to run up the hill. I know you got time beds on me. I think it's finicky with how In what order we turn things on The arm was doing the same thing so I'm gonna just flip it off