Hello. Good morning everyone. Thanks for joining our presentation. So my name is Lima Pandey and Vish and I will be talking about building cloud for WebScale IT. So I led, just a brief background about myself. I led product. Is it turned off? Can you up the volume on hers? I think he's got it. I think he's got it. Try now. There we go. Okay. So good morning everyone. Thanks for joining our presentation. My name is Lima Pandey and Vish and I will be talking about building enterprise cloud for WebScale IT. A brief background about myself. I led product management for software stack at Nebula and I have been working in open stack and infrastructure space for a number of years. I led product management at companies which is Yahoo Oracle EMC and Vish needs no introduction. He is the first person to start coding on the open stack and Vish, why don't you? So for those of you who missed my talk on Monday or who have never seen me before I was one of the original authors of Nova and at NASA I helped create the project and I was the technical lead for the first couple of years of Nova and I've been on the technical committee and the board directors of open stack. So a lot of background work for many companies actually deploying this stuff and finding out what works and what does it. And we want to say that Nebula was a pioneer in the open stack space and we are extremely proud to be a part of that journey. So today we are going to talk about building the enterprise cloud for WebScale and at the end of the talk we will try to show you a little demo about what are the different components of enterprise WebScale IT and show you demo. In the last decade or so we have seen a trend towards cloud computing and applications being delivered as a service. This trend is driving a new class of computing called WebScale IT. So this term WebScale signifies massive scale of software infrastructure, data repository and hardware platform. So in this new era the program or service is composed of ten or more small programs which interact to implement a complex end user service such as email or Salesforce, CRM, maps, etc. These programs are implemented and maintained by different teams across different geographic locations or these programs could be open source components. So to run these kinds of massive applications we need a computing platform that can support these massive workloads and this is the goal of computing in the today's modern data center. The computing infrastructure should be able to run applications and workloads and the infrastructure should provide scalability, high availability and fault tolerance. The next important thing is the applications must run efficiently. That means that the applications meet their service level performance and availability. The computing infrastructure must be cost efficient too. Modern computing infrastructure should help organizations generate higher revenue at a lower cost. And today WebScale IT is not just, you know, it should help the corporations generate higher revenue while operating at a lower cost. So one thing I would like to call out is that WebScale IT is not just for the Google's and Facebook's of the world. This kind of computing is equally important for a broad range of corporations and research institutions. So the attractive economics of commodity service puts clusters of hundreds of nodes in the reach of many corporations. Combine this with a large number of cores per socket and a single rack of server can have thousands of threads which is almost like a small data center. And this unprecedented amount of compute power requires that we design our data center in IT with this WebScale infrastructure in mind. So let's there are different kinds of atoms of computations when the applications can be run. We are very familiar with running applications on physical servers. In the last several years, VM has gotten a lot of popularity and a lot of data centers have deployed VMs in their data centers. The next compute, atom of compute, is containers. And so we will be talking about containers. How does it fit into the entire data center? So container is an abstraction of the operating systems and multiple containers can run on one operating systems. So each of these different kinds of compute have its own trade-offs. You can have agility, performance, and security. And we will talk about some of those trade-offs in our next during this talk. So let's look at virtual machines and containers side by side. Most of you, I'm assuming, have seen this kind of abstraction. So each virtual machine runs a copy of the entire guest operating system. Each image must contain the base image and then you download all the libraries and packages needed for the application. The hypervisor provides an abstraction of the hardware and the guest operating systems runs within the VM. In contrast, containers are isolated spaces, instances, which is made possible by the operating system virtualization. So containers are OS abstractions. They run directly on the operating systems and many containers can run on the same OS. So they share the OS underneath. They can be much more efficient because you are eliminating one layer that's the hypervisor and do not have the baggage of running the entire OS in a container. So with the virtual machine, when a package is updated, the entire image needs to be rebuilt and application has to be restarted. In a containerized approach, application components are partitioned into separate containers. Updating a package or component just requires one container to be updated. Containers can be started in a fraction of seconds as opposed to minutes, maybe for VMs. This makes possible for containerized systems to rapidly respond to failures or changes in the workload. So containers, let's compare and contrast, compare containers and VMs across a couple of different dimensions. As we talked about, containers add a new level of agility to the software development. Docker-based applications run exactly the same as on your laptop as in the production environment. And Docker or container runtime, for that matter, encapsulates the entire state around an application. And you do not need to worry about the missing dependencies or bugs due to differences in the underlying OS version. So in terms of managing the life cycle of the applications, we have given containers a real green and virtual machines as a red. In terms of performance, containers eliminate an additional hypervisor overload. So performance-wise, containers are close to the bare metal performance. So containers decouple applications from the host OS and abstracts it and makes it portable across any system that supports, say, Lexi. Users can have a clean and minimal base Linux OS and run everything in a container. But there is another aspect of portability that we have to keep in mind when looking at the containers. The base OS and the containers are all run on Linux. So in the case of the VM, different guest OS can run on the hypervisor, which will not be the case in the containers. So we have given this portability, you know, sort of, it's very portable if you run your applications, but if you want to run a different guest OS and the host OS is different, you cannot have that kind of portability. However, the most important distinction is about the security. VMs offer stronger security and isolation guarantee than containers. And they'll spend, you know, at least some time talking about the container security. So as I mentioned, you know, containers have isolation based on namespaces and C-groups. However, they could be vulnerable to users or applications with root privilege. Applications in one container can potentially access data in a neighboring container on the same host. So this is an active area. There's a lot of research going on right now in the container community of how to make the containers secure. So far, you know, the Googles of the world who have been deploying containers for a long time, the strong recommendation is, you know, put containers in the VMs and then run it so that, you know, you do not have to worry about security from two different customers' containers running on the same physical host. Other thing is run containers on a separate security domains on different hosts. If you have two containers, you're running on bare metal, make sure you're running on two different hosts. So let's look at, you know, we talked about containers and VMs. What are we trying to build? So going back to our previous, you know, that we are the data centers is about building IT infrastructure, web scale IT infrastructure. So we will be looking at the building blocks for the distributed systems. You know, what, how do we build a distributed systems? Because these are massive scale. They need, we need to support scalability, availability and false tolerance. So these are the common building blocks and we'll be talking about some of the components, how it applies the containers, you know, which has been prevalent in the VM world too. So operating systems, containers, networking, orchestration and management, storage, all the different building blocks that we have seen in the VM world will now need to have an analogous solution in the container world. I want to say that there are a number of vendors and open source projects being worked on in the container ecosystem. Some of them I wanted to call out, you know, CoroS, Rocket, Kubernetes, Google Container Engine. This is a cool logo for the Amazon container service. Dockers, you know the dockers. So it's, there are a number of vendors right now working actively in this space. Okay. And so CoroS, you know, Vish, do you want to talk about CoroS? So how many people have heard of CoroS Linux before? Oh, wow. Okay, never mind. I'll skip this slide. So there are a number of efforts that are really built around making a very lean and mean OS just for running containers. Red Hat has Atomic. One group that has started up to actually create a Linux OS from scratch built off of some of the Chrome isolation pieces that are used in Chromebooks is CoroS. And they have a few very nice features that allow you to run a containerized OS very easily. And particularly when using it on top of OpenStack, they have really good integration with something called CloudInit, which essentially lets you put a bunch of packages in as you're launching the VM so you can create all of the pieces that you need quite easily. But one of the big selling points that they have is they have this automatic update feature. So they have two different root drives and essentially in the background, if you're subscribed to the update, it will download the new version of the OS and then it will trigger a reboot in the similar way to the way that your phone updates or the way that a Chromebook would update, which allows you to keep up to date with kernel patches much more quickly. This is important because as Lima mentioned, there are security vulnerabilities when you're dealing with a container. The problem with running stuff inside of a container is that you're exposing the entire Linux kernel to that container in most cases, in which case if there's a kernel vulnerability, then you run the risk of someone breaking out of the container and compromising the host OS. The interesting thing about that though is that there's a couple different ways to think about security. One way to think about security is that you want to make sure that new exploits don't compromise your container and compromise your thing. So if there's a zero day, for example, someone figures out a Linux kernel vulnerability, they're going to be able to break into your container. So you can counteract that by running inside of VM so you don't expose a Linux kernel or you can counteract that by having a system that updates very quickly so new vulnerabilities are discovered and patched as quickly as they come out. And sometimes it's actually the older vulnerabilities that cost you a lot more than the newer ones. So keeping your stuff up to date actually in many cases from a security perspective becomes much more important than not exposing the kernel. So this is a great way to mitigate some of those security concerns of running things inside containers because you have the ability to keep your OS up to date very quickly. The next thing, did you want to start this? So one of the main things that Corwell's released is this service called EtsyD. How many people in here have tried using ZooKeeper before? Okay, cool. So the idea when you're running a distributed system you generally want some sort of source of truth for that system. In the old days people would just throw everything in a database. Databases themselves aren't necessarily super good at being distributed. The idea of modern web-scale services is you want to keep things highly available all the time. One of the best solutions for that is this algorithm called Paxos, which is what ZooKeeper is based on. And it's a great algorithm for keeping a highly available distributed system. Unfortunately there are about five people in the world that actually understand how Paxos works. Which means if you've tried writing something like ZooKeeper, even using ZooKeeper, you've run into a lot of issues with how to configure it, how to get it running. EtsyD is a much simpler algorithm. It's actually based on something called Raft. And the author of Raft created the algorithm for a distributed consensus because he wrote his PhD on it because he discovered that Paxos was really hard to understand and therefore hard to implement. So EtsyD uses the Raft algorithm and it's essentially a replacement for ZooKeeper. You can think of it like that. Most of the distributed systems that are being built today, including the ones we'll talk about, Kubernetes, are built on some sort of distributed consensus. So they need something like this running in the background. So essentially you have a cluster of machines, generally three or five machines, running this distributed consensus algorithm so that if one of them fails, you can still get to the source of truth for data. Now, let's talk about container networking.  Each container is assigned an IP address that can be used to communicate with other containers within the same host. So for communicating over a network, containers are tied to the IP address of the host machines and must rely on port mapping to reach the desired container. So there are a lot of solutions running inside the containers to advertise that external IP and port as the information is not available to them. And this kind of, and then Docker has solutions with this port mapping and natting and all those things which is very complex. So there is a different solution, you know, Flannel, which is, we think that it's a better solution for container networking. And so Flannel solves the problem by giving each container an IP that can accommodate container communications. So it uses packet encapsulations to create a virtual overlay network that spans the whole cluster. So basically you can think about that Flannel gives each host an IP subnet and that allocates IP to each of the containers, which the Docker daemon is then able to allocate IPs to the individual containers. So I think this is Flannel, we believe that is a much better solutions for container networking. Flannel, that brings us to the whole distributed systems, you know, the concept that we talked about, the Kubernetes, which is an open source project by Google. And this is a system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance and scaling of applications. Some of the important features of Kubernetes is like, it provides self-healing mechanisms such as, you know, auto restarting, rescheduling and replication containers. And it supports a robust declarative primitive so that, you know, for maintaining the desired state of the user. So you don't have to say, give me three containers, but you can just specify what you want and Kubernetes will take care of that. So Kubernetes is primarily targeted at applications composed of multiple containers. And these applications are elastic distributed microservices. So Kubernetes can ask users to ask a cluster to run a set of containers. The system automatically chooses hosts to run these containers on. And Kubernetes scheduler is currently very simple. It is policy rich, topology aware and workload specific function that significantly impacts the availability, performance and capacity. The scheduler needs to take into account any individual and collective resource requirements, quality of service requirements, hardware software policy constraints, affinity and anti affinity specifications, data locality and other constraints that you need to specify to the scheduler. So workload specific requirements will be exposed through the API as, you know, needed. So there are different components. So I think maybe since you have been working on the demo, it will be fun to walk through some of the components. Yes, so funnily enough Kubernetes just recently renamed one of their major components from Minions to Nodes. So just confuse everyone. So essentially there's the Kubernetes master and API server. There's the scheduler. There are Kubernetes nodes, which is where the workloads run. And then there's the things that run on top of those nodes, which are comprised of pods, replication controllers and services. So the replication controller, there's also on the master node, there's in addition to a schedule, there's something that manages the replication controllers. So essentially what you do when you're defining the what you want to run is you say, okay, here is a pod is a very simple definition of a particular container. So you can think of it as, here's a container that I want to run. And you can go directly to Kubernetes and say run this pod for me over there. That's not incredibly useful because you could just do that by going into the machine and doing a Docker run or something along those lines. So what's a little bit more useful is defining a pod. Now a pod is a group of related containers that share the same name space. And you might wonder about why one would do that. Well, it turns out Google has a lot of experience in this space and they wrote something a while ago called Borg. And Borg is what they use to deploy all of their internal Google services onto their fleet of machines. And Kubernetes you can think of as sort of a rewrite of Borg with a bunch of lessons learned. One of the things that they discovered is while you want to isolate code into a particular package, like a container, there often are things that need to run together but aren't necessarily deployed together and so you need them to share the same name space. The classic example of this is you could have a database service running and then you could have a backup service running that needs to access that database. Now you might want to deploy the backup service separately from the main database service so you want it in its own isolated container so you can redeploy it separately but you need them to share the same data or share the same network name space, etc. So a pod is a way to define a group of containers that run together. In addition to that, rather than thinking about one copy of something that you run somewhere, you generally want to have the idea of I'd like to run three of these. The one thing that Kubernetes does particularly well is it allows you to go in and say I would like three of these running and you decide where they're going to be and if one of them fails restart it somewhere else and make all the connections between them work. When I show you the diagram of the Kubernetes components that might make a little bit more sense but you do that via what's called a replication controller and the replication controller is essentially run X copies of this pod and a replication controller also allows you to scale up and down the number of copies of that pod you want to run so you could say give me three of them and later you say I'd like to scale up to ten and it will automatically create enough pods to reach ten. If any one of them fails it will restart that one that failed on another node respecting all the constraints that you have at affinity or versus anti-affinity etc. So the diagram of the Kubernetes architecture looks something like this. So essentially the master node or nodes are responsible for distributing workloads across the group of minions and there's another piece which is quite interesting. There's an overlay load balancer internally and this is where services come in. So after you create a group of replication controllers you then create a service that says these replication controllers embody say my front end service or my web service or my back end service and any of the nodes, minions in the system know how to route to the actual containers that are running on the overlay network. So when something says I need to go talk to the back end service maybe three copies running somewhere in the cloud the load balancer will automatically direct that traffic to where the correct back end component is to respond to that. If one of them dies and it gets launched somewhere else then it will again know how to route. And in this case the service always has a standard set of IPs that can be talked to which will automatically be routed on the back end to the right component. So that kind of feature becomes really, really useful when you're running a whole bunch of copies of things. It means you don't, for internal communications it means you don't have to know where everything is and have a discovery mechanism that can associate things together. There are some limitations to this which I'll get to when we talk about some of the drawbacks of the current state of Kubernetes and the container ecosystem. Should we take this time to show Kubernetes demo? Sure we can do that now. So it might help you understand a little bit if I show you kind of how you would get something like this running on OpenStack. This is not going to be in great detail because we don't have a lot of time. There is one piece that's missing currently from how Kubernetes works if you're not running it on Google Cloud Engine. And the piece that's missing is the load balancer works internally. You can run a service called SkyDNS which so you can run a service called SkyDNS and there's a piece in Kubernetes that's an add-on that's called KubeKube2 SkyDNS which actually will essentially watch the Kubernetes API server for updates and when it gets one it will automatically create a service record in SkyDNS for you. Now SkyDNS is pretty interesting in that it does in addition to just doing naming it will also do service records. Now you may not know what a server record in DNS is. It's actually been around for quite a while but not a lot of things use it. The really interesting thing about a server record in SkyDNS or SRV record is in addition to telling you what IP the service is on it also gives you a report. So it actually works really well for things like service discovery. So in this model SkyDNS allows you to instead of just knowing the IP of the thing that you need to talk to you can actually talk internally to different things by using their DNS name. The one piece that's missing in the load balancer and DNS services that are integrated in is talking to the services inside the Kubernetes cluster from outside. So it's quite interesting but on Google Cloud Engine you have this great feature they have a load balancer built in that you can use and they have external DNS load balancer. They expect you to kind of manage that outside. The problem is if you're running on open stack or if you're running internally you don't necessarily have access to those things. So there's sort of a bit of a hack in Kubernetes right now. It's these things called external IPs or public IPs. So if you look at my record here of this service definition which is just a YAML file. I don't know if you can read it. But there's a section there called public IPs. What public IPs does, so remember how I said there was a routing layer internal to Kubernetes? If you try and hit one of the IPs that's the internal assigned overlay IP by Flannel then it will automatically send the traffic to the right node. That doesn't work if you're hitting the external IP of the node. So for example what I have here is I have an install of open stack. You can see that there's three Kubernetes controllers. I ran a three controller environment so there's three at CD servers and they're also one of them is running the Kubernetes master components and the other two are just at CD slaves to make sure that I have a running cluster. So these IP addresses which are the IP addresses of the virtual machines that are running. If I hit one of those IP addresses or conversely if I hit one of the IP addresses of the Minions once those are there, I won't actually get routed to the internal services running in the container. So it's not incredibly useful. I can talk to services internally but I can't talk to them outside. Without a load balancer there's no way to communicate that if it gets traffic on this IP in this port that it should route it into the internal container service. So there's this addition called public IPs. Now public IP says if I get traffic on this IP address in the service record then actually forward it in the same ways if it was an internal IP. So essentially what I've done is I made a little patch to Kubernetes that will allow this Sky DNS service to also create DNS records for external IPs. So in addition to being able to route traffic inside via Sky DNS or via the load balancer you can also get a name from the outside which actually ends up being a neat little way to do it. Unfortunately Kubernetes is rewriting all of these components and fixing the public IP thing so I propose it upstream. They're like well we're rewriting that we'll accept it later which is another thing I'll get to in the drawback section. But I wanted to show you it working just so you can have something. This is the definition of a service record that I showed you here, Sky DNS service. So it's pretty simple. You basically say here's the port, here's the protocol, putting it in a certain name space which in this case is the default name space and you give it a name. Now when you create a service you'll notice these things at the bottom label and selector. So the way that it knows where to route the stuff is basically your replication controllers and pods have labels on them and these labels allow you to group the pods and your service identifies some labels saying anything with this label route traffic to one of those things. So if I have something, a label internally for in this case called the Sky DNS controller then it will route traffic to the Sky DNS controller if it comes in on this IP address. In this particular case I'm doing something quite simple which is essentially just adding the Sky DNS service to be discoverable from the outside. So basically I just say create the Sky DNS service via CUBE control and what's going to happen assuming my demo hasn't broken sitting on my laptop while it was closed is that outside of the VM that's actually of all things running DevStack in a Ubuntu VM on my local Mac because I don't trust networks for demos. So what I should be able to do is ask for a serve record and of course I've lost my resolve comp because I changed networks. So I used this Sky DNS name server 192.168. So what you can see is that it's created serve records for Kubernetes automatically so I can look up Kubernetes to find out where it is and see that it's on port 443 and 80. Unfortunately created at that time. So what will happen now that I've created that new service record is the DNS entry. So Sky DNS is actually quite interesting. It basically uses SCD as a backing for a DNS server and so all that it's doing is there's a little service that's connecting to the Kubernetes API every minute or so looking to see if anything's been created and as soon as it's created actually a little more complicated than it registers for a watching gets notified but as soon as something gets created and it notices it then it goes to SCD and it writes a serve record into SCD and hopefully now you'll see that the SCI DNS records have showed up and the very interesting thing about it is that it supports wild card searches which is something not a lot of DNS servers do. So if you create multiple SCI DNS records so like say I had three different public IPs in the SCI DNS record that I just created I would have zero dot SCI DNS and one and two and three and if I just do a look up on SCI DNS dot nova local what's going to happen is it'll give me a round robin to all three of the services so you actually get a little bit of automatic round robinning in addition to your sort of automatic naming. So this kind of thing is a really useful way to sort of bridge the gap between the outside the rest of the enterprise and the Kubernetes cluster which I think is a really important thing that is still sort of being developed in these ecosystems because you're not going to have everything running inside of your cluster initially. As soon as the enterprise gets involved they have a bunch of stuff sitting there so you've got your existing IT infrastructure and you bridge the gap between the two and this means being able to deal with external load balancers and external DNS servers etc and these are some of the things that Kubernetes is still being worked on. In terms of what it takes to actually use Kubernetes itself it's actually quite simple I mean you basically are defining YAML documents if you look in some of the examples in the Kubernetes source code don't be afraid because it's actually quite easy you just say define the pod which is going to have your you give it a name you give it the docker container you want it to run and it'll just download the docker container and run it for you so you get sort of the same ease of use as you get from running on a single system but it allows you to have this distributed control. We'll come back to some of the drawbacks so some of the problems and why this hasn't despite the incredible hype that it has so far it hasn't totally taken over the world yet so let's go back to the slides hopefully that just gave you a little taste there's all sorts of great demos in the Kubernetes repo itself that you can look at. Limitations? Let's go back to limitations first. So there are a bunch of issues that need to be dealt with the first of all the first issue is that Kubernetes itself needs to be made highly available and there's a couple of ways to think about it first of all there's the XCD cluster right so if you have three or five XCD nodes running and one of them dies that's fine at first but if there's three in one dies you've got two left if another one dies your whole cluster is unavailable so there needs to be some way to recover a busted XCD node when that happens it's even worse with Kubernetes because you have essentially a single replication controller master replication master and that needs to be started somewhere else if it dies so you actually need something to sort of monitor Kubernetes now you can have it be a person you can set up the Kubernetes master and use DRBD and use some of the old sort of high availability techniques but in this case if you're running it this is one advantage of running this stuff inside of virtual machines that makes that restart process automated so you could for example have a heat template that's going to manage it for you you could use the project that comes out of Cloud Foundry which is called Bosch which is actually quite good at managing restarting VMs when they fail reconnecting data and kind of keeping the thing running so you sort of once you've got the Kubernetes cluster up and running it manages the underlying stuff another big drawback of Kubernetes and running things in containers right now is this overlay network and the TCP load balancing that they do tends to hinder network performance so high performance network stuff in this model doesn't really work today it's sort of trading off high availability ease of use for some of the low level performance and the funny thing is a lot of people are going to containers because they're concerned about network performance and then they find out oh okay well there's a drawback here we'll get into some numbers here in a bit on that the other thing is that it's great running stateless services on Kubernetes is super easy like if you have a web service with no state it's like super easy to deploy you can restart you can scale it up scale it down it's awesome the problem is stateful services are not so easy and there's a number of reasons for that but one of the biggest ones is that the volume story is not fully stretched out so once again if you're on Google Compute Engine they have external persistent volumes that you can use and you can back some of your data there and then reattach it to somewhere else when you need it there's no sort of built in volume provisioning service on top of something like OpenStack you can use Cinder and you can mount that into your container and then put your data drives there that's one option but it's definitely something that hasn't really been fully considered as I mentioned before having an external load balancer and external DNS server is not really part of the project at the moment so that's kind of problems that you have to solve on your own the other thing is operational management of these pieces like how do you monitor Kubernetes when it's up how do you figure out when you need to restart things some of the things I mentioned about using heat or along those lines is not really fully fleshed out the other big problem is it's changing really fast so Kubernetes has it's like the early days of OpenStack the velocity with which things are moving is so fast that the demo that I was just showing you for example I did it a month ago initially I had to rewrite the whole thing just in the last month okay so there's this constant pressure to pull in the new changes because there's stuff missing but each new change means that your deployment has to change slightly and this is true of all the layers so at CD is changing Kubernetes is changing so it's very hard to find a stable base that's going to work over a long period of time and that's I think the biggest problem my view on this stuff is it's great for experimental things it's great to look at as an initial for a long-term plan but I don't think there's going to be a lot of production stuff running on this for another year or more because there is so much change happening


Doing Business with the Navy The purpose of this training is to familiarize you with the core priorities of the Department of the Navy Office of Small Business Programs, familiarize you with the naval commands that support small business contracting, and equip you with the information necessary to properly conduct business with these entities. The Navy's Office of Small Business Program promotes acquisition opportunities where small business can best support the needs of our sailors and marines. Through policy, advocacy, and training we foster industry innovation, technology development, and the acquisition of quality products, services, and solutions from small business providers. The Naval Commands There are 10 major naval commands that support small business contracting. Acquaint yourself with the type of products or services they provide to the naval warfighter and see if they align with the products or services that your company provides. Marine Corps Systems Command Naval Air Systems Command Naval Sea Systems Command Office of Naval Research Strategic Systems Program Headquarter U.S. Marine Corps installations and logistics Space and Naval Warfare Systems Command Naval Supply Systems Command Naval Facilities Engineering Command and Military Sealift Command. The Department of Navy Office of Small Business Programs is a dynamic advocacy that provides training, advice, guidance, and innovative strategies ensuring quality solutions for Navy and Marine Corps acquisition teams to maximize opportunities for small businesses. Please read the eligibility requirements of each small business socioeconomic category as defined by the Small Business Administration to see if your company qualifies. Small Business, Small Disadvantaged Business, Women Owned, Service Disabled Veteran Owned Small Business, and Historically Underutilized Business Zone Small Business. There are three supplemental programs that are supported by the Navy which provide additional opportunities to small businesses to do business with the government. Read the following programs to see if your small business may benefit from their offerings. Mentor Protégé Program, Small Business Innovation Research, Small Business Technology Transfer, and Indian Incentive Program. How can you do business with the Navy? Step one, identify your products and services. You must identify the product, service, or both that you would like to sell and provide to the Navy. The federal government tracks services performed and products sold by assigning codes to specific industries, subset industries, and products. Small Business Contract performance is tracked using these codes. You can research the industry and codes that best represent your business below. Federal Supply Classification Code, and North American Industry Classification System Code. Step two, register your company. It is both necessary and important that you register your company with all of the following systems prior to being able to engage in any contracting activity with any federal or civilian agencies. Obtain data universal numbering system DUNS number. Register in the system for award management SAM. Obtain a commercial and government entity CAGE code. A CAGE code is assigned to you four to five days after your SAM registration is complete.  In order to fully understand the federal prime contracting and subcontracting contracting environment, you must be aware of the policies and procedures surrounding such activities, especially as they pertain to small business contracting. Please read the following manuals to help you better understand federal contracting procedures. Federal Acquisition Regulations Part 19 describes small business contracting and subcontracting. Defense Federal Acquisition Regulations Supplement Part 219.000-219.71 describes the supplemental information to the FAR regarding small business contracting and subcontracting. Navy Marine Corps Acquisition Regulations Supplement. The supplement to the DFARS, however, pertains to how regulations affect the Navy and Marine Corps and doing business with DOD, a guide on how to market your company to DOD and the basics of contracting and subcontracting to DOD. Step four, identify the Navy Marine Corps Command contracting functions of which to do business. The Department of the Navy contracting functions are decentralized. Each Navy Marine Corps major contracting function purchases supplies and services that support its own mission. Each contracting activity has an appointed small business professional that can assist and guide you through this process. Contact the small business professional on-site. The contact information is located on the Command Office of Small Business Programs' websites. Step five, identify current and future prime contracting and subcontracting opportunities. Maintaining business opportunity workflow is crucial to the success of your business. To assist in your search for more opportunities, there are several helpful websites that keep track of past, current and future federal and civilian contracting opportunities. They also provide contact information of major prime contractors who are seeking small business teammates. Utilize the websites below to help you research opportunities that you can provide the most support and or provide the best products. Step six, additional sources to assist you with growing your business. Learning as much as you can about the Navy, federal and civilian contracting environment will only prove beneficial when trying to compete for opportunities. Below are some additional resources that may assist you in understanding and operating within that environment. Some of the assistance provided includes training and counseling on marketing strategies as well as assistance on finances and contracting. Congratulations, you have completed this module. Good luck and market your firm well. We look forward to doing business with you. For additional information and resources, please refer to this module's pocket guide.


hey it's been a sec i don't even know how to start this video but i'm back from break in a new place too i had a long and wonderful one month off of youtube and streaming and everything and it was so insanely needed more than i even thought it was like once i got into it i was like oh oh i i needed but i'm back now this is the very first video back i'm in a new place um and i'm really really excited for the future and to start making stuff again and there's kind of a few things that i want to talk about and address so my break went really really really well um it was so good to just step away and have some space from everything and not have the the stress of youtube and streaming and the internet uh beyond my shoulders all the time because even if videos aren't going up there's still the stress and there's still stuff going on but i took a full month off of doing pretty much anything related to youtube like i didn't stream at all i wasn't on social media all that much way way way less than i usually am i talked to my manager and i was like hey anything that that happened to the next month just see if you can push it because i'm trying to take this the whole month off okay also apologies for the sound in here it's probably gonna sound a little bit weird i haven't gotten this room acoustically treated um i've ordered everything but it's probably not going to be here for a few weeks so just be patient sorry about the shitty audio for a sec but it was really really great i got time to just be by myself and do a lot of thinking i went to a lot of therapy over zoom of course i didn't go in person because that would be irresponsible i hung out with spencer a lot um and i also moved which was cool and oddly really really nice to have something else to focus on while i was doing nothing instead of just doing nothing because if i don't have something else to do and be productive with then i kind of just feel like shit it was nice to preoccupy myself with something else that i could do um but taking a step back was really really important for me um because i haven't taken a real break like i said in the last video in a really long time since like 2018 so i was definitely overdue and something that i realized while i was on break is that taking breaks like that maybe not a whole month but like a week maybe two weeks i need to do more like i just i want to make sure that going forward i don't burn myself out again and that i actually you know take time off um like a like a normal person would you know how people take breaks and vacations for normal jobs that should probably be a thing that i do um and not just work all the time and so i sort of want to make that a new standard of mine of just taking time for myself and uh i talked a lot about this in therapy of also just working a lot smarter and not necessarily harder because most of the time uh i would just kind of every day was kind of a slog you know i'd get what i needed to get done most of the time but it would take all day when in reality i could normally get that stuff done in just a few hours if i managed my time well and i could give myself weekends off if i wanted to um and like days off during during during a week long schedule i could take days off i don't just have to work every single day so that was a really good thing to learn i just did a lot of like introspection again i talked to my therapist a lot about my youtube stuff but also just stuff in my normal life um and we we got a lot of good stuff done which is good and it's really really really important to focus on on your mental health and your mental health but it was great i just kind of chilled for a second and i took a breather and i i wasn't stressed and i just had days where i had days where i was i was working on stuff not youtube stuff but just like getting things done and being productive and then i had days where i just didn't do anything and i just relaxed and it was awesome it was really really really great and so needed and so overdue but now i'm back i'm feeling really refreshed i'm so excited to make stuff again i'm so excited to stream again um and there's a lot in the future that's coming that i can't wait about and one of those things i'm going to tell you about right now so as a lot of you guys know i went on tour in like 2017 through 2018 uh on the you're welcome tour um and i just fell in love with touring and being on stage and doing shows and it's always been something that i've wanted to do for myself um and on my own channel so right now if you go in the link down below there is a link that you can click on and buy tickets for a show obviously sort of tentative date depending on what happens with covid but hopefully things will be safe enough then but um you know i was talking to my people and you know we talked about how i've wanted to do a show and i've wanted to pursue bigger things but i always get afraid of doing them because i i have like this fear of commitment because i don't want to make something shitty and i don't want to disappoint people and so we were like okay let's just book a show and you have x amount of time between now and when the show is which is november 21st 2021 what's the year 2021 yep and between now and then you got to figure out a show so being very open with you right now we have booked a venue in chicago um we have a date it's already i don't have a show yet so that's something that i'm going to be working on over the next however many months um because i want to make a really great show and i want to make something that you guys can be proud of but also something that i'm proud of and proud to give to you and so keep in touch for the next however many months is between now and when the show happens because i'll give you some regular updates i'm not going to leak anything about the show really but check the website regularly because new stuff will be coming out because right now there's nothing on it because we don't have a show we just have a venue that we booked out for a show i'm so excited and i'm absolutely terrified but i'm really excited to take this leap and and finally do this thing again no idea what the show is going to be but i hope it will be good but right now the website is i have to do this not show i i have a rough idea sort of a little bit of what i want the show to be but the main thing for the name was i wanted to name it something that was one intriguing but also to hold myself accountable so if uh in this show is going to be sort of a tester show so to see if the show works to see if you guys like it and enough if enough people do like it then we can do a tour and the tour will be called i have to do this tour i can't wait i'm really really really excited and i can't wait to my mic fell over i can't wait to make something and be in that environment again because being up on stage and performing in front of a crowd is really really special and i'm craving it baby i'm craving it so go down in the link below click on it if you are around or can get to the chicago area november 21st 2021 i'm doing a show so go there right now get tickets fuck uh the other thing real quick is we during my break launched a sick merch drop and there's who these sweaters that are out now because we couldn't couldn't drop them uh during the actual valentine's day thing that we did because they weren't ready yet but um yeah you can go to the current camp place dot com and grab those i'm really really proud of the drop that we did it's so damn cool but the designers did such a fantastic job um and i'm really really pumped and i'm excited to pursue that avenue a little bit more uh and make some really cool stuff for people to wear um over the next year or so because it's it's just really fun and it's cool working with that design team and figuring out cool stuff and um i'm trying to make soft boy more of its own line um so very exciting but yeah that's kind of it i'm back i'm making stuff again uh i'm gonna be streaming tonight when this video is posted at 5 p.m pacific time over on twitch so be there for the the welcome back stream thank you guys so much again for letting me take time off like this and letting me have a breath and take some time away because it's really really important and a lot of audiences aren't as forgiving as you guys and aren't as patient as you guys uh and don't really let people do that so i really really appreciate it um i hope that you guys had good time away from me i know i can be overwhelming and maybe you guys just needed a break from me too but i'm ready to come back uh stronger than ever and and making more stuff and just being happier and having more fun and doing cool shit and doing this show i'm so excited i'm so afraid please buy tickets i don't know what the show is gonna be i hope it's gonna be good i think it will be i'm gonna work really hard because i want to make a show that you guys can enjoy and then i can be proud of so come along for the ride maybe again check the website regularly because there will be updates so yeah cool well see you guys later i'm back


So, if you have gone through your problem sheet that we have given shared with you on inner products there is there are a few questions on this idea of so called adjoints and self adjoints. So, I would like to just revisit that a bit because we have not discussed that at all in this class where do they originate from. So, you know we have vector spaces that are also inner product spaces right and the moment we have an inner product like this what do we say we pick up an object right v 1 and an object in it is the same vector space right. So, this is let us say the inner product in the vector space v and this maps to an object in the field of course, the field is either r or c. Now, suppose without loss of generality you have this linear transformation phi which is a mapping from one inner product space v to another inner product space w. So, this is an inner product space this is another inner product space right.  So, now this belongs to w if you take its inner product with some w. So, this is then the inner product that is defined in the vector space w yeah. So, if you can find another if phi star is such that it is a mapping from w to v such that this is true what is. So, here is what is happening here notice phi v yeah. So, phi v is after v has been acted on by phi it is taken it to w and then you are taking its inner product with some arbitrary w in w right and you get something in the field which could be r or c. Now, I am saying that if instead you had allowed this transformation phi star to act on the chosen arbitrary w. So, that the inner product of v with phi star acting on w where is this dwelling now this is the inner product defined in the vector space v yeah for all w in w right. Then phi star is the adjoint of phi. So, here is the idea you have the inner product in v you have the inner product in w both are inner product spaces and you have a transformation that takes you from one inner product space to the other. So, what you could have done is you could have simply gone ahead and perform the operation perform the transformation phi on v. So, that you reach w and then take inner product with arbitrary vectors in w. If the number that this spits out turns out to be the same as the number that is spat out by this inner product now defined on v, but you do not do anything to v. So, it is just sequence of operations being changed in some sense here you are first acting on this using phi going to w and then taking inner product with w going to the field.  So, that you end up having the same number over the field yeah if you can find such a map then that is called the adjoint of the original map. So, a map and it is adjoint have the opposite effect one maps from v to w the other maps from w to v ok. So, this is the definition of an adjoint let us take an example in the space that we understand very well. So, R 2's and R 3's and so on. So, let us say phi is a mapping from R 3 to R 2. So, what does it do? It takes x 1, x 2, x 3 and maps it to 2 x 1 plus x 3, x 2 plus 5 x 3 alright you can already see what the matrix of this transformation is right is just going to be 2 0 1 and 0 1 5 yeah. So, at the heart of it is this matrix 2 0 1 0 1 5. So, these are both inner product spaces real inner product spaces as simple as it can get. So, what are we saying now? So, what we are saying is that you let this x 1, x 2, x 3 take sorry let us act on this.  So, what is this?  If I collect together terms like this I can simply let us leave it there let us not collect together terms at this stage. Now if there does exist some 5 star it needs to act on a fellow in R 2. So, for any v 1 or any p 1 p 2 pair that I give you I must be able to describe 5 star in terms of its action on p 1 p 2 yeah and it must be able to generate a 3 tuple right. So, can I erase this middle part ok alright. So, if I now let us say 5 star act on p 1 p 2 it must give me some 3 tuple.  So, I am required to find these fellows alpha 1 alpha 2 beta 1 beta 2 gamma 1 gamma 2 such that that equals this when its inner product is taken with right. So, what happens then if this fellow sits as a second entry now then I have x 1 x 2 x 3 this fellow and on the other hand I have alpha 1 p 1 plus alpha 2 p 2 I could have done this in a much shorter fashion I am just going about it in the long winded way just to show you yeah just not skipping any steps here beta 1 p 1 plus beta 2 p 2 gamma 1 p 1 plus gamma 2 p 2. So, what I want is this inner product now defined in R 3 to be equal to this inner product which was defined in R 2. If I manage to do that and solve for alpha 1 alpha 2 beta 1 beta 2 gamma 1 gamma 2 I would have got the adjoint of phi is it not that is the question before us right.  So, what am I going to look for now what is my strategy going to be yeah exactly. So, what happens then what is what is alpha 1 yeah what is p 2 x 1 0 right p 2 x 1 does not exist here does it p 2 x 1 has a coefficient 0 there. What is this p 1 x 2 0 again what is p 2 x 2 1 what is p 1 x 3 sorry yeah and what is p 2 x 3 5. So, notice that phi star in fact, I because I know the answer I can just look at that is it not going to just turn out to be this right. So, in case of real inner product spaces complex conjugation is the same as just transposition right complex conjugation transpose is just the transpose because complex conjugate has no meaning here. Now, if you are dealing with complex inner product spaces you would have seen that you would require to take the you would be required to take the complex conjugation of each term here as well right. So, now comes the notion of what is called a self adjoint operator. So, if it has to be self adjoint can the two vector spaces be different if it is an operator then it has to be a mapping from itself to itself because as you can see the matrices themselves will not be of different sizes right. So, self adjoint is when let me carve out a little space here and say if V is equal to W and phi is equal to phi star then phi is self adjoint and a beautiful thing about self adjoint operators is that they there are two beautiful things one if you have a self adjoint operator it is eigenvalues are always going to be real and the second important thing that such a matrix will always have irrespective of whether the eigenvalues are repeated or not always have exactly n linearly independent eigenvectors it does not matter whether the eigenvalues are repeated right not just that move over the eigenvectors will be orthogonal they will give you an orthogonal basis. So, very very special kind of operators are these self adjoint operators in simple terms if you look at matrices real matrices symmetric matrices will be representative of self adjoint operators over the complex field it is basically the Hermitian matrices named after the famous mathematician Hermite whose by the way the person who is responsible for showing that e the natural yeah the that number is irrational ok and the fact that you cannot have any polynomial with rational coefficients whose root can be e. So, Hermite showed this ok. So, it is named after I think his name is Charles Hermite ok. So, it is Hermitian when you are dealing with complex inner product spaces. So, in the remainder of the time that is what we shall endeavor to demonstrate to you ok, but if you have. So, up until this point we have just described adjoint and self adjoint now we will say that if you have a self adjoint operator over finite dimensional vector spaces look at its matrix representation it will be a symmetric in case of real or Hermitian in case of a complex inner product space. So, such Hermitian operators will always have real eigenvalues and their eigenvectors will be not just distinct, but orthogonal will form an orthogonal basis ok. So, that is the big result, but of course this is a very special case you might argue that this does not help us in answering the general question we have posed that is when can you diagonalize any arbitrary operator because this is a very special class of operators after all ok. So, we will take the case of Hermitian because as you see the complex field subsumes the real field ok alright. So, we will cut the frills and we will get to the matrices Hermitian matrices. So, A is equal to A Hermitian suppose where of course A Hermitian is nothing, but the conjugation transposed ok this belongs to n cross n alright. So, first to show that the eigenvalues of A can only be real ok. Suppose A V is equal to lambda V for some lambda in C and V not equal to 0 in n tuple ok. Let us take complex conjugation and transposition on both sides ok. So, this is our first expression second expression is this implies and is implied by V Hermitian A Hermitian is equal to what happens to lambda, lambda gets conjugated yeah. So, far so good right ok. Now, what else if we post multiply equation 2 with V on both sides what do we get V Hermitian A Hermitian V is equal to lambda star V Hermitian V. What is on the left hand side this A Hermitian is equal to A right. So, I might as well write V Hermitian A V is equal to lambda star this is nothing, but the norm of V squared is it not right. What about the left hand side A V is lambda V from 1. So, I can just pull out this lambda and I have minus lambda star norm of V squared is equal to 0 which means lambda minus lambda star norm of V squared is equal to 0 what can I know say about norm of V squared nonzero of course, because it is an eigenvector. So, it is not 0. So, I can get rid of this. So, it means lambda is equal to lambda conjugate what sort of numbers what sort of complex numbers are equal to their conjugates not unless they are real can this be true right. So, therefore, any eigenvalue of a Hermitian matrix and by extension a symmetric matrix of course, because symmetric matrices are just special cases of Hermitian matrices. So, any symmetric matrix or Hermitian matrix can have only real eigenvalues clear great. Now, suppose lambda 1 V 1 dot dot till lambda n V n eigenvalue eigenvector pairs lambda i is not necessarily distinct for A right. Then V 1 V 2 V n forms an orthogonal basis for C n. So, we are not asking for any distinct eigenvalues or anything. It is a very special case of just Hermitian matrices right suppose. So, of course, if you have n is equal to 1 here it is nothing really to prove again yeah. Suppose n is equal to 1 obviously true we are going to use induction of course, you have already seen it I suppose. So, let it be true for n is equal to k that is yes no these are vectors eigenvectors. So, these are in C n. So, this is a basis for C n the eigenvectors of the n cross n matrix form a basis for C n right ok. So, we are assuming that if n is going up to k it is true for every number less than or equal to k. Now, we have to show that if it is true for k it must be true for k plus 1. So, let A belong to C k plus 1 cross k plus 1 suppose A V is equal to lambda V where V is not equal to 0 which means that this is an eigenvalue eigenvector pair. In fact, I will do something better I will just go one step further and say that the norm of V is equal to 1 that in one short rules out V being 0 and also say that is a normal vector its norm is 1. I can always do that no matter what vector you choose just divided by its norm it is a it is scaled right. So, let us say this is true all right. So, by Gram-Schmidt procedure extend V to a to an orthonormal basis for C k plus 1 all right again nothing fancy you start with one vector which is linearly independent of course, because it is not 0 you can always extend it to be a basis for k plus 1 dimensional vector space. Now, if you permit me to erase this I am going to use this entire space up now. Let us write this in the following manner. So, let this basis be given by V V 1 V 2 till V k ok only V is the eigenvector remember the others suggest going to complete the orthonormal basis. So, let us take a V V 1 this is now the matrix k and what is this going to be equal to let us call this the vector V right. This is going to be equal to lambda V a V 1 until a V k all right. Let us hit this on both sides using V Hermitian what that would lead to is the following V Hermitian V 1 Hermitian. So, these are row vectors now agreed and this is V k Hermitian this is a and this is V V 1 V k is equal to what what can you say about this V Hermitian V is 1 right. So, this will just leave behind lambda here is it not what about the second term I mean if you hit V V 1 Hermitian with this what can you say the term here I am talking about this is an orthonormal basis. So, inner product of V with V 1 V 2 V 3 till all of the others is 0. So, this is 0 0 this entire thing is 0 is it not correct these things I do not care about for the time being except that when the time comes I will use that. Now, what is the size of this block k cross k agreed ok this is clear no doubts about this see what I am doing is I am right I have not written this V Hermitian in on the right hand side perhaps I should have, but this is the same matrix that is acting here also as this V Hermitian. So, this thing acting on this is just going to give you lambda because V Hermitian V is 1 this thing acting on this is going to give you 0 the subsequent all other fellows until V k Hermitian acting on V will give you 0. So, this is 0, but now I have this important observation V Hermitian A V the whole Hermitian is equal to what it is equal to now the order gets reversed. So, observe that this is equal to V Hermitian A Hermitian V which because A Hermitian is equal to A turns out to be V Hermitian A V which means what that this matrix is therefore, also Hermitian yeah if this matrix is Hermitian what must these entries be 0 well because this every element below lambda here is 0. So, every element to the right of this also had better be 0 right. So, therefore, this is 0, this is 0, this is 0 due to symmetry argument yeah if that is. So, what are we eventually left with we are left with this being equal to some lambda and whole row of zeros and a whole column of zeros and some poor little A hat which is what exactly it is of size k cross k is it Hermitian well of course, because this whole thing is Hermitian means this is also Hermitian, but from the base step assumption what do we know that any object of size k or lower can always be diagonalized. So, therefore, this means that there exists U such that U Hermitian A hat U is equal to some lambda hat where this is diagonal because if this is an orthogonal basis it is linearly independent if this is linearly independent you know these are eigenvectors. So, they will diagonalize. So, then what is it can we not write well we will say that V Hermitian A V is equal to lambda 0 0 and this is A V is equal to lambda 0 0 and this is U Hermitian agreed right lambda hat yes sorry lambda hat U lambda hat U Hermitian right what is that that is nothing, but 1 0 0 U lambda 0 0 lambda hat. So, this is a hat times 1 0 0 U Hermitian where this fellow here is diagonal of course.  In fact, the fact that this multiplied by its complex conjugate transposed will lead to identity. So, this I leave to you as an exercise to show that show that this fellow is what an orthogonal matrix is. So, this is what I am going to show you that 1 0 0 U V times of course, I have just spelt it out almost it is hardly much to do now for you V Hermitian is equal to identity and we are done why because now I have shown you that this is exactly the basis set right that diagonalizes it and once you have diagonalized it is of course, those are the Eigen vectors right. So, for this very special class of self adjoint operators over finite dimensional vector spaces you will always be able to diagonalize them and this is beautiful unfortunately we do not have time for the applications that I had spoken about, but we will delve into those in the next lecture. We will show you what all applications this has starting with a test for positive definiteness or lack thereof to certain special curves such as ellipses hyperbolas, parabolas in 2D to volumes or quadric surfaces such as paraboloids and hyperboloids etcetera. So, that is all in the next lecture. Thank you.