All right. We're going to go ahead and get started now. And welcome, everybody. Thanks for joining the session today. My name is Daniel O. I'm CNCF ambassador and sub-artist track chair at CubeCon. And I'm so glad to be here for modeling this session today. So we're going to talk a little bit about the cloud agnostic design for front end profit today. And then just one quick reminder. And then you got any technical question during the session. Please raise your hand at the end of the session. And our great speakers and the presenter will address your questions. So now I'm going to introduce our presenter, our Alex Meyer, the infrastructure team lead in Corsair Inc. And then also the unusual IR, both CTO and co-founder in Corsair Inc. Please welcome on the stage both Alex and Anusha. Great. Thanks, Daniel. Welcome, everyone. Thank you for coming. Good to be here in person. And thanks to those of us who are also online. Wanted to talk today a little bit about kind of our approach for cloud agnostic design. And you know, really I just wanted to convey like we're really excited to talk about this because we applied some of these things at our organization really. And I think I'm not exaggerating when it's changed the way we do business. It's just a kind of a new way of looking at things. A little bit more about us. So as Daniel said, I'm Alex Meyer. I'm the infrastructure lead at Corsair. I've been with Corsair since 2018, discovered Kubernetes a few years before that in 2017 actually. And I came here from places where we really were all in on a certain cloud provider and kind of got ourselves locked in. So we experienced the pain of that. And that cloud provider effectively had pricing power because we were locked in. Absolutely. Yeah, I'm Anusha Iyer. I'm the CTO and one of the co-founders of Corsair. Introduced to Kubernetes through Alex, in fact. And just fell in love with the whole concept of infrastructure as code. I think it really elevates the idea of infrastructure as a first class citizen in the whole software engineering development deployment process. And so we've really embraced it head on into integrating into code reviews and the whole kind of dev pipeline. And it's fantastic and excited to tell you more about it today. Yes. So we're going to structure our talk today sort of as a case study of what we've done. We'll set the stage early about our app just to kind of give some background and kind of motivate why we even care about cloud-agnostic design. We'll go over what we consider the fundamental building blocks to this approach, which is Helm and then Helm charts scaling that out. We'll explore some economics involved in the modern cloud computing market. We'll talk about Terraform, actually Corpse Terraform, which is a big part of our success here. We'll go briefly over our journey to date. And we'll try and apply these concepts to maybe other organizations of varying sizes. And we will talk about where we hope to kind of take cloud-agnostic design beyond this. We'll end then with kind of some summaries of lessons learned and maybe some of our favorite stories from our journey. Yeah. And so a little bit about what we do to just set the stage. We are an early startup, just about eight people. We're about five of us are on the engineering side. And there's a few of us on the BD side. We're based out of the DC area. A lot of our roots actually come from the DoD intelligence world. And so even this idea of embracing cloud took a bit for me personally. And in terms of what the app actually is, what we've come up with is a way to do fully automated MFA for APIs. And we've heard a lot about API security, I think, even in the keynotes and things I request. Have it go with a one-time use, dynamic credential, just the same way that you do with Google Authenticator or an RSA token on the human side. The way that we had to go to get it fully automated was we actually have these notions of authenticators, just like a Google Authenticator. And we push it down to a machine, so your API client. That could be a Kubernetes pod. It could be a Docker container. It could be an Edge IoT device. These authenticators start establishing dynamic identities against our platform. And a core part of our platform is a distributed ledger network. This is what's going to collect the identities and then verify the MFA credentials on the other way out. And so the notion of it being a distributed base, distributed trust, really fundamental to what we do and really led the way to a lot of the design philosophy we'll talk about today. Certainly, it's a security product. So what do we need? We need things like high availability. We need to be able to support the platform as both a SaaS as well as on-prem for certain sensitive customers and things like that. And because we're talking about API requests and authentication, we need scale. So we need to be able to support thousands of API requests per second. And so look for those themes as we go through the talk. So to give a little bit more depth as we hone in on what exactly is running in the cloud, distributed ledger is called, it's hyper ledger fabric. It's something developed by IBM. We've taken it kind of to the edge. So portions of it run in the cloud, portions of it run on the customer's systems. The customer is on the left here. The cloud portions are on the right. And I wanted to draw everyone's attention to these ideas of these peers and order objects that hyper ledger uses. Now, their exact operation isn't terribly important, but the orderers themselves form a distributed system. They use raft and elect leaders and that sort of thing. The peers use gossip to establish their own distributed system. So we get this sort of consensus mechanism. And that, as we'll see, has been really an important decision for us. All of this, we have been able to run darn near free since 2018. And how do we do this? Well, all the major cloud providers have startup credit programs.  They want to lure you from their competitor. And they will give you a whole bunch of free money, essentially, credit to use against their system to evaluate it. And basically, you can kind of see that we start off with GCP, went to AWS. And we got to this point where as one startup program was sort of drying up, so to speak, we had already gotten the wheels turning on the next one. And by applying these principles, we were able to kind of gain economic. Absolutely. And a startup credit's obviously great for keeping operating costs low. I guess show of hands here for those in-person and maybe out there virtual. How many of you have worked in a startup or are doing a startup right now? Quite a few, yeah. So I'm sure you're all familiar with that cardinal rule, right? Droom, don't run out of money. And so certainly, that's been a big driving force in terms of being able to do this kind of hopping. But I will say that one of the unanticipated benefits of taking this route is it's a great way to, at least it was for us, to understand that landscape, the whole cloud native ecosystem of what we're trying to protect. And also to meet customers where they are. So now we've got, say, a sensitive customer that's running in Azure Gov. We can say no problem. We can set up a managed service for you there. And so it's really turned us into almost a managed service that's a forest as opposed to just a large tree. And we, of course, did start out with this outcome in mind, I guess you could say. We originally started to annouce this point is that we need to run on a wide range of customer systems. Since we are a security product, we have customers that say, no open internet, right? No access to the internet. So they need to run on-prem. And so in that case, we say, OK, you can use cops, for example, Kubernetes operations, and deploy a Kubernetes cluster. And we don't have to kind of take on that effort because CNCF already handles a lot of that. Some of our customers want to run on VMs, right? They run on just EXEI, other VMWare stuff. And they just want to get off the ground and running as quickly as possible to prove us out. So for that, we install K3S, a lightweight Kubernetes client, onto a VM, deploy it to the customer. They can run it in their legacy infrastructure. They don't even know Kubernetes and Helm are under the hood. And then we get it in that way. Other customers are fine running on the public cloud, and they just need massive scale, right? So we support all the major cloud providers. All this from the same set of artifacts that we developed and pushed. Right now we're using Azure, so we develop in Azure through our Helm chart repo and our Docker registry. It's that point of indirection where we support all of these kind of transparent. Absolutely, and so form follows function. We had kind of a set of requirements in our minds when we started this off. This sort of took us towards this path. One was certainly we wanted a distributed consensus model where especially as a security platform, there's no single point of failure, no single point of attack. We really wanted to raise that bar in terms of attack effort necessary. And so a Byzantine fault-tolerant system like a distributed ledger network made a ton of sense. Other things we wanted to be able to, as Alex mentioned, run across a wide array of platforms and environments, and so Kubernetes is a fantastic indirection layer for that. And then similarly, being able to support kind of those air-gapped and sensitive scenarios even while at the same time offering a SaaS. And so there, the ability to omit that cloud platform or omit the requirement to connect out to a SaaS was an important design constraint for us. And so in those routes, as he mentioned, sometimes we've done K3S, sometimes it's just you can run Kates cluster locally and deploy us there. And then similarly, putting together a product you want to get to production grade services as quickly as possible. And that's where that ecosystem of helm charts has just proven invaluable to us. It's just such a force multiplier in terms of going out there and knowing you're getting such good quality stuff that you can get up and running quickly. Yeah, so let's take a look at one of these charts. In this case, we're looking at the Bitnami Postgres chart. So what we've done here is I've gone to AWS's RDS site, which is their sort of managed Postgres service and picked off kind of their bullet points of why you'd want to use that and sort of compare them here to one of the Postgres charts. This is a pretty typical advantage of one of our DIY cloud provider services. And what we're trying to get across here is that a lot of these features that RDS gives for you in exchange for, of course, paying them, you can get using already existing unmodified helm charts that you just pull off of artifact. For example, RDS says, we have fast predictable storage. Well, with the Bitnami Postgres chart, you just set global.storage class, you can use the exact same type of storage that RDS is using, and it's a parameter. No backup and recovery. There are tons of Kubernetes backup systems and like Valero, which is what we're planning on using. You can adjust read replicas, high availability, again, all these features you can get from configuration. Metrics, for me, this, the Bitnami chart has built in, Prometheus metrics. The one thing that, of course, a chart that you do on your own doesn't have as an SLA, right? RDS has an SLA, financial SLA, that it will be up. And this gave us pause, I guess, but we've been using this stuff in production for a while and really, I mean, if you flick all the switches, you can get some real stability out of this. And as long as you follow backup best practice, you can recover from it. You know, yeah, there was a little bit of config up front that was needed, but again, all this is committed to code, right, all this is just in there, and so it's a one-time cost. Another example of a chart that this time we implemented, we call it our bootstrap chart. So when we're onboarding to a new cloud provider, there are some differences like storage classes and that sort of thing that is just specific to the cloud provider. And you know, you really, there aren't much opportunities there for a generic design. So we concentrate all of that cloud provider specific configuration into this one chart. So we say, you know, when it's time to onboard a new provider, what do we need to even look at to begin considering to make sure we have a smooth transition and it's one place. So for example, I have part of a helm chart here and we pass in the provider as a helm parameter and it just renders differently based on whether you're using AWS's storage provision or otherwise. And in this bootstrap chart, we have of course, storage classes, ingress settings, since load balancers are slightly different between different cloud providers. Our web application firewall config, again, slight differences between cloud providers and get you, and in the future, we'll have sort of this base set of CRD so that those will be sitting in the cluster, ready to go. So everything in our Kubernetes cluster is a helm chart, excuse me, without exception. So this quickly becomes unwieldy.  So what we rely on is an amazing tool called Helmfile available on GitHub and you basically list out like a manifest of all your different charts and you can see here a little toy example of an elk stack, a logging stack being built by a helm chart. So we have, you specify the version of the chart you wanna install, you point to the chart online and it supports values files. So again, you point to a file that has the values for that chart. It also supports encrypted secrets. So we encrypt all of our secret data with PGP and it's just in the end. Right, so you put all of these pieces together and the emergent property that we have is we have a cloud agnostic platform. To give you a sense, we can go from zero to fully operational for our dev cluster, a staging cluster, production stacks across all of your major cloud providers in the matter of a few minutes by just kind of pointing the cube config at a different cluster. So it's super powerful stuff and really a couple of things that we've leveraged on the platform providers have helped us is one, we're sticking with managed gates on the platform provider. So it takes some of the burden of running the cluster yourself and managing that and then also making sure that we don't rely unintentionally on any managed services. So there's nothing that we have to bring with us when we're moving over and we really are kind of this self-contained application platform in a box. Absolutely. So we had this realization that we can operate on any cloud and again, it sort of came on us as a surprise but when we kind of get this self-awareness, we're like, well, what can we do with it? So we looked at the most straightforward thing which of course is cost of a cloud instance. Now cloud computing has increasingly become a commodity. We have all the big players and it's again commoditized like one VCPU on AWS is pro-intensive purposes the same as a VCPU on a GKE and for example, some cloud providers are profitable and they are willing to defend market share by pricing low, others are willing to just take a loss. An example of that is GCP because they are trying to gain market share. This situation obviously is very beneficial for us, the users, so just as a sort of example here, I grabbed the prices in late August from all the major cloud providers of the instance type we use primarily in M2, M5.2X large instance and sort of compared them and these are all roughly in the same region. So for example, if you move from Azure to AWS, that's potentially a 15% cost savings for an equivalent on-demand instance type if you move from AWS to GCP, it's potentially a 1% more expensive, right? And I mean, again, this is very specific, you'd have to create this for your region that it's variable, but just sort of a snapshot of like there are some pretty significant opportunities here for cost savings. Yeah, and so here's the challenge, it's fantastic. You can save quite a bit by being able to stay nimble, stay agnostic, switch providers, but we don't want to oversimplify things. There are nuances between the providers as Alex has mentioned, sometimes the load balancers, ingress controller, storage classes, things like that. And so even things like, well, how do you leverage the Cates API for a provider? How do you actually set up your configuration for that? And so there are, again, tricks to doing that. Briefly among them is the use of Terraform, right? Our goal is to get a Kubernetes API and backing worker nodes up as quickly as possible so that we can just hit it with our Helm files and get back up to our full kind of capacity. So Terraform is created by Hashicorp, but it is open source and it's a pretty remarkable piece of software and it just basically lets you codify cloud provider configuration. And then it uses AWS's APIs to install those resources or GKE or so on and so forth. It really did let us go from zero to having a Kubernetes cluster ready to receive API commands in under two weeks. This is because all of the major cloud providers have lots of examples, well-maintained Terraform modules because again, they want your business, right? They want you to come to them. But we sort of flipped the script on what we did with our Corsa bootstrap Helm chart where we instead of concentrating all the company that's different, we concentrate all the configuration in Terraform that's the same because the sort of assumption is that everything is going to be different in a Terraform module because the provider's right. So in our common, in this little example, we have a module that AWS EKS configures an AKS cluster and EKS cluster and provisions it. Azure AKS configures an AKS cluster. All of these rely on this common module that has stuff that transcends cloud providers like maximum size, for example, of a node pool or your IPs, right? Those are going to be the same on all the cloud providers. And we index into this list of variables using the Terraform workspaces, whether it's dev or prod, and then just smash them into the big list of cloud provider-specific configuration and there you go. You only have one place to make one change and then it's applicable to all your cloud providers. Just before we go on, I just wanted to kind of give a quick nod to the challenge of migrating prod in this sort of paradigm. For us, our architecture bails us out in that it's a distributed system that's dynamic, right? We can add and remove nodes slowly. In the example I have at the bottom here we're what we call straddling a cloud provider. So we've gone and added a node into GKE but it's still communicating with other blockchain nodes in Azure. And then slowly one by one those will come over as we move completely over to the new cloud provider. There are a lot of other examples of this for different systems. Postgres has this PG pool tool which allows you to add and remove replicas and fails over quickly. So there are ways to do kind of zero downtime prod migration. For DR, again we're going to kind of gloss over this because everyone's situation. Different Valero. There are lots of other Kubernetes objects. Kubernetes volume snapshotting right there. A lot of non-cloud provider specific options for that. And we would definitely recommend at least a little automation around the creation and restoration of this just to again make it all various. But to kind of put this all together and give everyone a look at our stack we have here a bunch of our different namespaces that we deploy. All of this in support of our of course customer workloads which are a Golang business logic fronted by Node.js for any sort of front end work. And then Postgres for customer data. We just bring our own CI CD namespace. We install our own SonarCube, our own Jenkins. We deploy an Elk stack using a last alert for log-based alerting which is a Yelp project. There are CNCF tools sprinkled all over this. Prometheus is there. We install Grafana. We install the Kubernetes Engine Xfingerist controller and then you cert manager which again handles all our renewal of certificates and everything like that when we're on board to a new provider. One thing I would just want to point out is we still do use Route 53. No matter which cloud provider we're on. We use a tool called external DNS. We give it a service account so it can communicate to AWS and then wherever we're from it just, it phones home that way. Yeah, so essentially what we've done is kind of put this application platform into a box as well as wrapped it around all of the support and services we need to manage development, testing, continuous pipelines. And so it's a fantastic way for a small team to kind of use the whole ecosystem as a force multiplier. We're definitely pinching beyond what you would imagine for the size of the team to be able to maintain all of this and still keep our sanity. Yeah, so we thought this might be helpful to any of you that are considering taking this path is to just kind of walk you through what our journey was and how we matured and added elements to our ecosystem along the way and just kind of how they staged out and stuff. So we started in 2018 when the company was founded and this is pre-Alex. So we were on AWS very much in the world of VMs and Docker Compose on AWS. And then he joined in Q2 of that year and sort of opened up our eyes to the power of Kate's, if you will, and Helm. I think Q3, we got into the Google for Startups program, a little bit of credit there. And so decided it was worthwhile transferring over learning more about GCP. And then 2019 introduced, our stack was getting more complex. We had more elements to it. So introduced Helm file at that point for better organization. And then Q3 is when we got into the AWS startup program. And that was a larger chunk of change and worth kind of shifting over. And that's when I think you and I made that conscious decision to be like, all right, let's go full in here. Let's go with kind of a cloud agnostic approach to this whole thing. And you invested in Terraform at that point. Yeah, absolutely. I would say yeah, when we switched over to AWS was kind of our inflection point in terms of being committed to this as an approach. And you could sort of see that, right? After Q3 of 2019, when we used Terraform then you can almost see us sort of asking ourselves what cloud provider services are we relying on? What do we need to do to build our own? So soon after we were using a lot of log ingestion features. So we built our own, we built an Elk stack, right? A little bit later, okay, we're using their CI CD system. What do we do? We build our own, right? We went and got Jenkins deployed that in. At that point, AWS's credit was kind of running out. So then we set our sites on Azure again, Terraform our cluster there and made the jump. Pretty soon thereafter, we just picked our next thing. What are we relying on? Monitoring, right? And of course, there is a terrific DNCF project for Meteos. So we went all in on that and got that deployed. More recently, we've been kind of tightening our supply chain for software. So we do security scanning on all of our containers. Again, everything is nice. And again, we use Helm charts for everything. But we are utterly dependent on them. So we began to assign our Helm charts, right? So that no one can intercept that portion of our software supply chain that our customers can also verify that we are the producers of it. And our credit with Azure is about running out now, I believe. So we're hoping to set our sites on our next cloud provider, which we may go back to GCP. And I'll say there, when we say we're moving or going back, really what we've been talking about is moving our Dev cluster and kind of our day to day ops there. But we are simultaneously having deployments in different clusters at the same time. That's right, yeah, based on customer. Yeah, and so I know we've been talking a lot about kind of our startup journey, but hopefully there are lessons here that transcend more than just startups, right? There is a lot of negotiating power that can be had if you have a nimble kind of agnostic design and that you are able to jump across. As Alex mentioned, we are in discussions with GCP right now. And the providers, they're very incentivized to have you come. So even beyond the financial benefits, oftentimes you can work with them to have them show you what are the best practices for terraforming onto their cluster or what are the tips and tricks of optimizing performance or storage classes or node types and all of that. And so we've been working with GCP just wrapping up a pilot there. And they've been fantastic to just kind of help us along that maturity scale. Yeah, we're a little bigger, right? So we have a little bit more cloud. And so you kind of take advantage of different programs, not just early stage startup programs, there are plenty. So looking ahead, we've spent most of this time talking about our economic motivation, right? Saving money or that sort of thing. What we are really interested in doing is using these cloud agnostic design concepts to further our business goals, right? So as again, a cybersecurity company, we are like pretty paranoid, right? And so we ask ourselves, what if we went multi-cloud and deployed one portion of our application to each cloud provider, and then they communicate at the application layer? We call this a zero trust deployment, right? Because we are guarding against the compromise or crash of any single cloud provider, right? And in this sort of example, we would deploy a third of our blockchain on AWS with its own set of private entity material, third of our blockchain on GCP with its own private, and then Azure and so forth. And then our clients, of course, just talk to all three and it's completely transparent. To kind of summarize what lessons we've learned on our journey, Anusha and I sat down and talked about if we could go back in time three years, what did we do well or what did we wish we had done better? But one thing that's the top of the list for me anyway is way back we picked a layer of persistence that stores the data that has really good distributed systems properties, right? Which lets us chiefly migrate between providers, right? You get this consensus and you begin to straddle cloud providers with a portion of your consensus on one portion of your consensus on the other. Migrate dev to your new cloud provider first, make the developers put up with any sort of things that fell through the cracks in terms of cloud friction or pain, a lot better than than the customer. But be nice to them and maybe take them out for lunch. And then, you know, as Alex mentioned, we've kind of kept DNS on AWS just route 53. It's isn't black and white in terms of what you need to stay agnostic with. If it's a low cost service, not worth the effort, that's fine. So there's obviously choices as you're going through this. And then definitely, you know, that whole rich world of free open source software and the ecosystem of helm charts, it's such a great force multiplier. But, you know, with each element that you pull in, really understand what you're getting into, especially in terms of configuration and the dials you can turn. So I guess funny story here, when we introduced a modsec WAF into our ingress controllers, we turned it on in production and I was going through a couple of weeks of just a whole bunch of demos, like back to back.  All of a sudden, the demo gods are just like pouring terror upon me. And about every two or three demos, unreliably, I would start blocking myself, like literally get like flagged by modsec. And I realized, we didn't realize that was happening in time, but the demo flow I was generating poor authentication requests and I was triggering the defaults in our modsec chart, right? So those types of things, you just really have to watch the dials. Yeah, yeah, and again, the root cause of that was minor differences in the way that different cloud providers implement Kubernetes load balancers, right? So needless to say, that is a piece of config that now lives in our bootstrap helm chart and is all just right away and is rendered, you know, in a cloud specific way. Yeah, that one was definitely paid for blood, so to speak.  There's a lot of stuff that is very easy to adapt and begin to just hobble out of the gate with. And IAM in particular, right? There's a lot of great resources for that. That's something great to manage with Terraform and kind of simplifies the ops workload. Yeah, and then, you know, resources and limits. I will begrudgingly admit that this is a really good idea for the scheduler. Again, story, we were going through kind of this performance tuning phase where we really wanted to keep latency low and keep transaction rates high and everything. And my vote was always to take the limits off, right? Hashtag no limits. Let's see how high this thing could go. And we quickly learned, and you'll see through Slack every time, if you can look into our Slack, every time I would mention this, hashtag no limits, there's a little eye roll that Alex would add in there and he was right, right? Resources and limits are super important for the scheduler and optimizing kind of what that looks like. So yeah, I mean, there's kind of tips and tricks.  Absolutely, well, I think that includes the main portion of our talk. Thanks for listening. We have any time for questions? Hi, great talk. Thank you very much. I was gonna ask about the Terraform bit. You guys talked like, how are you approaching the cloud agnostic philosophy with working with something like Terraform? Are you building modules on modules? Are you abstracting these layers? And if so, is it open source or is it closed source? Yeah, thank you. Sure, yeah, so the question was, how are we utilizing Terraform in kind of a cloud agnostic paradigm? I guess I can. So to answer your question, I'll probably go back a few slides to our Terraform slide. Each provider is actually a module as we have it currently. So an EKS cluster is a module that we bring in. An EKS cluster is a module. And again, that's invoked and we make a lot of reasonable choices inside those modules. There's not much to them because again, these cloud providers are so great with these that it's just the essential config. And we basically take these modules and glue them together with our common module that has code that we want in each of these other modules. So you could say it's a composition of modules. And we do not currently have those open source, but we'll be awesome someday. That's a good, yeah, it's definitely a thought. Yeah. Yes, we actually at the top of the hour, so please continue your conversation and question on the whole and then our presenter more than happy to address the question. And we actually, a bunch of the question from the virtual audience as well. And please join the Slack channel and ask any question and our presenter will be there to address the question. And thanks for joining again. And please make sure to submit your feedback in the schedule.com and it will be very helpful to prepare for next grade QCon as well. Thanks again. Enjoy the rest of the summit at QCon. Thank you.


How's everybody doing? How many first-time Drupal Connors? All right, that's what I like So we're gonna talk about cracking the shell command line for Drupalers The great thing about this being the last session of the first day is that I can talk as long as I want to So usually this session goes about two three hours, so just just so you know no, I'm kidding But seriously, there's a lot of stuff that I packed in here I've cut out a lot of things over the few years. I've done this talk and updated things so There's a lot that we'll go over and the idea is just to kind of wet your appetite Show you things that are possible also to demystify a few things So but before we get started Let me just tell you a little bit about myself my name is Bob Keppford I'm a lead architect for media current and we I'll tell you a little bit more about media current, but it's a great Drupal agency that I've been at for about five years now and it's a great place to work I also publish a weekly Drupal newsletter called the weekly drop Yeah, nice. Got some subscribers and As a part of media current I do a podcast with some of my co-workers there called the Media current dropcast and that's fun. That's a fun little Semi-regular podcast that we do we just talk about Drupal. Sometimes we'll have people in the industry on we just had an interview with Westboss a few months ago And it's just we have it's it's not really that serious. We kind of have fun with it But it's it's fun. So some people like I think we have a few subscribers. Maybe two or three But anyway, so media current is the reason I'm here We are a full-service digital agency that implements world-class open-source software development Strategy and design to achieve desired goals for enterprise Organization seeking a better return on investment and obviously I do not work in sales I do work as a on a dev team. So Just bear bear with me with this with the public speaking stuff, but in all seriousness media currents are a great agency We do great work.  We have a booth and I'm gonna have the details for that Later on in the presentation and as well. We have a party tonight and there will be info in the last slide on that And if you are looking To have some help with your website Come see me Afterwards we'll go to our booth. We'd be happy to talk to you and we do great work. I might be a little prejudiced, but Anyway, so let's get started So first of all What is the shell and I'm gonna ask for some audience participation? if you Don't really feel comfortable in the command line or in a shell or any of this stuff raise your hand. I Just now realizing this might be kind of embarrassing, but it shouldn't be so it are you okay? Let's let's ask it this way. How many of you are would consider yourselves a developer? All right, there we go So all of you should be using the command line since we're doing Drupal and we all consider our pretty much all of us developers So let's let's just forget about those fears about the command line. It's not that bad So what is a shell? So a shell is just a user interface that allows you to access the operating system services. That's the simple version of what a shell is One another turn that you hear thrown around a lot more often nowadays is command line interface or CLI and Applications have their own CLI or websites have a CLI like github Or a programming language might have a CLI So that's just a command line interface a way for you to interact with that application or that service by typing text commands So it's really simple. It's one of the most simple interfaces. You can have with a computer But what are the strengths because there are definite strengths of the command line and there are definite weaknesses And let's just talk about them real quick. So one of the strengths is it's light on resources The commands usually are pretty concise It's scriptable so you can automate things whereas when you're working in a GUI That's not always possible. Sometimes it is possible, but it's always more complicated if you need to do it So those are some strengths. What about some weaknesses because there are definitely weaknesses The commands are not obvious. So you're not going to just kind of be Intuitively typing things and figure stuff out. I mean sometimes you'll get lucky But you can also really mess up your day if you just start randomly typing stuff in your command line So I do not recommend that It's really not beginner friendly although when I started using computers. That was the interface back in the DOS days Anybody remember that? So it's not I wouldn't say it's beginner friendly definitely not like a GUI is but that doesn't mean We should avoid it So why should you learn to use the shell because I do get pushed back sometimes from even my co-workers That why do you focus on this stuff? Why do you use a shell? There's a GUI app that does the same thing or whatever and this is this is 2018 Bob Come on get with the program. So I get that a lot Here's my favorite response. It's a Unix system. We work on Unix systems You never know when this knowledge will come in handy So the other thing I always like to bring up is that Unix systems have really won the war Even Microsoft allows you now to install Linux applications and command line tools on Windows which are things. I never thought I would actually say out loud So in my opinion when it comes to the work we do the Unix based systems have won the battle I mean most of us are probably using some sort of Unix based system to do our work So there's a big big plus there and I've never regretted learning a command line tool And I always like to quote myself at least once in my talk And I mean that sincerely there are many things I have learned that have been a waste of time. I Will just say we'll just say flash so CLIs are everywhere I mentioned earlier I mean this could be just pages and pages everything has a CLI if it's cool It definitely has a slick CLI with a bunch of cool stuff that it outputs. So There's your reason right there. We write PHP work with my school we work with Drupal We work with composer more and more we work with node We probably still work with sass to some extent and every JavaScript project ever imagined as a CLI or at least works with the CLI so CLIs allow us to script things and automate things and as developers if there's one thing we love to do it's automate things because we're lazy and Lazy in a good way in that we don't want to do mindless work We want to actually challenge ourselves So we want to focus on doing things that challenge us not things that just mean punching buttons over and over and over again So this is my main reason I like to focus on the command line is I like to automate and I like to customize and personalize now These are two separate things because you can automate stuff and that works well for a team But if you start personalizing things then it gets a little different because when you sit down on somebody else's computer You don't know what to do and I am definitely in that boat a lot Not that I don't know what to do, but my fingers know what to do my head has to catch up so But I will say that 99% of the time I'm on my own computer and I benefit greatly from the customizations I've made on my own machine So I want to make my computer work for me It's the main point so this is a little bit of a dated demo, but basically it gets the point across What I'm doing is if for a typical project I'll have what's called a team up session and it allows me to open up multiple terminals in different panes That can have applications running in them So I can kind of just have a dashboard to see what's going on right when I'm writing my code So I've set up a team up session here split it into multiple terminals I can look through my git commits and and look at my history I have Drupal console all set up ready to go and this is all like in a script I just have executed one command at this point It's set up my drush aliases so I can just type drush commands in different terminals And they will interact with a server or a local environment and all of this is set up I just show you this because you can go this far. I'm not suggesting everybody do this Maybe you have other things in your life that are more important But I enjoy this and this has been over the year something I've set up So I'm going to walk through a lot of this stuff in here, but not all of it But as you can see things are getting pretty serious for me in this environment. So When I realize something is really valuable. I enjoy it. I take it pretty serious When it's code related, what do we do with code that we want to preserve a history of? That we committed to What do we do with that code? Version control right and version control as we all know means git so We put it in a git and If you go to github, which is hilarious to me sometimes I just aside I I'm around quite a few newer developers and they will use git and github interchangeably, which is fun For for somebody who's been around for a while, but anyway dot files So dot files are kind of the Community's name for all the configuration that for all your command line interfaces and some of even some of your GUI apps So if you go to github and just search dot files, you'll find tons of developers Configurations and you'll learn all kinds of crazy tricks that people have come up with to automate their work Or to configure apps in ways you never knew they could be configured And so dot files are the stored configuration And they always begin with a dot or almost always So that's why they're called dot files and the reason they begin with a dot is so that they're hidden from the GUI File browser so most app most operating systems If you open like an apple if you open a finder, you're not going to see any of your dot files They'll be invisible. So they're so you can't mess with them And they always live in your home directory So tilde Oh, there's there's a debate about how to pronounce this. I don't know if I said it right, but They always live in your home directory, which is the tilde So What do I do like that's we don't really want to put our home directory in version control just fy. That's not a good idea Um, so typically what you'll see people do is they create a directory for all their configuration and then they sim link all of their Dot files to that directory and there are tools that allow you to do this pretty easily I don't use them because I started doing it before it became cool. I guess i'm a hipster. I don't know I'm probably not a hipster, but Anyway, if you have to ask I guess you're not Um, but this allows me to track them all in one One git repository and keep a version of it and I can actually publish a minor online And the other nice thing about this is when I get a brand new computer Um, I can just clone that repo and then boom. I'm ready to go like I have all my git configurations stored I've got my vim rc all set up. I've got all my home brew stuff. I'm just it's just great Um, if anybody's ever had to go through installing all the software that you had at your previous jobs computer on your new computer That's a day sometimes for some of us. So this saves it saves a lot of time The other thing I like to do is go and just steal people's ideas if you go to github There's just tons of great stuff and you can go in there and I don't recommend copying anybody else's configuration Whole sale, but it's good to look through and like oh, that's a great idea Uh, just it's open source. So just like drupal like we learn we learn from other communities We learn from wordpress wordpress learns from drupal. So same idea So a couple things. I don't know how many people are familiar with simlinks, but we'll just do a really quick Uh, a really quick primer on this. So basically a simlinks just a pointer So you store your file in location a and you actually want it to look like it's in location b So you create a pointer or a sim link to do that and the command is really simple But this is essentially how you can control where files actually live versus where the operating system can find them And so that's kind of key to this whole thing The other question that always comes up is what configuration do we want to add to our dot files? What kind of stuff do we want to configure and store? And as my dentist says to me every time I go in for a cleaning only faucet teeth you want to keep And i'm pretty sure he stole that line, but he steals stuff liberally. So including Well, I won't say it, but he's a dentist so Wow, I didn't mean to I didn't mean to offend dentist. Are we any dentists in here? Yeah, I didn't realize it till just now No, actually he's cool. Anyway, so the shell so let's get back to the shell So we've talked a little bit about what what dot files are and kind of how you would do this type of work What do we put in our dot files? Well, the first thing is what shell are you using? There are three popular shells bash being the one I use it's kind of the old faithful It's on every system pretty much And it works for me you can customize it and improve it But if you learn how to use it you can pretty much use it on any system There's some newer shells that have a lot of cool stuff built in zsh is one I'm always on the fence about whether to use it or not. I've tried it. It's really great Then there's a new even newer one called fish Which is even has even more slick stuff. So I'm sort of sure some of you might have been familiar with these But definitely take a look at them If you don't want to really build your own customizations, I recommend the latter two if you don't like the bash configuration Another thing we would store in our dot files is our environment settings. So the the idea of this is Instead of typing the full path to the command line application that you want to use let's say drush for example um I would rather just type drush So in your in your environment variables You can add these to your what's called your path And the path is just an environment burial on unix systems And it allows you to specify which directories are executable Executable programs. So instead of having to type of the full file path You can just type drush and it'll just it knows where on your system drush lives and it executes it Another cool thing and this is a really easy way to kind of get into customization Is to set up aliases in your bash rc file? And I have a few that I use here. I have actually a ton, but These are really simple ones Just if you find yourself typing the same thing over and over and over again You know why when you can just shorten it. So why do I want to keep typing history when I can just type h? Another one is l where I can just type that and instead of getting l instead of tapping to type up this whole long command ls dash l hg Which is a really pretty way to look at all your files. I just type l Another thing that is very useful is is writing your own functions and it doesn't have to be that you don't really have to learn Um bash scripting in order to do this. I mean, this is a really simple way Um, this is a function named take which basically just makes a directory And we'll make it well it'd be easier if I just show you so I just type Take and then the file path and I make what I'm trying to do is make three nested directories one two and three And what it just happened is it created all three of those directories and then put me in the actual deepest directory So that that's just to show that all I didn't have to type all that command I could just type take and then an argument and it's done So there are millions of applications of that that you can do they can be drush commands They could be like commands to back up your database and move it to a specific directory And once you learn how to do this you realize like why wasn't I doing this before? It only took me 10 minutes to learn how to write a bash function So a lot of a lot of potential there Another one is ssh and this one always cracks me up. Um, well, I shouldn't say cracks me up. Um, this one I I think I would just benefited from being around a sys administrator who would watch me type and just Go nuts. So he would say stop. We need it. We need to we need to straighten this out. So ssh How many have written or have typed ssh commands to log into a server before? How many of you remember the ip addresses and the username and the port number or do you have to go look that up? Yeah so There's a file in your uh, and I don't recommend putting this in your git uh and storing it and putting it on github I may or may not have done that at one point in my life um There's no there's no password in here, but There is ip addresses. There are port numbers. There are user names But you can you can go in here and I do this for frequently used servers I'll just make a nickname for it and that saves me from having to remember all of this stuff and type it wrong I possibly log into the wrong version of the server wrong environment And also it's nice just to have a written record of it as long as this isn't Things that are supposed to be kept secret. So Privacy and security as I said To not put these on github. You're just exposing information Uh for hackers to exploit So let's talk a little bit about git. We talked about we store everything in git, but Um git is a powerful tool and there are really nice Graphical user interfaces that look pretty and allow you to do a lot of bad things So be very careful if you're just learning git Please There are plenty of tutorials online learn the basic command line command So you kind of understand what's happening because if you jump in and you just go straight to say we'll just pick on one um github's application Yeah, most of the time it's going to be fine And I don't even have a problem with people using it. I've used it before But you do need to understand the basics of git so Spend a little bit of time and learn that you'll be very thankful for when things go sideways You won't be freaking out as much. So it's it's well worth the time investment to to spend Maybe even a day just learning more about git when you have time So listen Or sorry learn learn to use these commands. It's git is I like to say git is um Gets like a good set of steak knives Um You can do amazing things you can cut up some some great food and people will look at like wow This is so well presented, but you could also lose a finger. So be careful Learn what you're doing. Um, and just be careful so git configuration This is where it's typically stored You can do all kinds of customization to it if you're in git Git is probably one of the tools I use most every day And if I'm going to use a tool I want to configure it So I've I've set up my global Excludes file to kind of have a default git ignore. I've customized my colors a little bit I've set my default editor to vim so that it's not opening nano Um anybody no no, okay Um also another thing you can do if you don't like command line editors say let's say you use adam or vs code I think it's what the cool kids are using you can set that up here So when you want to go git commit It'll open adam or whatever your graphical editor is and that's very handy because You'll be surprised how many people have a hard time just quitting them Or nano really um And I set up some other defaults, but you get the idea you can you can set up things You can also do git aliases as well as you know the command line aliases or git aliases And and I have a lot of these that that I use because I just like Not typing So I have short names for my git commands git log And I have git lol, which basically gives me A pretty graph of my Of my log I can do git ll which adds to the num stat and number of lines changed. I can do lol a And these are all in my my dot files and I'll have a link later And then I there's one that I specifically really liked which was to see how much work done I've got done today I have an alias called git lol m which is just my commits And it just lists out all of my commits, but in order to type those commands There's no way i'm going to remember how long they are because if you look They're really ridiculous like no one ever types these if if they do they're a wizard I don't know how anybody would remember this stuff so Yeah, another one with git is ignoring files And there are basically three ways to ignore files with git You can do it per machine, which was the home directory thing I talked about that's kind of your default Per project so a dot git ignore if you look at Drupal the Drupal project has a dot git ignore and for the project Everyone that works on that project will have the same git ignore and that files actually committed to the project So if you add something there then it's ignored for everybody that works on the project But there is another way to ignore files which does not have that side effect and it's excludes So if you go to dot git slash info slash excludes in your git project You may not have that file just create that file You can actually have a per repo instance ignores file So let's say for example you use vs code and vs code Whenever you set up a project creates a dot vs code directory in the root of your project Which is wonderful Just like php storm does kind of the same thing and then What happens when you're working with a team and they don't want to add that to the git ignore for the project Well, you can just add that to your info slash excludes And then it would be excluded for you and you don't have to bug the lead dev on your team And you can just ignore it So this is there's a lot of uses for this another seldom used I think Git feature is hooks and a lot of times people use this in their deployment and we're not doing a dev ops talk this is all personal stuff on your machine and Basically what hooks are they're kind of like drupal hooks if you're familiar with those So whenever there's something happens you can hook into that action and perform Actions that you want so you can run a command every time you do a git commit Or you can run every time a command every time you do a git push So you can hook into all these different commands And so it's really useful. Um, you can check out that uh, that link there talks about customizing it Here's a couple of ideas of things I do with it There's a I use the pre-commit hook for to do codelint code linting I have that set in my editor, but sometimes something will slip through and this is this catches me So who's ever left a debug statement in code and committed it? Yes, that was that's some of the best Case scenario things I've done in my career. Um, but this helps me with that. It'll it'll catch that and there's a link there that's a simple Drupal specific pre-commit Script and I would recommend checking that off you do Drupal work Another thing which is very useful if you work on a team and you kind of need to share A history of what you've done on your team Is the post commit and I run this this is set up on all my repos So basically when I do a commit It's on my clipboard the whole commit message is on my clipboard and then when I go to the project management software We happen to be using I can just paste that in there and I void typing it twice So I just it also encourages me to write really good commit messages because I'm like well I'm going to use this multiple places so it needs to make sense and be complete sentences and we all do that right We all we nobody says added changes If you're doing that, please you will hate yourself in the future for doing that because get us forever So let's let's try to Yeah, we've all done it but anyway Here's the problem though a lot of times you forget to add these hooks because you have to add them per project And I used I used to forget this so here's where we're going to go back to the git configuration And then we're going to basically add an alias called in it so In case you don't know, I mean a lot of us Maybe just starting off with git, but if you start a new project you type get in it to make a git repo And so this is an alias that basically grabs a template file that I have which has everything I typically use with my git configuration Um So that's that's a handy thing to use and then I have a git template directory where I put all my hooks files and all that Kind of stuff and you can you can keep this simple or as advanced as you like, but it's a useful tip So that's git there are git tools that make git better um because let's be honest I I really do love git but It could be better. Um, one of the things that I like To use is tig which is a text mode interface for git. So imagine how great some of these gooey applications are that work with git um tig is like a command line version of that it allows you to Do things that the normal git cli doesn't Here's it. We'll just look at a quick example So it makes it really easy to kind of go through the history of a project and then inspect different commits I actually use this to do most of my uh change staging. So instead of just using um The git cli and add git add a lot of times I will just run a command and then I can go through this interface because I like it better So as you can see like I'm basically staging some files looking at the changes And then staging them for the next commit Another tool I like and this is just because I like pretty things is git hud And if you were like as a kid really in into airplanes like you'll know what a hud is like I was the nerd that Just went crazy over f-18s and things like that. So I love anything that can trick my mind into thinking I might be flying a jet So I have to really watch it too. Um, but the git hud basically gives you a quick glance at what branch you're on Um gives you some color in there and how many modified files. It's it's actually Pretty advanced. So and I I can't explain exactly what's going on here. Um, we don't have time But it does give you a quick way to kind of see the status of your of your git project All right, so we'll talk about vim and and I have cut out most of the vim stuff because not everybody likes vim But there are basically two Ways people look at vim They're the people that don't use vim That see vim users and they're like godlike powers over their code And they can do things that just are you looking like how did you do that with so many so few keystrokes? But for the reality the reality is most of us are here Or or have been here So that's where I was but Seriously vim is not easy to learn. So there is no we we got to quit shaming each other and stuff like you don't know How to use vim? Oh We need to really stop that because It's just a tool but at the same time There's a reason why I use it as my primary editor and the main reason is is rsi and I had issues Probably seven or eight years ago with that and realized that I had to change a lot of my ergonomic habits and then I started looking at my keyboard and and how I did stuff and I said, well, why am I doing all this typing and one of my friends Who knew me really well said like, you know, you are like in the sweet spot for being a vim user He's like, I don't know why you don't use vim. So I took him took it to heart and I started learning it but In serious as vim's been around forever. I plan on coding up into the point I can't type probably and maybe then they can have some other way to do it but I I love text editors and I used to switch all the time like every time the new one would come out Oh, I switched to that and like I realized that that was just kind of like the new hot thing I just wanted to be doing the new hot thing and like why am I doing this when I could just learn something That has tons of potential and I get investing in it over and over through the years And I'm not losing anything because it's all building on top of each other instead of me just using the new thing it's also I'm already in the shell So I'm already in the command line a lot. I can just type vimp and it'll open up my directory and I can start editing files Another cool thing it's open source um And it's available on all systems. In fact, there's actually a fork of vim called neo vim Which is really really slick if anybody's a vim user check that out. It's pretty cool Um, and it will never die. I think if we do have a nuclear holocaust, which I hope we don't there will be two things left cockroaches and vim Well, that's possible And I love using the keyboard. I I'm not a mouse guy. I don't like clicking around and stuff Obviously, it's why I'm doing this talk. So yeah So like always the question comes well can vim do whatever and the answer is always yes Just like can drupal do Anything yes, it can do it should it maybe not So that's that's that's subjective, but here are a few plugins. I'm not going to go through them real quickly But if you do use vim or if you've considered it, here's a couple or few that are pretty useful for drupal development um We'll look at really quick at vim fugitive, which is basically a rapper for git so you can um interact with git And i'm just going to show one something real quick git blame so you can everybody know about git blame So if you go to a specific line in a file, you can see who did that Not it should be git credit or something, but it's git blame for some reason The only reason you ever care about who wrote this stupid code is because it's broken. So I guess that's why Um, but anyway, there's all kinds of stuff. It does you can stage files pretty much It's a rapper for git. So you don't have to leave vim to do your commits and stuff like that um another one and I I'm I really like sublime text. It's a great editor Uh is git gutter, which basically they stole this feature the plugin writer just implemented in vim Which is another reason why I like vim is because people look at what other editors are doing like Oh, we should write a plugin for that and they do So basically where your changes are in the file most modern editors do this out of the box vim doesn't do a lot of this stuff Which is great small feature set but extendable to infinity Another thing that people always ask about is how do you do debugging?  There's this client. It works really well Um, and I'm not going to go through the whole thing here, but it gives you all the features of x debug. So if you need to Um, step through your code. You need to watch a variable. You need to inspect objects all that kind of stuff Um, I like I can't imagine not being able to do debugging right, especially with droopal 8 Um, so setting up a debugger if you don't use vim, whatever whatever editor you have You need to get x debug set up. You need to do that because you will learn Stuff that you never thought you would learn just by stepping through the code that you're running on your computer And then there's this really cool project. Um, I've never met the maintainer, but he's very responsive vmrc for droopal If you use if you write droopal code and you use vim, I would look at this It may vim users tend to be a little pedantic So you might not like every decision made in here But it's worth looking at and if you want a really quick and dirty way to get droopal set up in vim, this is a good one And I'll skip that. So let's go to drush. So we've been talking about kind of general stuff Let's talk about droopal specific stuff. So Drush is a tool we should all be using if we are droopal developers One of the things that I neglect to say a lot is that it makes it really easy to get a server going If you have php installed on your system You can just run a simple command and you have a local server running without, you know, vagrant or anything like that You can download and enable modules You can back up and import databases and you can perform updates and much much much more One of the things you can watch the logs And my personal favorite is logging in as any user This is extremely useful Especially when you have a complicated site with all these different user roles in droopal And they have different permissions and you want to reproduce something so you can log in By running a simple command you can log in as that user So let's talk about drush serve. So php comes with this built-in web server That a lot of people I find a lot of people that for years. I didn't know it existed And drush makes it super easy because all you type is drush serve and it works as long as you have your site set up And your php install and stuff, but Drush aliases are a really cool tool to Has anybody ever typed drush and then they get that message and says like I don't have the access or whatever. I can't remember the message, but Yeah, you can't bootstrap droopal type drush dad as you get nothing And there are ways to go around most people will go cd to the default directory which works most of the time But when you have let's say you have Three server environments and you have your local environment and you you know, you don't want to have to type out that Whole long thing or ssh in you can set up aliases and i'm not going to go through how you set this all up It's well documented in the drush documentation But you can set up aliases and they look kind of like this You set up a file and then when your your command looks like this So you'll name your alias whatever i'm really creative.


So apparently Alex Jones is not a fan of QAnon now knowing what I know about Alex Jones I would have assumed that this is his bread and butter But apparently QAnon is not his cup of tea and he doesn't like QAnon I'm actually shocked because this is his people right, but here's what he says apparently he goes on a rant Against QAnon. I haven't pre-watched this but just take a look Do you I mean I mean look I love you Adam Did you hear what I just said in the lead-up to that? What did I say to you right before you responded back with a yeah, I know somebody was giving out that information Okay, I'm sorry. I'm a little nervous. I might have no no no it's okay. It's okay. You understand that we lost What was that image of you? Yes, sir, and I have to put up with the Q people all over the place and I'm tired of it.  I don't know what this imagery is But in his critique of Q in his denunciation of Q He's like layering in or peppering in I should say some additional conspiracy theories Oh, they're a Psyop. They they worked with the Fed on January 6th But like I've got to watch that again because he's actually saying they ruin the country actually agree with Alex Jones Never thought that I would say that like that's not the only reason why this country is in turmoil But I mean let's I just want to listen one more time Yeah, I know somebody was giving out that information What is this you understand that we lost the cut free because of Q And I have to put up with the Q people all over the place And I'm tired of it.  He's so overly dramatic. We're the ones that manipulated some people to go into the damn capital and worked with the Feds I'm sorry, but it wasn't just the Q people who did that. It was also Donald Trump himself Your daddy Donald Trump told people to go to the Capitol show force, you know get them to not certify the election I love this so much when crazy people turn on each other It's rare, but when it happens, it's it's something that you really have to celebrate Now Alex Jones like he I don't know like he's a performance artist, right? This is what his lawyers argued in court, but he absolutely is horrified of his own fans So I want to direct your attention to this older majority report video with Michael Brooks And so basically this video is of Alex Jones and Milo Yiannopoulos in a coffee shop and While they're in this coffee shop one of Alex Jones own fans approaches him And he tries to pitch like an info wars music label to him and as you can see Alex Jones Incredibly uncomfortable weirded out by his own fan, and he ends up fleeing. So let's take a look here a fan of Alex Jones And Milo interrupted the live stream to try to do a prodigy to Q-tip Have you seen those were they go, oh, we're gonna get them like that's a mock of complacency where God bless you That's awesome Spider-man guy with six three. Oh great job, brother. Have you heard about me? I have I went into the yeah, I went into the yeah You know what's it? I saw it's viral.   He absolutely deserves this, but I mean this is what happens when you cultivate an insane insane audience What does that even mean RS negative blood types. I'm the king of it. What does that mean? Like this is somebody who's clearly off their rocker and to be more crazy than Alex Jones Like I don't know if this is a performance or if he's genuinely unhinged But to actually be publicly more deluded than Alex Jones that that is honestly like a feat that is difficult to accomplish Like if a lot of you in this chat tried to be more crazy than Alex Jones Like if you put your shirt over your head and did like cornhole you and started making goofy noises Like it would be difficult to look more insane than Alex Jones, but this guy does it effortlessly and this is his fan base Oh Okay, this this is it's such a good clip just seeing Michael Michael Brooks laugh God Love it. Love this so much that guy was just not reading the social cues. Um, and Alex Jones wasn't comfortable. I mean Look, I don't get how Alex Jones Doesn't feel at home with all of the craziest conspiracy theorists like I wonder does Alex Jones Subscribe to the flat earth theory. Does he actually think that the world is flat or does he think that they're crazy?  Everyone thinks that their religion is the one true religion and all the other religions. They've got it wrong They chose the wrong God and the same is true for you know these conspiracy cults So it's just it's so interesting and never would have suspected that Alex Jones was anti QAnon But there you have it. He hates QAnon He thinks they're like the worst people in the country and he's not a part of it Like you'd think he'd be leading the charge, but no he hates QAnon. Call me surprised interesting well, I hope that they They watch that and they continue to tune in And call into his show because it would be funny to see them Push him into these like unhinged meltdowns more often because that was great


certainly a lot of things to think about for the Yankees over the next couple of days. One thing they won't have to think about is the health of Aaron Hicks. He told me the other day that he felt as though he could play in yesterday's game. He wants to be out there today, but the Yankees are going to be cautious because of the turf here at Tropicana Field. They're expecting that he'll be in the starting lineup tomorrow night in Boston. As far as Didi Grigori is concerned, he hit in the cage yesterday. He hit off a tee yesterday. The wrist responded well, and he is back out there today. Didi said there is no doubt in his mind that he will be back before the regular season ends. But Aaron Boone just wanting to make sure that that wrist responds appropriately. He also worked on some fielding drills was throwing said all along, throwing not really a worry that it would not be an issue. It's more how the wrist responds after swinging multiple days in a row.


Ranger Bill, warrior of the woodland, struggling against extreme odds, traveling dangerous trails, fighting the many enemies of nature. This is the job of the guardian of the forest, Ranger Bill. Pouring rain, freezing cold, blistering heat, snow, floods, bears, rattlesnakes, mountain lions. Yes, all this in exchange for the satisfaction and pride of a job well done. The town of Naughty Pine is threatened with a grave danger. This danger is so great it could blow half the town off the map and kill and injure hundreds of people. No, it's not a tornado or an earthquake. It's not a flood or a freight car loaded with ammunition. It's not a great fire or an airplane out of control. What is this great danger that threatens life and property of almost every citizen in Naughty Pine? You'll find out as we tell you the story. Hank Nicola and Barney Alberts are closing their gas station for the evening. Hank is reading the meters on the gas pumps while Barney tends to other closing time duties. Hank finishes reading the gas pump meters and walks back into the garage to put the gauge stick down into the storage tanks. Hey Barney. What's the matter, Hank? Something's wrong. The gas pump meters don't agree with the storage tank gauge. How can that be, Hank? You must have made a mistake. I don't think so, Barney. I always double check my readings. How much are you off? The storage tank is 500 gallons short of the pumps. We must have pumped 500 gallons of air or else there must be something wrong with our pumps, Hank. Yeah, either our pumps or the gas truck meter. Oh, well, I guess this isn't the first time this has happened. Let's take care of it in the morning. Okay, the gas company will straighten it out anyway. Let's go home. I'm beat. Me too. I can smell the pork chops cooking from here. Bob, did you ever stop to think that we're guarding more than money? Yes, Holly, I have. We're guarding records that are more than pieces of paper. There are people in that... What's the matter, Bob? What's that smell? Smells like gasoline. Well, how could the smell of gasoline get into this bank? Bob, there's a garage next door. You don't suppose... Their gas tanks are leaking. Let's get down to the basement. Great day in the morning, Bob. Look at that stuff coming in here. It's just like water. It's running right down the storm sewer. The fumes are getting bad already. One spark in this building will go higher a kite. Let's keep calm, Bob. We've got to do this right. Yeah, you said it. I'll turn off the light switch and pull the fuses. No, let them cut the power off from outside. We can't risk a spark. Yeah, good thought. I'll call the sheriff from the fire department. You call Ed Banker. Right. Then we better open all the windows and doors so we can get the fumes out. Wow, this is a bad one. Sheriff's Beacon. What? You said it. I'll be there on the double. Shorty Jeff, get all the men down to the bank on the double. This is condition two disaster alert. Fire Department Chief Brown's Beacon. What? We'll send all available men and equipment immediately. Nelson, dispatch all equipment to the bank area. Condition two disaster alert. Bill Jefferson? Yes. Yes, I'll be right down. Stumpy, call in all the men. There's a condition two disaster alert at the bank. There's a man in charge in case of civilian disaster, Bill. We're waiting for your orders. Are the men from the filling station here yet? Not yet, but here they come now. Bill, we didn't know that our tanks were leaking. We didn't have the slightest notion that this was going to... Take it easy, Hank. Nobody's blaming you. Open up your garage. Glad you fellas didn't break in. You can't take a chance on the spot. Johnny, that gas keeps coming out. I want to take a fast look at the bank basement. How? Chief Brown, Stumpy, Gray Will, come with me. The rest of you don't move until we get back. The basement door is over here, Bill. Thanks, Chief.  Stop here, fellas. Why, you stop here, Bill. We're not near door yet. Let's take our shoes off. Can't take a chance on the sparks. All we'd need is one. We're taking. We'd be well on our way to outer space. We'll have to use flashlights, too, Bill. Right. Let's go take a look, fellas. I'd walk right where I've got the flashlight. There must be hundreds of gallons of gas in the basement. We can't get down there, Bill. We'd be overcome in a minute. All right there, Chief. Just listen, fellas. You don't have to look to know what's going on down there. Let's get out in the street and swing into action. Chief Brown, I'm calling this a Condition A catastrophe alert. Okay, Bill.  Better ask for state troopers, Carol. Storm sewers will carry gas all the way to the river. Also, you'll have to evacuate the people in the immediate area from their home. Right. I'll get right on it and sew this area shut with a ring of men. Chief Brown, have your fumpers pull another block away and start pumping water into the storm sewers to dilute the gas. Better have Canyon City and Junction City send some of their equipment by flat car and some of their firemen. Right, Bill. We'll start pumping water right away. Hank! Barney! Well, there's plenty of ways you can help. Let's get the caps off the storage tanks in your garage. Everybody put on rubber boots. You can't take a chance on a spark. Easy does it, Barney. I'll let the cap drop on the concrete floor. I won't, Bill. Now for the other one. I'll have to get a pipe, Frank. And let mine be careful, Sonny. Ain't anxious to visit the moon. Maybe we measure other tank while waiting for Hank to come back with us. He's coming now, Gray Wolf. Here we go, fellas. Hey, don't say that, Sonny. I hope we ain't going nowhere. Me, too. I'll be real careful. Oh, I must have been super strong to jam that cap on that one. Be careful, Hank. I will, Bill. I'll be real careful. I'm sorry, fellas.  I didn't believe my mother when she told me I wouldn't live to be a hundred. What's the matter, fellas? Everybody's face is as white as a sheet. I sure appreciate the way you fellas are taking this.  I'll forget it, Hank. In this game, I miss as good as a mile. We're used to close ones. Yeah, we sure are, Sonny. A narrow escape a day keeps you from getting hardened in the artillery. Not good something. Well, I got the cap loose. Oh, fine. Let's measure the gas and find out if anything's left in the tanks. Chief Brown, there's a thousand gallons of gas left in each tank. We got to pump it out. You know, we can't put an ordinary gas or electric pump near that garage. The places go sky-high. Besides, there's no juice for a square mile. I had it cut off. That's part of plan A. I understand, Chief. You must have an explosion-proof, high-speed, centrifugal pump. Yeah, we got one, Bill. For good of you. Fine. I'll attach you a good long hose onto it and run it from here to the tank. The pump should lift the gas, don't you think? No, no doubt about it, Bill. Let the gas run down the storm sewer and out into the river. I think you've got something there, Bill. I'll get it set up right away. Fine. We've got to get all the gas out of the tanks that we can. Or else it'll all run into the basement of the bank. Put all the residents out of this area, Bill. That's fine, Cal. Special police and the state troopers have this place blocked off for a mile around. We've got some more men tolling the streets where the storm sewers run down to the river. Good work, Cal. How about the river? What about it, Bill? Well, we can't let the gasoline catch fire on the river. I'd like to be guarded, too, until the gas gets a chance to disperse itself. You've never thought of that. You don't have any more men, even if I had thought of it. Well, deputize some of the men of the town. I know they'd be glad to help out. Now you're making with the ideas, Bill. I'll get right on it. Well, all there is to do, very well. Wait. You said it, sonny. The fire engines are flooding the sewers, which are taking the gas down to the river. The boys are pumping the gas storage tanks out as fast as they can. The sheriff has a place surrounded with men. All the folks are out of the buildings around this area.  That's about all there is to be done, I reckon. Not quite something. All we can do is wait until gas is all gone down to it. That's about the size of it, fellas. Hey, what's that newspaper man doing? He's going to bank to take pictures. We've got to stop him before he flashes that bow. He could blow the whole place a mile high. Come on, let's get it. Come back here. Hey, oh! Hey, wait! Hey, wait up! Can I arrange this? Please, I do something wrong. Not yet. Take the flashball out of that flash gun. What do you mean? That's a big story. Take it out. Okay, okay. You don't need to get sore about it. You ought to know better than to take a flash picture with all the gas fumes around here. Not right.  Do you really think a flashbomb could do that? I do. If you got close enough to bank to take picture like you set out to do. Well, I'll be a horn toad. I never gave it a thought. I'm sorry, Rangers. I didn't mean to start anything. Oh, forget it. We know you didn't do it on purpose. You'd better save your picture taking to laugh at the gas fumes that cleared on. Oh, you said it. I don't want to get blown to bits. Nor do I want to be the cause of a thing like that. I'll see you later. Okay, bye. Bye. Say, my name's Bert Campbell. May I have an exclusive story from you later on when you have time? Sure thing. That's a promise. Nice.   You wouldn't have any hair left on your head, Stumpy. So be thankful, even if they're gray. It's like I always said. The gray hair on the head is worth six. A fella ain't got. Let's go find out how much gas is left in the starting tank. 400 gallons left in the first tank, Barney. Right. That's what the stick says, Bill. How much in this one, Hank? There's just about 400 in this one too, Bill. Closer to 375. There's still a lot of gas in there, Bill. 800 gallons in the two tanks. Right. That's 1200 less than before. I'd say we were doing all right. Four, maybe five more hours shouldn't empty tanks, Bill. Right, Gray Wolf. The gas shouldn't be leaking into the basement of the bank quite as rapidly as it was. Boy, I'd give my right arm to know how those tanks got to leaking. They're welded and supposed to be leak-proof. Well, things like this happen in the best of families, Hank. As long as nobody gets hurt, it'll be all right. Let's go outside and see how the boys are coming along. It's a good thing we got a reservoir of water to draw from, Bill. We pumped enough water to flood a lake. Yeah, imagine you have, Chief Brown. I'm proud of the way you and your men swung into action. Thanks, Bill. We try to do a top-nice job all the time. Cal, I want to thank you, too. You organized the police chain in record time. Evacuated the residents of this area quickly. Thanks, Bill. We're only as good as our commander, you know. Thanks, Cal. Commander is only as good as his men. Thanks to both of you men, we avoided disaster. I'm sure we have everything under control now. It's only a matter of time before we can all go home. Say, Bill, here come Ed Banker. He looked plenty worried. Worried? He looks plumage-aspirated. What's the matter, Ed?  I have, Bill. I just talked to the state banking chief, and he says I've got to pay money on demand, or I'll be technically insolvent. Gas or no gas? No. That's right. Well, hasn't the man got any sympathy for the condition of your building? Well, actually, he's right, Bill. I'm holding other people's money, and we can't expect business in this town to drop dead just because of an unfortunate experience. I see. Well, don't worry. We'll think of something. Don't worry. That's easy for you to say. You're not the banker. I've got a building full of gas fumes, and you say don't worry. Have I ever let you down before, Ed? I guess you haven't, Bill. But how are you going to get the gas fumes out of the bank building? It'll take weeks. It'll take weeks before they'll be gone all right. I'll have the building almost rid of them before morning. Bill, I can't believe it. It sounds like a fairy tale. Well, this will be one fairy tale come true. Chief Brown, let's get to a phone and call the fire commissioner at San Francisco. That's the whole story, Commissioner. May we borrow your ventilating equipment? No, your honor. How many thanks, Commissioner. You don't know how much we appreciate this. No, thanks. Yes, sir? No, we'll come to think of it. I don't. But I'll figure it out. No. Thanks again, Commissioner. We're deeply grateful. We're waiting for the plane with a crew of men. Okay. Goodbye. Let's get a crew of men and get out of the airport, Chief Brown. Jefferson, I'm on the commissioner's staff. Glad to meet you, Captain. This is Chief Brown. Hello, Captain. The crew of the flying box car is opening the cargo hatch. As soon as they've got the ramp down, we can unload the equipment. We've got two converted hose trucks carrying the air pumps. How about the portable canvas air ducts, Captain? We'll need two large trucks for those. We've got all we have. Ah, fine. We've got two large trucks here.  Wonderful. They're putting a ramp down now. We've got 30 men. They'll have the plane unloaded in short order. Then we'll go to the bank and set the equipment to work so we can put some fresh air into the building. Open that basement grating carefully, fellas. The spark can still be disastrous. Ah, we'd be careful, Bill. You said it, honey. Hey, give it a tug, Gray Wolf. Okay, I'm not stuck. Must be rusted. Is it worse than opening an old tin can?  There. Now we put canvas air duct into a basement. Right. The boys have the other ducts set up in the doorway. I can start pumping fresh air at once. The air contraption blows quite a gale, sonny. The good thing I brought fresh stick on for my way. Some of these fresh air is coming to the building now. Yes, Gray Wolf. Portable ventilating equipment is doing the trick.  They come billowing out the windows and doors. You have plenty of good idea, Bill. I don't say you did, Gray Wolf. Bill, do you really think that banker will be able to get in here in the morning to do business? Yes, I do, old timer. I may not be able to work in here, but at least he can get at his records in the vault. What's in this one, Hank? There's just about 400 in this one, too, Bill. Closer to 375. There's still a lot of gas in there, Bill. 800 gallons in the two tanks. Right. That's 1,200 less than before. I'd say we were doing all right. Four, maybe five more hours should empty tanks, Bill. Right, Gray Wolf. The gas shouldn't be leaking into the basement of the bank quite as rapidly as it was. Boy, I'd give my right arm to know how those tanks got to leaking. I'm sure it wasn't supposed to be leak proof. Well, things like this happen in the best of families, Hank. As long as nobody gets hurt, it'll be all right. Let's go outside and see how the boys are coming along. It's a good thing we got a reservoir of water to draw from, Bill. We've pumped enough water to flood a lake. Yeah, imagine you have, Chief Brown. I'm proud of the way you and your men swung into action. Thanks, Bill. We try to do a top-nice job all the time. Well, thank you too. You organized the police chain in record time. Evacuated the residents of this area quickly. Thanks, Bill. We're only as good as our commander, you know. Oh, thanks, Cal. Commander is only as good as his men. Thanks to both of you men, we avoided disaster. I'm sure we have everything under control now. It's only a matter of time before we can all go home. So, Bill, here come Ed Banker. He looked plenty worried. Worried? He looks plumage-aspirated. What's the matter, Ed?  I have, Bill. I just talked to the state banking chief and he says I gotta pay money on demand or I'll be technically insolvent. Gas or no gas. Oh, that right. Well, hasn't the man got any sympathy for the condition of your building? Well, actually, he's right, Bill. I'm holding other people's money and we can't expect business in this town to drop dead just because I had an unfortunate experience. I see. Well, don't worry. We'll think of something. Don't worry. That's easy for you to say. You're not the banker. I got a building full of gas fumes and you say don't worry. Have I ever let you down before, Ed? But how are you gonna get the gas fumes out of the bank building? It'll take weeks. It'll take weeks before they'll be gone, all right? I'll have the building almost rid of them before morning. Bill, I can't believe it. It sounds like a fairy tale. A fairy tale come true. Chief Brown, let's get to a phone and call the fire commissioner at San Francisco. That's the whole story, commissioner. May we borrow your ventilating equipment? No, you are. How many thanks, commissioner. You don't know how much we appreciate this. No, thanks. Yes, sir? No, we'll come to think of it. I don't. But I'll figure it out. No. Thanks again, commissioner. We're deeply grateful. I'll be waiting for the plane with a crew of men. Goodbye. Let's get a crew of men and get out of the airport, Chief Brown. Jefferson, I'm on the commissioner's staff. Glad to meet you, Captain. This is Chief Brown. Hello, Captain. The crew of the flying box car is opening the cargo hatch. As soon as they've got the ramp down, we can unload the equipment. We've got two converted hose trucks carrying the air pumps. How about the portable canvas air ducts, Captain? We'll need two large trucks for those. We brought all we had. They're fine. We've got two large trucks here.  Wonderful. They're putting a ramp down now. We've got 30 men. They'll have the plane unloaded in short order. Then we'll go to the bank and set the equipment to work so we can put some fresh air into the building. Open that basement grating carefully, fellas. The spark can still be disastrous. We be careful, Bill. You said it, honey. Give it a tug, Gray Wolf. It must be rusted. Is it worse than opening an old tin can? You would think of something appropriate to say, Sumpy. Now we put canvas air duct into a basement. Right. The boys have the other ducts set up in the doorway. I can start pumping fresh air at once. The air contraption blows quite a gale, sonny. The good thing I brought fresh stick on for my way. Sumpy's fresh air is coming to the building now. Yes, Gray Wolf. Sumpy, portable ventilating equipment is doing the trick.  They come billowing out the windows and doors. I'm not putting a good idea about it. I don't say you did, Gray Wolf. Bill, do you really think that banker will be able to get in here in the morning to do business? Yes, I do, old timer. I may not be able to work in here, but at least he can get at his records in the vault. He can do business temporarily in the empty store across the street if necessary. Ah, that make him happy. I wonder if in there gas tanks have run dry yet, sonny? Well, they should have. Let's find out. What's in this one, Hank? There's just about 400 in this one, too, Bill. Closer to 375. There's still a lot of gas in there, Bill. 800 gallons in the two tanks. Right. That's 1200 less than before. I'd say we were doing all right. Four, maybe five more hours should empty tanks. The gas shouldn't be leaking into the basement of the bank quite as rapidly as it was. Boy, I'd give my right arm to know how those tanks got to leaking. They're welded and supposed to be leak proof. Well, things like this happen in the best of families, Hank. As long as nobody gets hurt, it'll be all right. Let's go outside and see how the boys are coming along. It's a good thing we got a reservoir of water to draw from, Bill. We've pumped enough water to flood a lake. Yeah, imagine you have, Chief Brown. You're proud of the way you and your men swung into action? Well, thanks, Bill. We try to do a top-notch job all the time. Cal, I want to thank you, too. We organized a police chain in record time. Evacuated the residents of this area quickly. Thanks, Bill. We're only as good as our commander, you know. Thanks, Cal. Commander is only as good as his men. Thanks to both of you men, we avoided disaster. I'm sure we have everything under control now. Once only a matter of time before we can all go home. So, Bill, here come Ed Banker. He looked plenty worried. Worried? He looks plumage-asperated. What's the matter, Ed?  I have, Bill. I just talked to the state banking chief, and he says I've got to pay money on demand, or I'll be technically insolvent. Gas or no gas? That's right. Thank you.