I'm Michael Smith, a software engineer at Puppet. I spent a lot of my career at Puppet working on command-line tools for sysadmin, such as Factor, Puppet, and Bolt. This talk is going to be a bit about designing command-line experiences, a bit about cool Linux tech, and a bit about cloud infrastructure. I'm going to refer to a lot of examples in Google and Amazon hosted cloud infrastructure, but it can be generalized to anything that manages infrastructure behind an API, for example, OpenStack and Kubernetes. A lot of us probably spend a majority of our time working in command shells, bash, zish, fish, whatever. I certainly do. I can get a lot done quickly on the command-line, particularly with tab completion, selecting just the concepts I need to describe the specific task I want to complete. But being effective on the command-line requires a lot of learning. You need to have a working model of each tool you're going to use so you can quickly select the concept you need as a command, sub-command, or option. There are a huge number of tools available to us. I want to talk a little bit about a particular type of command-line tool, specifically those built for interacting with cloud infrastructure. So when using those tools, there are a number of idiomatic operations you might do. You might want to see what's running. What are my containers, VMs, S3 buckets, volumes? How do I figure out if my S3 bucket is public? Or who created that EC2 instance? We need to select the right description. Are they volumes, persistent volume claims, cloud storage? Then is it just LS, or did they come up with some new way to, say, list this thing? This image is an example of Netflix traffic among microservices in one availability zone. It illustrates the scale of complexity we're dealing with in our infrastructure. You might look at logs for different services. You need to remember how to see logs with Kubernetes or Docker, or SSH into an EC2 instance to look at something in its log directory. What if you want to see some logs written to a persistent volume? Or how do I see what's happening in an AWS service? Or what messages are coming in on the simple notification service? How about execute a command? With containers, you probably don't have SSHD running, so you need to remember the options to use for exec. To connect to a VM, you need to find your instance's public IP address or DNS name, or hop over to a bastion host so you can then SSH to an instance with only a private IP address. You may need to stop some services.  Remove a Kubernetes deployment.  These examples are all concepts you're likely familiar with. They have simple shell commands. What if we could use the same commands across different cloud providers and APIs? It'd be nice not to have to learn a new different command line tool just to do the same sorts of things. Using this further, what things could we build if we could rely on those commands to abstract across different infrastructure for us? We could have a live view of processes and usage across a fleet of VMs. We could aggregate logs across different containers, VMs, and services. I've previously worked on a data ingestion service that takes in data, submits it to Google Cloud via PubSub, which transforms it in a data flow and submits it to BigQuery. I've always wanted to be able to look at the logs and messages across all those systems in a single stream, but don't want to run my own Elk stack or other log ingestion service. Given the right tagging, it becomes pretty easy to find and clean up resources that are no longer used. These are the ideas behind WASH, a shell for constructing abstractions across cloud-native resources and exposing them with a set of powerful and familiar tools. The name is short for the wide area shell. I want to show a little bit of it right now. We are going to take a live tour through it. When I start up WASH, it gives a helpful suggestion to look at some documentation. This is available consistently throughout the experience of using WASH. WASH enters a shell. It gives me some ideas of things to use that are familiar tools, so I can see there are a number of plugins available right from the start. We have AWS, Docker, GCP, and Kubernetes. I can take a look at docs for AWS. That gives me a little bit more of how is it configured, what things are available to look at, how to deal with MFA or multi-factor authentication. It also suggests looking at S-Tree. WASH plugins implement a schema that describes what kind of things we will find in it. S-Tree is a way to look at that schema. I can see that under Kubernetes, I'm going to have things categorized by context and namespaces. I'll have pods and persistent volumes. Additionally, I'll have logs. I'll have something called FS that we'll get into later. Docker has a similar view. Google GCP shows a bit more. That's both useful to understand what things are available to me. We also use that to optimize some different ways of searching through all of these pieces. Some regular built-in commands, such as Tree, just work as a file system back in this. You can use commands you're familiar with. I can use a different LS to look at projects under GCP. We also have built-in help. This describes a bunch of the commands that are available. I'm going to work with find for a minute. Find is a command modeled on the Unix find command. It's for selecting resources, files, etc. based on a set of queries that I put together. One of the ones I most commonly use is searching based on metadata. Most cloud resources have some metadata associated with them. Often it's how they're configured. If I look at AWS, EC2 instances, I can look at one example of that, has a bunch of metadata about it. I'm going to look for just instances that are running. I can say state name, running. I have two instances. WASH also has a concept of common attributes. We can see what common attributes are available on those things. We have a set of actions that you can take on them. Those are modeled to the commands you can execute. Other things like creation time, modification time. A login shell available on those systems. As you can see, just piping to XARGs works just fine. This is just a normal shell. That only counted AWS instances, but I know I have some stuff running in GCP. Let's take a look at what metadata looks like there. We have a different set of metadata. WASH has some common attributes. A lot of stuff is still described as unique metadata. As we find commonalities among a bunch of different resources, we try to bring them into attributes to make queries like this simpler. I'll look for all the stuff that matches this now. I find I have two instances running in different projects in GCP. Find has a full grammar available to it. It's modeled on how Unix finds how you can string together multiple queries. I can say give me either the status is running or state name running. There's a whole set of operands. There are extra primaries that are unique to WASH dealing with things like the schema. You can specify a kind. I can say give me just things that mount a file system, this FS. That's using the schema declared on these plugins to identify what things to search for. Otherwise, this could take forever as we dig through the file systems of a bunch of these computers. That's fine. Since this is just a file system, I also have access to things in storage. I can just pull up finder and look at files hosted in S3. That's just made available immediately. A similar thing works for GCP, but with GCP at the moment, we've implemented a few other sets of resources such as looking at documents in Firestore. We have storage in GCP as well. I can look at files and I'm hosting some containers there that live in Google Storage. I can also interact with a PubSub in GCP. I'm just going to tail on that, and that attaches a new subscriber to that queue. Then if I send a message, I get that response back. That pushed a message onto that queue and my subscriber received it and displayed it. With Docker, we have containers listed. We also have volumes. Accessing Docker volumes is not necessarily always straightforward. The most common pattern is to mount them in a new container, which is what we're doing in the backend, but this makes it a lot simpler to interact with. I can go delete. I can look at what's my Redis swarm been up to. I can also go delete files. This foo file doesn't need to be here. Let's get rid of that. Additionally, we have the ability to see some ... We have a command that aggregates across different VMs and containers for looking at what processes are running. I can go take a look at ... That is a little too wide for this display, but I can take a look at processes running in my containers. A couple of them didn't work because they're very streamlined containers that don't have a shell in them. Then last, I can ... Getting back to one of the other examples that I wanted to be able to do, I can tail logs across several different containers with running different purposes. Here I have MinIO, Postgres, and a service all running together. I can see messages from those services interleaved as they come in. That all works really simply via commands we're already familiar with. Looking at a few of the others, I can see a history of what I've run. I can also see some details about what kind of operations I was doing in the background for that. There's some debugging information available here. Returning to screen ... We have AWS instances. I've just reiterated that you have access ... There's EC2 and EC2 instances in S3 buckets, and you have ways of viewing those, accessing and looking at the output of files from them, querying what's there via metadata attributes and other queries. Same with GCP, plus some extras that we've added, or that I've added. A similar approach with Docker and Kubernetes. Additionally, WASH has a simple external plugin interface, which a co-worker used to write up a view of Spotify playlists. Exploring Spotify playlists via the CLA may not be what you need, but this shows how simple it is to adapt an API to WASH's plugin system. I've shown a little of what WASH can do. It supports more commands that provide powerful ways to find things based on their metadata, a consistent way to execute commands on compute instances, and most of the other examples of common operations I talked about earlier. If you're interested in seeing more, the short link is on the bottom right. It's pup.pt slash WASH. I want to spend the rest of this talk looking at how it works. But first, why is it a shell rather than just a set of CLI tools? Let's examine what properties we expect to have in a shell. A shell is a REPL, a read-a-value print loop, so you can quickly test things out. It's all text-based, so we can execute it, share it, and rerun it. What's happening is explicit there. You can see all of the behavior. You can share that easily. You can rerun it. This is the VSH project, which provides a shell for querying and configuring secrets in hashCorpVault. It seems that the demo is not working exactly, so I think I'll pull that up on the live screen. I wanted to use this example because it shows off some of the rest of the properties that I see in a shell. This is a shell for querying and configuring secrets in hashCorpVault. It's designed around making it easy to write complicated operations quickly. Short command names, tab completion, simple access to environment variables. You can navigate through a hierarchy representing how the secrets are stored and organized, and the context of where you are in that hierarchy feeds into the commands we run to read or update them. WASH provides these things for cloud resources. It builds on an existing shell using familiar commands. It represents your infrastructure as an organized hierarchy you can navigate. WASH commands operate on the objects of that hierarchy. Now, standard shell tools are built on system calls. On Linux, those are a small set that enable access to processes, memory, networking, and the file system. They then expose more OS information through the file system, for example, via slash proc. So what are our cloud-native system calls? The cloud consists of file objects and hierarchical organization, VMs and containers, databases, service appliances. We should have create, read, update, and delete operations on each of these things, plus access to logs, configuration, and labels, and links to related resources. For general purpose compute instances, we need remote access to see what's happening in the OS. We need to send data around, such as publishing messages on a message queue. WASH has defined a set of primitives that represent abstract versions of many of those operations. The ability to list what's there and get configuration or metadata about it. You can read data or get a stream of updates. You can update a file or a configuration. You can execute a command, delete a resource, or signal it to trigger some sort of state change. The most common example we use right now is restarting a VM or a service. While WASH's primary focus is on cloud-native infrastructure, it's designed to be pluggable. So each resource it interacts with can choose to implement any or all of these primitives, and commands in WASH will work with anything that implements the required primitive. WASH occasionally adds new primitives as new use cases demand them. By keeping this first list small, I hope to make it easy to add new resources to WASH. To map these primitives to the ways you use WASH, we mount plugins as a fused file system. So ls becomes a call to the list primitive. Opening a file becomes a read. This lets existing tools like less or an editor or the finder as I showed earlier access to remote data transparently. Some primitives, such as exec, don't map to file system operations. So WASH is running libfuse. It's got plugins connected to it. This is showing a couple of examples. So for things that we can't do through the file system, WASH also runs a local demon that shell commands talk to over a socket. That lets things like execute, signaling. The main WASH process also maintains a cache so that repeated interaction can be quick rather than reaching out over the network again. It caches the result of primitives that we expect to be repeatable. So primary list, metadata, and read. And when you're doing reads and writes, that's operating on a local copy until it actually saves it and uploads it. But to build WASH quickly, we're actually doing a bit of sleight of hand. WASH reuses your existing shell for the scripting layer and customizes it with its own defaults and a WASH RC file. So then you're calling aliased WASH sub commands to do some of the more complex interactions with WASH. And we provide a customized prompt to give that a sense of place within a WASH's hierarchy. And so most of these WASH LS go through web views, WASH exec and PS go through the socket. You're invoking all of this as aliases to those commands via your own shell. So while plugins that are distributed with WASH are written and go and compiled into WASH, we wanted to make it really easy to add new plugins. So new plugins can be written in any language by creating a script or executable that responds to specific commands, command line arguments. It mirrors the primitives we defined earlier with some additional arguments to help manage state between runs of the script. I also have a Ruby gem that simplifies most of this to defining classes that reflect your data hierarchy. So I want to show two different examples of this. One, I'm going to restart WASH with a new plugin loaded. That lets me browse my Goodreads, let's see, Goodreads library, I guess. So I've got different categories for things. Books I'm reading, books I've read. And most of the weird behaviors you're going to see on this are because the Goodreads API is all XML and paged and kind of slow. But after this first operation finishes, it's pretty fast. So I can go look at, well, some metadata about Zoe's tail. Who's the author, John Scalzi? Get a description, get all sorts of information about it. And I can look at currently reading. So this project or the plugin that implements this is a fairly straightforward Ruby script if you ignore the XML parsing. We need to authenticate against the API. We're going to come back to those methods later once we use them. But we'll implement a init method that's called in the plugins to load the plugin that handles authentication and returns a JSON object that we cache to that describes the plugin and caches any additional state, in this case a user ID. Then whenever I list a directory, we're going to get a list argument. We'll pull out that state to get the user ID. And then depending on what path we're invoking, whether we're at the top or whether we are looking at a bookshelf, I'll return a list of bookshelves or a list of books in that bookshelf and serialize that to JSON. Implementing things like read are similarly simple. When you get a read request, it's going to be on a path and the response is going to be writing everything you wanted, everything in the response to standard out. So developing those is pretty quick. You can change them live in Wash. The other example I wanted to show was what the structure looks like when you're dealing with using the Wash Ruby gem. So in this case, everything is declared as a set of classes that implement methods and all the extra serialization is handled via the helper. So we have this is a piece for connecting to targets that you've declared in a bolt inventory. This ties to PuppetBolt, but it has a root plugin that implements its own list behavior that shows groups. Those groups have targets and those targets implement ways to execute commands on them, among other things. So I've worked hard to make extending this via plugins pretty as simple as possible. So Wash has been out in the wild for a year now. I want to talk about some thoughts and feedback based on that time and what that can lead to in the future. One of the things that really clicks with people is the same thing SSHFS provides, flexibility in working with files on remote systems. That might be taking a diff of files on different systems or copying from one system to another. Wash is like having any system that you have access to automatically mounted. It also works over WinRM, Docker and Kubernetes APIs and PuppetBolt transports. And it's easy to extend new things. The only thing missing right now in that is a primitive to create new files and directories, which I'm hoping to add soon. Running in a shell is great at orienting you in a new context. I also dislike running extra background services unless I'm using them. So booting into a shell provides a clean context for saying I'm working on a different problem now and ensures everything is cleaned up when you exit. But it also adds some additional overhead to interacting with the system. If I want to view files in an IDE, why would I start up a shell first? Wash has ways to run just as just a demon that would keep a file system persistently mounted, but the configuration to run that as a service isn't there. Starting a shell is also lots of overhead for doing small things. So especially as I get more practiced with them, I still find myself doing Docker copy or kubectl logs. Wash could be improved, so subcommands can be run by themselves and support auto-completion. So you could do wash tail and be able to refer the things by wash identifiers without having to start a shell. While wash principally sticks to standard POSIX shell commands, some dedicated tools improve on those patterns in cool ways. Stern is one I came across recently. It's a tool for viewing Kubernetes logs across multiple containers that supports really simple selection via pattern matching. I've found myself using it a lot because it's so simple to select what I want to see. I'd be really interested in adapting it to work with Wash's plugin system to make it simple to view aggregate logs across a wide set of systems with some simple, with very simple ways of matching what I want to view. So folks have written plugins to GitHub, PuppetDB and Goodreads. With a simple way to extend your shell and file system, what would you add to it? Thanks for listening. I will be here for any questions. So I have a slight change of perspective. There are a couple questions up already that I'll go ahead and respond to live here and we have a bit of time for any more that people want to throw in. So first one was, are there any plugins for Azure yet? And the answer is no. There's a lot of surface area to cover and I've been more experimenting with different models than trying to build out breadth of support yet. So Azure would be cool to add, but it's not there at the moment. How do I configure, another question, how do I configure Wash to discover the metadata of different services? Right now Wash pulls, it looks at defaults for how different command line tools for those services are configured. So right now it's going to pull in anything that you've used via a different native command line tool like gcloud or AWS or kubectl or docker, primarily, those ones, and just start with those automatically. Other external plugins tend to have their own methods for adding configuration and understand that those CLI workflows are often not obvious. It'd be really cool to enhance this with better login workflows for each of those, but it's not something I've tried yet. Another question, is it possible to write Wash scripts, i.e. for batch processing? Yes. In the help, you might have noticed that there's a script argument, so you can say Wash and provide a script and it'll run it non-interactively. Well, yeah, it'll run it. It'll choose whether it's interactive based on whether it has an interactive file descriptor to work with. It also has a dash c argument, so you can just run a short command and have it exit immediately. The slides will be posted, but I believe that the OSS, the conference has been collecting slides. I'll double check that those are going to be publicly shared, but I will be uploading them after this talk. Another question, can I use this to create resources in AWS or is it just to get information about them? It's currently targeting just getting information around them and more operational interaction. One of the areas that would be easy to add is the ability to edit configurations of something that already exists. That's a fairly common pattern already for Kubernetes resources. One of the next things I do want to add is creating new things, initially focused around files and folders to make it easier to copy stuff around between different systems. That design should be broad enough to handle different resources. It may not provide an easy interface because there's a lot of parameters that are unique to each of the systems. One thing that would be interesting to explore is having some simple defaults for people that just want to spin up something that they're using and plan to throw away. I don't think I see any more questions at the moment. There was one about whether Wash is more like a shell for the cloud services, like easy to S3 containers, et cetera. That is a... I'm not sure I fully understand the question. It is that, but I think as I said at the beginning of the talk, it's designed around a plugin framework that tries to be useful when interacting with anything driven by an API. One way of thinking about this is a pattern for creating... for being able to quickly adapt these tools like Wash for browsing resources that are represented by an API. Rather than having to curl it and all that, it's a short step to build a plugin that brings a bunch of... a bunch of extra capabilities, like being able to navigate around it, use your own tools to browse it and edit things, and be able to use Find as a query language over it. Another question, any thoughts on how configuration management can be done or implemented? I think it's... I'm not really trying to make it a configuration management tool. It is orthogonal to something like Terraform at the moment. It's generally... it's more targeted at filling in kind of all the gaps that you might run into where you need to go do more manual operations. I think the... Yeah, I don't know that it's well suited for configuration management, per se. It does take some similar concepts around abstracting across different resources, but we're targeting different modes of operation on that than primarily creation, which is something like creation and delete updates and deletion, which is what Terraform, in particular, would specialize in. Another question, if you were to use Wash for navigating Kubernetes, would you need to also install the Kube-Cuttle client as well separately? No. You will need a config of some sort that grants you access, but it doesn't rely on CLI tools, any CLI tools in particular to be installed. It's a self-contained binary that comes with the SDKs for those things, embedded into it. All right, great. Thanks a lot.


If I was welcome to the Artificial Life Advanced class, good news everybody, things are better. Let's start by taking a look at what's been going on on the T2 Tile grid for the last 10 days or so. At a new engine getting distributed along with new physics.  I'll talk about some of it afterwards. The contact warnings, when the diamonds are bumping into each other or bumping into the edge of the universe, they've been toned down to make it easier to see. So there, for example. So right in there, that used to be much more blary, but it's following the same old pattern right where I, when I first designed something, first get it running, it's taking up all kinds of screen real estate. But as I move on, everything that used to be all over the place gets smaller and smaller and smaller because I want to have visual space left for whatever is actually new. And what's new now is the loops around the diamond sequencer. But this is running quite quickly by T2 Tile standards. And it's been running somewhat. It's been running for 10 days or something like that. I'm going to let it keep running until it stops running by itself, unless I get much better code. I'd like to let it run for another maybe a week or so, we'll see. But this is encouraging and this is part of the reason why things are bad. And the main point is, yeah, it's still alive. That was yesterday, but it's still alive today I just checked. So the goals for this time for today was self-copying program, loads and runs, did not achieve that. But there was progress across the board and that's why I'm feeling pretty good. So the T2 Grid speedup, that's what we were just seeing. In addition to tweaking the graphics and so forth, I made an incredibly simple change that made a huge difference. And this is it. Can you see it? This little three-line function took the first line and made it the last line and it made a huge change. So what this is, the whole MFM T2, the engine that performs all of the sequencing and the running of the events and all that stuff on the T2 tiles is based on a priority queue, time-based thing so that whenever it finishes doing whatever it was just doing, it goes and finds the thing that has the earliest deadline, the thing that most wants to go, either the thing that's nearest in the future or the thing that is in the past if we have overrun our time. And then we call it and the on-timeout method is what gets called. And so what this does is the first thing it does is it puts itself back on the time queue, the T queue, for redisplay miss in the future. Now in this case, it was a sixth of a second. So I was doing six frames a second and then I check for touchscreen input and then I redisplay everything and then that's it. And then we go on about other business like for example performing events on the sites of the grid. But as we've got more and more custom graphics with the contact warnings and then the pocket chains with their long, long downstream side and their short upstream side and so forth, somewhere along there it got to the point where the redisplay function could take more than a sixth of a second. So what happens? We put it back on the time queue for a sixth of a second from now. We take more than a sixth of a second and then we release ourselves and we immediately are at the top of the queue again.  They get an event every so often and so on, but this I think explains some weird behavior, one of these worries that I didn't even actually talk about that goes all the way back months, if not years, where every so often, especially before I got the fans going to keep everything cool, some of the tiles, especially in the center of the grid where they would get hot, they start slowing their clock down to try to maintain, to control the temperature. And sometimes, not often, I would see a specific tile that essentially was paralyzed and even the stuff that was moving from adjacent tiles would get stuck trying to go into this thing and I couldn't figure out why. I suspect it may have been a problem like this. So now what I have done is I have taken the, don't insert it back into the time queue until the end, until after you've finished redisplaying. So this is the kind of top-down control freak, I want six redisplays a second. This is the bottom-up best effort. Don't call me again for at least a sixth of a second. That's what it says here. So we do all our work however long that takes and then we say, okay, we have a sixth of a second to go to other things. In fact, I have now changed this to a third of a second as well. And that's what we were just seeing. Yeah, we can actually look at it. So here, I just shot it with my phone, right? And so this is real time, no time lapse at all. And we can see, you can see the HC3 grid compressions moving through the dots. You can see the loops moving around from place to place. Now, this is fast in no sense, but it's faster than it was. And you can see the new revised little subtle contact warnings there, the little orange things. And all I really need, I mean, the grid cam time lapse, which is mostly what we're looking at, takes one frame every five seconds. Redisplay, miss, could be a fifth, well, could be four seconds, could be two seconds, three seconds, whatever. So this is much better. This is a long-standing anxiety of mine is eased. So great, the timeline has improved. This is what the timeline looked like last time. It didn't have state machines, didn't have the HC3 sequencer, that's what's now called the diamond sequencer, it wasn't really working. And so forth, this is what it looks, whoops, this is what it looks like today. I am calling, we have HC3 sequencer, we have state machine, got some examples. The redeploy centers, we don't have yet. We'll talk about that in a minute. We've still got little bits and pieces of stuff, but this makes me feel like there's a real shot. Just getting kind of worried, the last couple of updates, the things were going pretty slow, but progress. And a big reason for that progress is because diamond sequencer programs are actually running. Yeah, and let's take a look at a demo, what's next? Yes, okay, and so I've got this just started up. So the L1s are just seeds that place proto loops in the place. And we'll just let this go for a little while. Okay, so now three of the four L1s have popped out. So we have a marker in, so the southwest, the red diamond sequencer pocket, the DSPs, we have four pockets. The southwest is the red one, which is output in this case. If this can be rearranged, the northwest is green, which is supposed to be input. The north, sorry, northwest, northeast is blue, which is temporary storage. And southwest is white, which is the execution stream. And in the execution stream, we have the loader, where the idea is the loader is going to take the ancestor code, whatever it is, that's stored someplace. And as the loop in the instruction stream relaxes and gets bigger, the loader inserts the instructions for the ancestor into this primordial cell. So if we let this run a little bit, the important point to notice, it's all bopping around and doing its thing. But the markers stay in the DSPs, the southwest, northwest, northeast, and the loader stays in the instruction stream. And in fact, it's got a couple of zons in here, that's an RS down there. That's a reset instruction and so forth. The loader is inserting the program into the instruction loop. And none of it is executing. Why? Because the loader is hogging the DSP, the domain sequencer pocket. And it's going to stay there now because it's working until the program is entirely loaded into the loop, and it just took itself out there. And then it decayed away to an empty codon and marked the instruction stream as we have to move on to the next instruction. And that's how we boot in the domain sequencer programming language. It's actually working. So that's pretty good. And we'll see another example or two in a minute. And finally, construction arm constructed. What does that mean? Well, there's a John von Neumann, or a father of computing in many ways. One of the many things he did was he built this cellular automata. It's kind of blocking me here that it reproduces itself. So it's in the very much in the same spirit of what our artificial life creation countdown challenge that we're doing right here right now is, except the nature of the cellular automata that we're using is very, very different. His was deterministic, synchronous, all of that stuff. Cuz it was a proof of principle. And what we're doing here is a proof of principle too. But it's a different principle. It's a principle of bottom up, robust first, and so forth.  And we're saying that's not really very practical, especially if we want the entire thing to move. The von Neumann universal constructor can only move by making copies of itself.  That's an example of the difference in flavor, even though we're making a constructor that constructs itself. And in particular, one key step of it is that there's a tape of some kind, which is gonna be the instruction loop in Arceus system. And is that big long line of states in von Neumann's original universal constructor that tell this construction arm another automata that functions like an operating system. I don't know if that's great Wikipedia language. But whatever. But the point is the construction arm can move around and deposit stuff in various places. And that's a part of, well, it's the main thing about how it makes copies. Since the construction arm goes 0-1-1, 0-1-1, and so forth. So we have a construction arm, let's see, here we are. Okay, this is just a minute or so. So these start out looking like, oops, that's what you get for pushing the wrong button. These start out looking like what we just saw in the demo. But they're gonna start diverging in a minute. And the program is getting loaded into them, and the program is starting to exit in the end. Look at this, these little guys here, little beings here. They head towards the wall, and they take a turn. And all this stuff is going on all at once. The thing is the grid is growing, the grid is moving around on the larger background of events, and it's building a box. And the important point of that is that the box is largely an arbitrary shape that I just picked last night to demo. And then the cell suicides. The cell has pre-programmed cell death to leave the box behind. A box made out of wall atoms. Take a minute for this last one, last being to make its box. Because in fact, it was close to the wall, actually. And when you get contact warnings, it takes longer to grow and can't actually build the box until the cell gets big enough. So look at that. And how do we do that? Here is our revised sample ancestor code, and look at that. North, west, west, west, west, south, south, south, south, east, east, east, and so forth. Capital W means withdraw the construction arm one step and leave behind a wall atom. And dot means we're done. The program is running and performing arbitrary business, arbitrary acts. So that's what gives me hope. Control of the box is chaos around, we've kind of got that. So I'm calling this the big comeback, because I was getting a little bit worried. And our three raggedy, the saddest little boxes you're ever likely to see is the evidence of the comeback. And so that is it. The next update will not be until December. We are now entering a pre-programmed hold at T-3. The goals for then is to have a proto-ancestor code running. We shall see. Publish a book, talk about that later. I didn't write it, and I want to have big fun. And thank you so much for coming, and I hope to see you in December.


I'm just going to sit and pray or just simply watch that video or the other videos if you're going to do research on Julie Roy's and whoever else then you should have known what I've said. I've had four videos. I've already can well accept everything that they say, not necessarily because I've seen enough.  And so I said, I've all said this and things like that.  Make some color commentary about certain political things from a Christian who's going to call me because she was waiting on the internet saying what do we know issues, why on the video on camera or misunderstanding or cause of concern. That's what I'm going to do. I didn't take their side. You made the state with you just to let everybody know that I disagree with you behind the scenes folks that we never spit in public. Okay, well fine. And so I said just so folks know that I disagree with you, but I can keep on moving on.  That's the only public time that I didn't have to say anything really about even the so-called mob. I was caping for somebody which I'm not. He does. Yes, he does. Whether it's good, whether it's wrong. It doesn't matter. And the point that I made even bringing up the devil, I said it doesn't matter if she's right or I said even who wants to accuse us. Is he wrong? No. And so don't give if you think a person doesn't ask for it or after you, don't give them a reason to say see a simple phone call. You wasn't prosecuting John McCarthy tonight. You was prosecuting me. Pro anybody. And this is exactly what I said. I'm pro anybody that is trying to grow the kingdom and help people. That's who I'm for. That doesn't mean I'm naturally after or for everybody. And so to say that I was disappointed brother, I can't tell you. I know how many times you know what, let me just think of this Bicyclist channel. Let me think of this. Think of how I could help this dude raise you from doing video about John McCarthy on my channel.  Proverb 17. He had an issue. So I was up early morning when my mom, let me just text. So what does he do? He makes it public. That ain't grown man stuff. That's just not. It makes them drama. I'm done the same thing. You should have called me. I feel it's known. And so listen, you take it how you want to or anybody else, I will give them a call. No, you're not taking all the time. But let me, let me respond to what you said. No, no. I don't want to say because you had, you had three hours to say everything that you wanted to say. So I'm listening. I'm through with it. A bunch of stuff to do in the morning. I'm getting ready and you see the folks in the chat making all these different statements or whatever. So I don't even, I don't even. What did I let them do? What did I let them do? Hold on, hold on, hold on, hold on. Wait a minute. No, no, no. Hold on, hold on. Hold on, hold on. What I said. You're not interested in hard to use. You was trying to do it. Did I make this personal? This wasn't about me. Who was it about? It was about me. No, no. It wasn't about me. It wasn't about me.  And you said it right now. What is the act you got against this woman? Why haven't you done your- I haven't asked against her. I haven't asked against her. You said, you said- I said I think. I said I think. What's the, Corey? What's the act you got against this woman? You haven't done your research then. I don't care about doing my research. Okay, so then we- Corey, Corey. Corey. Corey. Corey. If you had on you, say it again. I'll say it again. That's not the conversation we had Corey two weeks ago and you know it. We've been- It wasn't- Corey, we've been talking about that. Hold on, Corey. I'll let you finish. Let me talk about it, please. You called me up one day. One Saturday morning. You and your wife, he's asking about doing- Corey, that was not the recent conversation that you and I had, brother. And you know that. So whenever I say something about your channel, it ain't just the way you from doing something- Corey, the conversation that you and I had two weeks ago, not months ago, not even last month ago. I'm talking about two weeks ago, you and I had a conversation and you and I had had- we were discussing, I forgot we were discussing my channel and I asked you this question and tell the truth, Corey. I said, what you got going on today? And you told me about something you're going to be working on. I said, okay. I said, what I'm about to work on about to finish doing this is something about doing it. And you said, why are you doing that? I said, because I'm going to be dealing with this McArthur thing, I just dealt with the Shepherd's Conference. Man, I wouldn't do that for you. I said, why not? Because I can help grow your channel. And I said, I'm not doing it to grow the channel, Corey. I'm doing this for the people that's being affected by this man's ministry. You remember me saying that? No, what you told me was you told me, it is growing your channel. It is growing your channel. That is not what I said, Corey. Exactly what you said. That is not- Corey, no, no. You said it was not growing my channel I'm saying that was- No, I didn't even say the word grow your channel. You did say grow the channel, Corey.  I don't care if you do or you don't know whatever, but I'm simply coming from the standpoint when we talk about your channel, grow your stuff, all the little, the little, I email you the different YouTube channels you can look at to kind of help you grow your stuff or whatever. I was thinking about your channel. I was thinking about the fact of myself looking out for your best interest. And so it had nothing to do with John McArthur. Make 30 more videos about how they come beholding John McArthur. You brought up something about Virgil Walker. I don't even know what he was imputing. Throwing a chip over there. Throw a chip out there. No, no, no. Like what? Like what? Like what? What chips am I throwing out, Corey? You made the public comment about McArthur. You said he's not disqualified. You don't believe he's disqualified. I got the Bob coming in. It is. What do you call it? You didn't think about it, did you? Now you don't care. How do I know I'm calling in. I didn't say you called him. I never said that. I never said that. There. It does. It is. So what you're saying is what you're saying is that you're seeing it. No, no. No, no. I never said that. That's what you sent you. No, no, no, no. Corey. I haven't sent you anything, brother. I don't have to send you with a thing. I said what I said to you two weeks ago about this, We're doing and I told you what I was doing What Oh Had an issue with you, I would have made this personal this wasn't personal for me I mean, and I made it publicly known on the on the channel I didn't go after you You made Corey you made Corey you made a video public. I made a video public Did I say you say No, no, no, no, sir. No, sir. No, no, no, no, you know about you know about do that You know about do that I said to you know, I said it was if it's accusations about me If they're gonna say something publicly about me and they can't prove it publicly then I'm gonna respond publicly My relationship you and we said I said it public if you're gonna make a video because you got concerns that person Well, instead of making the video talk to the person if you have that much You don't need it. Yeah, you got a concern about being said that concern about what I'm saying you April I'm just your words. I'm just concerned. Well, if you concern and you got some questions for me Do what you say they should deal with they said they was concerned the context of the context of the video Cory was public. That was the issue. I don't have any personal acts to grind or gripe with you I don't Okay, well, that's not the first time though I'm not doing that either. I'll say what I needed to say wow So thank you. Thank you for finally saying thank you for finally getting out They go stuff Always do this you saw always do this I guess I'm an interpreter. This is as a negative as a negative jab that you're making About you I have no intention to make another video about I said what I needed to say about what you said about Julia Royce And regardless and in regarding the island gray situation because oh by the way, Cory Little do you know little do you know people that have been abused have been watching your stuff Hadn't been getting folks any any of those things and you would be surprised on the people that I have close to me Then one either were abused himself or Say my question. Why did you do why did you make the video? I'm just curious. Why did you make the video? I'm asking you Based on your based on your based on your video your video I didn't twist your words around You say what you want to say When I'm asking you say I twisted you how did I twist your words?  I'm not gonna be in a chance.  I'm sorry. You want to make a video? questioning or impugning court might find the next day and so forth and so I just wanted to the GCC on my church But that's so you don't think you don't think you're defending John McGuff. They're asking seriously No, no, no, no, no, no, you don't think that John McGuff is in sin right now, right? I Didn't watch the video if I didn't watch if I didn't watch Cory, if I didn't watch Cory, you don't See you say that you're not upset, but why why can't I talk I've been late? So this is not a dialogue this just your monologue So this so this you just want me to shut up and listen, right? Yeah, I did just now I did just now I did So I can then that now you take as well just like this And so I said you know what arrow on the side of caution because if he's wrong be that he's As wrong and in sin or it could be that what he is He's beholden to and they want to be behold of that and the system is not working for not the system It could be a lot of different things. And so this is just me Cory, I didn't you still answer the question bro. I mean, I just said it Okay, you know if I said if this is that that he's in sin, but there also could be some other things And so for me I'm a I'm a wait a day or so But how I feel now Tells me you need to go ahead and step back You had a good run Might be time to go ahead and call it call it a day because you failed In one of your most basic one of your most basic criteria. Yeah, we're supposed to protect your people, right? And and you didn't matter of fact, and I don't need you protect her The I don't you felt protect their out you put her out. Yeah put her and the children out If if what I'm saying if I don't know If what Julie says is true and I have no reason to believe but if she said what she said is true That's an awesome woman. Mm-hmm. That is a the way she handled things. That is an awesome woman If what Julie Roy said is true Every single person on the elderboard and I guess one was a pastor now you got to go Absolutely getting absolutely John MacArthur if what if what was said is true. Yeah, and there is no other side of the story Even if John MacArthur did not know even if you didn't even if what she said is true. You didn't meet with the woman That's bad. Right. And if you did not know That's bad. No if what she said is true. You have to go This nigga was clearly lying You have you read have you read?  Who's other side? Okay Okay, okay, so this you haven't done your homework. You have a day work. Okay. No problem You haven't called you haven't you if you if you if you don't sit here and tell me if you go And that's why I said you caping for and I don't mean no apologies for that Of course, I did that's one of the video in response what you said You cake for me bro, but I got the facts though So do miss do me a solid Corey. What's the scene? What's the scene that she's committed against McGuffin? She made 47.


Python on hardware news. It's the blink of time. We are up to RC zero I think. Police candidate, yeah, zero. We're getting so close to release. We're still squishing bugs. If you have a project, please try out RC zero because it's our release candidate. We think we're done. And if you find bugs, let us know as soon as possible. We want to squish them all before we go to the final release of 6.0. Yeah. This week in newsletter, which you can get for free, it's the biggest Python on hardware newsletter out there. And it's at AdafruitDaily.com because we don't want you to ever think we would take your email address and do anything with it.  We make it very hard for us to email you because we don't like spam. So anyways, go there. There's about 8,000 people who have signed up and we send this out every week. Okay. So the Raspberry Pi 400 is out. That's why we're in a shirt. We will have more information about that during this show because it's a new product of the week. We added Blinka to it. Yeah, you'll be able to do that. Muleab, which is, if you're familiar with NumPy, it is for Circuit Python, so there is a new version of it. We did a lot of work with it. The author has been amazing. It's been so great. There's a lot of projects that really needed. FFT calculations are just fast number crunching and Muleab does the job great. It fills in a very specific niche very well. So great work. A lot of people use Python in Visual Studio, so there is a code update. You can check it out and get the extension. And there is a bunch of issues that they fixed and more. We linked to the blog that you can get all the latest information about the updates. Joey's ePaper, like DIY open source Kindle, now supports Grayscale because Circuit Python supports Grayscale. Yay. So that's cool. And then this is really neat. Go to slappy.io. It's a really neat online editor. It's kind of like an online version of Moe. I just love the name.  Yeah, it's cool. Yeah. So check it out. And you just plug in your device. Easy to use. You load Circuit Python as your favorite Adafruit device on just about any computer. And they're looking for feedback and more. So check it out. Works with Chromebooks. I think that's the main target as well. We also linked to their Twitter account if you want to give them feedback real time on Twitter. Joey made a Circuit Python sensor ring. Adafruit had some good ink, both make and haxter. Talked about the Adafruit cutie pie board. They like that. Yeah. I'm loved. Scott has a deep dive every single week. Next week is coming up on Friday. Last week, he did the ESP 32S2 Polish. Here's Blinka. It's time for Thanksgiving. Here's a cornucopia of updates. There's a snake in my gourds. Yeah. And then we have the usual bits of news and more that we collect. If it's Python on hardware, we probably talk about it. Or like data science and machine learning. Feather shape. Yeah. As we talked about on the show and telepike game, 2.0 is out. Fumigai, Tim did some neat stuff. And, you know, it's interesting as there was some Python code and it was 538, the economists, how they predicted how the election would go. So they predicted this came out yesterday. So they predicted Biden 312, Trump 226. I don't know if I believe the Dakotas. Well, I don't think you can believe anything right now. So just we all got to wait. What? Hopefully, it's a Dakotas. Yeah, we'll say. But anyways, it's kind of neat if you do any type of data science. This is one of the things that you can do. Then more news around the web and check out the libraries that we have. We are up to two hundred seventy nine. And as always, you can look at our staff updates, all the things that we're doing in the world of Python. Lots of virtual events, too.  So that is Python on hardware news for this week.


Live from London, England, it's theCUBE, covering Dotnext Conference Europe 2018. Brought to you by Nutanix. Welcome back to theCUBE, here from London. Our presentation of Nutanix Next 2018 in Europa. Next to me is Franz Koppens. You are managing ICT at Driessen. I'm very curious about Driessen, a customer of Nutanix. I understand that you make software for HRM. Tell us about Driessen. How does it work? Driessen is a family company. We are a business service company for the public sector in the Netherlands. The Driessen Group is a group of companies that make work possible. We offer that through a number of different services. You have to think about the connection between people and work. So an outstanding function. We also develop software and services to make processes easier for other companies. It sounds like you are on the cutting edge.  On the other hand, you do something with software. With the delivery of your services as a software product. How is that possible? Yes, that's correct. We deliver services to make processes easier for other companies. We think about the low administration, but also other processes. We use digital services for that. We develop them ourselves. You have to think of, for example, our package as a profit. Profit is too short in a number of functionalities, but where customers like to make use of it, we can help those customers to offer that extra functionality to improve processes.  Yes, that's correct. Do you do that on-premises, in the cloud? Where do developers work? We do that with a club of about 25 software developers who have their own services. They are talking about a number of different companies we have. We develop the software that is partly on-prem and partly in the cloud. I understand that you have been doing that for a year or two, together with Nutenix as a base for your infrastructure. Can you explain how that works? What services, what products do you use? What advantages do you have? We started last year. We were looking at modernizing our data center. That was the instruction. Then we oriented ourselves. We had all sorts of interests in Nutenix. We went deeper into that. Eventually, we made the choice to choose Nutenix to replace the entire data center we had in Donutenix. We had a lot of it, but we also chose AHV as the hypervisor layer. We came from VMware and actually migrated it all. The implementation itself went very fast. The implementation of Nutenix was a piece of cake. Then we started to migrate our VMs one by one to the platform. This year, we did that. At the moment, our entire data center is actually running on Nutenix. What were the problems you hoped to solve? You have to think about scaleability. We liked that we could start with Nutenix really small but if necessary, we could scale it up easily. Performance was an issue in the old environment. I think the biggest challenge we had was to make it simple. We had built a complex landscape in the course of years. That was the most important reason why we chose Nutenix. Simplifying the entire landscape. It was easy to control. It was also difficult because we had a mixed environment. Nutenix is a great manager. I can imagine that your role changed. At first, I was focused on infrastructure. It was difficult, it had a lot of friction. How has your role changed in the past? That's right. In the first place, you are very focused on the operation to keep up with the air. All kinds of things you want to keep up with. I don't think you want to keep up with that anymore. We see that now. We see that we can manage people with fewer people and in a very simple way. That means you get more free time. You try to stop that time together with the business. How can we improve our services? How can we further improve our services? That is against less or equal costs and less effort. To use the code, you need digital transformation. That is also an issue for you. You also want to move more towards the customer. How do you do that as an IT department? How do you sign up for the business with the three of you? The customer questions are often asked in the business to the software developers. What is very important to us is time-to-market. The development is very fast. We work based on orders. In order of order, we often use all kinds of items that we have to meet. So time-to-market is very important. That is why we are with Nutenix in the States to deploy much faster in order to offer new features towards our software development. You say software developers can sit closer to the business who need less time to put the groundwork as it were. What I am curious about is that we are up to next. We have seen the keynotes. A lot of announcements. Nutenix has once started as infrastructure and modernization of what you have in your data center. In the meantime, there are 15 products. It has grown much bigger. When you look around, a number of people have grown. 95-100 people. I am a little curious. How do you look at that? You have been walking around for a few days. You have seen the keynotes. You see the print. What is your impression of the development? I must say it is super cool. Last year I have not been there. That was a very good conference. That was also the reason I thought I will definitely come back this year. It was really cool to see at the first keynote how much bigger it has become. The whole event. But also the success of Nutenix. Last year I spoke to a few of my peers who were still doubting whether they would step over Nutenix. I will tell you what our experiences were. I can definitely recommend it. Also the use of the AHV as a hypervisor. In the meantime, you just notice it has become so much more mature. So much has been added. I was really under the impression that the last two days I have seen new products and also the maturity and the one fault of those products. Really super cool to see. What has been very good for me what I was really impressed with was my name Frame. Frame is really super cool. That is also something we are looking at at the moment to use it. Besides that, BIM is something that speaks to us. I have to say honestly, we now have all the segment data centers on-prem. So they have also changed my DR environment. Because when we were the decision maker there was no BIM. If I would have to choose again then I would absolutely choose to solve my DR with BIM. Also there we have the one fault with which you can manage it. That is really cool to see. We will certainly continue that kind of development in the future and I know for sure that we will go into the future with products such as a BIM and a Frame for example. Yes, because you see they have made the announcement of the core product the core product to Essentials. That is a bit the uplift. Those are the next small steps that you can take. And then you get Enterprise. There are now the real new products the Saas products, the CyCloud. And what I am very curious about is I also know Nutanix from that perspective infrastructure and I have seen them grow. And looking at all the announcements that have been made all the products that they have done. What are they really for you? What was it for you? Did you agree? You said yes, I am going to do this. If I am at home after the weekend I am going to hit me here. I want to know more about this. What is the end product that you then say I really want to hit me there. I think if I would have to choose then I would say I will certainly go to the hit to see how we can put that in order to our employees to see more of a workplace when they work remotely or that sort of thing. This is also one of the problems that you want to solve by Nutanix, right? We have seen it traditionally Nutanix did a lot of VDI he still does a lot of VDI Is that also something that you are going to do as a driver? Yes, in that case for a part of our employees I certainly see a opportunity to use it as a replacement of the VDI environment. Yes, absolutely. Exactly. And then it was really and I did not know that they were working on it but I understand that Nutanix is now able to build their own farm. Yes. Yes, I am also very curious what that is going to bring. Certainly if that is integrated seamlessly with your non-farm environment I actually think that the strength at the moment of Nutanix that you can switch very easily between your own non-farm environment or a farm environment if there is also a Nutanix variant in the farm that is completely cool. Exactly. And the last question is you have of course developers in service in the keynote we have also seen all kinds of announcements around cloud-native such as the beauty Hades, Carbon databases out of the cloud with era with buckets S3 storage are that also things where you think hey, my developers are also going to switch? Yes, my developers are already at the door they want to fight with containers and that is the thing so that is also very good to hear that even there Nutanix is only and how it is integrated within Nutanix so yes my software developers will be very happy with that. Well, great Well, congratulations it really sounds like a great story a very beautiful story about how you use Nutanix I wish you good luck with the next steps Thank you who will be unwavering to come and that was it for now thank you for watching to the Cube together with France here in London and see you next time


Hi everyone, I am Matteo Collina. I am technical director at Nearform. I am also a member of the Node.js Technical Steering Committee and one of the and of the OpenJS cross-project council. However, I'm here today because I am also one of the lead developers of Fastify, which just recently joined the OpenJS Foundation as an incubation project. What is Fastify? Fastify is a web framework for Node with a strong focus on performance and developer experience at the same time. Because we think that you should not really compromise the developer experience to achieve the best performance that you can get from Node.js. Fastify offers a very low overhead and extremely low overhead web framework compared to Node.core. Essentially, if your application will run as fast as Node can, with very as little impact as possible in your application. So anyway, what is Fastify? So Fastify provides, we started Fastify in 2016 and it was back then I was thinking of building a web framework for Node because I was not really happy with how the way of the ecosystem was going. However, I started it with a very specific thing in mind. I started saying, well, the first thing I need to do to do a web framework is to find some other contributors to work with me on this insane path. Because, you know, writing a web framework, considering all the complexities of HTTP, it's a gargantuan task. It's insane. So I wanted to build a community first. So Fastify was born as a community rather than an open source project. And it was structured at the beginning. And this is why it fits into the OpenJS model of open governance and open collaboration. Because it was built as a community first. It was not built as an open source project built by me and pushed out of the world. It was built, okay, less welcome people, okay? We need to be, we need to be everybody's framework. Because one of the key problems in maintenance and long-term stability of a project is on making sure that, you know, onboard new collaborators, they're making sure that the load of maintaining the full project is spread among as much as as much people as possible and as much companies as possible. So it's a big circle. You see, you know, I expect if somebody wants to adopt Fastify and use Fastify in their system, I expect them to send contribution back to the project, because I'm not solving their bugs for them. Like, okay, minus one thing. I work for Neerform. We are a professional services company. So I'm definitely happy to fix your bugs in Fastify, but you know, you need to pay money. Sorry. And if you want, if you would like to contribute to the project and so on and help out grow, you're more than welcome to. In fact, that's the preferred way.  And this has impacted the framework so much and we're able to grow in adoption and in what the framework does because of this contribution model, simultaneously a principle of fast performance and developer experience. And it's been doing great. The framework is going rapidly. Companies are using all the world. I just want to be a big shout out to the other lead developer, which is Thomas Delavedova. We joined with me in this crazy adventure in 2016. And you know, we never know, but none of us could actually predict what would how this will grow and that will grow us. We just said, well, we want to build, it just came to me and said, ask me, hey, Matt, I want to get into open source. Okay, would you like to be a friend with me? And that was that. That was it. And we just started.  So it seems a great.


The next thing you'll need to know how to do is how to create a new scene. What a scene is is it's the single file that contains all of your geometry and then links out to things such as your texture files. And it's really important that you know how to make them and how to save them. So that's what we'll look at. So to create a new scene you can just click on file, new scene, dead easy. It'll ask you if you want to save the current scene, there's nothing in it, so we don't. And that's done. So that's really straightforward. It's not something we strictly needed to do but it's something that you needed to know how to do. The next thing that you need to be able to do is to be able to save a scene. And this is really important. If you don't save your work in Maya and save your work regularly, you will lose it. Guaranteed.  So let's try and avoid that. So to be able to save a scene what you do is you just click on file and save scene as well. And you should notice that by default because we've taken the time to set up the project, it's gone into the desktop Maya projects room scenes folder which is where your scenes should go. Every file that you use should go in the right folder. And this one belongs in the scenes one. You've got a choice of file types. There's Maya binary or Maya ASCII. I used to use Maya binary all the time but I now recommend Maya ASCII because it's more likely to allow you to be backwards compatible. So I'm creating this in Maya 2016 and if I wanted to then open that scene in 2014, I'd have a better chance of that working if it's an ASCII file type.  And that's how you save a scene.


What's up everybody, Jason here for JaspiersCaseBase.com. 2022, PDD Impactable Football just sold out. This is a three box case break, pick a team's number three. We had to do a couple R&B's guys, which we did, sold out with some fillers, and there you go. So a lot of teams are actually part of the random number blocks. Thank you guys to everybody else that bought it straight up. Here's the Buffalo, New England, all those teams there with this customer names there. And then this one, of course, is just a Kansas City Dallas, Detroit Green Bay, Tampa Bay, Cincinnati, and the Chargers. All right guys, and here we go, impeccable card here. All right, first it starts off with an Alvin Kamara to 50. That is for the Saints Matt Johnson and a little Derek Carr for the Raiders. Raiders is David. First one we have is Dalton Schultz on card for the Dallas Cowboys going to the random number block. 65. Five is Robert Runkle. Kaleo Shakir to 99 for the Bills. That's 59 out of 99. Bills nine is Raymond. We got for the Falcons, Tyler. Alligurhe, 76 out of 99. Falcons is Brody. We got a Breeze Hall to 99, 38 out of 99. Jets, Jets, Jets is Jeff Henn. And how about a little Desmond Ritter for you now, buddy? 49 out of 49. Kind of wish these were on the card. These are really cool cards. There you go, man. And the last one here is actually a redemption. So let's see what we got here. Elegance, rookie, helmet, and patch autos, part number 134, Danny Gray. So I believe Danny Gray is a San Francisco 49er. 49er is Ali Fonso. First box, pretty good, pretty good. Next one. Is that a printing plate? I think it is. Printing plate, Juju Smith Schuster for Kansas City. Part of the random number block, spot one is Brian Crouch. There you go, buddy. Very nice one to start off. They gave us two Bays in a printing plate. That is Justin Fields is 75, and Tyree Kill is 25. Dolphins is part of the random number block for Buffalo. 17, spot seven is Matthew. And Chicago Bears is part of the random number block as well. That one is 46, spot six is Steve Herrick. Jeremy Rooker, 275 for the Jets, Jeff Handel with that one. We have a Kyle Hamilton, 1099. Baltimore Ravens, part of the random number block. Ravens is 44, four is Joel. We have an RPA, Kenneth Walker, 74 out of 99. And that is Seahawks, part of the R&B. Four, another one for Joel. Very nice right there. Marcus Allen, on card, seven of 10. Alastria Sink, Kansas City, R&B seven. Seven is James. And last one here is Trayvon Walker, 13 out of 75 for the Jacksonville Jaguars. Part of the Buffalo R&B, three, three is Steve Herrick. And last one should have the metal card and then potentially maybe another bigger rookie revet. Katanaji Harris is 75, and a Jalen Waddler to 50. Dolphins is four, Joel. And then Steelers, we're about straight up on the phone, so. We have Logan Hall for the Bucks. Buccaneers, Kansas City, R&B, 99 of 99. Nine is A-A-Ron. Looks like we got a one-on-one coming up. One-on-one, Heinz Ward, on card. And look at that, it's like the Super Bowl champ to one. That one is pretty sweet. Nice one right there. Heinz Ward, Steelers, going out of Alifonso. And we have Valted Greats, 13 out of 25. Charles Woodson for the Raiders, going to David. Then we got B-Dawks, how about that? Brian Dawkins, Weapon X, five out of five for the Eagles going to Joshua.  And the last one here is also an Eagle. Unfortunately, really not an Eagle, but he's going to be in every Eagles checklist this year because he was at the rookie premiere. But Carson Strong, 19 out of 25. Eagles are pretty solid quarterback out of Nevada, if I believe, but just didn't make it past the Eagles training camp. Since he represented the Eagles at the rookie premiere, they're going to use him all year. And there you go. So that's another one for the Eagles, Joshua. Let's go with the bar card. And it's Alec Pierce, little rookie. Merica, USA flag. Two out of 20. Indianapolis Colts, that is part of the random number block. Colts two, which is A-A-R-O-N, there you go. All right, well, both R&Bs did get some hits. Did get some nice patch autographs. Veteran autographs, one-on-ones. And a little Ritter quarterback, Breece Hall. Pretty solid stuff, guys, so appreciate it. Don't know if we have more in store, but hopefully he comes back soon. So I appreciate you guys. Jaspy's case, Breece.com.