Hello, everybody. I'm Steve Agnibeni. I signed up today to give a talk about .NET Core 2.1 in production, but unfortunately that talk is canceled. So we're going to do .NET Core 2.2 in production. That's .1 higher. It should be backwards compatible with the previous talk according to December. So I'm Steve Agnibeni. I work for a company called Namely. I've been working with .NET since basically the beginning, SQL Server since the 90s, and I'm a Pluralsight author, and I have a couple courses about typescript out there. You can find me on Twitter at mic.net. So I work for a company called Namely, and Namely, our mission is to build a better workplace for mid-sized companies. We write HR software, human resources software for companies in the United States. Namely was founded with a Rails app. That forms the core of our main HR application today. We also have a payroll app, and that's ASP.NET web forms. So getting these two things to talk to each other is a bit of a challenge for us, and they are what we like to call in the software world, monoliths, which is to say that they're very self-contained, right? So talking a little bit about scaling for startups, you hear a lot on the internet about how monoliths are bad. Monoliths are bad, monoliths are really hard to scale, and that's true, and you hear a lot about, well, what you should have instead of monoliths is service-oriented architecture, where everything is its own little service. This is great, but it's very expensive and it's very complicated. It adds a lot of complexity. Monoliths tend to be very simple. They're small, they're very self-contained. There's a lot of problems you don't have when you have a monolith, and the only thing that you don't get for free is scaling. But I don't want to discourage anyone from using a monolith. What we found is that a really good way to start it is with a monolith, and then when you start having customers, which means you start having traffic, do a monolith with more hardware, throw hardware at the problem. This is the way that you advance a monolith, and it's actually important to do it this way because this means you actually have customers.  Start with a monolith, get customers, from customers, use money, from customers to build services. Planning services for Namely. In mid-2016, Namely, we decided, it seems like we have customers, we have a business model, this is actually really working for us. Let's think about what we want the future of our applications to look like. On the Namely side, we had Ruby on Rails, ran on Linux in Docker containers on top of Kubernetes. We're actually very early on with Kubernetes we guessed right, I think. So this is 2016 already, and those are running on top of AWS EC2 instances. On the Parallel side, we had C Sharp and VB.NET, like I said, it's a ASP.NET web forms app running on Windows and IIS, and on EC2 instances as well. As we started thinking like, where's our future? What do we want to do? What do we want the future to look like? In coordination with our SRE teams, on the Parallel side, we decided Linux and Docker and Kubernetes were good, but the thing we didn't want to do is convert all of our payroll code to Ruby. It didn't really feel right for the types of applications that we were writing, lots of financial calculations and things like that. Ruby to this day, I look at it and I think to myself, how could this ever work? But it works somehow. We have really good software, it's just not for me maybe. So we decided we wanted to have our future stack be whatever language the team that's writing the software wants to write it in, that's fine on a short list of approved languages, but that underneath that, they'd all be running on Linux in Docker on Kubernetes supported by EC2 and I'm looking at my watch here that doesn't exist because, I don't know, old people do this, right? They look at their wrist. So later on today, we're actually going to EKS which is Amazon's hosted Kubernetes and that's going to happen in like three hours. So it should be fun going to production with EKS and really, really soon. So we had a question. So how do we write C sharp on Linux? And this is a number of years ago. We had the choice basically of thinking about Mono because that was something that was out at that time. It did exist but we were kind of old school Microsoft developers. We loved, if it didn't come from Microsoft, we were still kind of scared of it, right? This is pretty early days and so we decided to go with.NET Core which had been released and was on I think 1.0 at that time. So we had our payroll web that talked to payroll DB and in February 2017, we had a hackathon at work and we created three brand new.NET Core web API projects and we called these services and they ran on.NET Core 1.1. They were in Linux and Docker which is great. We use the.NET new templates. So all of them had a kind of a react front end and web API back end talking to SQL Server and none of them won the hackathon. So that was kind of sad. But the jokes on, I think the thing that won was some kind of like machine learning AI blockchain thing. I'm not really sure. It's exciting for a hackathon but it's not, it wasn't for us, it's not business worthy. But the good thing is actually this is successful because all three of these services are still in production this day and we followed them through the whole tool change. So that was pretty exciting. So question though. I said services, are these really services? It's a, if you notice, it's not really independent, it's still kind of talking to the payroll DB. And so we had this idea that services are going to allow us to scale infinitely. But it turns out that they're all still talking to the same relational database and there's really only so big that you can scale a SQL Server before you start to continue to have kind of scalability problems and blocking problems and contention problems and all sorts of stuff like that. So in terms of services, I would say in fact these are not services even though we kind of use that term. What they really are is, I'm not sure if we invented that, I don't think we did, but it's, they're really BFFs which is not best friends forever. It is called back-end for front-end. So back-end for front-end is a captive back-end that is specifically tied to a front-end service like something like React or whatever on the client side. This implements all the server side calls that are appropriate for that front-end and then talks to the database and the back-end. So they're not services even though we kind of use that term. So talking about scale for startups, remember I said the idea is that you can throw hardware at it and that works for a while. If you're going to go with services, I highly recommend using an approach like we're using now which I'll talk about in a moment. But there's this sort of thing called the distributed monolith which is what we started building. We started building lots of BFFs, we're back-ends for front-ends, and you wind up with a distributed monolith, you basically are still talking to the same database or some shared things, and you wind up duplicating a lot of logic in a lot of different places, sometimes even in different languages, which can be really problematic. I like to say that the road from monolith to distributed monoliths is paved with BFFs. So you need to be very careful about not doing this sort of thing if you want to live in this glorious service-oriented Valhalla heaven type thing. So, dotnet core 2.1, pardon me, 1.1, it was pretty fast. Let's just develop on Mac Linux and Windows, which is kind of nice. It worked great in Docker and with Linux, and there was really good command line tooling. ASP.NET had something called middleware, which is really, really nice. What it lets you do is intercept the HTTP pipeline at various points throughout, and you can do things like, for example, we wrote a middleware which works with our authentication proxy that we have. Basically, if somebody comes in and doesn't have the right headers on their thing, we reject them. So the call never gets to the controller, which is really nice. We can decorate our controllers with various rules that are appropriate to our specific authentication requirements, and say like this particular controller requires this group and this group, or like this group or that group, that kind of thing. It's really nice. We implemented that with middleware and it's, I don't know, 100 lines of code and we use it all over the place. It's really, really nice. The people that are writing the end services don't have to think about it. They just decorate their methods and all of a sudden everything is secure, which is really nice. Of course, it's open source, right? That's the reason why we are all here, and .NET Core 1.1 was open source. Problem, lots of APIs are missing. We had to do crazy things like doing polyfills for .NET, right? That's something you would expect from JavaScript where there's not really a core framework, and in .NET it was just very, we were very allergic to it. We didn't really like doing that. The docs were wrong, and there was the whole project that JSON drama thing, and the tooling was bad, like Visual Studio was not ready for it. It was just problematic. So really we found that .NET Core 1.1, while we got it to work and while we shipped it to production was really for early adopters. So in August of 2017, .NET Core 2.0, yay, Visual Studio 15.3, yay, and .NET Standard 2, yay, okay. This is all really good stuff. This is when .NET Core really became decent. So the APIs that we needed were back. They added 20,000 APIs, the docs were better, the tooling was better, it was really fast and stable. I'm going to talk about this in a minute. We had a little thing with Kubernetes. It was not a big deal. We figured it out. The only thing actually we were kind of sad about with .NET Core 2.0 is that it didn't work right with the full framework until basically .471, which was three months later. Because that was delayed, it caused us to do all the work that we needed for that Standard 2.0, and then we kind of got bored with it and didn't actually port it to our monolith. So we then wanted to supporting essentially two versions of the same thing for like a year and a half or whatever, which was kind of a drag. But anyway, we survived. So when .NET Core 2.0 came out, there was a blog post by Steven Taub from Microsoft showing microbenchmarks, microbenchmarks, or benchmarks without context. So really tiny thing and so this particular one doesn't matter the code, but he's basically testing how fast NQing and DQing objects in a queue is, and he advertised dozens of speed-ups, between two and ten times. That's pretty exciting as part of your core framework. Now, the interesting thing though was not this blog post, or even that .NET Core 2.0 was so much faster. The interesting thing to me was this follow-up by a guy named Andre Ackenschen, who at the time worked for JetBrains, and he showed the same blog post basically, but using something called Benchmark.net. So this is a library that I recommend everybody check out and at least understand what it does, and I recommend just searching for the .NET Core 2.0 blog post on the performance. What Benchmark.net does is it abstracts away all the complexity of dealing with timing for microbenchmarks, like say for example, you're emailing somebody at the same time your benchmark is running. So your computer is doing work and so it's very easy to get things that are pretty measuring in the nanoseconds or the microseconds to be slightly wrong based on other stuff your computer is doing. So this Benchmark.net will run things a lot of times and it figures out just the right number of things to have a reasonable statistical significance of the benchmarks which is really, really good. So I highly recommend checking that out. But anyway, people were like, oh, Benchmark.net is cool. I bet I could use Benchmark.net too, and all the people on the .NET Core team started doing that, and we're going to see it made tremendous differences in 2.1. So this is actually a big cultural shift I think. So at Namely, we started working on something called .NET Helpers, and this is our common library for .NET services and applications. So it has abstractions for things like AutoFact. Anyone use AutoFact here? Okay. So very good. How do we use dependency injection generally for anything? So a very large number. So AutoFact is an implementation of dependency injection for .NET. It's the one that they probably copied when Microsoft introduced their own dependency injection thing. It's really complicated, and I love what it does for it but I hate working with it. The nice thing about AutoFact is it's totally abstract. You can extract it totally away. I'll give you an example. So in .NET Helpers, there's one guy at our whole company that knows how AutoFact works. So we had this one person write helpers for all the normal people like, pardon me, I touched the microphone, all the normal people like me to use. So like an example, in the beginning of all our programs, we have a menu of all the things the program needs, and it uses .NET Helpers, helper methods to abstract that away as an example. We're going to see here, all right, this application, this is in the beginning like in the startup, it's called by startup. I'm going to add a Postgres DB connection factory. I'm going to add a payroll DB connection factory. I'm going to add a reader and writer for the service database. I'm going to add a reader and writer for payroll DB, and that's it, one line to set all that stuff up. The nice thing about it is when you set all the stuff up in the beginning, and you have understanding of it, and by the way, each of these things are 100 percent covered like ridiculously covered by tests, and it means the application developer writing their service doesn't have to deal with all this low-level nonsense that they don't care about. That wasn't the laser.  When I'm using it, I could just say, hey, I'm going to write a query class, and I want an ID database reader, and the one that I want is the payroll DB one, and that's it. I don't have to deal with connection strings. I don't have to remember to set my application name in the connection string, that's all done up here, so that the application name is in there, and so every .NET Core application we have sets that, so we know which person to blame when the database server is having problems. All that stuff is abstracted away, so we really like what Auto-Fact does for us, and we like using it because we don't have to deal with Auto-Fact directly, we just do it indirectly. We use Dapper, which is the Stack Overflow interface for iDatabase, the iDatabase interface, which we really like a lot. We do testing with .NET Helpers, which integrates some helpers for X-Unit, for In Substitute. We use Flume Distortions, which is a library that lets you do in your tests, like you do the Arrange and Act, and then the Assert phase is like, some variable should be five, and it lets you write out the assertions in a prose in English or whatever. We have all of our tooling integrated with this as well. So Logzio, which is our Elk Stack that we use, New Relic, which is a company that helps analyze performance and stuff like that. We use Datadog for graphs and charts and stuff, and Bugsnag, and all this comes to us for free, quote-unquote, when we use that helpers in our libraries. LN authentication, I talked about the middleware, and GRPC, which I'm going to talk about in a little bit. Anyone here use GRPC? Five-ish, six-ish. Okay. Cool. So with that standard .NET Helpers, it took us a while, but we finally got there. Now, my favorite kind of PR is we're deleting code from our monolith, because all that stuff is implemented in .NET Helpers, and even though it's written .NET Core, we can pilot to .NET Standard, and we can use it as a NuGet package in our ASPnet web forms thing, and it lets us delete code, which is great, because it's probably code that didn't have tests and stuff like that, and now it totally does, which is really nice. So, protobufs, okay. So, I've always said BFFs aren't really services, and the problem is that you deal with a concrete implementation that's meant for a specific front-end, and that can be problem because it's not flexible, and the minute you need to do a new thing or have something else that's not that front-end call it, you often have to add extra stuff to it, and it starts to get more complex. So, we use something called protobuf to help us write a language agnostic services, meaning that the client can be in whatever language, and the server can be in whatever language. Now, for our services, we write them all on C-sharp, but there's other teams that write their services using Go, using, you could theoretically use Python, you could use Ruby, there's a lot of choices. There's a dozen or something like that, languages that the Docker protoc supports, and the client and server code is generated for you. So, it's hard to see, but here's an example of a service. This is actual real code that we use in the proto format. It's not kind of its own language, but it's just for defining stuff. So, we have a namely PyCycles package defined that turns into a namespace in C-sharp, and then I have a service called PyCycles that gets created as a class, and there's a method on that class called rollbackPyCycle, and it takes a rollbackPyCycle request, and it returns empty, which basically means it'll throw or work. Then here's the message, which just describes what this looks like, and it's an object that has a UUID on it, and that's all. So, what we do is we run this container that we have, which just wraps the compiler, which is from Google, and we do Docker run. Here's my proto compiler thing and PyCycles that proto. So, we're pointing the command line tool at the proto file that we just wrote out, and what we get is this. In Visual Studio, we get a namely GRPC project that gets created and it gets compiled, and all the stuff necessary to be the clients of the service, or to implement the service, is set up for us automatically. Now, I got a question. Do you see on the side here, there's these sort of like read what prohibit signs? I don't know if it's the same sign in Europe or not. Anyone know what that means in Visual Studio? If you see that next to a file, it means it's not checked into source control. It's intentionally ignored in source control. Why would we want to ignore these files? This is the core of our services. Any ideas? They're generated. Who checks in their DLLs? The source control. Nobody. There are certainly some scenarios. Don't get me wrong. Maybe for external dependencies, that's the thing that people do. But in general, if you're writing some code, you don't check in the binary output from source control because it's not really relevant. Except for certain circumstances, you don't want to check it in because it's made for you at the time. So, we don't check these in. What we check in is the proto file, and during our CI and CD pipeline stuff, it generates the actual C-sharp code, or Java code, or Go code, or whatever language it's implemented in, and it makes these things for us. Here, I'll tell you a little thing. I know this is a TypeScript room. One of the things that we've added recently, we don't actually use it yet, but instead of doing C-sharp, let me just go back real quick. So, you have a language, I picked C-sharp. This is where the only thing you would do different to get a Go file, or Ruby, or Python, is change this last part to say literally Ruby, or Go, or Python, and it generates the code for you that implements that proto, which is pretty neat. So, now we have one called Web. Any guess what that does? TypeScript. TypeScript. It generates the JavaScript code to do the binary serialization and deserialization of the messages to the protobuf format, which is a binary format. So, it's more efficient on the wire than JSON, and you get a d.ts file, which describes the service and how to interact with it. That's awesome, right? It's good times because all of a sudden, you're dealing with a strongly typed interface to your thing, and then the implementation, you do whatever you want with. So, on the client side, there's one call. Now, again, we're not doing this yet, so I'm describing it as awesome because I'm not aware of all the problems it probably has, but anyway, we don't do this just yet. We use something called gRPC Gateway, so we make our clients by hand. But this is something that's out there and you get a d.ts, which describes getting a set and a serialized method and as object, and stuff like that. But again, there's that UUID. That's implemented as a string in JavaScript, right? So, that's kind of neat. So, in 2018, .NET Core 2.1 came out, which is pretty cool. There was another performance blog post this time based on benchmark.net, and again, they showed two and 10 times speedups on .NET Core 2. So, that's amazing. We're already pretty fast and we're not even faster for a lot of different stuff. So, the micro benchmarks are all over the place. That original blog post that came out after the .NET Core 2 blog post changed the culture on the .NET Core team and they started chasing little improvements all throughout the framework. It made a real big difference in how fast .NET Core is and we, as the users of .NET Core, all win based on that. What did I do? Oh my goodness. Oh, it's back. Okay, great. Panic. Yeah, so we saw a lot of tweets like this. Guess where I upgraded my site to .NET Core yesterday, ASP.NET Core, right? It's pretty amazing. The performance is really good. So, I wanted to show you a real graph, okay? So, this is something we got out at Datadog. I exported this last summer. And here is .NET Core 2.0, memory usage for a particular service around, I don't know, 90-ish megabytes used. .NET Core 2.1, around, I don't know, 50, something like that, 55, right? Pretty good. No code changes. Just going to .NET Core 2.1 from 2.0. Now, I have a problem, there's a problem with this, though. It's Photoshopped. Now, the funny thing is that with a sort of graph like this you would expect that maybe the Y-axis would be Photoshopped, right? Up and down. Y-axis is actually correct. It's the X-axis that's Photoshopped. And the reason is because we had to revert. We couldn't use .NET Core 2.1. And I got a little hint. You see this part? A little bit of a jump there, isn't it? Okay, so, we'll get to that in a moment. So, amazing performance, even better, right? Lower memory footprint, .NET Global Tools. So, who here uses NPM? All right, so NPM-G, right, is a global tool. This is the same thing, but for NuGet. You can deploy to nuget.org a package and then people can install it as a global tool with .NET Core 2.1, pretty cool. Has span of T, has all this other stuff, it's really good. Cons is bugs, okay? So, we ran into a lot of problems with .NET Core 2.1. So, the first is the New Relic Bad Image Format Exception. So, basically, there was a breaking change in the way that code, the code versioning profiler worked in .NET Core 2.1. This is me copying out of a blog post to try to speak about it intelligently as if I fully understand this. But the bottom line is that basically, the New Relic, which is a product that we use to analyze the performance of .NET Core, they assume the JIT would only happen once. And that was true for a given piece of code. That was true for basically forever until .NET Core 2.1 came out. And unfortunately, it was no longer true. And so, we would get these errors booting up the thing. It just didn't work at all. And so, basically, but here's the awesome thing about .NET Core and OpenSources, we all kind of appreciate. There's the bug, there's the fix. We could see what the fix was and this is when it was actually released. It was a couple of months later. So, they're still working on how quickly they release stuff. But that's pretty neat that we can see the bug report and get the actual fix and what change. So, that's pretty neat stuff. Problem was, we had a summer of fun. So, the .NET Core, there was a blog post that came out that said, hey, .NET Core is not gonna be supported as of September. Meanwhile, the fixes do mid-August, which is we know Microsoft always meets their deadlines for deploying stuff, right? Always. So, ah, panic, we're gonna have a week to do this at best. If they make their deadline, we're gonna have a week to fix and it's not gonna be supported.  So, we complain on Twitter as we like to do and thankfully they listened and they released a new thing and they said, well, we'll give you an extra month. I like how it's like crossed out in the blog post. We'll give you an extra month. All right, so, let's see.  So, there was a problem with performance. Remember how I said that thing was Photoshopped? So, here's our memory usage. It was going up a little bit and a little bit, this is not gonna work 2.1. Now we'll go back and re-reverted. This is us rebooting, right? Because I don't know what's wrong, reboot it. We'll see what, let's see if it fixes it, right? That was a laugh line. I don't know what's wrong, let's reboot it. Okay, so we re-rooted it, eh, it's still happening. Okay, revert. Now, straight through. This is the CPU usage. This is actually a real graph. So, basically none, right? So, this is all just do-do-do-do-do-do-do. Like, I'm busy for no reason and this is the actual traffic. So, you can see it's completely uncorrelated with the traffic on this service, right? The CPU was just going bananas. But memory was fine.  This is another pretty graph that somebody submitted. I don't know if that's a real word, but basically there was stuff going on that was not real. And the root cause wound up being that HTTP client, which is part of .NET Core, or .NET also, implements iDisposable but you should not dispose it. Okay, don't dispose it. There's a great blog post I love. You're using HTTP client wrong and it's destabilizing your software. It's like one of the best titles I ever read for a blog. This is actually old. So, this is even for .NET Pro Framework. So, you're probably, if you're using HTTP client and you're disposing it, you're probably having this problem today. And you just don't notice it because of something that happened. Basically, they wrote a new managed sockets implementation. Remember back to that performance thing. Oh, we can squeeze out an extra 10 milliseconds on this baby, yeah, or microseconds or whatever. But unfortunately, it interacts very badly with this bug and it causes horrendous CPU performance for nothing, basically. So, the fix is, oh, you can do a static HTTP client which is what the guidance used to be but the problem is in Kubernetes and other container orchestrator type things if you ever have DNS changes, static HTTP client doesn't update your DNS. So, you wind up all of a sudden having bugs whenever things change their name or IP address or whatever. So, you have to use this new thing called HTTP client factory and I'm not gonna go through the code but basically you set up a thing like, for example, GitHub and then later you resolve GitHub and that's your client, okay. And so, behind the scenes, HTTP client factory will do all the DNS, re-resolution things and whatnot and this is the right way to do it. So, do it this way, don't do it the other way or you'll wind up with CPU problems if you're on 2.1 or higher.net core. We had another bug with umkills out of memory like Kubernetes was just like, nope, sorry, you're dead. And basically what was happening was that garbage collection was not happening soon enough and so we were getting umkills and it turned out that in the fix, I love basically, whoops, we were using the wrong way to determine how much memory was being. So, they were just using the wrong number to figure out when GC should go and so they switched to the right number and that made it better except that, oops, we were still getting umkills and there's another issue out here and there's still some talk about this. If you're using small containers, it's a problem. So, you don't have Kubernetes, the swap file and Kubernetes and if you have a server GC turned on, this is sort of the mitigation. You get one heap per processor. So, what happens if you have a 48 core machine? All of a sudden you're allocating multiple gigabytes of memory for a service that doesn't do that much, right? So, you need to cut that back. Instead, you can actually use workstation GC on your services running inside of Kubernetes and that means you have one heap and it also tends to run garbage collection a lot more and so this is a workaround because you don't wind up wasting a lot of space and time doing something that's not actually useful. So, it's something to consider using investigating workstation GC for your services if you're running .NET Core on Kubernetes and basically if you have low memory limits. This is today the only way to do it. So, this is actually not that it's not fixed. It's just something to be aware of. They're probably gonna do something about it at some point. Okay, so how we deploy .NET Core services. So, we use GitHub. We deploy to Jenkins that does the build. We use CodeCov to check out what our test coverage is. We deploy our images that come out of Jenkins to something called Quay, which is a private repository for Docker images. We use something called Spinnaker which comes out of Netflix, thank you. So, that's what actually puts our stuff out into Kubernetes. So, .NET Core 2.2 came out in December, yay. Okay, we have some event tracing for Windows features. We have SQL access tokens for Azure Active Directory, code injection prior to main. Why not just change the code? Arm32 on Windows, okay. So, this is basically the most boring release of .NET Core. It's fine, it's 1.1 higher. That's fine, it's like this talk. So, it's kind of boring. Anyway, just to wrap up. So, .NET Core definitely works in production today. We are building our business around it and it also works really nice with the protobuf stuff so people can do other languages as well. We're really, really happy with that. It's good for services, good for command line tools, good for website back ends. It works really well with Kubernetes with the exception of the UMKIL thing. If you have big pods that don't have tight memory limits, it's really, really nice, it works very well. It interoperates all of our other tech with your PC and it's super fast and more or less the bugs are worked out now. Or, hopefully we run into it and we know how to work around it. So, yeah, we're really happy and we're continuing to invest in .NET Core and that's the talk. Thank you very much. Thanks. I think I got two minutes or otherwise anyone has questions I can answer after. So, yeah, go ahead. I have a quick question. Sure. What would be the end for today? Hope to move to .NET Core. So, not like you, to 1.0. Yeah. Well, I would hope, yeah, I mean, definitely the two things I mentioned, UMKILs and the HDB client being really weird or different requiring HDB client factory in 2.1, those are the only things we're aware of. It depends on kind of what you have. Like if you have web forms, it's rewrite. If you have MVC, it's close to rewrite. You know, it really kind of depends. So, I highly recommend it for anything that's new. Check out .NET Core. You can see what you can do with the .NET Core, .NET new templates. Or they're based in the Visual Studio. If you like File New Project, they work really well and that's what we use to do it. So, anybody else, I think I have one more minute. Sure, what's up? I mean, we consume DLLs as part of like new get packages but not at runtime. So, no, are you aware of some challenges? Oh, I see. It's entirely possible that's the case. Yeah, I don't actually know. We don't do that. Oh, is it? Cool, very good. Neat. Cool, anybody else? Yeah. Okay, cool. Interesting, I did not know that. Sure. You can specify how many disks you want to have. Yeah. Yeah, but it's workstation and service. Hi, you're really, I'm here. So, you're still helping? Think I'm out of time. Okay, yeah, and we found, I think this is a shorthand way of working around it where with workstation GC, we'll tend to collect faster and keep a lower memory footprint overall. Server GC assumes that it's the only person on the server, right? The only app on the server, and so it'll kind of use that memory until it runs out. I think I'm out of time, so thank you very much everybody for having me here.


Let's look at four force balances. We'll start with diastrophic balance, which occurs in straight line flow in the free troposphere. In diastrophic flow, only the pressure gradient force and the Coriolis force are important. The pressure gradient points to low pressure on the high surface, or low height, and thus low geopotential, on a constant pressure surface. It is opposed by the Coriolis force, which is to the right of the velocity vector in the northern hemisphere, and to the left of the velocity vector in the southern hemisphere. Note that we can find the geostrophic velocity if we know the pressure gradient on a constant height surface or the geopotential or height gradient on a constant pressure surface. For inertial balance, the Coriolis force is balanced by the horizontal centrifugal force, with the Coriolis force to the right of the velocity vector in the northern hemisphere and to the left in the southern hemisphere. This balance is rarely seen in the atmosphere because there is almost always a pressure gradient force of the same magnitude as the centrifugal force and the Coriolis force. In cyclostrophic balance, the pressure gradient force is balanced by the centrifugal force. In this case, the velocity vector can be either to the right or to the left of the centrifugal force in both hemispheres, and the Coriolis force is much smaller. This balance is seen in tornadoes and other small vortices. In the northern hemisphere, tornadoes are mostly cyclonic, with only a few percent anti-cyclonic. While smaller vortices are about as often anti-cyclonic as they are cyclonic. For gradient wind bales, the pressure gradient force, Coriolis force, and horizontal centrifugal force are all about equal. The two physical cases are shown for the northern hemisphere in the figure, along with the geostrophic balance. For the cyclonic gradient, that is, curvature around the low pressure center, the PGF points to the low in its constant as long as the pressure gradient is constant. In this case, the PGF is opposed by both the Coriolis force, which depends on the velocity, and the centrifugal force, which depends on the velocity squared. Since the PGF is constant, then the sum of the centrifugal and Coriolis force must be equal to it. And since they both depend on velocity, the velocity must be less than in the geostrophic case in order for it to be a forced balance. This velocity is called sub-geostrophic because it is less than the geostrophic velocity. For the anti-cyclonic gradient, which is flow around the high, the PGF points away from the high. It is joined by the centrifugal force, which means that the Coriolis force must be stronger in the geostrophic case than in the geostrophic case because it must balance both the PGF, which is the same in the geostrophic case, and the centrifugal force. The Coriolis force can only be greater if the velocity is greater. Thus, this velocity is called super-geostrophic because it is greater than the geostrophic velocity.


Coming on everyone, Sam here with Layton Sports Guards, again Happy Tops Transcendent Day, one of the best days of the year. We are ripping 22 Tops Transcendent Collection Baseball case break number three, Random Hit Style. Let me go over really quick how this is going to work. We've got all 58 participants copied into one random.org sheet, I got to probably show you guys that. Again, all 58 are copied in. We also have an additional random.org sheet that is empty right now. This is where the hits are going to go. As we are doing the break. I have Donnie next to me, you see him standing up right there, this handsome gentleman. We are going to, Donnie is going to be typing in a description of all the hits. We already have the ones that come in everyone, such as the 50 card full base set, the Transcendent Chrome Pack, et cetera, et cetera, et cetera. But Donnie will be typing a description of all the hits in. What we will do is once we are done showing off all of the cards and the break is over, I am going to copy and paste this entire sheet back into this document. We are going to hit the roll dice button, say it's five times, we are going to random the names five times. The hits five times, we will copy them over and whatever hit is next to your name is what you are going to receive. Good luck everybody. Let's start this process. I will see you guys in about an hour when we get this all ready to go. Again, there is only 20 spots to go in the next one. We only have two more left today with spots this morning. Happy release day. We will see you later. We will see you later. Let me make myself a little bit bigger here. Hold on guys. Just so you can see everything that is going on. Just so you can see us through on the phone. I am going to take it out of the plastic this time I think. I think that might be the new one. That was a lot more difficult than I thought it was going to be. All right. The case is coming over on the camera. I am going to flip it around really quick. I am going to make myself smaller now. First hit, exclusive invitation to the top's transcendent party. That's awesome dude. Whoever wins this good luck man.  One in a lifetime experience right there. All right. Let's open the case. Here we go. Here we go. There is a double. We will do the X on top. J. Rotter Aaron Judge Super. Let's do it dude. Why not? Sam would lose this one. That would lose my mind. I can pull one of those. That's insanity. I did not but that sounds like it would be awesome Jeremy. All right. Here we go. This is the hardest part. There we go. Okay. That's the move. Let's just grab the plastic. Yeah. Set box for me. Thank you sir. Time to sit down. For now. Come on. You can do it Sam. Come on. There it is. All right. We do have transcendent party lane. All right. We're going to start off right here is top transcendent chrome pack of four chrome cards, including at least one super fracter. We're going to keep these sealed. That is a spot. One of the hits does have this one. So there you go. Okay. He's out now. Here is our super fracter. 1952 super fracter. Here we have our cut slash dual cut slash oversized letter patch. There's a lot going on on that one. That'll go right there for the time being. I will move everything around again. This is now empty. You can see up top that is empty. Second layer foam now. We've got, we'll start with this is going to be our sealed 50 card base set. That is again going to be a hit in the break. We have our 50 gold framed autos. Appreciate that. I'm going to go right there for the time being. Our through the years, either a wander or a Vladdy. We've got our, again, I'm seeing all these unfortunately, so I know what everything's going to be. Patch auto. And as long as the viewers don't know. Yeah, nobody's going to know. We're not. You're not. We're not telling anybody. You're not freaking out yet. So you're not giving that away. The case is empty. You guys can see up top. The case is empty. Thank you. All right. Let me move everything back here. Here we go. Let's get started on our gold framed autos. And there's your empty plastic thing. That's the back. That would make sense being the front as it is Aaron judge 11 of 15. Another one baby. Let's go. Heck yeah, man. That's sweet. Starting off strong with an Aaron judge. We'll get that magged while I've got all of you here as well. We've only got 18 to go in the next one. There's your guys's link. I'm going to go ahead and tweet that out. If you would like a spot, we've only got two transcendent breaks with spots left. One second, everybody. Second one is a purple Adrian Beltray. Nice one there. Going to the Rangers. We're going. That is a hit. That is a Ranger. One of 10. Got another guy with a gorgeous signature. Up next, we've got Albert Pujols. That is 20 of 20. Nice one there. On card Albert Pujols. Rocking the chain with the Cardinals jersey. Very nice. Got for the Diamondbacks. That is going to be Alec Thomas. Rookie Auto. Nice one there for Arizona. The Debacks. Going to get another gold for the Royals. Bobby Witt Jr. 11 out of 20. Rookie Autograph. Nice one there for KC. Got again for the Royals. Bo Nos. 8 of 10. Bo Jackson. Nice one there. It's Harper. 19 of 20. Two-time MVP. Bryce is nice. Congrats on that one. Mr. Bryce Harper. Phillies. Again is Bryson Stop. Rookie Auto. 16 of 20. Nice one there. Did I say what number is the bow? 5 of 10? What did I say? 5 of 20? Yeah, it's 5 of 10. My bad. If I said 5 of 20, I meant 5 of 10. 5 of 10 on the bow. Next up, gold is Buster Posey for the Giants. 14 of 20. Nice one there. 18 to go on the next one again, everybody. If you want to join the fun, now is the time to do so. A lot of big hits to be had. This only comes around once a year. I'm not talking twice a year, but once a year on tops, at least. Another gold is Cal Ripken Jr. The Iron Man. 18 of 20. 18 of 20. Cal Ripken Jr. Got for the Red Sox. One of one, Carl Yastremski. Good luck on that one. That is sweet, man. Carl Yastremski. Nice, he has. Nice, he has. One of one, Platinum Foil. Gold frame transcendent. Very nice. We'll get that mag for you there. Whoever has that. Up next is a purple Yankee. CC Sabathia. And the CC is for Captain Crunch. Really cool. CC Sabathia. Got for the Braves. Chipper Jones. 14 out of 20 on the horizontal. Chipper. Really freaking cool one there. Another gold. This is, I guess, upside down. That's going to be CJ Abrams. 17 of 20 on the Rookie Auto. Very nice. CJ Abrams. Rookie Auto. Again, guys, just 18 to go in the next one. Random hit style. Just like how you see it here. Only got two with spots. Dodgers. Mr. Cody Bellinger. 13 of 20. Former MVP. Cody Bellinger. Very cool. Abrams. No. Very good. That's one of those same deal. Yeah. We got a Ranger. Mr. Corey Seeger. 11 out of 20. Part of that really highly paid middle infield out in Austin. Or Arlington, I should say. Nice one there. Congrats on that. And good luck on the Seeger. Chloe Seeger. Have you heard that story? What? Rich accidentally called him Chloe Seeger when he was just breaking. That's now what he's known as. Dave Winfield as a twin. 3 of 10 on the purple. Nice Dave Winfield. Dave Winfield. Chloe Seeger. There's your guys. Link again. Highly paid infield is an understatement. Yeah, what is it? 600 million just in the middle infield. Another purple. Donnie baseball. 4 of 10. Don Mattingly for the inks. One of the most recent captains. 20 more likes to 100. Donnie will do a backflip if we hit 100 likes. We'll get Jake in here and he'll do a backflip. We've got Eddie Murray. 5 of 10 again on the purple. Nice one there. There's got to be somebody who's like weird fact is they can do a backflip. Like Jay can probably do a backflip. I was thinking that. Yeah, we got backflip Donnie over here. Donnie backflips. That's his new name. Donnie backflips. Instead of Donnie backflips, it's Donnie backflips. We've got Padres. There's a Tautis. El Nino. 15 out of 20. Nice one there. Fernando Tautis Jr. 20. I'll give you my backflip so he comes in later. For the Blue Jays. George Springer. 14 of 20. I had myself a day yesterday. Another two just came in. Four number four. We're down to just 16 spots, my friends. If you'd like to join the fun with me this morning, you've only got 16 opportunities in the next break to do so. Got another brave here. Greg Maddox, the professor. 9 of 10. Nice one there. Congrats. And good luck. Got to love the professor. Green. Godzilla. Hideki Matsui. Again, I will keep saying this. The 2009 World Series MVP. Hideki Matsui. We've got to sip of water really quick, everybody. No. Can't do it. Losing my voice. What'd you expect? To lose my voice. Okay. As long as you knew that. Oh yeah. Purple. Rookie. Hunter Green. God, what a great signature on that. Thank you, Hunter, for that one, by the way. That is why you're on both my fantasy teams. Awesome auto. Good luck on that one. Zach taking another spot. We're down to 15, guys. I know. I agree, guys. This is just, he is on another level. Hunter Green's signature is on another level for 2023. How rookie's generally signed? Hunter Green is the man. Jared Kelnick. That is 15 of 15 for the Mariners. Very true. I agree, Vaughn. Jared Kelnick for the Mariners. Lot of potential in that, kid. We got for the Red Sox. Jaren Duran. Two of 15. That is a full sig JD. Nice one there. Yeah, Kelnick was another new name. Jaren Duran. Two of 15. Nice one there. Cincinnati Reds. Joey Vado. One of the most beloved men in Cincinnati from Reds fans. One of 15. Joey Vado. Gold-framed signature of the people. We've got another green. Jonathan India. Again for the Reds. 2021 National League Rookie of the Year. Another two spots coming in, guys. What are we down to now? 13 to go. 13 to go, everybody. I'm going to drop you that link again to join the fun. You genuinely have a shot at pieces of history in this, everybody. Pieces of history. Pure bliss. Green, White Sox. Jose Abreu. 11 out of 15. Nice one there. Four shy town. South side. Now a Houston Astro. Mr. Jose Abreu. We are on to the next one, guys. That is another green. That is a rookie. Jay Rod. Julio Rodriguez. 10 of 15. There he is again. Back-to-back cases with a Jay Rod. On card rocking those vintage Mariners unis. That's awesome. Another green as a White Sox. Back-to-back. Lou Bob. Luis Roberts. 3 of 15. Nice one there. Rockin' that chain, baby. Rip mic and speakers. Sorry, Adam. My bad, dude. And ears. Yeah, fair. Fair. New York Yankees. The Sandman. 4 of 15. Mariano Rivera. We miss you, Moe. The last number 42. And the last one ever. Gotta move away from the mic. With the Nick Davis. Thank you, Johnny. We've got green for the A's. Mark McGuire. That is going to be half of the Bash Brothers. 7 of 15 on the color match. Sure static. 7 of 15 is Mark McGuire. I'm going to have to watch that back and see what that sounds like. Adam goes rip mic and speakers and ears. We've got green for the Tigers. There's a Miggy. First Miggy of the day. 12 of 15. There's another new name. Mr. Miguel Cabrera. The Motor City Monster. Very cool. If you're going to watch this stream back, make sure it's not a device. You don't care if the speakers get blown out or not. I'll play it in my car and have my subwoofers go out. We've got another purple. That is going to be Mike Piazza. The Pizza Man. 6 of 10. Some numbers in there. Nice one there. The Pizza Man. Philadelphia Phillies. Mike Schmidt. 19 of 20. Mike Stromboli. Mike Schmidt. Nice one there for the Fills. Love. I got to get a Mike Schmidt jersey. I think Mike Schmidt guy. Purple. Mike Trout. Wow. 6 of 10. Mike Trout. We're going fishing. Everybody grab your bait. Grab your tackle boxes. We just landed a Trout. Very nice. 6 of 10 this time. Lowest number Trout we've pulled today, I believe. I think that's accurate. Yeah. 6 of 10. Mr. Trout.  Again, guys. Just down to 13 to go. Ooh, if you're... There's a chance to meet Schmidt at Clearwater. That's cool. I didn't know that, Jeremy. Going to the next one. Okay, red. Nic Ladolo. 18 out of 20. Rookie Otto for the Reds. Nic Ladolu. We've got red is Nolan Ryan. The Express. One of one. Wow. That is a new name and a one of one. Heck yeah, dude. The bait's going. Yeah, no. Just kidding. Don't do that. That's awesome, dude. One of one, Nolan Ryan. That'll get mad. Don't you worry. Green. Rookie O'Neill Cruz. 10 of 15. Nice one there, Rookie Otto for the Pirates. 15. Pete Alonso. Nice polar bear. That is going to be two of 15. Want to kick the car out of bed. We've got Robin Yeow. 17 of 20. Let's count on Yeow. I'm going to make it something that smells good. Serena, you did something wrong. Yes, it does. Next up is a Roger Clemens. 10 of 20. The Rocket. That's awesome. Roger Clemens. Making his way into Top's products again. Slowly, but surely. You've got a green for the Braves. Ronald Acunha Jr. I'm the horizontal. That is Jersey numbered, Donald. We got a Jersey numbered Ronald Acunha Jr. Very nice. Very nice. Good luck on that one, everybody. There's going to be a Cub. Ryan Sandberg. 10 of 20. Nice Rhino. Donald Acunha. Donald Acunha. That's going to be your new name. Oh, you're Maggie Acunha, by the way. Okay. Donald Acunha. Over here. Donald Acunha Jr. We're not. Donny Backflips. We've got Rookie Otto is Shane Baz. 6 of 20. The Wizard of Baz. You want that one too? I know you said earlier that I'd love to see a Rhino get hit. Shane Baz. Another one came in. Another one came in. And another one. I'm not. Oh, I'm serious. I'm serious when I say there's only 11 spots to go. Whoa. And number four. Whoa. 11 to go. There's your guys. This link if you'd like to join this awesome experience. We've got a Rookie. That is Mr. Torkelson, 8 of 10. Spencer Torkelson, that is. Nice one there. Nice Torque. A few more to go here, everybody. We've got a green for the Dodgers. Trey Turner. There he is. Captain America again. 1 of 15. Yeah, I don't believe there was a show. Yeah, there was not a show. Hey, this case. Not yet. No, it goes an alphabetical order by. First name. Eggs of Vladimir Guerrero Jr. 9 of 10 for the Blue Jays. Nice one there. I do really like Vladimir Guerrero Jr. Big fan. Big fan. Although he's in the AL, he's still a big fan. Vladimir Guerrero Jr. Pull the back part out of this last card. We've got the last one here. That is a gold. Mr. Wonder Franco. Rookie Auto, first one stamped. 1 of 20. There we go, ladies and gentlemen. Oh, wow, we are done. We are onto the big boys. Oh, good God. Perfect. We have our 58. How much he dislikes the Yankees. It's kind of a square for that. I'm not going to lie. But we're going to start off here with our Patch Auto. That is going to be three colored Gameuse Patch Auto. Cal Ripken Jr. 1 of 1 for the Orioles. One of my favorite logos of all time right there. That Orioles logo. Good luck on that one. The Iron Man. 1 of 1 Cal Ripken Jr. Auto. Patch. Patch Auto, I should say. Very cool. It's more than you do. Let's go with our Gold Deca. Just because I saw what it was. That is going to be the Hawk Andre Dawson. 1 of 1 for those Montreal Expos. Bring back the Expos, everybody. Which one was that? This is the Gold Deca. Or Deca, whatever it's called. Uh-oh, there's Mac Miambo in here. What up? Oh boy. Next up, we've got our Through the Years. 1 of 1, that is Wonder Franco. 1 of 1 on a 1966 Tops. Right there. I remember that came out in Heritage one year. They used this. Down to 10 to go, guys. We are almost there. Good call on that one, Greg. 10 to go, everybody. It breaks next. Right, our Super Fractor is again Andre Dawson. The Hawk. 1 of 1 Super Fractor Auto. That's awesome, dude. Andre Dawson. 1 of 1 for the Montreal Expos on your 1958 tops. Excuse me. I said 52 earlier. It was 1958. Oh boy, Donnie. Oh boy. We've got our cut slash dual cut slash oversized letter book. That's it. Our letter. Wow. Whoa. Wow, dude. Whoa. Cut auto of Mr. Padre himself. Tony Gwynn. Holy cow.  That's so cool, dude. Man, rest in peace. One of the nicest guys, too. Holy cow. Mr. Padre. Dude, I'm so happy to be holding this right now, dude. This is amazing. So amazing. That's so cool. Rest in peace, man. Gone way too soon was Tony Gwynn. Rocking those vintage Padre jerseys, too. So cool, dude. Tony Gwynn. Wow. Wow, wow, wow. That's insane. All right. I think you ladies and gentlemen know what it is time for. It is time for the random. It is time for the random. Let me get all these copied on over. Thank you, Donald. Yep. Yep. Oh, yeah. He was awesome, man. Oh, so cool, dude. Tony Gwynn, man. That's awesome. That's so cool. All right, guys. Here we go. 22 tops transcendent collection baseball case break number three, where you're doing the random. Now we have our 58 participants and our 58 hits. Again, we have all of them filled in down to the Wonder Franco. Again, these are all in alphabetical order. We're going to roll the dice and we're going to random each four times. One, two, three, four. John A. Down to Stephen L. E. Four times on your hits. One, two, three, four. Vladdy Jr. Green down to Hideki Matsui. Again, four times there. These are coming over. And four times there again. And these are coming over. John A. with the Vladimir Guerrero Jr. Nine to 15. We got Joseph W. with the J-Rod. Congrats, buddy. Derek W. Dave Winfield to 10. Edward P. with the Alec Thomas. Jim D. Mick Ladolo. Jonathan L. with the Mark McGuire to 15. Chad C. Aaron Judge to 15. Congrats, Chad. Louis C. with the Mattingly to 10. Alvin S. Cody Bellinger at 13 to 20. Got Gabriel C. with the Mike Trout Purple Auto 6 of 10. And congrats, Gabriel. Rory W. with the Eddie Murray 5 of 10. We've got Byron C. with the Chipper Jones 14 of 20. Isaac K. with the Roger Clemens 10 of 20. Landy B. C.J. Abrams Rookie Auto. John A. with the Wanderer 1 of 20. Rookie Auto. Congrats, John. Eugene L. with Nolan Ryan 1 of 1. Ted T. with the Fernando Tates Jr. to 20. Rory W. Buster Posey 14 of 20. Gabriel C. with the 1 of 1. Transcendent Gold Deco Auto. Andre Dawson. Got Bruce T. O'Neal Cruz to 15. John N. with the Lubbob to 15. Richard B. 1. Transcendent Chrome 4 Packard with at least 1 Super Fractor. Have fun ripping that one open or selling it sealed, Richard. Stephen L.A. C.C. Sabathea, Karen W. with the Hunter Green to 10. Glenn B. Shane Boz. Bruce T. with the Spencer Torkelson 8 of 10. Ted T. with the Joey Vado Green Auto 1 of 15. John F. Miguel Cabrera 12 of 15. Scott U. The Super Fractor 1958, Andre Dawson. Ted T. with the Mike Schmidt and Austin S. with the Bobby Witt. There you go, Austin. Congrats, my friend. We've got Stephen L.A. with the Oversize Cut Auto of Tony Gwynn. Congrats on that one, Stephen. That is awesome, my friend. John N. with the Ryan Sandberg. John S. with the Jared Kellnick. Dennis H. picking up the 1 of 1. Wander Franco through the years. 1950... 55 tops, I think that was. Ross C. Jose Abrey. Regina with the Mariana Rivera. Congrats, Regina. That's some PC sauce for you. Kurt S. with the Bo Jackson. Brian S. Mike Piazza-Purple. Craig B. with the Peter Lonzo. Gabriel C. with the transcendent VIP invitation. We knew it was going to happen with one of these breaks, Gabriel. Half fun at the party, my friend. Julian C. Jaren Duran. John A. with the Adrienne Beltre. Ammo D. Robin Yau. John N. George Springer. We've got Gabe C. with the Ronald Acuna as well. We've got Jesse S. Cal Ripken Jr. Auto to 20. Scott U. with the Jonathan India. John A. Corey Seeger. Kyle K. with the Bryce Harper to 20. Phillip D. with the 1 of 1 Patch Auto. Cal Ripken. Congrats, Phillip. Frank L. with the Bryce and Stop to 20. Louis C. Greg Maddox to 10. Christy Yastremsky 1 of 1. Kevin M. Trey Turner 1 of 15. Shep S. with the 50. Card full base set. All number to 50. Congrats, man. Austin C. Alper Poulos 20 of 20. And we've got Stephen L. E. with the Hadecki Matsui Green Auto 11 of 15. Thank you guys again for getting this filled up. Yeah, thank you again.


Attention Green Valley Ranch residents. This is a community notification of a new sexually violent predator in your area. Please stay tuned to the following short program for more information. Hi I'm Technician Ron Hackett with the Denver Police Department. The Sex Offender Registration and Compliance Unit at DPD is responsible for the registration monitoring and tracking of all registered sex offenders and sexually violent predators who live in the city and County of Denver. Here's a brief history of sex offender legislation in Colorado. Our state laws trickle down from federal government mandates. In 1994 we had the Jacob Wetterling Act which mandated that states would establish a sex offender list. Megan's law of 1996 said that the public would have access to those sex offender registration lists. The Pam Litchner Act of 1996 stated that some offenders might have to have lifetime registrations. In the Adam Walsh Act of 2006 unified sex offender laws across the country. In Colorado the legislature has determined that sexually violent predators by definition pose a higher risk to the community at large and therefore mandated that upon their release from the Department of Corrections the community must be notified. Sex offender notification in Colorado happens in two ways. The first is passive and ongoing through the sex offender registration process which is a list maintained by local police departments. The second way is active via community notification for those offenders determined to be sexually violent predators by the courts or by the parole board. Most sex offenders in Colorado are supervised by the criminal justice system in our communities. Most sex offenders engage in crossover behavior which means they may have been arrested for one type of crime but be apt to commit another.  There is no typical sex offender but all tend to be deceptive, manipulative and secretive. 80 to 93 percent of sex offenses are committed by someone known to the victim. Sexual deviancy begins in mid to late adolescence. Sex offenses are not impulsive.  The community has a vested interest in helping offenders to be successfully managed in the community. Sex offenders have the same need for housing and employment as any other citizen.  There are approximately 16,500 registered sex offenders in the state of Colorado. About 65 percent of convicted sex offenders are placed in the community on probation. The remainder are in the Department of Corrections or Community Corrections. Offenders may be caught for one type of offense but be at a high risk to commit another type. Crime of conviction is only one indicator of risk.  The offender's residence must be verified quarterly by the Denver Police Department. The full sex offender registration list is available by calling the Denver Police Department Identification Bureau at<PHONE_NUMBER>. Convicted felons and those with multiple convictions are posted online at denvergov.org slash police.   Now, here's a look at the newest sexually violent predator living in Denver. Here's an overview of the registered sex offenders currently living in Denver. There are 2,372 total living within city limits. In Denver Police District 5, there are 253. Precinct 523 has 89 registered sex offenders. Of those, 67 have felony convictions and 22 have misdemeanor convictions. James Vernon Marshall is a sexually violent predator currently living in Denver. He's 54 years old and was born on July 10, 1969.  He's currently living at 5069 Perth Street in the Green Valley Ranch neighborhood of Denver. Schools located within one mile of this offender include Florida Pit Waller ECE-8 School at 21601 East 51st Place. Parks located within one mile of this offender include Green Valley Ranch East Park, First Creek Open Space, Highline Canal, Orleans to Nepal, Piccadilly to Orleans, Maxwell to 56th, Green Valley Ranch, Green Valley Ranch Golf. Bus routes located within one mile of this offender include Route 42, Orleans Street and 51st, Orleans Street and Stole Place.  He's currently on parole and registered with the Denver Police Department on February 1, 2024 to 5069 Perth Street in the Green Valley Ranch neighborhood of Denver.  James Vernon Marshall has been determined as sexually violent predator after meeting the following criteria. Criteria 1, age 18 or older on the date of the offense or under 18 and tried as an adult. The offender was age 36 at the time of the offense. Criteria 2, the crime must have been committed honor after July 1, 1997 and convicted honor after July 1, 1999.  The offender was convicted on September 28, 2006 for sexual assault overcome victims will. Criteria 3, the relationship to the victim was one of the following. Victim was a stranger to the offender or the offender established or promoted a relationship with the victim primarily for the purpose of sexual victimization. The female victim was 23 years of age. The offender was a stranger to the victim. Criteria 4, positive results or the passing of a risk assessment instrument administered by probation parole staff and a qualified treatment evaluator. Positive results include an assessment for the presence of a mental abnormality, a level of denial regarding the offense, treatment appropriateness and motivation, presence of sexual deviant interests. The offender was evaluated by the El Paso County courts with positive results, determining him to be a sexually violent predator.


During and after severe weather, including winter storms, safety is our top priority. Remember that most injuries take place when the storm is over. As people go outside to check on homes and possessions, here are a few safety tips to follow when you are outside after a winter storm. Never touch any downed wire. Even telephone or cable TV wires that touch a live power line can be deadly. Never try to make your own electrical repairs. Let our crews do the dangerous work.  Never go into areas with debris or downed trees. Dangerous power lines may be buried in foliage and debris. Never go near chain link fences. Dangerous lines may touch the metal. Never walk into areas while Georgia Power crews are working. If you're driving near work crews, obey road signs and proceed cautiously. Remember, your safety and the safety of our crews matters most. For more winter weather tips, visit georgiapower.com slash storm.


How can we use parallelization for sequential data? In 2017, the transformer neural network architecture was introduced. The network employs an encoder-decoder architecture much like recurrent neural nets. The difference is that the input sequence can be passed in parallel. Consider translating a sentence from English to French. With an RNN encoder, we pass an input English sentence one word after the other. The current word's hidden state has dependencies in the previous word's hidden state. The word embeddings are generated one time step at a time. With a transformer encoder on the other hand, there is no concept of time step for the input. We pass in all the words of the sentence simultaneously and determine the word embeddings simultaneously.


Appalachian Wireless proudly brings you unlimited data. Unlimited data is only $80 a month for a single line. Four lines as low as $200. Better service? Bigger savings? That's today's Appalachian Wireless. An East Kentucky network company. Get a speed slow to 25 gigabytes per line to 512 kilobits for phones and tablets. And 15 gigabytes for motors. See store for more details. There's no question the economy in eastern Kentucky has taken a hit and many people are struggling. Some to the point of actually finding themselves without a place to live. And even though Pikeville does have a homeless shelter, officials there also do what they can for the people who can't or won't stay there by delivering supplies. Right now we're at a homeless camp that we visit to drop off donations that come in. Things like blankets, flashlights, food, just things that sustain people. You know, canned meats, any kind of things that you would use at your house they use here. Anna Coleman with the West Care Emergency Shelter in Pikeville says she worries about the homeless all year long, but knows how dangerous things can be in the winter. The temperatures have been in the teens and below. So to think about a person sleeping like this at night time, it's just, it's unfathomable that people in our world has to live homeless. She says while there are beds available at the shelter, sometimes circumstances in people's lives prevent them from going there.  You know, IDs cost $12. When you're a homeless person, $12 is an astronomical amount. At the camp we visited, the man who lives there was gone, which is normal for this time of year. To sustain yourself, you have to go somewhere to get warm, maybe take a shower. And the shelter allows that. They can come in and take showers and eat and things like that. So a lot of times they come over there and visit us and that's how we find out about where their camps are and how we can help them. And from time to time, Coleman makes deliveries, bringing bags full of supplies she knows they need, like flashlights, batteries, canned food and blankets. These blankets, the ones we laid down today are covered in this tent. So, you know, it's amazing that this person has used this stuff and I'll keep doing it as long as I see this kind of stuff. Coleman says supplies are always needed and anyone wishing to donate is encouraged to drop things off at the shelter located on the Pikeville Bypass. Because to her, this is personal. When you have people like this that need somebody, I want to be that somebody. And I encourage everybody else to come forward and be that somebody. No matter if they think the society has given up on them, we will never give up on them. Never. In Pikeville, I'm Shannon Deskins, the KB News.


Hi everybody and welcome to the Lakin Lock Room. Once again I'm John Weber joined today by Jim Zabrowski, the head football coach at Lakin College. Jim, as usual on the show, we like to get right to it. Congratulations again on another big win. You guys spank McMurray 53-7. That was a good game. McMurray is not as strong as they've been in the past. We felt that way a little bit, we never know, because they were living on mystique and they haven't lost a conference game in two years. And they were trying to see, hey, even though we haven't been playing as well, but one, they're still two and one, I think, coming to the game. I think they were saying, hey, we're McMurray, you know, people still have to respect us for who we are and not losing a game in two years. We made the playoffs last two years and I think our kids kind of took that as, hey, someone's got to break this thing and someone's got to, let's see what we can do. And a great thing when we jumped out really early, got the lead, got them in a bind, I think, and then kind of took it away from there. And then I just started steamrolling. Yeah, you guys really did jump out early, 20 to nothing at the end of the first quarter. Is that something you obviously hoped to do that, but you have something that you saw on tape that were like, hey, we can get these guys right away? Yeah, you know, we thought we could, the scary thing was we thought we could take a couple shots vertically on them and get a couple quick scores. The sad part was we threw three interceptions in the first half and we still went in 32, nothing a half time. So we took some chances. We felt like we could run on them. We just thought we were bigger than they were up front. We thought our kids are starting to come around in the run game and we really thought we could pile on them. But early in the game, we wanted to spread them out, do some of the different things, get Jeff Taft involved, get some of our speedier kids involved. And we just misconnected a little bit, but when they did get an opportunity, we did make them pay. And so we thought we could get out, you know, and we thought if we got out, I thought if we got out on these kids, I think that they don't handle adversity very well. I think they never have had to in years past. I think if you get on them and make them feel like, oh, we're not the same McMurray, and maybe the score could start rolling and our defense play outstanding, scored a touchdown early again in this game for us, got it even rolling faster, and then they didn't have much of an answer. So really, I think it was a big defensive deal in that first half. We just got to get the ball back. We had so many opportunities in the first half. We never punted. We had five touchdowns and three turnovers. We had eight possession in the first half, never punted. The score could have actually been a little crazier just by the way the game worked out. Well, you said this isn't the same McMurray. This certainly isn't the same Lakeland either.  The last few years, we've kind of been battling 500 at this point in the season already. But I think another thing, too, is that this is really a statement game for you, because last week, or people were saying, hey, there are three and one going into this game, and played Oshkosh in four over times, but that was their one good game. Carthage has always been a close game. He had a couple blocks and stuff with Tri-State and Eureka. But now, this game really sends a message to everybody, hey, watch out, we're for real. Yeah, I think it does, too, John. I think our kids, maybe even our kids a little bit, we always talk about being good and going step by step.  I'm not saying crazy stuff. We're getting one step at a time. This is step five for us. We're three and one.  But I said, we make enough mistakes to keep improving every week. So there's so much improvement we still need to make. But I think you're right in the statement concept, McMurray's still McMurray. And regardless of their four and six this year, five and five, whatever they end up, it's still their first loss in two years. It was still a kid. I think we won't be in them once the last five or six years or seven years. So it was kind of like to say the rest of the league and the rest of the, or the rest of the division three football, hey, we can play some football. You know, we're pretty good. How good, unless you have to be determined. But I think this was a game where everyone else that looks at the score and says, wow, they can play. Oshkosh wasn't a fluke.  They played Oshkosh well. Oshkosh just beat Stout who still ranked the top 25 in the country. So I had to play the Oshkosh game. I felt good. And you and me talked about that because we lost the game. But being in the CCIW, it's seen a lot of really, really good division three scum going, Oshkosh is good. Their front seven is outstanding on both sides of the ball. And we had a chance to win that game. You had one play away from one. Right, one play away. So I kind of said, well, if we can just not stumble off that loss and just really realize that it was a great football game, that we can build out that game really against momentum.  That's just a combination of other teams folding sometime. Defense playing outstanding and the offense capitalizing. Well, let's talk about the offense right away. Marcus Dunham is a guy we talked about. He said he's kind of a quick back. He's got to put some weight on as he goes on. But he's the guy that you're going to count on in the years ahead, but he really had a big game for himself. He had somewhere between 18 and 22 carries for 120 yards somewhere around there. Had a couple of times. I think he had two touchdowns. And when you watch them highlights later in the show, he was carrying some people. He was making people miss. He's a very good football player.  I mean, he's 152 pounds.  He did a lot of great things. So he got us going, you know, scoring the ATR touchdown first drive of the game and did a really good job for us. He's a freshman and another guy we're going to mention is a freshman too. He scored the next touchdown. You know, Van De Leuven from Sheboyan Falls there. The guy we mentioned several times throughout the year. He had a 55 yard interception. Yeah, that's the second time in a row he scored. You know, he's part of, he moved off. That's made him get a little more production. But he picked up an interception. They ran a little screen, picked it off, took it to the house. The scary thing was later in the game, he almost picked up a fumble and scored. So what that shows you is he's around the football.  He's a smart football kid. He's a great high school program at Sheboyan Falls. He understands, you know, winning football. He understands what it takes to win. He's done a great job for us. Now, I got to bring it up. The only draw back. Here we go. The first two scores, unfortunately, the field point after Tim needs some work. Right. That's an understatement. We missed the first one. We had a backup snapper in. Man, who's our snapper? Been a little banged up and stuff. We tried to take him off a couple of things. I don't know if it's a combination of the snout, I watched the tapes. It was a low kick. Our right side got a little pushback. A combination of a bunch of things that's bad. So we missed that one. Got the second one blocked. Pissed off. I think I can say that. Pissed off. So we ended up going for two the next three times. And get it once. Should have got the next two times. But then after that, you know, we made every extra point after that. But yeah, that's a very scary issue. It's a very, you know, it's not so much the kicker. I think it's just a combination of everybody. We just got to keep getting. We get good and all of a sudden we fall back. And we get good. You know, we just got to get more consistent. One thing you keep mentioning is the balance. We've talked about balance in so many different phases. The offense, the defense, the pass and the run. Also here though, one thing you've talked about is having the quick drive versus the long drive. On the next drive, you guys had a nice 10 play, 95 yard drive, which balanced out your quick scores. And that made it 20-nuff. Yeah, that was a nice play. We got help by a penalty. They had a, we were on the 6th yard. I mean, a third and 16 or something passing a parents' call. And after that, that kind of takes us to, I think you can drive the length. I mean, we were pinned. Five yard line. And we take it 95 yards. That's not a very good feeling for the defense. We just got roped for 95 yards.  So I think you're right. It is good. We have the ability to grind it if we have to. You know, if we need to.  And you've got so many options too. You've obviously talked about denim. And the next possession early in the second quarter or your next score, I should say, loopy or quarterback runs in it from 38 yards out. Right, right. We run option.  You don't see a lot of 6-4 kids running option. Made a great cut. He cut all the way across the field and scored. So that's another now team that people prepare while all the quarterbacks are going to run too. And he has been running. The problem is we've been taking a sack or two of his shirts is rushing total or rushing total. This game we only had two sacks plus yards, plus yards. I had like 10 taken away. So we need our quarterback in our office. We need our quarterback to gain. I told him we needed between 50 and 100 yards from you rushing. It's just how our office is set up. We've got scramble, design runs. We have to get the quarterback yardage.  Or maybe a Marcus is just learning how to do it. Yeah, exactly right. And in this game they're doing, I mean Brent's 230 or whatever he is on 6-4. He can carry it now. Well, the next score right before half time, you guys scored the 5-6 team marker to make it 32-nothing. This time it was a receiver, Jeff Taff. Again, the poor man Barry Sanders. There you go. And he's good. He's good. He makes people miss. He caught it. We ran a three-vertical concept and he took the middle great throw by Brent. After coming off a bat, throw the last run, strokes it in there. I think it's third down and 10 at that time or something. Bang, touchdown. That's around 40 yards, around 35 yards. And he's a special kid out there. And that was a 61-yard touchdown pass from Mookie. And again, that was a quick play. And three plays, 61 yards covered only 1-15 off the clock. Yeah, so you said it's a long drive, short drive. We hopefully have the ability to do it both. Now you guys go into half time. We talk about this every week. Now it's a little different scenario here because you all talk about that 30-point barrier. If you get past 30, then you really got to pretty much have the game one. I agree with you. This is 32. This is just a football coach mentality. It should have been 35. 32 just gives them, if you think about it, it's four touchdowns but four 2-point. It's a four-score game. You know that's really nasty. It's tough to get four 2-point. I'm not even that bad. But you're still four. You're always looking to get that one more score ahead. So I told them, hey, they're the defending champs. They're going to go in there. The coaches are going to rant and rave and say, we need to stop. We must get a stop. We get a stop offense. We're going to grind it and just try to break their will. I just called a will-breaker drive. We need a will-breaker drive to put this thing out of reach. And it happened. We gave up, I think, two first-downs to make memory. They punt. I think our next drive, we might have thrown it once or maybe not, no times. And it was, I don't know how many-play drive and 10 or 12-play drive. Actually it was 13-play. I'm not sure if we threw the ball in that drive. And it was grinding out a 70 or 75, 80-yard drive. And right then it shows over. What you do is you eat up clock.  Yeah, and you guys really did shorten. You guys basically up one quarter of the whole second half. Took seven minutes and 25 seconds off the clock. So you guys end up 39-nothing.  Right, and the funny thing about the ironic thing about that was we had a mixture of ones and twos in there. Because 39-nothing, you're pretty comfortable and out of five minutes left in the quarter. Unless you totally self-destroyed, you got to feel pretty good about life. And so we were mixing in ones and twos, which is good because young kids play in town and we give up a score on our defense. First touch on giving up in the last two home games. So they're not happy about life. So we, I think we don't score the defense. I owe a coach Crete, our defense coordinator, and make sure you get the young guys and he goes, hey, I started to want to go back in there and finish with a good taste in their mom. That happens in the next play. You'll see it on the highlights. We just crushed their full back fumble with ball right back. And we end up scoring and making 46 to 7 or whatever. But that's how our defense mentality is now. They're not so happy about, yeah, they knew we were going to win a 39-nothing. But giving up a touchdown ticks them off. They don't like giving up scores. So they want to go back out there and end it feeling good about their side of the ball. And they did a great job. McMurray being McMurray, the one thing you guys want to know about their running game.  They have another good back as well.  Yeah, and that was a couple of sacks helped out. But yeah, they didn't rush the ball very well. And we make, they, I think they were playing their backup quarterback too for some reason. So making that kid throw was always going to be in our favor. And that kid does, once he gets going, he's pretty good. We don't let him get going. And that's just not a standing job by the defense. I stand corrected. They had 42 attempts, they had a couple at the end. No, they had a couple at the end. They did nothing on the ground. And again, nothing in the air as well.  Which is outstanding. And outstanding effort by all 11 of those guys. And all the guys that played. Great job of just doing what they needed to do. Yeah, you guys aren't going to lose too many games when you give up 163 and you guys have 507. That's a good combination. That's a good combination. Well, you guys go on the fourth quarter. You're feeling pretty good. 39-7, we got a minute here before a break. At this point, you got to feel really good too. Because now the injury factor becomes kind of secondary. You start thinking about, hey, who can I rest? Or who can I get out? Exactly, right. We just put our twos in. And when scores become lopsided, it's a mixture of the other teams saying, I don't want to be here anymore. And your twos going in there and saying, hey, I'm not just going in there for mop-up time. I'm going in there to make myself better and show the coaches that I want to be one of the ones. We go out there and one of the drives was a one-play drive to Aaron Berry, our backup halfback who's earned more and more playing time at Gifford Moosburg. Terrific young man. Runs hard. We gash his 16-hour touchdown. So those twos go in there. And that's a combination of what happened. Those twos go in there. You're resting your starters. We played four quarterbacks again. We played 10, 12 running backs. All our receivers, I think, got in. And you're right. It's a great combination. And you can rest those kids a little bit. Get them healthy for next week. Or we get the sign here. We got to go to Bregar to come back and talk about the last score and then talk about your upcoming opponent. Stay with us. We're in Bregar and more in the Lake of Lackeroom. Not that I have much time with these little guys and my job, but when my wife went back to school, I thought, why can't I? Certain things in life demand my attention, but a new career in computer science deserves my attention. An evening class at Lakeland doesn't tie my life in knots thanks to a flexible, easy-to-manage schedule that allows me to balance work, school, and the twins. Evening classes that meet once a week. That's the easy part. Thanks everybody and welcome back to Lakeland Lackeroom. Once again, I'm John Weber, joined today by Jim Zabrowski. He's the guy to say we just, right time, right place, to get a nice commercial here for Lakeland Lackeroom. I like that. That's how it should be. That's lakeland.edu. Check us out. So anyways, but getting back to the game here, you guys, obviously you're now up 40-67. You guys just mentioned, or you just mentioned Aaron Berry, actually scoring the last touch on the game. We made it 53-7. One thing that's pretty cool though, you talk about Van De Leu from Falls. You talk about Berry from Wolfsburg. You've talked about Sam Sherry from Howard's Grove. I know we've mentioned this in the past, but it's really cool to get contributions from the local kids. And also now you're starting to gain more interest than the local kids do.  And it's always a tough sell, I think, wherever you are to try to keep kids home sometimes, because sometimes they just want to get away. And I think if you make it more interesting, exciting for me, this is, you know, there's something going on. It's pretty good up at Lakeland. We'd love to be able to keep those kids. And you're right. The big thing is Van De Leu's freshman, or sophomore, Aaron Berry freshman, Sam Sherry is a junior. So you've got kids, you know, Eric Fritz is the only senior, locally for the most part. So we've got kids from the area who can play, and are going to play for years. And I hope other kids who want to come and say, they go home, hey, I'm really having a great time at Lakeland. The school's great, football's great, you know, and all that stuff. Probably what we should mention here is the other touchdown Jed Manders. I know you'd be mad if we didn't mention him here. Yes. So he had a 14-yard pass. It was kind of a broken play. We were, it was 39-7. We were on the, like, 14-yard line, 12-yard somewhere around there. We ran a play-action pass, and I'm kind of breaking down. I mean, it was an unbelievable play to scramble, and then Jed just kind of leaked out, and yeah, he'll be happy. He'll be happy to mention that if you watch. That's right. Let's go ahead and look at some, replay some highlights from the game on this pass, this past weekend. Again, it's Lakeland versus McMurray. All right. First, Mike Gregory is below this kid up, and that's kind of his, we love to see. Our defense is stroking people. They're Vandy's touchdown. They run a screen. Bad throw. Vandy picks it off, makes one guy miss, and he takes it to the house. And that's a second touchdown, too. Yeah, I love the sideline. I mean, the kids just, they're loving, they love to play right now. Here's our, one of our second drive. We throw a little play-action pass to Travis Jarvis, our fullback. Great job. Makes three guys miss. They weren't very good tacklers. So we told our kids, just keep running. Good things will happen. Here's Brent's touchdown. We run a little option. Up top, great run here. He starts from the left, cuts back across the ground. This is a 6'5, 235 pound kid taking it to the house. He's pulling away today. He is pulling away. He'll like that you said that. Because he is. He runs well. Here's Jeff's touchdown, 61 yard touchdown. He's talking about, great job taking the middle, breaks that kid off, and just takes to the house. The great thing is, you kind of feel that there's going to be some time in the game where you get this. Great run player. Our motion guy knocks this kid out. We get a great double, we got kids that are just blowing up in there. And then you get to see all our kids running down the field. And here's another big, there's Aaron Berry. Watch this pile of push. He gets four yard gain. By the time this play is over, it's a 16 yard gain. It's like a rugby scrum. And that's what's great about our kids playing hard. Here's our defense. They just get back on the field because they're ticked off by getting up a touchdown. And they come out.  And that's a great attitude to have on defense.  Here's Aaron Berry again. First gets in there. And he just goes through there quick. Bang, 16 yard touchdown. One play drag. Yeah, one play drag. I love that. And the kids are excited. Those are the twos and they're all excited. So it was great.  I mean, there were kids getting, we had to say, the kids were going to stroked. The kids were going to stroked out there. And that's what you want. You want to be the most physical team out there. I always tell our kids, if you're the most physical team, you're always going to be in the game. Doesn't mean you're going to win it, but you're always going to be in it. Right. And if you're in it, then it comes down to, you know, a play here or there. Yeah. You can tell your kids just by watching the tape, how excited they are to play. You've got kids trailing the play. You've got kids pushing the pile. Guys in the sidelines. I mean, that's exciting. That's what kind of gives you chills as the coaches. And you know, as a baseball guy, when you see your kids kid it's a home run. The kids get all excited. Instead of sitting there going, oh yeah, here we go. I mean, our sidelines are going nuts. And that's what they bought into everything we've preached, just play with a passion. I just tell the kids, play as hard as, you know, I talk about playing how I coach, and I tell them, I'm not a nice guy in terms of, I want games like this in terms of, because it shows domination in the sense of both sides of the ball. But the physical, just weren't tearing the physical presence. But we've always tried to bring it right to the job. So we just need to become physical. And then hopefully everything else take care of itself. Right. Well, we've got to run down the numbers a little bit here too. You guys had 27 first downs compared to McMurray's only 13. You guys gained a net, net rushing 286 yards compared to the 89 we mentioned. 220 yards passing compared to 74. Time of possession, you guys had it for 3315. McMurray had it for 2645. Those are some of the key numbers that stand out for you guys. Yeah, it was. And I said the big thing was, we went through the ball 21 times, I think. It was 12 for 21 or something like that. And that's what we want. But you're getting 15 yards of pass play, 18 yards of pass play. And that's a nice day at the office right there. It sure is. 53 yards. 53 attempts rushing to us pretty nice. Yes. You guys are in control of the game. Right. But a couple of guys that stand out individually, you talked about Marcus Denham. He had 20 carries for 116 yards. Right. Loopy, we mentioned 11 for 18. 209 yards. Two touchdowns. Taft, seven catches for 133 yards and a long touchdown. That was a big game. That's a big game for every server. We only played for the three quarters. Yeah. Yeah. Even Jed Mander's coming from the tight end. Yeah. You guys, Casey Kodrowski, one punt. That's a good sign to it. That's what I told him. Zabrowski, Kodrowski. You know, it's that Polish connection. And I said, Casey, I love you, but I don't like seeing you on the football field. If I see you on the football field, in that case, that means we're not doing squat on offense. And he is an exceptional punter for a friend. He is unbelievable. It's tough to punt once you're all on the sideline doing it. He was about there. Great thing about that punt. He crushed it. They fumbled the ball right back. Yeah. Yeah. Good signs again. We mentioned nine tackles. Led the way. Johnny Ferguson had five. Paul Daniels and Eric Voigtbilt had five each too. A couple of the guys that had Sacks Ferguson, Daniels, Voigt as well. Excuse me. Benton and Shrimp. Yeah. The thing when you look at those tackle totals, you never sat here and said Roosevelt Morris 22 tackles. Right. And then everyone else had three. It's tough to find that big. It's eight, nine, six, four, five. That means a lot of guys getting to the ball and a lot of guys doing what they need to do to get the job done. That's what we were talking about before the show weekend and week out. It seems like we're mentioning a different name. Yeah. And that's good. That's a good thing. We don't have, like I said, I'm going to tell you what, we have, and people always all you down players, we have good kids and we have good players. Some players are very good, but I don't necessarily have that just one, you know, some of the states go to get that transfer kid who's just six, five, I mean just unbelievable and so on. We have hard-nosed kids that are tough to play, so I think that's what is not a tremendous one, unbelievable. No, we have some good ones though, no. But it's just kids, other kids just keep stepping up. And midway point here now you guys are four and one-half way through the season. It's amazing to start to have, I was just thinking about that too. I'm like, where'd it go? But I mean, what do you guys, where do you, how do you feel right now? Your first season as a head coach, where do you feel you're at right now? When I was driving home and I said four and one, you know, I didn't, I never, and you've talked to me, I know, fans I think, fans and people who care about baseball always make predictions and maybe other coaches will make these guys that guy can't do anything. And I think I just sat there and said, you know, the normal one game at a time stuff, but you know, what I wanted to do was one, come out of non-conference winning record. I thought that was important for a good note was important. You know, so four and one, I'm very happy.  It shows that what we're doing is working. The kids are buying in, so yeah, I'm happy. I'm happy, but still not totally thrilled because I don't think you can ever be totally content. I guess it's a better word to say that. Never content. There's so much more you've got to work on, but I'm proud of how our kids are playing and improving every week. And let's say we're 25 and 15. I wish you were 26 and 14. Yeah, exactly. That was one game you looked back on. You know, this here, oh well, if we hit that, well, if we were five, if we were on the outskirts again, maybe we would have stumbled some more. You don't know. I think that game helped us more, not because we lost, but the way it came down. Yeah. Well, the other thing that you guys have to be really proud of here, halfway through, unbelievable recovery, trying to come back with really a blowing ACL. He doesn't want surgeries. He's just rehabbing it, playing special teams for us right now. And so we haven't had that one, you know, we got a kid here there out for a game, but you're right. And that's right now we're pretty unhealthy right now. Going in for being game six, coming up step six, we're pretty healthy.  You knew that was coming. Yeah, but I'm going to say it's the biggest game of the year. You don't have to say anything, but you guys obviously have Concordia, Mechwan coming up, always a big rivalry for us, the cheese bowl. Right. And you guys are sitting here both atop the conference at 2-0. Right. And the way it plays out based on schedules, of course, you guys are looking each other, this is the big game and whoever wins this would definitely be in the driver's seat. Right. And you're right. And fans have already told our kids, focus, it's step six. I think if I start saying, Mechwan, Holy Mackerel, cheating, all this stuff, I think our kids are getting all, you know, whatever you want to call it. Oh, hey.  I mean, it's a rivalry game. It's the closest team we play.  I just told our kids whenever there's something added to the game like a trophy, the cheese bowl. Well, that means it's important to the alumni and fans and faculty. That's a game. This is more, almost more important to them. They're like, hey, do I get that trophy back? And that's what I said. All I said is, it means a lot because this is an opportunity to gain something back and get put in our trophy case where it hasn't been for four years. I think or something like that, three years, four years has been over there. And that's why I think it adds a little more, you know, credence to this game. You win something. It's the people who have played here in the past. We really harp on trying to make sure those people realize how important they are to us. So yeah, like you said, what has happened is they're 2-0 or 2-0. They pounded two teams in the conference. We pounded two teams in the conference. So just by quirk of scheduling, game, step six, game six is a good one. And it's gonna be good. We watch Taper. They're very, they're sound, they're good. They're old, junior college because they got kids that are good sized kids and the only thing we have is us and Oshkosh, but we both played Oshkosh. Well you're getting lucky. We're getting a signal about that. Letting you off the hook. We'd like to talk more about the game. I wasted time on some other important things. Goodcourtney is a big game this weekend though. If you get a chance to drive down to Mequon just off I-43 there. 130. 130. Yep, 130. Biggest game of the year so far for the muskies. It's obviously the biggest game because it's the next game too. We'll be there once. Alright, sounds good. And of course other things going on on campus. If you have a chance, check out the website at Lakeland.edu. Check out Athletics. But of course the men's soccer team played this weekend and unfortunately they're 4-6-1 right now, but they're coming along a nice young team. They split this weekend. The women's team is struggling a little bit at 3-3-9. The women's volleyball team is off to a great start coming back from a slower start as their young team continues to improve. They're 9-11 right now. Look for them to be over 500 by the time we get back next week. So again, get down to Mequon and we'll see you next time on the Lakeland.