Thanks so much for coming today to our talk. I know there's a lot of good talks that are competing with us, some of them just across the hall that are also related to Kubernetes. Today we're going to talk about a native Kubernetes operator tailored for Cloud Foundry. So let's get started. I'm Troy Topnik. I'm from SUSE. I'm the product manager of SUSE Cloud Application Platform. And this is... I'm a Rican Galada software developer at IBM Germany and also part of the CF Containerization Team. And I would say a few things about how this all got started. A little bit of a... This is what we're going to talk about today. How we got to where we are with this team and this project. A little bit about the CF Containerization Team, who they are, who contributes to this project. CF and Kube, how they work together right now in existing distributions and how we want them to work in the future. And how we want that to be in a really good state upstream. And then Enrique's going to take over and talk in great depth about the CF operator, how it actually works. And then some of the good things we've found about this approach and some of the difficulties we've hit. So I've been working in this space for a long time even with some of the people in this room who got started trying to containerize Cloud Foundry a number of years ago back in 2015. We always thought this would be a good idea and it was always a question of what technology underneath was ready to receive a complex workload like Cloud Foundry. So I was with a team at HPE that developed a tool called FISILE and the original mandate of that was to create container images out of Bosch stem cells and create container images for all of the roles in Cloud Foundry and run them on some container scheduler or any container scheduler. And that project resulted in a distribution that ran on an abstraction layer that was on top of Kubernetes. The original intent was to develop something that would run on Apache Mezos, on Docker Swarm, on any container scheduler. We only ever got as far as Kubernetes and then when some of that team moved to SUSE, the open source company, the mandate is to always use the open APIs wherever they're available. Kubernetes by this time was the clear leader in container scheduling. So we went with the Kubernetes API and of course all the work was open source for men. And SCF is the repo where a lot of this action has been happening until now. That's where we met with IBM and they started taking a look at that. That's short for SUSE Cloud Foundry, but it's not a term that we use that often, just SCF usually. And SCF is a repo that contains the results of things that go through FISILE and config and which writes... So FISILE creates the Docker images, config and creates the config for Kube, and SCF is the repository that keeps all that stuff, that ties all that stuff together. SUSE Cloud Foundry. And there are a couple of production releases that are using this now. As we started to develop it, we noticed that IBM was working with us on this as well. And now we have Cloud Application Platform, which is my product. Cloud Foundry Enterprise... Environment. Cloud Foundry Enterprise Environment from IBM. One is a hosted Cloud Foundry Environment, and ours is a software distribution. And they basically do the same thing, except one is managed for you. They deploy containers via Helm charts, which is templatized Kube YAML to Kubernetes, and they run the containers for the applications and the control plane of Cloud Foundry itself in Kubernetes. So with the current releases, this is done with the Diego scheduler, with future releases, or current releases in tech preview, this is done with Ireeni. So this is not only the application workloads running on Kubernetes, which is Ireeni, but also the control plane. So this is where we are right now. And this all started, the upstream project that we're talking about today is resulted from the desire from a few of the Cloud Foundry partners to make this an official upstream project. So the work had gone on internally at SUSE and previously at HPE along this approach, and it was a little bit siloed. And when we had discussions at CF Summit in Basel two years ago with people from SAP and IBM, we decided, no, let's do this right, and let's do this in a way where people in the wider Cloud Foundry community can get involved and take interest, and all of the partners can see what we're doing and have input onto the design. So a gentleman in here named Berent, who did the tough work of drafting the first incubation proposal with the help from a few of us, put this together and we put together a proposal that was going to start a brand new project. Start over from scratch. We're going to do it right now and we're going to have a fantastic Kubernetes containerized distribution and we're going to tie this in with Bosch in a beautiful way. We noticed at SUSE that the direction this was going was matching our roadmap of things that we had to fix to satisfy customer needs. So the design that we were creating in this incubation proposal was very much what our end state was. So we shifted our own roadmap. We revised the incubation proposal. We sent it. It was accepted to the Bosch PMC and that's where this project lives right now. I was not at the team meeting in Nuremberg. Did you want to take the call? The team meeting in Nuremberg in Germany took place last year and basically was a meeting with the developers from SUSE and IBM who basically defined the next evolution of the project and that's basically how we'll be doing this transition to the CF operator, which is basically the talk that we're doing today about the implementation of the CF operator. Cool. As I mentioned, it's a Bosch incubation project. It's SUSE and IBM developers right now. I've had good information that others are going to join and I'm very, very happy about that. It is a very remotely distributed team in a lot of different time zones and that's one of the reasons it has a looser pairing model. So it's not like most of the other Bosch projects or a lot of the other CF projects. We have a contribution model that allows for individual contributions. So we have a slightly more flexibility there. We've got people all over the world and I have to remember all these flags now. Can you help me? Sure. Romania, Germany, China, Canada, India, United Kingdom and Holland. Yes. And all good go users. So what we want to deliver for people is the Cloud Foundry promise on Kubernetes. This is a community that I've been talking to more and more in my role as a product manager who think they know all of the lessons that Cloud Foundry has painfully learned over the course of the last several years. This is what we want to deliver to our users. Here's my source code, run it for me in the cloud. I do not care how. Kubernetes doesn't really have this yet. It's aimed at operators and the mindset for deploying things is actually you've already done the packaging, you've already done the build, you've already created your artifact and you probably have some knowledge exactly how you want to run it. I think I have a corresponding haiku for this, which is here are containers, run them exactly like this because I care how. And that's sort of an operator's perspective on this. And we need to find a way for these two groups of people to be satisfied with the new technology that we have with this fantastic scheduler that's come onto the marketplace. But we want to expose it to users. So what we have are our two distributions. And this is how it is right now. We put them through our own separate build processes. We take the Bosch releases from upstream. We create container images for each of those components. And we create using config in YAML config for it, which is templated into Helm charts. And then we fire it off to Kubernetes, where Kubernetes then basically takes over the task of managing the control plane workload for Cloud Foundry and the applications.  There's a little bit more to it than that. We have some special pods that do a little bit of extra management. But we have this thing where we're actually using Helm. We're leading on Helm, the sort of package manager for Kubernetes, quite a lot in a way that maybe it wasn't meant to do. Maybe it goes a little bit beyond what Helm was meant to do. And so when we look at what's in Bosch, we see some things that can happen during operational time that we would like to adopt into the containerized version. So this transition to the CF operator is basically intended to leverage all of these lessons learned that we already saw with the current offerings in CAP and CIFI. One of the two main keys that we want to achieve with the CF operator is basically we want to have this full Bosch compatibility. So if you take a look at the technology now, everything is run during build time. If you would like to modify in the way you modify a Bosch manifest in runtime, it's a little bit more complicated. So when we say that we would like to have this full Bosch compatibility, we allow in the operators of the cube cluster to modify on the fly and persist those changes during runtime. Also, if you take a look on the flow of the current offerings, what we do is we build, deploy, and if you would like to apply some sort of changes, then you call Helm and then you build and deploy again. So we want to add this third step on the flow that is the life cycle management of the deployment and the way to achieve that is through the CF operator. So the point here is that the CF operator is a concept on Cuba needs where basically we could add the logic that we want to define in the cluster based on the requirements that we have. In this case, the requirements is to be more Bosch compatible and this is why we're building or developing the CF operator. Before we jump into the CF operator implementation, I think it's important to lay out some of the basic concepts of Cuba. In a nutshell, Cuba has this concept of API server that is going to be writing the desired state of resources into a storage. In this case, the storage is ETCD. So you could see the resource or the object as, for example, in Cuba you have a stateful sets and deployments and that is kind of a definition of a resource. Then you have the controllers and the controllers are these components that run as synchronous in the cluster and they are going to try to match the storage desired state of an object or resource into the cluster. So, for example, if you have a stateful set where you define that you want two pods or two replicas of the object and you modify that stateful set object, then the operator is going to try to reconcile the desired state. So if you move from two to one replicas then in the cluster you will finish from two to one pods. And I can just show a small demo about this so that you could keep in mind the idea of the controller and the resources. So here we have a namespace CF with a specific set of pods that are Doppler. So if I would like to modify the stateful set definition of those pods, I could just go to the replicas and I will modify from four to two pods. And what I'm trying to showcase here is how the stateful set operator is going to reconcile the desired state that I want to have at this point in my cluster and you will see in the terminal that he's going to delete or he's going to move from four to two pods. And this is kind of the idea of the controllers, the operators and the resources in the cluster. So going back to the presentation, the controller itself is the brain behind the resources, right? So the controllers follow this pattern of I will read an object, I will do some things and then I will update that object. So the nice thing about the controllers is that they are declarative. That means that you as an end user or as an operator of the cluster, you could define how you want that resource to look. And for example, you can apply a cube control, apply amount of F, where in a file you define the whole object. And every time that object changes, the controller is going to reconcile the desired state. Resources is kind of the secret source of the CF operator because for resources we're going to define the logic we want to have in our cluster. By default, a cube is shipped with a standard resources like a stateful set deployments and jobs, but for the CF operation we are going to use a customization of those resources to leverage functionalities or to achieve requirements we want to have. For example, once we have a Bosch manifest, we would like to convert part of that manifest to specific blocks like the instance groups into a set of specific custom resource definitions. And I will explain that in the next slides. So at this point, automation is key and as Troy mentioned, with the CF operator we're actually getting rid of the need of using Helm and triggering Helm every time to do an update. The advantage of this is that the CF operator is going to trigger those updates for us automatically and this is why automation is key and this is one of the main features that we're bringing up to the table with the CF operator. So this is the CF operator logo and this is like the main picture that illustrates the whole flow of the operator. As we mentioned, the idea of the CF operator is that it is full Bosch compatible to the operator users the same way of defining how you want your fund reader to look in your cluster. So the flow is you could define a deployment manifest, as you know. You can even define ops files that are going to apply on top of that Bosch deployment and then at the end you will get your desired manifest. Then the operator is going to read that object which is the Bosch manifest and he's going to do a conversion of pieces of that object into a specific set of custom resource definitions that we have. So we have extended the staple set. This is basically very similar to the cube native staple set with specific differences. The extended job is the same case really similar to the job with a specific difference. The same case with the extended secret. I will explain now in detail what is each of them and the conversion or the evolution of this manifest to cube resources is going to end by having your whole cloud fund components running on containers or bots in your cube namespace for example. So it's important to understand the three main custom resource definitions that we're using for the CF operator. The extended staple set is basically a staple set in cube with the difference that the staple set is going to react to changes that are applied to config maps or secrets. So the idea is that when you define an instance group with two instances in your manifest that will generate a staple set with two pods and those pods are going to have mounted secrets and config maps. You can imagine that you will end with a secret if you define in the same instance group properties that make reference to variables in the Bosch manifest. So whenever someone modify one of these secrets, the extended staple set will react to those changes and will generate a new version of the extended staple set. So this is just one feature. We have different features. Extended the staple set support versioning. So this will allow cloud fund components to be versioned and this actually end up on having the possibility to do canary upgrades or blue-green upgrades, which is something that is not so easy to do with Kubernetes. In the future, we will have AC support and the main thing is that the extended staple set will always react to changes. The second custom resource definition that we managed is extended job and as I say, it's the same as pretty similar as the native job in Kubernetes. The difference is that this job is going to persist the output. So for example, we will trigger this type of jobs whenever we want to render templates of job release in our instance group. So we will render the templates or we are going to gather the data, render the templates, process the BPM files and at the end, the final end file or JSON is going to be put into the standard output and that will be available for the pod that is running that instance group so that the pod that runs that instance group can have standard configuration files. For example, when you go to bar pickup jobs, it's kind of the files I'm talking about. These extended jobs also behave as error jobs, the same concept in Bosch or automatic error jobs. The last thing is extended secret. This is also a really nice customized resource definition where basically this CRD is going to allow us to generate passwords, certificates, SSH keys depending on what type of secrets you define in your Bosch manifest. This diagram just illustrates what happens in terms of the CF operator logic when you define a manifest and op files. In a nutshell, the operator is going to apply the op file on top of the manifest that is going to be stored on a secret and at the same time the operator is going to get all the variables and store them in the extended secrets resource that we define. Then he will take that as a previous secret where he stored the render manifest and apply on top of that all the variables that these extended secrets have so that at the end you finish with the desired manifest. This is just to illustrate the flow of the first job that the operator will do with the Bosch manifest that you as an operator provide. This is just to illustrate the complexity of rendering Bosch templates. Of course, this is something that Bosch is already doing for free for us, but for the CF operator we need to make this implementation. So it's just to illustrate the complexity. It's not easy working with BPM files and processing spec files is a little bit tricky especially because of the need of Ruby when we're building a binary that is mainly implemented in Golang or purely Golang. So this is for you to really grasp the idea of the conversion from a Bosch manifest into a cube resource. So the idea here is to put into squares the blocks of a Bosch manifest so that you can understand what type of cube resources they are going to be mutated, right? So for example, the release this block is just going to be for processing information of what type of Docker image my pods needs to pull. So I'm going to convert to extend the stateful sets. The properties is going to be the properties inside the jobs is going to be used just for processing information so that you can know how to render the spec files of the release. And all the block of variables that is intended to be for generated an ad hoc extended secret. So I will show now a demo which is basically an end to end demo that I would like to showcase all of these concepts and implementations that I just mentioned. So the first thing to notice is that my CF operator in the left screen is already running. The second thing is I would like to show what type of files I will apply into my cluster so I could define the state of the object that I want my CF operator to reconcile anytime I do changes. So you can see that this is the goal that we are achieving or the goal that we are aiming for that is you as an operator you will provide this config management file in the same way you do with Bosch with this basically a Bosch manifest. So you will see here that we have the same blocks we use in a Bosch manifest releases instance groups we have an instance group with an amount of one instances and under there we have a single job that is NATS with a NATS release and you could pay attention to the properties where we reference the password for NATS into one of the variables, right? The second thing is because we are full Bosch compatible we could actually apply an op file on top of that Bosch manifest where we will say that I don't want just NATS instance but I actually want to and the last thing is we are going to tell to the operator that we have somewhere in our cluster this configuration maps and he will process those ones to generate the desired manifest and this part is basically the diagram that I explained before about how to render that desired manifest. So the first thing to do here is I'm going to watch for resources that I have in my CFSummit namespace at the moment I have nothing because I haven't applied any of the changes the second thing is I will apply this deployment manifest that I show here which is the one that basically let's call it the Bosch manifest because it's a Bosch manifest and I will apply that in my CFSummit namespace and I will take a cube that I want him to generate from that Bosch manifest config map, right? The second thing is I will apply the same I want to generate a config map but this time I want him to generate the config map based on the ops file which is the one I have here where I would like to have two instances of nuts instead of one right? So I trigger that guy and the last thing I want to do is to apply the cube Bosch deployment which is this command here and what will happen now is that the operator will get the desired state of the cluster I want to have and he will render that manifest and he will realize that he needs to generate now two pots of nuts because I'm telling him that I don't want one I want two and also he will trigger a set of jobs to process information that is needed to be able to have those nut spots for example you will see here that I will have for a specific period of time a job that is going to be run together all the template information and also a job to generate the secrets because we define a reference to a variable for the nuts password so now I run that and you can see here we got variable interpolation we have a job to gather the data of the manifest and now we have a pot that is initializing and if you recall we applied the ops files to have two instances greater than one so we finish here with those two instances so now you can imagine that you in theory have the whole box manifest of a couple of hundred lines where you define all the CF components and the flow will be basically the same the operator is going to generate that a desired state of the Cloud Foundry deployment into the cluster and every time you do a modification for example the operator is going to try to reconcile that change and apply that in your cluster you can see here for example that I could go into that nutspot and if you are familiar with Bosch and Cloud Foundry you will see that here I will have a very similar setup that we are used to have for all the components that we run so we have the same type of directory where I could cut a config file for nuts and you will see the same renderer template that nuts component needs to use for running alright so that was the end to end demo and I will move back to the presentation so we found some problems as we work our way through this we are having trouble dealing with availability zones right now we need more feedback and more people using it now the stuff that we have just shown is very very new so this is landed in a working state I believe last week just in time for the show and we could also we need to think about integrating with technologies like Istio we have this nice setup of how to do different upgrades but we know also that in the market we have Istio that could even leverage more the setup so highlights there is a lot of things we could do actually with the cf operator we could use this concept of mutated webhooks in Kubernetes to leverage Irene for example in a nutshell we could add some sort of add-ons where we could label Irene application ports to be accessible via SSH so basically with the webhooks you could know if an application wants to be accessible via SSH and then you can put a sidecar on the same port something like that also one thing is that through FICI we were able to have a good set of lessons learned that now we are applying with the cf operator just to leverage the implementation it would be nice also to migrate some of the features we are implementing now also to the Kubernetes community and one thing is that the speed of the project have been pretty good we are working together since less than one year and I think we have achieved a really good milestone so far and this is how to find us that's where we are on the CloudFanry Slack, you can talk to any of us there, we didn't really leave any time for a lot of questions we will try and get a couple in but you can see Berndt's original proposal our proposal and this is how you can get involved with our project thanks very much I have a question we did look at this the question is did we look at the CPI route and Sandy Cash and I did a presentation in Basil about and he did one even the previous Basil about why that really didn't do what we needed to do and this approach is sort of meeting halfway so the IBM team that had explored that and had then come around to using Fisile and then seen it from that perspective along with us that this was a good way and it seems also that the whole Kubernetes community is moving to operators for really complex workloads so this seemed to be the best way to get it in Bosch directly in an operator yes Dan yeah so far the way we deployed the components for example the router is so that is already a concept when you want to roll an upgrade it's going to be upgrading one by one for example I think we use webhooks for things like that also for volumes so when you want to do an upgrade webhooks will allow us to make sure that the volume is passed to the next component or put so I assume it's kind of the same way for a rotation of secrets or something like that the advantage is that we keep all the secrets in cube and that could be accessible by different bots at the same time more questions yes yeah so yeah the question was sort of we also need Irene in here to run the applications we don't actually need that right now we can use either Irene or Diego like the IDM and SUSE distros figured out how to run Diego in a pod so Diego cells can run that way so the goal is to actually pull in an Irene Bosch release include it with the rest and then application scheduling is happening right alongside the control plane running in cube I think one of the things due to the maturity of Irene we could offer the option now for users to do the same either with Diego or just straight with Irene and that would be configured in the Bosch manifest yes I think we're at our end thanks so much for coming today


To remove the hindquarters, you will need to do two things. Cut the meat away from the pelvis, and then free the hindquarter from the hip joint where the femur enters the pelvis. Begin by carefully cutting the meat for each hindquarter away from the pelvic bone, starting at the top and center of the pelvis and proceeding down the backside of the carcass. As you cut, use the tip of your knife blade to carefully remove the meat from the bone until you reach the hip joint. This process is challenging and takes time, but once you learn by removing the first hindquarter from the pelvis, you will find the other much easier. Keep cutting away the meat from the pelvic bone, working your way down the spine to where the loins were previously removed. Then make similar cuts, freeing the meat away from the pelvis, from the front side, the inner thigh, until reaching the hip joint. At this point, or even earlier, it's a good idea to remove the spinal column and the ribcage. Do this by carefully cutting between the vertebrae, with a knife, or by using a bone saw or loppers to cut through the vertebrae. Then the hindquarters can simply be removed individually by cutting through the ligaments holding each hip joint together to free the hindquarter from the pelvis. Repeat this process for the other hindquarter to remove the pelvis.


Hi everyone Joe for jazby's case breaks.com coming at you with a two box break from a fresh case another random number block style here for 2022 Panini immaculate baseball. There it is. There's the fresh case right here and Big thing no randomizer boom That's how you do it personal boxes Steve Birch with all the spots. Thank you here on Sunday the four things for spending a bit of your Sunday night with us as well oh I'm sorry Rex. I read it as Never mind that you that he gave him the loan not that he asked all right We're just gonna go one two or one two three four on the dice roll right here. So from left to right one two three and four If I roll a five or six, we'll just roll again like that six and five Three one two three So we're gonna do these two boxes right there These other ones We'll save for next time and next time Is already in the store two box break already in storage ask these case breaks.com Steve thank you. Good luck Scared money don't make money ladies and gentlemen. So hopefully We'll see you a couple of big boxes here. All right, we're gonna start off with a train whistle Two out of two relic It's David Fletcher New era logo in there. Maybe a piece of his hat All these are for Steve Good start Steve train whistle I like seeing that and All aboard the big head express Yeah, David Fletcher Because uh, I think they're from Orange County. Yeah We're in Southern California Peeps.  Oh I am for real Might see some time of the rotation next year He's got a lot of great strikeout stuff great swing and miss stuff He gets the walks down a little bit There's Riley green two-color passion autograph five out of 10 One of the uh, tigers's prospects here and Whoo Jackets team logo Patrick Mazzica That's pretty awesome Is that three train whistles in one box now? Out of fives and under That's a really cool-looking hit Steve All aboard the big hit express again All right next box Luke Williams 25 out of 99 Use the false Luke For Steve Birch all these are for Steve Birch. You got all the spots Jake Berger Yeah, three color patch Three out of 49 Eli Morgan Three color patch silver ink autograph 51 out of 57 Cleveland this is for you next up Is a keel ba doo 18 out of 49 immaculate marks It's going to fit into a 180 top loader It is triple relic and autograph 45 out of 99 ajalexie Nice and last but not least We've got Oh 19 out of 63 jersey and auto Bobby wit jr Nice couple boxes, Steve Thanks for having all the spots I'm joe for jasby's case breaks.com. I'll see you steve and everyone else next time for the next one. Bye. Bye


everyone and welcome. This is Melissa Arma with the Stock Swoosh. I'd like to invite you to a live one-hour class I'm doing Wednesday, February 13th on how you can earn a living trading the strategy one hour a day. Of course, you're not going to learn exactly how to do that in one hour. However, you'll learn some information tips and information to assist you in determining if this is something that you really want to do. A lot of people are doing careers that they're unhappy with or maybe you like what you're doing. You just feel like you're not making enough money and you like to make some extra money or more money this year in 2019. Well, you can learn how to trade the market. So, if you'd like more information you can email me at Melissa at thestockswoosh.com. Call me at 9 to 9 3200 GATT. Follow me on Twitter, Facebook, YouTube, or Skype. Happy Valentine's Day week to everyone. This is Valentine's Day week. It's a fun day to be out and about in the city of New York. There's a lot of fun things going on. I'm sure where you live to and it's a great week to celebrate with loved ones, friends, and family. So, this will be the day before Valentine's Day. So, Valentine's Day is Thursday the 14th. The lecturing class will be on Wednesday the 13th. Right after the market closes, market closes at 4. You can sign in around 4 o'clock and I will be starting to speak at 4.30 Eastern. Just go to this link right here. If you want to sign up for the lecture, that's all that you have to do. Again, it's free. So, I'll be talking about golden gaps. I trade gaps. I teach a class on this once a month which is a full two-day, 16-hour course and so you'll learn about gaps on Wednesday night and if you don't know what a gap is, I'm sure you'll find it very interesting. A lot of people don't understand gaps and I talk on TV and a lot of people that are out there trading the market and talk about the market as experts on TV longer than I'm alive actually don't even understand gaps but it's critical that you do if you want to trade and I've found that all that you need to do in order to be able to predict where stock or the market is going to go is to be able to correctly predict the direction and gap is going to take it that you can see in a gap such precise and good pieces of information that will tell you where the institutional buying or selling is coming into a stock or the market and that of course will determine the direction okay and we'll talk about that more Wednesday night so trading if this is something that you want to do really is the greatest job in the world because you can do it from anywhere in the world and you can do it from home and guess what you're working for yourself so the big class is the two-day course that I teach which is coming up I teach it once a month the next class is February 23rd and 24th if you'd like more information on that if you want to sign up you can email me classes online this is where you would learn my method from the 26 points to the entries to the exits you'll learn everything I know about gaps and how to analyze them and again you can read the gaps in the market that's how I've accurately called the market I've done a really good job of it because market is tricky and I suspect that the market volatility will continue in 2019 we're going to see more of that really in the next two to six weeks specifically about a lot of things that are coming up in the news so come to the free lecture again doing a one-hour class on February 13th the day before Valentine's Day at 4.30 just go to that link sign up and I will see you there any questions before that email me at Melissa at thestockswish.com have a great night


I'm Salvatore Bobonis, author of 16 for 16, a Progressive Agenda for a Better America. This book lays out a program of 16 progressive social policies that, if implemented, would make America a better country. First, jobs. America needs more jobs. If the private sector won't provide them, the public sector should. Governments at all levels, federal, state and local, should be hiring people to do jobs that we need done. First and foremost, rebuilding America's crumbling infrastructure. Report after report identifies hundreds of billions of dollars of urgent repairs that are needed to America's infrastructure. Let's get to work on that. And more than the physical infrastructure, let's also rebuild America's human infrastructure. We could put a teacher's aid in every public school classroom next school year. No reason to wait. And we should be supporting public education provided by and for the public. The whole idea of hiring a for-profit company to teach our children is, forgive me, idiotic. I don't know of a single rich county school district that has outsourced its education to a private provider. Well, what's good for the goose is good for the gander. Speaking of the goose, every American over age 65 has health insurance. It's called Medicare. It works, and it's incredibly cheap considering the kinds of health burdens older people suffer with. Well, Obamacare is a good start, but it's not good enough. We need Medicare for everyone. And someone is going to have to pay for it. America needs higher taxes. And I'm not just saying higher taxes on the rich, I mean higher taxes on you. Good or not, everyone should be paying a larger share of taxes in order to provide a better level of government services. Now the people who have benefited most from recent tax cuts are the millionaire earners. People who are earning over $500,000 a year used to pay 30.4% to average income tax. 20 years later it was down to 22%. If you think that America has become an incredibly more vibrant place with a burgeoning economy as a result of tax cuts over the last 20 years, great. But if you think that 1990s America was doing better economically than 2010s America, then let's go back to the tax structure we had in the 1990s. We also have to make sure people can retire. I don't want the baby boomer generation to be the last one that experiences retirement. I want to retire too. And it's easy to refinance Social Security. Just make sure that everyone pays Social Security tax. Right now people pay Social Security tax on the first $118,000 they make and nothing on the rest. Well, if we simply extended Social Security tax to cover all income, not just low incomes, then we would have plenty of money to pay for Social Security and Medicare. You know who's piling up money? The banks. And they've been doing so since the global financial crisis. Because the Federal Reserve gives them money for free, well, now if we're a nominal interest rate of a fraction of a percent. When a bank can borrow at a fraction of a percent and then lend it back to us on our credit cards for 20%, well, that's a license to print money. We should take that license away from the banks, give it to ordinary people if we're going to give it to anyone. You've heard of the right to work? There's no such thing as a right to work. It's really a right to screw your union. Well, there's no such right in my dictionary. When workers in a workplace vote to form a union, everybody should have to pay the union dues. In so-called right to work states, those who want to pay their dues can pay them. Those who don't want to pay their dues don't have to. Making it in effect impossible for workers to form a union. Look, you can't just say I don't want to be part of my county so I'm not going to pay taxes to the county. You can't say I don't want to be part of my state so I'm not going to pay taxes to the state. Well, in the same way, you can't say, you know, I don't want to be part of this union so I don't want to pay taxes to the union. If the union is providing services for you and unions are by law obliged to provide services for all workers in a workplace, whether they're members or not, well, if the union has to provide services for you, you should have to pay for the union. Don't fight for 15. Fight for 1773. If you take the minimum wage from 1969 and update it for GDP growth for the last 40 years, 45 years, you get $17.73 an hour. What that means is that if minimum wages had risen in line with the rest of the economy, no more generous, no less generous, just rising with the economy as a whole, they would now be 1773. That's where they should be and they should be indexed for the future to GDP growth, not indexed to cost of living. Herman Cain had 999. I have 101010. 10 paid sick days, 10 paid holidays, 10 paid vacation days for everyone. It's just a no-brainer. Let me tell you a story about 101010. In Australia, a pleasant little continent in the southern hemisphere, they don't have 101010. They have 101020. 10 paid sick days, 10 paid holidays, 20 paid vacation days because in America, even if you get 10 vacation days, that means at Christmas you have to go visit your family. When do you get to take a vacation? In Australia, they get to visit their family and they get to take a vacation, 101020. If you want something even funnier, 100 years ago in Australia, you used to have to take a boat to go back to visit family in England, in Scotland, in Wales, in Ireland. The boat took four weeks to get to England and four weeks to come back to Australia. So what did they do? Every 10 years, you get another 10 weeks off, long service leave, they called it, so that once every 10 years you could go visit the family. Well now they fly to go visit the family, but they still get 10 weeks off every 10 years. Every person, ordinary people and ordinary jobs, a supermarket worker gets a sabbatical every 10 years. Number 11, put an end to the prison state. The land of the free should not be the land of the incarcerated. America has more prisoners per capita than Russia or China. Five times as many as other developed countries do. Five times as many as America itself did back in the 1950s and 1960s. There's no reason we have to keep such an enormous proportion of America's people and especially of African American men in jail. Now look, I know that abortion is a topic on which passions run very high and rightly so on both sides of the debate. All the more reason we need a single national abortion law. We need a law that defines when you can get an abortion. We need a law that defines under what circumstances a woman can get an abortion. It's ridiculous to think that a woman's right to an abortion depends on what county she happens to live in or what a doctor at her local hospital feels about abortion. We just need to standardize this once and for all and pass a national abortion law. Whatever law we pass, no one is going to be satisfied. But we need it all the same. Number 13, let people vote.  It's just wrong. Look, make election day a national holiday. More than that, make every store and every workplace close for eight hours from nine to five. You can live without groceries or gasoline for eight hours once a year for election day and get everybody into vote. We should be trying to get everyone to vote, not trying to prevent people from voting. Let people vote. Stop torturing. Stop assassinating. Close down the NSA. Human drug policies cause massive dislocation and violence in Mexico, Central America, parts of South America. When people come to America fleeing gang violence that has been created by our own policies, we can give them a break. When they're children, we have to give them a break. Because we're talking about children who are coming to America to live with family who are willing to take them in and the government is deporting them in order to meet some kind of immigration pledge.  And finally, we have to save the earth. Every summer, America defeats invading aliens from outer space or super bugs that are turning people into zombies. Well, if America can defeat all of the challenges of a comic book apocalypse, America can defeat global warming. And America is the only country that can do it. Look, the scientists say that by the end of the century, temperatures are likely to rise by 10 degrees Fahrenheit on average around the world, by 2100, and then the projections stop there. No one is even trying to guess what might happen in 2200 or 2500 or the year 3000. Well, I don't know about you, but I hope humanity is still around in the year and I don't want the average temperature on the earth to be 3000 degrees Fahrenheit. We have to stop global warming and only America has the power, the influence and the authority to make that happen. Together, these 16 policies form an agenda for a better America. There are other progressive policies that you might want. There are certainly other good causes that we should take on, but I want to ask you, if we adopted all 16 of these policies, would America be a better place? If the answer is yes, then let's get it done. And if you want the evidence for why these 16 policies are necessary and how I know they will work, buy the book. Thank you.


okay we're all human beings we're all flawed okay whether we're trading for 24 years like myself or you could be trading 24 months like many of you guys watching this broadcast but understand we're all flawed we all come from the same place and we all go through the same struggles mentally financially okay emotionally so we are our own domain and there's nobody smarter than you okay there's nobody uh that's more intelligent than you they just have more screen time okay they just have uh more hours behind the computer that they've seen some of the answers that you have in so instead of concentrating on the person that's going to enable you and putting you in a situation that you need them i want you to understand that you are the rock star it's not them you are the rock star you just don't know it yet believe in yourself whatever process you trade trust that process and good things are going to happen