Hello, hi everyone, my name is Kamesh Pamaraju. I'm a Senior Product Manager with the Dell OpenStack Cloud Solution Group. Today, we're going to be talking about how wicked easy it is to use Ceph and OpenStack and install them using Crowbar. So quick check of hands here, how many of you guys actually use Crowbar or heard Crowbar? OK, well, how about Ceph? Excellent. So that's fantastic. So today, we're going to talk about a few things. For those of you who don't know what Dell has been doing in the OpenStack community, give a very quick introduction to that, an introduction to what Ceph is all about, and an introduction to Crowbar. So we'll start off with that. And then we'll go into why Crowbar and Ceph, what problems are we trying to solve? There is this OpenStack storage gap, specifically in the block storage area. And we'll talk about how the solution addresses that gap. It's mainly around automation and scale. We'll talk about that. And then what we have been doing with Ink Tank and Dell, we've been working together for several months in the community, and now we have a partnership with them. So what have we done to enable things for our customers? And then in the end, I have a specific example of a customer installation that's actually going on as we speak. So I'll give a very quick overview of what's going on there, and very quickly on what's coming next. So that's the agenda. So let me quickly jump into a little bit of a background on Dell's point of view around OpenStack Clouds and what we've been doing. So if you look at any cloud installation, it requires hardware, it requires software, but the majority of it is really all about operations. So where do you spend most of your money and time? It's in operations.  And when those servers are added, how do you make sure that those servers become part of your OpenStack Cloud automatically? What happens if a server goes down? What happens if you have to patch an operating system? What happens if you have to update all your changes in production? So all of that is operations. And it requires significant focus on those operational controls in production. And those decisions around what you do in operations drive your hardware and software decisions. So we have done a lot of work at Dell, and we'll talk about that because Crowbar encapsulates some of those best practices. So this is how the current solution looks like. So on the software side, we have OpenStack. We use OpenStack for our cloud solution. Ceph is the OpenStack cloud storage solution. We have a reference architecture and a taxonomy around the Dell hardware and Dell portfolio. And the big part of it, as I said, is ops. What do we do there? That's where Crowbar comes in, and there's services in consulting. So I'm not going to go into the details of this, but you'll see the deck later on. But effectively, we have hardware that's a power-it, C and power-it are series that are part of the solution. Storage and computer part of that. We use our own portfolio of forced-end switches and PowerConnect. The software is OpenStack software. The installer is Crowbar, which we will talk about as we go forward here. We use Ceph for distributed storage. The operating system we use today is the Bantu, 12.04. We support both Windows and Linux guests. KVM is, as you know, a very popular hypervisor in the OpenStack world, so that's what we use for our solution as well. There's deployment and consulting there support. So it's the, when customers want to stand up on OpenStack cloud, it's not just a software piece. It's the end-to-end solution. And that's what Dell has been doing. We've been working with the community since day one. For those of you who may not know, we have been very active in the community. We run the OpenStack meetups in Boston and Austin. We have been sponsoring the summits for a long time. So we're excited to be part of the community. We are doing a lot of work around Grizzly. So with that, I'm gonna hand it over to Neil to give an introduction on Ceph and I'll come back and talk about Crowbar after that. Here you go. Thanks, Kamesh. So I'm Neil Levine, VP of Product at Ink Tank, who are the commercial sponsor of the Ceph project. So Ceph is an open-source, massively scalable, distributed, software-defined storage system. And it combines three storage flavors in it. We've got the object storage. So if you're looking to do an S3-type service or use an alternative implementation of Swift, we complete these Swift and S3 API-compatible. We also do the block storage and I'll come into more of that later on. So this is a way of abstracting out your block volumes from your VMs into a separate dedicated storage system. Finally, we have our POSIX-compatible distributed file system, which is ideal for legacy workloads. But object and block is ready where most of the open-stack effort and integration work has been done in Ceph. So the key values or differentiators that we have around Ceph, other than the unified aspect, which in and of itself is a huge boon to those of you using open-stack, you only have to deploy one system, is we have a very clever way of distributing data amongst the storage system using an algorithm called CRUSH. So when the clients are writing data to the storage nodes, they're using an algorithm to calculate where the data should be put and where it should be read from. This is very, very efficient and really gives Ceph a huge part of its scale story. This spans many, many, when you've got thousands of nodes having a fast way of to work out where data should be without having to go through an index table or do any look-ups as a core part of getting that scale out. Additionally, we have what we call our intelligent devices or intelligent nodes. So these are self-healing, the self-managing and they're using a peer-to-peer mechanism which again gives it this incredible scale where all of these nodes are talking to each other and as a way of working out which nodes are up, which nodes are down, which nodes are serving data, which ones are not. And every time you add a new node or you're taking nodes out, whether deliberately or because of failure, all the nodes communicate with each other what the state of the system is. So this kind of intelligence which you have to sit in the head of the storage admin, it is handled by the software. So scale here is not just about the amount of storage you've got, it's about the number of people you've got to manage the system. We work very hard to get the intelligence down into the software so you don't have to do much as an admin. One of the sort of lesser known features but probably one of the most powerful ones within Ceph's ability to actually take an object class if you're writing your application and attach a piece of your application logic directly into the storage system itself. So this is a way of doing true distributed computing. So the example is that you could write a piece of software which is transforming a piece of data whether it's an image or a video. You maybe want to create a thumbnail or encode it. You can create the software that does it, the application code and embed it into the storage system itself. So this is application aware storage development. So this means you don't have to take, have an application take data out, transform it, write it back again. It all happens directly on the nodes themselves. And finally is we'll go into in more detail in a second, we're integrated into, opens that quite heavily. We're also integrated into the Linux kernel. So on the block side of things if you just want to mount a self-block image you can just do that using any fairly modern kernel. So from an architecture point of view whether you're accessing the system for object or block or file system, it's all built on our object storage system itself called RADOS, which has an acronym which I won't go into. RADOS is really the sort of the heart and soul of the system. And it's where the true scale out happens. It's where the intelligent nodes sit. It's where you put the object classes if you're writing code. And it's the thing which is you're going to be scaling out here. The clients on top whether it's object or block are very thin pieces of code generally which are sitting on your VMs in the case of the block device. And you also scale these out as well but you'll be handling after the different capacity planning decision through the block as you will from the underlying RADOS system itself. So RADOS consists effectively of two components. We have monitor nodes which are watches of the system. These are the nodes which are deciding which object storage nodes or OSD nodes are up and serving data which ones are not serving data. So the monitor nodes themselves don't actually, they're not part of the transaction between the client and the server. They're merely there to monitor the state of the cluster. And again they use PACS as a consensus algorithm to decide what the state of that cluster is and to inform both the OSD nodes themselves so they know who's up and who's not. But also the client. So the client itself gets a copy of the topology state from the monitor and uses this as part of the crush algorithm to work out where the data's gonna be. So you'll have a bunch of monitor nodes, preferably an odd number, so you can get quorum in a split brain situation working out the state of the cluster and then the OSD nodes themselves which are again the heart and soul of the RADOS system here. So typically you'll have one OSD process running per disk, although you can aggregate multiple disks and have a single process monitoring that as well. And each OSD can also have the object classes attached to it as I mentioned before. So a general stuff cluster will look like something like this where you'll have three, five, seven monitor nodes, a relatively small number and a lot of object storage device nodes, OSD nodes as well. Now the OSDs themselves consist of just the raw disk itself, SCSI disk or a SATA disk or so on. We'll layer a standard file system on top. We typically recommend XFS, we're looking at butter and we do have people using butter who are adventurous and ZFS is also beginning to look attractive now. These are standard Linux file systems and then the OSD process on top. So from a provisioning point of view, these are fairly standard components, just basic disk presented kernel, fairly standard file system and just a part of our set packages included in the Dell OpenStack solution. All layered on top of each other and it's this layering and distribution of the OSD nodes which is where the deployments or the main effort around your deployment will be focused. So this is where I'll hand back to Commissioner to talk a little bit about how Crowbar handle these layers of deployment. Thanks Neil. So we'll come back to Seth about how Seth works with OpenStack in the next session. So let's do a quick introduction to Crowbar. For those of you who have not heard of Crowbar, I just got off of a session this morning with Best Buy and Crowbar is open source by the way and it turned out that actually Best Buy is using Crowbar and we didn't know about it. This is how open source works I guess. But anyway, what's Crowbar?  What does it take for you to do that today? Right, think about that. There's a ton of stuff you need to do at the networking layer. There's a ton of stuff you need to do for setting up your DNS, your DHCP, your IPMI. There's a whole series of things you have to do before your infrastructure is ready let alone the OpenStack stuff, right? There was a user survey that came back this morning. I don't know if you've seen it, it's out there. The user committee has actually done a survey in the last two weeks and they surveyed about 415 people in the community. Various people, users, operators. What was their number one challenge? Any guesses? It was installing, configuring and managing OpenStack, right? And I'm talking about one layer of more difficulty down below that at the infrastructure layer. And this is what probar, this is the problem that probar solves for you. It automates the entire process of Baymetal provisioning and getting OpenStack and the operating system, everything up and running for you in an automated fashion. So from a marketing point of view we say get your servers, inboxes to a full functioning OpenStack cloud under two hours. So that's sort of the mission statement for us. It's fast and flexible. It's Baymetal installed using, so even if you have servers show up, there's all kinds of stuff inside that server. There's BIOS, there's RAID, there's IPMI settings. The servers have different ways of handling your actual hardware. So somebody has to go in there and do stuff.  If you're doing that manually, that's not cloud. It needs to be automated. It needs to be done at scale, right? And that's what probar does for you. It's all DevOps. I mean, the whole idea is DevOps. So it's an ongoing operational model. So as you learn how to do these things that you do manually today and take those best practices and programming it, program it back into your system and automated system, that's what probar does for you. It's open. So by the way, for those of you who followed the Best Buy story this morning, probar, they're not using Dell servers. That was the entire HP stack that they showed in that picture. So probar actually works on other servers, too. It's not Dell specific. It's not specific even to OpenStack. We've actually used probar to deploy Hadoop clusters. And Neil will talk about it. probar uses, we use probar to deploy SEP clusters. So you can use it to deploy any application. And it's Apache 2 license. It's all open source. So you can go get it out there. So I just wanted to spend a little time talking about the soup versus the sandwich analogy. So for those of you who are in the virtualization world, you're all familiar with golden images, golden images. Golden images is what we refer to as soup. So you've got your applications. You've got your utilities, your operating systems. You sort of build all these together and you create this wonderful, great-looking golden image. And that's what you deploy. But that model, they're pros and cons of using that. The downside of it is, even if there's a single change, if there's a little patch to the operating system, if you have 1,000 servers out there, how are we going to go and deploy that? So you create another golden image. You go and deploy that. So that's the soup model or the single unit model. It's a single golden image model. The other approach is to take a layered approach. So you have all these different pieces that you see there, the layers, the sandwich model, the operating systems applications, et cetera. And the idea is you can take each of those things and manipulate them in production one layer at a time. So you get a lot of flexibility doing that. So this is how it works in an upgrade. In the case of an upgrade scenario, like I just said, you have to update an operating system.  It's not scalable, obviously. This is where the whole DevOps picture comes into picture. So in the case of the layered model, just one component gets updated. And this is the whole philosophy behind crowbar, which you'll see in a second. So this is crowbar users layers for deployment, all the way from physical resources to the core components and operating systems, the cloud infrastructure, OpenStack in this case, all the way up to the APIs. We'll get into more details here. Again, as I said, it's not exclusive to Dell. We have built it in such a way that it's modular. There's something called Barclams, which we'll talk about in a second. But it's all modular and it's all based on this layered philosophy. So how does crowbar work? I'm not gonna go into too much detail. If you want to drill into the technical details, come by the Dell booth. We have all of our rock stars, basically, from Dell here, technical product managers, our engineers are all here. So they'll give you a quick tour of what it is, but basically what it does, imagine that you've got OpenStack up and running. Now you've found that all of a sudden you're out of capacity, right? Not just from a VM perspective. You're out of capacity from a physical perspective. Now you go add a new server. How do you do that today? It's a manual process, right?  But in the case of crowbar, the moment you add the server, crowbar discovers it. So there's this thing called, there's a DHCP server in the pixie boot. So there's a sledgehammer image that gets downloaded. It figures out what is on that server? What, how many resources does it have? What's memory? What are the networking configurations? The NIC cards, everything. And then it comes back and says, what do you want to do with this node?  Do you want this to be a set node? Do you want it to be something else, right? So you can allocate at that point. And at that point you can say, and this is where the chef comes into picture. Everything that crowbar uses is chef underneath, right? It's a master orchestrator, if you think of it that way. And then it lays down the operating system bits. It lays down the networking configuration. It lays down all the apps on top of it. This is all automated, by the way. And then there's a whole orchestration cycle, right? It's a complete state machine that takes you from bare metal all the way up to a running app. So that's basically what it is. So basically crowbar is a very configurable system. It's, you can add these things called bar clamps, which are effectively things that you can use to extend the capability of crowbar. I'm not going to go into the details of this, but again, it has a crowbar API. It's called Chef Recipes in it. It's components and scripts you can use to extend crowbar to deploy your own application. Which is what Neil will talk about shortly. But again, if you look at the overall picture, all the physical resources, this is what I was telling earlier, networks, raids, BIOS, IPMI, all of these things you can overlook in any real cloud deployment. And at scale, this becomes a huge issue. And then at the operating system levels, you may be using multiple operating systems. You may be a Red Hat shop or a SUSE shop or a Ubuntu shop, or you want to have multiple things going on. How do you deal with that at scale? Again, the same kind of problem, right? And then on top of that, you have all the OpenStack components, Nova, Swift, Quantum, Cinder. You need to get all those components. And as I said earlier, configuration of all these pieces in the right way, in the right order, so that they all work together is not easy, even today, even with Grizzly. And Crowbar does that for you. And at the top, you can use other things like and Stratas and Ganglia and stuff like that. So I'm going to hand it back to Neil at this point. We'll go into deeper into the stuff with OpenStack. So to understand why deployment is so critical to this, it's kind of helps to understand some of the evolution that we've gone through, I think, over cloud, with the private cloud technologies, particularly with OpenStack over the past couple of years. So when OpenStack and some of its predecessors began a couple of years ago, everybody said, well, the way to do storage was just to use object storage. It came as part of these solutions. And that was the brave new way of doing it. But of course, the reality was that most applications couldn't do object storage that you were trying to, the most readily available application you wanted to move to your cloud didn't have any concept of stateless storage. So everyone said, okay, you got to re-architect. We can't, sorry, we can't re-architect. Let's just use local storage. It's quick and easy. And it's provided as part of these default installations. But obviously local storage is not like the cloud way of doing things. This is not really scale out. So if anybody starts to see the storage admins coming forward and saying, well, we've got our existing proprietary appliances. Let's just use those, plug those into these open source clouds. But again, it didn't really make sense that these weren't, again, true commodity scale out, which is really what cloud's all about. So we arrived now at a point where people realize that distributed scale out storage is the way you do things. And this both applies to new applications, greenfield applications, as well as the legacy ones. And so we have people saying, I want to do storage like Google. I want to do storage like Facebook, which is what CEP provides, but the deployment story is a large part of that. So we talked earlier on about Rados being the sort of the underpinnings or the foundations. There's no single point to failure. It's self-healing. It's got the crush algorithm and so on. So we talk specifically about some of the block components and then we'll see how crowbars have helped you deploy all of these pieces together here. So from a feature's point of view, the block storage gives you standard kind of services of cloning and snapshotting, but it's got some particularly good features which make it suitable for open stack and open stack clouds. So first of all, remember Rados is an object storage system here. So when we have a block volume here, we're just chopping it up into lots of objects. And then we're striping those across multiple OSDs, multiple disks, physical servers in your CEP cluster here. So just the abstraction alone makes it very easy to sort of have VMs die to remount in a sort of EBS-style way the volumes that they were using. Event also opens up the door for live migration which is an active topic within the Cinder Group and so on. But let's think about how do you spin up images? If you wanna spin up 100 images, what's actually happening here? Well, one way is you take your boot volume and you just copy it 100 times, but this is not very efficient. So we use a thin provisioning and a copy and write system to make this a bit more space and speed efficient here. So when you have your initial image here which is say 144 blocks worth on the left hand side, you can just clone that four times. And what we're cloning here is actually not cloning data, we're just creating an empty data structure which has a whole bunch of pointers back to the original image. So the ability to create those cloned copies is very, very fast. You're not actually copying any data at all. So booting up lots of images at the same time is very, very fast. Combine that with a thinly provisioned initial image where you're only maybe saying it's two gig big but actually you're really only using a one gig in practice. Again, efficient space optimization. Once you actually start writing data, once you've booted your volumes and are actually making changes to this initial image here, then the pointers get flipped into actual real data here. But of course the client continues to read from the original image. So again, very efficient way of doing multiple boots of hundreds of volumes. Now, in terms of the OpenStack integration and how this all fits together here, so I mentioned JavaScript gateway which I won't go into now, but on the block device here we're completely plugged into the Cinder API. So all of the Cinder API calls with I think the exception of one which isn't so important, are all implemented here within the Ceph block device which then also allows you to use Glance and have Glance use the block device with that copy and write capability to store your images in a very efficient way. And we've also modified the QMU KVM hypervisor. So it's RBD aware, it can see these volumes, it can attach and detach them and so on and so forth. So all of this is natively integrated and it has been since Folsom. We're tracking all the API changes and making sure that they're all compatible with Ceph. Okay, so how does this come into the deployment story? So we have these OSD nodes, we have these monitor nodes here. You've now also got your RBD aware, Nova compute nodes here. Now ideally you want to have these homogenous blocks which are just scaling out. So when you talk about doing storage the way Google do it or the storage the way Facebook do it, it's all about getting a completely homogenous stack which is just cloned repeatedly. And this is cloning both of the hardware, you want to have identical hardware reference architecture where possible, the operating system and the applications on top and just scale them out. And again, by abstracting out the storage you can scale your VMs on the Nova compute separately to the underlying storage system itself which has different characteristics and different times about when you might want to scale this out here. So again, homogeneity, these kind of stuff and getting this to be a repeated process where you just rack up a hundred servers at a time or tens of servers at a time, gives you a scale out and your scale down here. So from a practical point of view how does this work with Crowbar? So as a commission today we have these things called bar clamps which are these modular pieces of code which allow you to sort of define specific roles or profiles about parts of the stack here. So at Ink Tank we worked on the Ceph bar clamps and they do a couple of things here. So first of all you have the admin node itself acts as a repository manager for all the software that's deploying out here. So with Ceph you can do rolling upgrades. We've got a three month release cycle at the moment. So all of those packages, the freshest latest bits are pulled into the admin node itself. Then you can allocate particular machines as a monitor node or as an OSD node. It'll, as commission today will do all of the hardware stuff, the IPMI, the networking and so on and so forth. It'll get the right disks in place and so it'll be aware that these are the disks which should be holding the data. It'll partition them up correctly. It will get the Ceph processes running on all of them. So the OSD and the monrolls all handled by the bar clamp and then using just the standard Nova bar clamp, this is now RBD aware. So when the Nova bar clamp is provisioning the OpenStack software, it will ensure that the QMU is configured to be aware that it can mount and unmount these RBD images. And back to Kamesh, just to explain a little bit about some of our customers and ongoing work. Thanks Neil. So we've been working with Ink Tank for a long time. Even before they were Ink Tank, they were dream host at one point when they were doing Ceph. So we were involved in the community. Dylan and dream host were working in the community. And then last year, we started really working with them on a more professional basis, right? So we partnered with them and we built this crowbar bar clamp. The Ink Tank folks did it. And so we have a joint solution today that we are brought to market. It's a crowbar bar clamp, right? It deploys Ceph clusters as Neil was referring to earlier. It's automatic, it's all real time. You can expand your Ceph clusters. You can expand your OpenStack clusters and all magically works. And of course, you know, customers still want professional services. They want support training. So that's all delivered through collaborative support from Dell. And when Ink Tank built the bar clamp, it's not just a software piece, right? It has to work with the reference architecture we have in place. So we went through a whole technology partner program and the whole bar clamp and the whole OpenStack cluster with Ceph was validated against the reference architecture in our technology partner program and in our Dell Solution Center as well. So it's now ready. It's available in the market. And when we launched back at Dell World in December, that was the official launch. And since then we have seen tremendous interest in this technology with OpenStack and Ceph. It's just unbelievable, the amount of inquiries that are coming in, how much people are interested in this stuff. We actually have a customer deployment that's gonna happen next week. It's a university and the situation, very briefly, I'm not gonna go into the details, but this university has more than 900 researchers and they receive hundreds of millions of dollars in grants as one of the top research institution doing work on cancer and genomic projects. So it's big data. They do a lot of work with large amounts of data, right? So what the university was looking for was a centralized data repository, which they can ensure compliance and they know exactly how much consumption is happening, et cetera, et cetera. And the intention was for them, for the university to provide two terabytes of free data to all their researchers. And anything beyond that, they would charge the researcher a nominal fee. So that was their model, right? I mean, this is gonna be a very large cluster at the end of the year, they're talking about five petabytes. So the university looked at a lot of different solutions out there. They looked at traditional sands. They looked at the public cloud storage solutions like AWS. They even looked at Hadoop to see if that would be a solution. And at the end of all that, they came to a decision themselves. All of this stuff was on the open source site. So they checked it out and they came back and said, you know what, all of those solutions are very expensive. The traditional sands are not gonna help us. The dupe was not the right fit for this. So they came back to us and said, we want the Delling Tank solution because it fit our needs. It was the right cost point for us. It was the best of all the worlds for both compute and storage. They were interested in OpenStack. They were interested in Ceph. So we had a solution that best fit their needs. So what's coming next? We'll sort of, let me finish with what's coming from Dell this summer. We are already working on Grizzly. Our team is completely focused on that. So we will have an officially supported Dell Grizzly released by this summer. There's a lot of work going on around Crobat 2.0, which is the next generation of Crobat. It's all happening in the community. It's open source. And we've been working very closely with SUSE. SUSE has been a great partner. Their SUSE Cloud solution, by the way, is also used as Crobat as their orchestration and deployment engine. And they've been working very closely with us in the community for Crobat 2.0 development. We're doing a number of things in Crobat 2.0. I'm not gonna go into the details, but I think the most important thing is we, so today, if you look at all the Cookbooks, we use Chef, right? And all the Cookbooks for Chef are, we want to upstream them, meaning that they're available to the community so they can use it to deploy their own OpenStack clusters. So we're trying to decouple the Cookbooks from the Crobat-specific pieces. So that's another key thing. And come by the Dell booth and we'll give you more details on what that is. And Neil will talk about what's coming next on the Chef site. So as mentioned, Chef has now got a three-month release schedule, which is something we've recently changed. So Chef Cuttlefish, which is the next major release, is coming out in a couple of weeks. Major features here. We've got incremental snapshots on the block device, which is really important when you're trying to do a copy of a block image from one cluster to another. You don't have to be moving the whole thing. You just move the incremental changes. We've also got a whole bunch of APIs coming in. So at the moment, a lot of the functionality of Chef you have to do through the CLI. We've got an API everywhere policy. So the first set of APIs are coming for the RADOS gateway part, but the RADOS system itself will be fully enabled through from a provisioning and from a monitoring management point of view through APIs in the dumpling release coming out in August. And also we've got geo-replication and multi-site for the object gateway coming then as well. And as mentioned, we're gonna be porting the bar clamps over to crowbar v2 when crowbar v2 sort of goes GA, we'll start work on that. We've got a session tomorrow in fact about the Chef roadmap. And so people are gonna get involved and sort of join us to plan out the next set of work, including the bar clamps work, but also the continuing integration of Chef and over the stack. We sort of invite you to come and join us for that. And then we've also got another session where if you really wanna get into some of the detail, one of our engineers, Josh Durgan, it's gonna be giving a talk on Thursday where he'll focus on a lot of the Cinder stuff, but just be going to the sort of general changes that we've had in the previous release, Bobtail and those which are coming up in Cuttlefish. I think that's it. Yeah, so there's the contact information for us and this slides will be up on the site so you can take a look. But with that, are there any questions, comments? Yes? In crowbar? Great question. So that's, so yeah, the question is, does crowbar support puppet? Today it does not, but the direction we're going with crowbar to.o is for us to enable both Chef and puppet support. Yes. Other questions? There is already a setting for that. You can set the mandatory number of rights which have to be done. Sorry, the question was, is there a way to sort of get it to, to not have to wait for all the replicas to be created before a success is returned back on the right. It's already a configuration in the crush rules where you can say, if you've got a replica of say five, you can say just give me two, three and return a success and then the rest will happen in a lazy eventually consistent way. Yes, it is, yeah. Okay. Well, thank you very much. Well, there's another question. I've got one more, one more down here. Crowbar and Heat. So if you have been to some of the sessions from Rob Hersfeld who is our chief architect, there have been some discussions around that. I don't know if there's anything specific going on right now. Okay, thank you very much. Thank you.


I'm Deborah Bortart and this is your Marijuana Money Minute. Charlotte Fiji unfortunately passed away this week. You may recall that she came to fame as that sweet little girl who suffered hundreds of seizures a day from a rare condition called Dravet syndrome. She was the patient that inspired the Colorado based Stanley brothers to create a CBD heavy version of cannabis to treat her condition back in 2011. She was 13 at her age of passing and a family friend posted on Facebook Charlotte is no longer suffering. She is seizure free forever. And in kind of related news, the DEA confirmed that the GW Pharmaceuticals Cannabidiol Drug Epidiolex is no longer subject to the Controlled Substances Act. The DEA's letter means that all federal controlled substance restrictions have been removed for Epidiolex. That means that prescriptions for Epidiolex will now be valid for one year and they can be easily transferred between pharmacies. Truly reported revenues this week of $252 million for 2019 that was 100% 146% increase over last year. The net income for the year not a net loss but the net income for the year was $178 million. Harvest Health and Recreation reported full year revenue increased by 149% to $116 million in 2019, but the net loss for the full year was an eye popping 173 million. Cushco Holdings reported that its net revenue decreased 14% in the physical second quarter to 30 million. Their net loss for the quarter was 44 million. The price of Hexo plunged another 22% after shareholders learned that the company announced a $40 million offering that stock was at roughly $0.54 down from a week 52-week high of $8.40. We do have a couple of acquisitions to mention. A KERNA acquired Trellis in an all-stock deal valued at $2 million. New Leaf Brands signed a letter of intent to purchase Colorado-based mincing group in an all-stock deal valued at $850,000. Mincing is a company that works with mushrooms. And that's it for this week. For everyone, please stay safe out there. I'm Deborah Bortart reporting for the Green Market Report.


What's up everybody, Jason here for jazzyn for jazzynskatesbrates.com. 2022 hip parade jazzyns exclusive dual case break, randon teams number one just sold out. And I get guys 20 total boxes, we have a little hit list giveaway, so this is curated by us with hip parades, so basically we say we kind of want these players, this price point, can you help us? And they said yes, we'll do the work, we'll package it, we'll go out and get the cards for you, and boom. That's all the sell sheet hits, that's a lot of different hits there. And again, two cases of 10 boxes, a total of 20 hits, one card per box. Now, like I said, we have a hit list giveaway, so if you do go hit list, I know it is going to be a little sad times. But you'll have a chance to win back something. Top two names on the hit list list, we'll gather up all the hit list customers, and top two names get a box of the 2021 Topps Trevor Lawrence sealed boxes. And I think you'll guarantee like one Trevor numbered or autographed in every box or every other box, so some nice stuff there. So that's a little hit list giveaway. Here's a Dye's Roller, here's a customer name, Jason, down to the Washington Commanders, and again also I think it says, just in time, NFL season, this product should contain mostly, if not all, autographs, which is better. So Dye's Roller, and it is a four and a one, five times, good luck, one, two, three, four, five. Five times, Kiam, Dana Daniel, and then we got five times, one, two, three, four, five times, five, five Colts, down to the Steelers. Now of course every team is going to be represented, of course, I don't know how many times, but I'm pretty sure a couple since there's a lot of cases, and of course there are some sell sheet hits, so of course if you're looking to hit any one of these cards, obviously it's only one of those, could be multiple Trevor Lawrence's, could be multiple Hertz, but of course what you see here is that example is only in there one, so you'll notice that as we continue to rip these cases, some of these hits will be getting pulled. Usually the way we configure it with Hiprate is like one of those or two of those are in every case, every box or something like that, so we'll see how this is configured, but usually something like that.  So in the meantime guys, while I step away really quick, I'll give you guys some time to trade, small and too big, let's just do it like this. So let me go grab the case really quick guys and then by the time I get back no trades in, we'll just close the trade window. So we're just going to grab some random ones, there's a ton of them, there's 30 different boxes, 30 different cases, so we'll just grab at random. Alright Richard, unfortunately I don't think we're going to do any trade, so let's just close the trade window. And again guys, cash trusted enough, Super Bowl Mixer, just four fillers away, three of them are on the website, and the three that are on the website are pretty much almost halfway or about to sell out. So three, 11, 19. We can knock those three out, I'll repost one more Chronicles, and that'll be the last filler to unlock the kickoff mixture, we can break that later tonight. Oh yeah, today's so much better, it's a little weird, it's kind of drizzling a little bit, but definitely a beautiful 80 degrees today. Remember yesterday 95, Anthony, 95, and all of a sudden it was a thunderstorm, and it was still in the 90s. Still predicted a rain today I think, but you know right now this is usually what her most of weather is like, between 75 and 80. So yeah, yesterday it was very disgusting honestly. Alright then I'm going to keep track of course of the hitlist customers and we'll put the list of names here to the right of you guys, and as hits come out we'll take off the names. First one, it's just it's just not normal here for it to be in the 90s Anthony. If it's in the mid 90s here, that's just pretty insane, you know, this is that's that's really hot for the Paramosa beach, you know, usually like that like back when my mom's at like the San Diego Valley in Omani area, I mean like I said last Sunday when I was in Long Beach, downtown Long Beach, 107.  Alright first thing guys, Saquon Barclay hopefully has a healthy healthy season that is 11 out of 25 and that is a rookie Saquon Barclay. So that's for the G-men, Giants Kevin Wilson. You are not going to be part of the hitlist promo since you have hit something. Alright next one, 21 out of 300. How about a little Dalvin Cook fabric of the game that is 12 out of 15 and that is from 2018. Minnesota Vikings that is Adam S, Adam you are not part of the hitlist promo now. Next box, $2.99 out of 300. Now how about a little Aiden Hutchinson under the lights that is uh looks like not numbered but of course Aiden Hutchinson from this new product here, Legacy that would be a Detroit Lion which is going to Jason K. So if there is any of those college ones like that you know checklists go first if there's a checklist of not will go by team they're currently on team they play for the longest. But of course he's the rookie here. Yeah it looks like it right? There'll be a good little run so maybe 15 breaks I assume. 15 breaks. Tua Togova Loa wow. One out of nine or no actually sorry that's six out of seven. That'd be a weird number right? Yeah six out of seven sorry that's very short printed man this is a hard to pull in playbook. Six of seven Tua Togova Loa I think he's not having a monster year this year. I believe in Tua. Miami Dolphins Chad B. That's awesome right there buddy. I don't know was that Tua on the cell sheet? Trying to think of us on the cell sheet. No that Tua was not on the cell sheet but that was a very nice hit though. Miami Chad it's not the most highest end product but it's still a Tua autograph and it's a rookie you know. We have a Nick Chug from Mosaic Mosaic Scripts that is a Cleveland Browns just Karen Steele. No problem Chad congrats buddy.   So far it's still been pretty nice guys very nice and I think it's a good price point too. You know you're getting 20 boxes dual case. I think if you hit at least one of these hits most likely you're making back your hundred dollars plus you know. So that's that's just the risk there but even if you don't it shouldn't be too far off. Oh Tony Romo you don't really see him sign so much and this is of course back in the day I want to say no actually this is 2021. I thought it was that was that old Donner signature level right there. That's Tony Romo four of ten actually assigning 2021 Chronicles. So that is Dallas Cowboys which is James Jimmy there you go. Jimmy you're not going to be part of the Hillis promo at least for the Cowboys. Yeah so we have a little partnership through a hip parade so sometimes you know they'll reach out and say hey you know we're going to do a collaboration you know if there's anything you ever need you know because they go out and hustle right they go to all the shows everywhere they buy out collections buy stuff from everywhere so you know they build a pretty big empire there so we've we've collabed with them many times now but basically it's like I said the way it works is like hey man you guys want anything we can create a little product for you guys you know we'll do the boxing we'll pack it for you we'll look for the cards there's anything price point you'd need and obviously I'm sure they get a piece for obviously doing the work but you know doing a little collab with a lot of different breakers and yeah it's fun I mean kind of saves Nick some time right it's like all right cool how about let's try to make it this price point these many boxes this many players and if it works out we'll do it. Garrett Wilson absolute tools of the trade to 99 and that should be Jets right that's the Jets receiver yes Jets uh Jason yes Deporter but honestly though we actually had cut our ties with him about like three four months before all that mark still happened actually they were being a little shady to us you know obviously they came reached out to us in the past and said hey we'd love for this to be a hub the way we do with Colby now and uh they were just being a little shady not paying us you know either as well like for the submissions we would give them so we had ended our partnership a few months before all that scam came out and I guess we could have said we could have called it you know but uh there were still some customers though that got affected by it but I think everybody pretty much got their cards though after the whole scandal but yeah we had to cut ties with them a few months before all that stuff happened honestly Matty Ice that is uh six of 20 from uh illusions that is uh Lana Falcons okay I'm with that one I'd assume so Anthony there's probably one card in every case right I'd assume that's what it is DA does own uh hip parade I think they just have their own division now like they've grown so big they've been doing repack products like uh hip parade for a long time like like maybe back since like 2015 2013 2014 like it's been a while they've been doing stuff like this but they just grown so much that I think now they have their own warehouse their own everything we have a T. J. Hawkinson rookie there to 75 but yes it is owned by hip parade I believe and uh Detroit Jason with that one all right Detroit I think I already had got it did I delete the wrong one or maybe I just deleted it yeah well there you go that's already taken out last one here and we got a Joe Montana to 99 79 out of 99 49ers Jason with that one oh that's what it was they had the hutch Sonata that's why his name was already erased all right well there you go um I don't think we hit a cell sheet but if Anthony saying there's only 29 there should have been 30 I'm assuming that Tua should have been a cell sheet honestly or is it Montana all the Montana's on there you're right I feel like the Tua could have been kind of like a cell sheet technically but there you go nice little case right there but hey we're not done yet got another one oh yeah I mean at one point during the pandemic I remember they were doing like Nintendo 64 cartridges besides of course like comic books and you know greater this greater that I mean yeah they've expanded big time actually kind of wanted to buy one of this mystery like 64 like cartridges Sega and all that stuff they were doing that for a while I don't know if they still do that though but Amonra St. Brown that is a Detroit lion Jason K Troy lion got three hits already yeah well it's too deep or no on that last part but for the most part yeah I think we've had a pretty solid core I think a lot of us obviously you know really do care for each other you know like see each other as all family in a sense obviously the business owned by the family but you know we all got connected somehow mutually that through through friends or family members itself Earl Campbell legendary patch auto out of 15s remember that is a huge dollar is going to the Tennessee Titans and that will be Victor how about Tyler Lockett I think he's one of the most underrated receivers who just produces all the time I remember him at TCU he was so good that's a patch autograph from Finest I believe he's a rookie in 2014 2014 or actually this is 2015 but I think he was a rookie oh no I guess he is a rookie in 2015 that's right he was with Nelson Aguilar I believe Diggs was even that year too actually Seahawks uh Daniel I believe all right do I see that right no Richard sorry Seahawks oh was I thinking of the other dude sorry yeah uh Kansas State that's right sorry sorry sorry you're right Kansas State no no I got that one confused K-State that's right that's right we have Justin Jefferson futures that's a rookie patch autograph from Legacy to 149 uh that is of course Minnesota Vikings going to Adam and I believe the Vikings have also hit already hold on to that one Kev for a long time man Kelvin Carr is going to be he honestly has a chance to be like legendary Hall of Famer he's so good Javonte Williams 33 at 99 Denver Broncos make I understand what that one Najiharis that is uh 61 out of 99 that is uh Pittsburgh Seahawks Daniel Smith you know what Deepwater I got them confused but I want to say I remember seeing him play now like I said K-State because I want to say I think Oregon played them in the fiesta bowl and I think that was like 2013 and I believe he was the receiver and they had that quarterback that was basically like a Tim Tebow clone right you remember that that's where that's where I remember him from for the first time I want to say Oregon played against him that's the game that that's the game that the Anthony Thomas scored on that opening kickoff run and I remember that's the first time I had seen Tyler Lockett oh that's right calling Klein that was his name there you go I got confused though I remember I remember he was the purple squad but I was just I don't know why TCU came up to my head but Oregon actually did play TCU in a another bowl game a few years later but I think they ended up losing Michael Carter 14 or 16 out of 25 just just jets no I don't think he was driving I think they actually made him turn into a tight end ooh nice Atlanta Falcons all-time contenders three out of 99 a lot of Falcons is going to come and that is already a hit for the Falcons as well all right two more hits to go guys named a starter tomorrow I had on my fantasy team last year for a little bit about a little Matthew Stafford player of the year optic contenders number to 25 Los Angeles Rams that is Jason K one have we hit the second cell sheet yet you know what the Stafford I think was on the cell sheet Najee was two I know the Stafford there there's a couple Najee's on the cell sheet but it looks like it's look like it looks like it's Immaculate and Panini one Najee's last one is another Tua Tug of Iloa Dress for Success patch autographs out of 75 from rookies and stars nice another hit there for the Dolphins Chad B two of them won so there you go folks let me double check that everybody you know make sure that everybody that's in the hit list does go hit uh isn't the hit list problem hold on one second so that's Dolphins already got them out Rams out Falcons out Jets out this was a Najee right there um Javante Denver Broncos out Justin Jefferson Vikings out Seahawks out Tennessee Titans out Amonra Detroit out 49ers out Detroit out again there other Falcons out there that's Jets Cowboys Dolphins Detroit again Minnesota again and New York Johnson okay perfect all right well that was a fun break though guys I know there's obviously gonna be I think pretty much almost half of you guys are here this is not more but uh like I said it's still pretty fun um let me just put this over here and name it hit list so a little more than half of you guys 18 so two and 18 shots to get something back in return and again top two get those uh Trevor Lawrence tops collaboration boxes roll five one six one two three four five and sixth and final time boom Sean and Jason K so Jason did get some hits but he also did grab about seven spots so there was a couple hit lists for him too as well so there you go Sean and Jason you guys got uh little tops Trevor Lawrence boxes coming your way I have no idea where those are at but I'll have to go find them and pull them but uh let me write that down really quick so Jason and Sean no I'm good thank you man all right see you man you too you too all right well I appreciate it guys that was a break let's do the next one Jasper's casebricks.com


Hello everyone this video introduces code for working with Google's cloud fire store and you can grab the code from the link down below and This is a clip that was kind of recorded a while ago and has been kind of cut together for this one So if you hear some references to things that maybe are not relevant or if you see that the screen is a little bit different That's why the the video you're about to watch is a little bit older But everything is still Relevant in terms of the content in terms of the code. So if you have any questions, please let me know I'm gonna focus in this video just on the basics, you know Like what it what it means to talk to the fire store how to send data up to it how to get the data back and About as simple a way as possible. Okay, and hopefully that will help you understand the process a lot more And get something workable going All right, so I have my trusty fire base example application here It's got a slightly new layout on the main page. I just couldn't stand the look at those old buttons anymore What you'll notice here is there is a new activity called fire store plus list view And so that's what we're gonna spend our time with we're gonna ditch the recycler view We're just gonna put in some simple data using our app into the fire store and then Query the fire store to get that data out. Okay, so let's click on this activity right away. There's not much to it In Android studio, we're going to be doing all of our work in Firestore list activity here and then activity firestore list dot XML the layout file for this activity When you check this out from github, you're gonna see a lot more code in here follow the instructions on the title card at The beginning of this video to get to this starting point where I am currently at. All right, so let's build this together So what do I got here? I've got two text fields to edit text fields, excuse me and What I'm doing is I'm gonna put the names and ages of people into the fire store And I was thinking this could be maybe like patients in a hospital something like that Okay, so, you know, you can type in a name here if you click on the age You can pick numbers. I have no data validation going on here For this demonstration, all right, so obviously that's not a valid age But anyway, this is all the app does it has these two things And you can't do anything you can just type in now All right, so let's Take these two fields which are already all defined for you and let's Get the data out of them first of all. Okay, so I'm gonna go into my layout file Which is activity firestore list on XML. Let me make this bigger so you can maybe see it a little bit better My big head is still in the way a little bit. That's got to be a little bit better All right, so I'm in my layout file. I've got my labels and my Textboxes. Let's just make a submit button really fast. Okay, so I'm gonna make a submit button We'll wrap the content. We'll wrap the content should always give your you don't have to but it's always a good idea to give your View elements an ID so that you can then refer to them from your code, right? So I'm gonna give this thing and I make extensive use of auto-complete, right? I'm gonna give this thing an ID of I'll just call it the submit button easy to remember Okay What text do I want to show in the submit button? I'll just show the text submit Now Android Studios, I'm happy with me here It's showing me this red because it wants me to put this string into the strings dot XML file I should do that. I'm not gonna do it trying to get this done relatively quickly All right, I am in a constraint layout here So I need to set this buttons location according to constraints So let's just put it in the middle of the screen horizontally the way to do that Let's constrain it to the start the start of the button To the start of its parent Okay, and let's constrain constrain the end of the button to the end of the parent That'll center the button horizontally. You can actually see it move up there, right and in a little Preview screen. All right, let's put it below The edit text so we're gonna constrain the top of this button to the bottom of the guy above it one of these things and What is age edit text? That's the idea of edit box So if we do age edit text All right, now we've got our submit button down below All right, that's pretty good. And then of course the final thing is we need to set up a click listener The click listener is the name of the method that will be called In our activity. I haven't defined that method yet. So I'll just call it on submit click, okay, and Android studio is giving me a warning here because it's saying This method public void on submit click was not found in my activity. Okay, so let's go do that Let's go put that in the activity switch back over to my fire store list activity All right, and shrink this out So let me define that method that it wanted me to define. So it's gonna be public Void always public void for these click listeners What did I call it? On I gotta go get the name I Called it on submit click On submit click and then this method also needs to take one parameter, which is a view All right, so we're clicking this thing and now what we need to do is we need to get the data out of the text boxes Okay, so first of all I need to get the text box widgets So that I can get the values out of them and this pattern you ought to be familiar with by now in order to get the View out of our layout we call find view by ID and then we give it the ID that we defined Over here. So the ID for the name edit text box is name edit text Okay, our ID Name edit text and you can see, you know, if everything looks nice and purple here, you're in good shape Let's get the text box For the age while we're at it. So I just duplicated the line Gonna make some edits here in the interest of time Okay, so now I have my text box widgets Let's actually get the values out of them. Okay, so the way that I can get that is String the name is going to be get the edit text box and then call get text Okay, and that gives it. Why is it so unhappy here? Because Get text does not actually return the string which is kind of interesting it returns an Inner portion of the edit text box. So but the solution is to call to string on that and now we've got it Okay, so Let's get the age The age string now this is an edit text box. So it's gonna be This content is a string even though it's a numeric string it's still a string So I get this back and it's a string But maybe it's gonna be useful for me to store this as an actual integer The preferred way to convert a string to an integer in Java is to call integer dot parse Oops, I spell integer correctly parse int and then give it the string that you want to convert into the integer now if this thing Happens to not be a string You'll get a nasty exception here Which you should handle when you're doing your validation and things like that. I'm not going to I just want to get this going So the final thing I'm going to do is let's just make sure our submit button is working So let's log the statement to the log cat Okay, so log cat takes two parameters. The first is The tag the tag is usually you want to give it the name of the activity as a string Okay, so I'm gonna give it the name of the activity as a string and then what's the thing that you want to report? Okay, so let's say What do you want to log submitted? Name was the name and then the age was Let's give the age String here because you can't concatenate integers with strings All right, so this should Give us some log output. All right, let's rerun this To get the changes applied Okay, I'm back at my main menu. Let me pull up my log cat down here at the bottom Go to the firestore list view type in a name age Other good old days click submit All right, and something popped up in my log cat submitted the name Lucas with age 21 okay, and if I click this again, it just keeps firing off Let's make sure the changes are working So this code is executing great Now what we want to do right? We're working with the firestore here We want to put this thing up into the firestore as data So at this point we could do that But in Android in particular, it's much more useful to think of the concept of you know the name and the age not as just two separate pieces of information but as Belonging to a person or a patient, right? I said that our metaphor here was we're doing like patients at a hospital So what we can and should do at this point is create a data object It's gonna hold this information. Okay together name and age. So Let's do that. Let's make a new plain old Java object So I'm clicking on my package up here And I'm gonna make a new right-click new Java class and I'll call it patient. Okay. No everything else I'm just gonna leave as it is Okay, that's me if I want to add this file to get sure why not Okay, so what constitutes a patient a patient has two attributes their name and their age So let's define those Good practice is to make your class attributes private unless there's a really good reason not to do that so the name and An integer for the age so What we will know kind of looking ahead what I can tell you is that firestore will provide with up to us some mechanisms for automatically converting a good old Java object Into the form of data that firestore needs to store. Okay So if we construct this Java object correctly, we can create these objects and the firestore will just store them for us also later when we query the firestore it will Automatically create these objects for us. Right. So we're dealing with objects instead of like lists of names and ages and things like that's much more convenient So what we need to do though for that all that to work is we need to create two Constructors for the patient class and no argument constructor an empty constructor and an all argument constructor Android Studio makes us really easy If you are in here, you can right-click and Go to generate Okay, or hit all insert or option insert generate Constructor Okay First let's make the no arguments constructor select none down here and There you go. You have a no argument constructor kind of your default constructor All right, let's make the all argument constructor. All right clicked again generate Pick the constructor and then select all of these right multi-select everything click, okay Voila generated the code for you The other thing you need to do is you need to generate the getters and setters for all of your variables Okay, the way to do that once again, right-click generate Getter and setter Select them all Okay, and there you go The naming convention here is really important. Okay the name here Set name and this it's gonna be based off your name here These things are important. So Sticking with the defaults is fine, but you cannot rename these getters and setters if you do it's gonna break things All right. All right. So now we've got our patient. Let's go Back into our activity our firestore list activity and let's make a new patient Right based on this data. So my new patient P is Let's use one of those constructors The all argument constructor took the name first followed by the age New patient there we go Okay, so now I'm creating a new patient and we can check this out instead of calling This let's call it with P dot get name and P dot get age It's probably it's gonna be mad again because this is an integer Integer dot two string, but I can convert it back to a string I'm just you know, this is all kind of necessary. Oh, no, I don't need to do it Java smart enough now Okay, so when I can cat name This it should be fine Let's rerun this run our app again. All right, let's type something in here And here it is so I'm getting my output. This is good All I've changed here is I'm putting the data into a patient object and and printing it out All right, but this was an important step. Okay, so now we want to put this patient Information whenever we click submit up into the cloud fire store Okay, so you need to have a cloud fire store project going on and working here If you've already done the fire base example projects, you should have one Here's my cloud fire store in my project I already have a few collections a collection is a group of related objects, okay So I've you I have people and plants for my other fire base Example projects. I have location recordings from something else I'm gonna make a new collection called patience. Now. I don't need to do that ahead of time I can I want to put all these new things Into my patients collection, but there's no reason you don't have to come in here and create it ahead of time Right fire store will do it for you The first time you put the first patient into the collection, right? So but let's do that Let's put the patient up there. What is that going to look like? So here's the call that you need to make First thing is we need to get an instance or the instance of the fire store Database connection. Okay, you should make this a class variable. So I'm here at the top of my class in fire base and I'm gonna do private fire base fire store I'll call it MDB right my database and You initialize it by calling fire base Fire store dot get instance. Okay, so this get instance call Um Magically initializes the connection to the fire store for you and as long as you have your Google services dot json file In your app folder. This is gonna work. Just fine. Okay, so this initializes This object for the fire base fire store and now we use this object to put things in the database Delete things from the database query the database, etc. Etc. All right, so let's go down here And let's put something in our database. All right, so I'm back in the submit click And instead of just logging the thing. I actually want to put data in. All right So the way it does this let's we call let's get our fire store object MDB The first thing you do is you call a method called Collection and you give it the name as a string of the collection. You want to put it in All right, so right now I have people collection. I have plants. I have location recordings. I want a new one I want to call it patience So I put the string that I want in there. Okay Alright, so that says the this is kind of a strange syntax I'm gonna talk more about it in a second So now I have a reference to this and now what I call is dot add And I need to add the thing that I care about. Well, the thing that I care about is this patient, right? Add P Okay That's it That should get our data up in the database if we've done everything correctly. Let's go ahead and Apply changes Rerun this thing if we need to Okay, adding I got a rerun the app. It's fine Okay, going into my fire store and list view Now I should still get the log statement to make sure that we're seeing that Okay, submit Okay, submitted app didn't crash. That's always a good sign. Let's go over to our fire store. Okay Let me refresh this page Okay, so now here I've got a patient's collection and It's created one document in it and that document has the name Lucas with the age 21 So our data is actually going up there. That's great If I submit again It will actually, you know add to the collection see I've got two of these now man Let's make someone that looks different Submit him. All right So now I've got three people in my collection, right? So data is going up. That's great This syntax is called like the builder pattern Where you're chaining all these method calls and kind of adding more functionality on here now One of the things you should always do right is every User action should have tangible feedback to it So what we want to do To give feedback to know that everything is going well is to add Success and failure listeners to this call this call to add is an asynchronous call What does that mean? If you remember the Android user interface thread is one thread and Anything any long running process that you would do here Like say you had a for loop or a while loop that was infinite if you had a while loop here that was infinite It would block the thread right the thread There's only one UI thread if you do something long running or silly in here your app will freeze That's what it'll look like anyway Add is an asynchronous call which means it forks off a background thread to go and put the data up there Okay, so Android Let's you know just for the sake of argument You don't have to follow along. Let's just for the sake of argument say that we have a print statement after here This line will execute and this line will immediately execute after it Android doesn't sit around waiting for add to happen It doesn't wait for the internet connection to open for the data to be sent for the response to come back It doesn't do any of that it immediately goes fires off a background thread and that background thread does its thing Putting the date up in the cloud But then this line of code goes it's not waiting on that background thread. It's an asynchronous call Okay, so if we want to get the result of one of these asynchronous calls we have to Or do something when it finishes we have to add and A listener to it, right? This is the mechanism that uses so we're gonna add an on success listener And let me format this a little bit better So you can see what we're doing right? I'm just doing some formatting. So adding some an on success listener I'm gonna create an anonymous inner class right here To do this new on success listener, right? I'm making extensive use of auto-complete here. So I type new on I get the on success listener I'm that's the one I want hit enter and it fills in some information for me Okay, so what do you want to do now? This method is gonna get fired off whenever the data was Successfully connected to the firestore and shoved into the firestore. So what do you want to do? Well, let's make a log statement. That's one thing Let's make a log statement I'm in the firestore activity the first part of the log statement should be the name of the activity I'm getting it to the point now where I'm using the string twice So that means that's a pretty good candidate to put it in a Field or reusable Variable so let me create that private static final string Tag is the convention This right so now I can reuse this tag over and over and over The static final part of this basically means this is a constant. It's never gonna change. So now instead of Putting firestore activity here every time I want to Log something. I'm just gonna put reference that tag and what do I want to say? Let's just say patient entry added successfully I'm gonna quickly rerun, okay, and you know what let's So that's useful for me the developer, but let's tell the user something too Quick and easy way to tell the user something is to give them a toast right a little quick pop up So let's make a toast toast Dot make text. Let's call this thing right here Okay toast dot make text first thing the toast needs is a context the context is usually the activity because we are inside an Anonymous inner class right here. We have to refer to the context in a slightly different way We can't just say this Normally you would say this but this is not an activity. It does not have context. It's one of these successful listener things So the trick is you got to refer to your activity firestore. That's wrong on firestore list activity Dot this okay Toast make text. What do you want to say? Let's say the same thing we say in the long file patient Entry added hooray, and then the final parameter to make text is how long you want it to show That's specified using a constant. Let's do short And then the final step here is to call dot show. I don't make it actually pop up All right, let's rerun this Okay, go to our firestore dot list view to put some data in Bob is 55 and submit and if everything goes well, we're gonna see two things. We're gonna see two log statements down here One that says submitted Bob 55 and then patient entry added successfully And we will see a toast down at the bottom of the screen here. That says patient entry added There it is real tiny. You notice there's a delay All right, let's let me clear this out Watch this again. Let's submit Joe. He's 22 There's a delay here, right? So when I click submit immediately, it'll say submitted name blah blah blah down here But this success listener doesn't fire until all those asynchronous calls happen The network connection is open the data is transmitted over the intertubes It's stored in the firestore and firestore sends a successful response, right? So one log message is gonna show up immediately and then the toast and the second log message will show up slightly Later, you know a second or two. Let's watch again That time they were really fast. Okay, so but nonetheless, there was still a little bit of a delay Alright, so we got data in the firestore next video Actually, you know what before we continue. I Forgot this stuff can fail. So let's add a failure listener here Failure listeners look a lot like success listeners So I'm chaining again, right? I'm dot add on success listener after that method.  I'm gonna make another anonymous inner class That is a failure listener. What do we want to do? Let's just tweak what we did for the success instead of the failure. Let's log a warning Patient could not add so This log level is at the debug level warnings are a higher level of priority You can use that to your advantage when you're filtering things out Could not add patient And then what do we want to say to the user? Something okay, you should handle both of these gracefully in a way, right? So That's it for now next video. We'll talk about Forgot my semicolon there again next video We'll talk about getting the data out of the firestore now that it's up there But this is a an example just using this ad mdb.collection.add and Gets it up there. Now. I have this tied to a submit button, right? I'm in on submit You can tie this to any event you want The user tapping on a card a value changing in an edit box You can attach this to anything, right? The key is in this mdb.collection.add We define a success listener. We define a failure listener and Importantly we defined a patient object Which is going to be the model for the information we want to put up there, okay next time We'll talk about getting the data out of the firestore


To change disposable batteries, you first need to remove the battery pack cover. Make sure that the battery pack cover lock is in the vertical unlocked position. Then slide the cover off the battery pack. Use the coil magnet to remove the old batteries from the battery pack frame. Insert the new batteries into the battery pack frame with the positive poles facing out. Then replace the battery pack cover and if the audio processor belongs to a child, lock it into place.


Hi everybody, Joe for Jaspy's case of breaks.com coming at you with a random number block randomizer for that collegiate football break Pick your team nine featuring a ton of teams here. That's how it works and Big thanks to this group for making it happen appreciate it. There are the numbers right there Let's roll it randomized names and numbers six and a four ten times each one one two three four five six Seven eight nine and 10th and final time After ten cut a couple Jeff's down to Sean six and a four ten times for the numbers one two three four five six seven eight nine and 10th and final time after ten Got three down to one All right, so Jeff with three and zero Steve with seven Simon with six Steve with four Jeff with five eight two Andrew with nine and Sean with one. All right, and this of course is the number block for all of these teams right here There you go gang. All right We got to do one more of these and then we're in breaksville and that flawless collegiate football Pick your team break from a fresh case. So check it out. Jaspy's case breaks.com. Bye. Bye


August is hot and so are the savings at Appalachian Wireless, where all smartphones are 50% off. Even the 64, 128, and 256-gig models, two-year agreement required. Better service, bigger savings. That's today's Appalachian Wireless and East Kentucky Network Company. The Johnson County Public Library is hosting weekly, gentle yoga classes. Yoga really is for anyone, no matter how you do it. The class is free and open to the public. The class allows participants to experience yoga from the comfort of a chair and is designed for all ages, abilities, and levels of flexibility. During the class, exercises and breathing techniques are taught to offset pain and improve mobility and strength. It's a great stress relief. It's so important to be physically fit and aware of your breathing and how that affects all that you do. On Monday, 25 people joined the first gentle yoga session at the library. There are also classes taught at the Painesville Recreation Center and the Senior Citizen Center. We're all trying to work together to make sure that people are able to get a class at a time that's convenient for them and a place that's convenient. Classes at the Johnson County Public Library are offered Mondays at 1 p.m. For more information, contact the number listed on your screen or visit the Johnson County Public Library on Facebook. In Painesville, Shelby Still, EKB News.


Hello everyone, hope you're well. Today it's IndyCar. IndyCar again. I want to talk about the hybrid engine. It has been postponed from 2023 to 2024 with the arrival of hybrid engine. Obviously it has been Covid that slowed down the world quite a bit and it's been very hard for the manufacturer to get the parts to get ready for the new hybrid engine in IndyCar. So instead of being in 2023, it'll be in 2024. But it's coming, it's going to be more power, it's going to be more push to pass, it's going to be quite interesting. So the new engine are going to be V6 2.4 liters hybrid versus V6 2.2 liters right now. In IndyCar at the minute we do about 600 horsepower, 650 with the push to pass. I believe we're going to go to 700 horsepower with 800 on the push to pass button, bottom on the hybrid one. So it's quite a complex technology. Obviously running hybrid on oval is something quite tricky. You pretty much never break on a speedway. So how do you recharge the hybrid part if you don't break? So that's what all the challenge in IndyCar is. That's what it's got a lot of testing. We've heard recently Honda and Chevy going testing in the Indianapolis GP. Without the hybrid part but on the new 2.4 liters they sound good. They did quite a lot mileage. So finger going smooth. Testing has started but yes it's not going to come before 2024 but it's going to be more power. So more power mids, more traction, more torque out of the corners. Some of the race track may be quite tricky which is good you know it gives us a new challenge but yeah it's going to be more power. Some track like Road America or Indy GP is going to be fairly you know straightforward to use it but some other places maybe like Bumpy Long Beach or Detroit, twisty barber. It could be a quite a bit of a challenge on the throttle application. Driveability also there's a lot of work being done there to make sure that we can use the power. It's not all straightforward I would say. The hybrid system is going to be on the gearbox. It's not a battery system. It's a little bit different than what you have in Formula 1 but it brings weight. It brings weight quite a bit so more power, more top speed, higher weight means that it's a much harder time on the brake for the brakes for the tires as well. So IndyCar is working all of that. I don't think we're gonna have a new chassis with it. If I'm very picky and I say exactly what I would love it would be great to have a new chassis with the new hybrid engine coming. The chassis is a 2011 I believe in IndyCar. Made a lot of progress safety wise but it's gone heavier and heavier with the years. The arrow screen is a very good safety device but it's also heavy. So if they could do a new one that would be great but obviously there's cost and we want to make sure that every team is doing great. So we'll see what will happen but that would be my ideal Christmas list, right? Hybrid also to try to bring in third constructors. We've heard a couple of names around. I don't know where it is to be honest. I think there was some talk with Ferrari who may have heard Toyota coming. It would be really good to have a third manufacturer in IndyCar. It's gonna be a different hybrid from Formula 1. I mean at the minute the way you drive in IndyCar you switch on the engine you go out of the garage and then it's flat out all the time, right? There's no charging, discharging, outlap, push lap, cool down, recharge laps, stuff like that because it's not a battery system. It's just an engine. I love that. I love that. I love going out of the pit and push all the time as hard as you can. Come back in the brief, go again and push hard. So in Formula 1 you've seen the stingwheel in one of the previous video. If you haven't just make sure that you click here and go and watch it. I'll tell you all the secrets behind the buttons. But yeah, in IndyCar there's less buttons. It's more straightforward. I feel that the system is going to be a little bit easier to run than the Formula 1 one. But again, it's early days and haven't yet tried it on the sim. I think it's going to come very soon. But yes, it's coming. It should be better for fuel consumption. It should be better for the environment. So it's the right decision. But obviously we need to make sure that we have the advantage and the others and that we can win a lot of races. Is the IndyCar behind Formula 1? Yes, it's technology-wise. The IndyCar is behind Formula 1. But you have to also understand that a budget is about 10 times if no more cheaper in IndyCar than it is in Formula 1. We use ethanol as gas and not fuel. It's less efficient than fuel but it's more environmentally friendly. It's got 20% less pollution in our fuel. That is in good direction. But yes, the technology in IndyCar is simpler. The car is simpler. It's the same for everyone. It's very much like a Formula 2 and an advanced Formula 2. But I like the fact that we all have the same one and that everyone's got a chance to win the race. I think we've seen in Formula 1, you know, hybrid coming and then 2014 Mercedes were dominant. They were the best power you need for so many years in Formula 1 with the hybrid system. And some of the other really struggled initially with no one and Ferrari. It was tough. So in IndyCar, I feel like we need to make sure that to bring it to the table, we have all manufacturers to be pretty much on the same level. We don't really want to see one completely dominating as it was the case in Formula 1. I don't think that's quite the mentality. So there's going to be a lot of testing done during the year. There's going to be a lot of testing on road course. There's going to be a lot of testing on ovals. As I say, it's hard on ovals to make it work. There could be a paddle behind the steering wheel that you would use as a recharging paddle and that would cost you some straight line speed that would recharge the hybrid. So, you know, there's a lot of discussions. There's going to be a lot of tests. I'm looking forward to be involved and give my feedback. Obviously, I've got a lot of experience from Formula 1, so that could be super helpful. So yeah, guys, make sure that you like, subscribe, comment. I'm reading your comments and, you know, talking, making small tweaks on the videos so I can answer your questions. Yeah, hybrid is coming in IndyCar. I'm excited. It's going to be more powerful. It's going to be more technology. It's going to be a little bit more thinking behind it to get it right. And that's 2024. It gives me a couple of years before to win a championship and then we can go into the new generation. Subscribe, like, leave me a comment and I'll see you very soon.


A film in three minutes. The Endurance. Antarctica. A land of desolate beauty, brutal climate conditions, and the perfect setting for one Ernest Shackleton to undertake his most daring and most notorious adventure. The first attempted land crossing of the entire continent via the South Pole. And what better way to discover the trials and tribulations of this legendary explorer's greatest voyage than with director George Butler's 2000 feature length documentary The Endurance, Shackleton's legendary Antarctic expedition. Narrated by the gravely voiced Liam Neeson, The Endurance follows the final years of Shackleton's remarkable career during the fading era of heroic exploration. With the race to the South Pole having been won by Norwegian rolled Ann Munson three years previously in 1911, Shackleton's new determination was to be the first man to journey across the entire land mass of Antarctica, setting sail in 1914 at the eve of the First World War. The mission, which would soon find itself in grave danger, tested Shackleton's leadership abilities to the extreme and pushed the mental and physical limits of both he and crew to near breaking point time and time again. With the end result becoming one of the most remarkable stories of human endurance ever recorded. What makes the documentary stand out from others that focus on struggles for survival rests simply in how captivating the disastrous circumstances Shackleton faced with his crew quickly became. From having the ship, named The Endurance, trapped in deadly pack ice, to navigating to South Georgia Island on a tiny rowboat for 17 days, it's difficult to resist not becoming transfixed to the screen as more and more mesmerizing misfortune befalls the doomed expedition. Surviving archive footage shot by crew member Frank Hurley provides photographic insight into the adventure, documenting moments of great natural beauty juxtaposed with comedic levity before the ship's downfall. This footage helps to humanize the accounts of the men in a way that's few diary entries about high adventure from the period could muster, making it much easier for us to empathize with the long deceased adventurers during their terrifying ordeal. The desperate lengths that Shackleton was willing to undertake to bring his entire crew back safely are breathtaking to behold, with the recorded interviews from their descendants providing unique anecdotal glimpses into the rugged psyches of the trapped men whilst their conditions worsened. By the film's end, you will be moved as much as shocked by the truly incredible ordeal that was Shackleton's last major expedition. From near starvation, low morale, attempted mutiny, and dreaded frostbite, Shackleton's ability to hold firm and keep the spirits of his men high against increasingly insurmountable odds is well deserving of its now legendary reputation, with the words of his erstwhile colleague Sir Raymond Priestley summing it up best. When disaster strikes and all hope is gone, get down on your knees and pray for Shackleton. After watching the endurance, you'll know exactly why and be forced to agree.