So everyone's really excited.  If you're standing at the back, there's space up here unless you wanna get your steps in. Cool. So welcome to our presentation. This is Masters of the Universe, live coding a React application using Drupal services. This is gonna be a live demo, so there may be some excitement and some thrills. We ask that you leave your questions, comments, and tips until the end. Unless I'm crying, in which please come and help. Or if you wanna help with the coding. Yeah, that's fine too. Just chime in. Cool. So, what we'll cover. This is just a large overview. We're gonna be talking about who the people up here are, what progressively decoupled is and how we use it. I'm gonna give a light touch on React licensing because I know it's a sensitive subject. And then we're gonna actually go through the build process in terms of how do we define kind of the data structure, how do we set up Drupal, and how do we set up React. If you're an expert at this, this will probably be old hat to you. But if you've never encountered this before, we're gonna give a really high level overview to understand how you can actually build these tools yourself. So the intention is that this isn't a deep dive, this isn't a complex discussion of something, but it's kind of like a cooking show. I'm not gonna like chop the carrots, but we'll show you how it's done. And if anything goes wrong, you do have the finished turkey at the end that we'll pull out. And that'll be the razzle-dazzle that we're looking for. I'm Justin Longbottom. I'm a Drupal developer with MyPlanet. We're based in Toronto. I've been doing Drupal development for about seven years, I guess. Lately, been kind of experimenting more with progressive decoupling, using React to do that, embedding that into our web pages to provide rich experiences. And yeah, those are my Twitter handle and d.o profile, so follow me, add me. Some of the repo that I'll be using later, it's not public right now, but the goals to eventually get to that point. So watch for me on Twitter and I'll tweet when that's ready to go. It's also his birthday. Oh yeah, it's his birthday. Yeah, it's quite the birthday present, so hopefully everything goes well. I'm Erin Marchak. I am a Drupal practice lead at MyPlanet. We're out of Toronto. And I focus on building out Drupal teams, mentoring users and embedding on the teams as a technical architect so I can work with people and learn and develop their skills. So the idea of learning and introducing new people to different things in Drupal is really important to me. You can, again, Twitter and d.o are up there. If you have any questions or are confused about any of the resources or anything, please follow up with us on there. We're always happy to chat. So what is progressively decoupled? We've heard a lot about it. It's been kind of kicking around the community for over two years, so it's kind of done, not done, but like, it's well used and well known. Established, thank you. And what it does is it allows us to embed decoupled applications on a standard Drupal page. So there's components of the page that are decoupled, that are rendered using client-side technology that allow us to kind of maintain the authoring experiences of classical CMS. If you work with users that are used to the Drupal UI and how that's kind of patterned in any kind of version control or work flowing, you still have that using a progressively decoupled approach because it's so closely tied into the classical CMS. If you use panels, you'll still be able to use panels because progressive decoupling doesn't necessarily exclude any of those standard technologies that we're used to. And you can use it to utilize the experiential benefits of the modern web. We're used to app-like interfaces, we're used to personalization, we're used to customization, and we're used to really snappy, sexy things on the internet. And so you can still provide that to your users without actually abandoning any of the SEO, archiving accessible or accessibility or any of the other benefits of the classical CMS. The other double benefit is create once, publish everywhere. So if you create a progressively decoupled experience, you're creating a backend that publishes an API, which we'll show you how to do. And that API can be consumed by your decoupled application. It can be consumed by a third party. You can pipe it into another interface, however you want to choose, but it allows others to actually access and participate in the API. When we do a decoupled or progressively decoupled site, we frequently reuse API endpoints between different areas of the site so we can pull in information and reuse content. And then we can also share that with third parties that want to either consume or syndicate our content. Additionally, with a progressively decoupled approach, you can personalize content really easily without pulling a third party integration lift. That it allows you to personalize on the client side, so you're still serving content through varnish, through cache, and through any CDN that you have. But the client experience is a personalization without the full kind of bootstrap cost of a session that would allow you to, or that would require you to bypass varnish. Finally, one of the benefits that we have is it allows really diverse development teams to work in parallel with one another. If you have a team that perhaps isn't used to Drupal but is very used to any kind of front-end framework, then you can actually start building in parallel with each other, having parallel sprints, and it means that as long as you're able to coordinate your efforts, I'm gonna show you how to do that, you can actually multithread your development processes, so which is a little ridiculous. The example that I have here is from a travel website that we do, and a lot of the progressively decoupled pieces that we work with are very similar to views, filters. It allows users to kind of interact as a catalog. It's a little bit faster than you would with a traditional whole round trip to the server interface. So this interface here, you could see, in a standard environment, I would build that with views. This goes across America and you can search different things here, but because it's decoupled, when I search, it actually changes the interface really, really quickly. Oh, come on. There we are. Okay, I had to start doing it. And you can see how the numbers start changing. The price I can change really quickly. I can search by Alaska. There's no more trips to Alaska right now. But it's really quite fast for the user. And so, when building these rich applications, you can cater to the user and you can give them that exciting experience that they're used to and that frequently, if you're doing any kind of high-end products or really cutting-edge stuff they're demanding, while still also leveraging the benefits of Drupal. Okay, so React licensing. Who here is aware of the React licensing? Raise your hand. Ooh, okay. So there's a few things out there. So React is released with a BSD license, so it is quote-unquote open source, but it does come with what's called an additional patent writer. And what Facebook has done is it adds an additional clause to the license. It means that out of the gate, this is not compatible with Drupal's license. So it's not really suitable if you're looking to use it for any kind of contributed work or any kind of work actually that you wanna host on Drupal.org. It's in violation of that license, so it cannot be hosted on Drupal.org. So it might not be suitable for a lot of different contributed projects that you're using. It's for sure not suitable in core, but it may be suitable for the work that you're doing individually with your projects if it's custom work. In general, I highly recommend asking a legal advisor if it's pertinent to you. Because it's a patent writer, it's specifically focusing on intellectual property rights and patents, and that's so contextual and so specific to the work that you're doing that you really need to understand what's happening and understand how to use it. So moral of the story, take it with a grain of salt. It's a really great tool to use, but we need to have an awareness of what kind of legal implications are there. Cool. Disclaimer done? Oh, no, no, it didn't work. Okay, so what are we building? A blue screen of death. That's just our lives now. Okay, cool, that's fine. No, no, no, let's get going. What are we building? So what we're actually gonna show to you today is a progressively decoupled Drupal application in which I will be programming the back end with a custom API endpoint and Justin will be programming the front end. Yay. And how we do this normally in production is when we start off our project, and we know that there's gonna be two teams in parallel that are building together, we define a common data structure, we define a language. You can do this with something as formal as JSON manifest. You can do this, you can commit the version of it, you can also scribble it on the back of a napkin, but in the end it's setting the team's expectations, so as the two teams work together to meet at a common goal, they're actually, they understand what they need to do and how they need to communicate. So what we're gonna do is we're going to create a little cover flow album interface, and Justin and I have chatted. I'm gonna send him the title of my album, the artist of my album is a string, the year it was released, and then a year all passed to the cover. So we just kind of define it there and we're gonna use the get method. And once we have that, then we can start working together to actually build it in. Cool. Sweet. So this is the fun part where the screen goes. I'm gonna actually set up Drupal for you. Boop, boop, boop. So we, so what we use to set up Drupal is actually, we've actually open sourced our scaffolding system. So if you go to pack.gis.org, my planet Skeletor, which is the reason why this thing is masters of the universe, is we have a small installation profile that extends what Drupal Composer does and we've customized it to our own use cases. So in here you can find some examples of how to properly set up and extend post install hooks with Composer and a few other tweaky tweaks. I have not trusted the wifi here, so I already installed it, which is fine. So I have my Drupal site. I have installed my planet Skeletor. It's pretty easy to install it. You just do Composer, create project, my planet Skeletor, and it'll bootstrap everything for you. I have already installed this site and I've made a little module in my modules folder. So I have it under doc root. I have it under modules. I made a little custom module called masters of the universe. Thank you. And within here I've installed a node. And here I have my album. I've installed it with some config. I have a body. I have the artist title as text. I have the cover image and I've field released. So what I'm going to do, at this point I have a handful of bits of content. Within here I need to log into the site. So I'm going to use my little script here. Drupal user login URL one to see the bit of content. So if you haven't encountered this before, this is Drupal console. It's sweet. It's really fast and it helps you scaffold tools, different tools. I'm going to be using one command mostly which is the generate rest resource to actually show you how to build your own rest resource. So we, logging in, I have my site. So the first step in towards building a backend is to obviously generate an endpoint for your front end to actually hit. And in Drupal 8, how we can do that and how we're going to be building it here is by using a custom rest resource. There's lots of different ways of doing it. We found that custom rest resources are more suitable to our needs, especially when dealing with large data sets. And I'll go over kind of the pros and cons of them. But step one, once I have my site, I have to install my module. Step one, install module. Module, Drupal. Module, install masters of the universe. Mm-hmm, mm-hmm, mm-hmm, mm-hmm, mm-hmm, mm-hmm, mm-hmm. Cool. And so it's installing my field UI. I have the rest that's out of core and some serialization. Everything that I'm using here is straight out of core. So it's really easy for you to extend and build out. Great. If you have it, I should now see content type. Nice. And I'm going to generate some content with it. Drupal, create nodes, just to kind of generate what's going to be in there so I have something to play with. Yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah. Great. So now I have some nodes. So let's actually generate the rest resource. Drupal, generate. Ah, ah, ah, ah, thank you as well. So I'm going to generate the rest resource. Yeah, that's better. And the awesome thing about Drupal Console is it actually walks you through it with type ins and auto-completion. So if you're not really sure about what's going on, you can step through it. On top of the fact, they have a learning flag, so when it does generate content, it'll generate more descriptive comments so you can actually go through and see and understand what's happening. I like it. So I'm going to give the plugin rest resource name. What did I decide? Al, bum, rest, resource. I'm going to call it albums. Sure, that's a human-readable name. My URL is going to be api-slash-al-bums. Yeah, and it's just going to be a get because we're just going to be fetching it to build out our little cover flow view.  And you can see here in my module, whoop, I now have my album rest resource. Yay. The one thing that I found with generating this is that when you generate a rest resource, you have to enable it. There is still some configuration. There is an awesome module called rest underscore UI that you can use to kind of control and cookie pointy and like go through all of it, which is great for exploration. I'm ridiculous, so I'm using Drupal console to do it. Drupal rest enable. Oh no, I did this before. Rebuild caches. And then you can start enabling it. Mm-hmm, mm-hmm. Drew, Drupal rest enable. Albums, you can see my auto correct. I would like to enable it for my get method, which I've defined. And then I could actually control the format of the output of it, and it'll handle this auto-magically. I'm going to use JSON because it's going to be consumed by the front end. And I could provide authentication, which is cookies, select authentication providers, and it's already enabled. The one thing that I will notice or I will point out with this is that when enabling rest resources, they are tied to user permissions. So after you enable it, you have to go to permissions and access get on album rest resources. And that's really nice if you have multiple kind of levels of control, whether or not you want to have access, different users have access to different parts of the endpoint, whether or not you're creating or just reading content. Cool. Saving permissions. Sweet. So if I go here, I use Postman to help me test API endpoints. You can do all sorts of cool authentication and headers. Here's what in the end we're going to build right here. You can see it's the same match except this is a ridiculous artist's name and I don't know how to pronounce these hipster bands. But if I was to hit the endpoint right now, send please if I need to flush caches. Ooh, never mind, don't see that. Old habits. Okay, well that's building. What I'm going to do is actually, I'm going to cheat a little bit and I already have some commits on how to extend the rest resource class and I'll show you what's currently in there before I apply the content. So if I hit send, implement rest state get and if I open up, presentation mode is great until you want to read a word. But you can see here in my module, it generates a plugin rest resource right here as I declared. And you can see that it's already set up my namespace. This dock block actually defines your rest resource so it's really, really important to have it set up correctly and that it allows you to actually create different rest resources from there. I'm extending the rest resource space and I have some additional classes that kind of help me pull in. But the key part is that you have these suite methods for each individual method you can actually post to the rest resource or get or whatever. So here we have get and you can see here I'm doing a little permission check and I have access to these new classes that allow me to return it. So this one is a rest resource response, implement rest state get. So what I'm going to do is get stash. Get check out. Think I want stash in. And did this add it? No, it did not. Let's move on to the next step. One moment please. Cool. So here I've cheated. Instead of typing stuff out I've just checked out my next commit. But what I've done here is I've added actually the database as a service within my rest resource so I can start querying the database and building out my custom query. And because we're also sending files over if you remember, we committed to actually sending the full file path over here. I'll actually need the public stream wrapper class to generate the file path. And so I've set them the database query method. I've set that as a little variable. The file path I have a file dir here and I'll be able to kind of control it here. Then once you have all of your services built in and put in here, then you can actually start building out. So what I wanna do now is build out the full rest resource response which I have done in step eight. Boop, great. So all I've done here is extend out the get method. And what I'm doing is I'm looping it within a try catch block that if I fail to catch it I'm gonna throw a bad request HTTP exception. There are a lot of different ways to actually return an exception when handling a rest resource. And so you can really tailor it to whatever you need. In the end, it's gonna set the header properly for you and it's gonna provide a contextual method for your front end guide actually handle it. Here, if you've ever worked with database queries before in Drupal seven or eight, it's fairly standard. What I'm doing is I'm just connecting up the node field data with a handful of different fields with my joins. And then here for each added field or add expression I'm gonna add an additional parameter to my endpoint. So I have the title which I've mapped out, the artist which I've mapped out and you can see that I've included expressions. When dealing with large data sets or more complex calculations in which you kind of wanna optimize the query a bit more, having a direct database query is useful to actually tweak and test performance because you can add these expressions and do min max calculations. I can format dates properly just in line within the query or I can do just replacements of text. This won't always be the fastest way but if you do this directly by hand you're gonna have more control and you're gonna be able to tweak and actually optimize the output to whatever your data needs are. And this is definitely something that one can do. A lot of this example can be used with the JSON API, GraphQL but if you have really weird data, if it's denormalized, if you're doing interesting joins and if you wanna have something that really kind of can be tailored to your use cases I really really like just doing a database query myself and then kind of handling it. I'm also one of those people that like whenever they have a good dessert they like make the dessert at home so they can get it just right. So I'm just picky. The benefit here, if you wanna start kind of debugging everything that's going on is I can actually take the query. Do, do, do, query, execute. And this is the get string query. This will actually get a string representation of your query that you can drop into whatever database you're using. You can drop it into PHPStorm which I use. You can drop it directly into your console and then you can using MySQL's explain method you can actually step through and see where your complicated joins are and see where you're wasting time or space. So it's really, really useful to kind of get in the nitty gritty and kind of massage it. The final step here, I'm getting the albums. This returns an associative array of albums and what I'm doing here is I'm generating a REST resource. If you haven't used PHPStorm or any object-oriented notation, this kind of funny comment gives context to the object. So here I'm saying the var response is a REST resource and that allows me to get PHPStorm. Ooh, get my type hints. So I can actually see the different content that's in there and what I can use. The awesome thing about the REST resource, or sorry, resource response, excuse me, is that you can actually set caching and it's cached by default and you can set cache dependencies using Drupal 8's caching APIs. So it's kind of already built in there for you and you have a lot of control over how it's properly handled. So I can either return a response or I set before a bad HTTP exception and let's see if it worked. I have to flush caches. Shocking. Go, go, go. Aha. So let's see if I have an endpoint. Yay! Did it. Cool. Okay, so I have an endpoint, that's great. I have this now cool thing that a machine can consume and now I would like to have an app that hosts on it. So the easiest way to do that is actually to generate a page controller using Drupal, console, Drupal, generate controller and this is gonna be the page that hosts the app. If you want to embed your app in a block, in a theme function, in whatever you totally can but for the purposes of this example, we're just gonna drop it in a page. We found that there is a lot of benefits to actually placing decoupled React applications in blocks, in panels, in however you want it in paragraphs, whatever. So you can kind of sprinkle this idea of content personalization throughout the site. So I'm gonna create an action method on my controller. If you haven't seen this before, this is fairly standard Drupal console stuff. It is totally described online really clearly. I'm gonna create a little app. It's gonna be at slash albums. Nope, I don't need to generate any of these for the purposes but I do need to confirm generation. There we go. So you can see here, it's created a little routing file for me, Qt Petuti and I now have my album controller and at this point, if I flush caches, flush caches and go back to slash albums, I'll see nothing because I haven't created an app yet. So I need to talk to Justin. Oh, I will jump in. With a really awkward laptop swap. Yep, well he's doing that. Oh wait, we have a Shira GIF. So I have built my app. And with some questions, as you set up. So I kind of touched on these questions. Why not use the core REST module or the JSON API? And I really do think that there's great benefits in using them. You need to plug in with this? Sure. Is there my screen? Yeah, you should log in first. I really do think that there's strong benefits in using core REST in the JSON API but if you have really oddly structured data, if you have denormalized data or if you have very large data sets, there is a benefit into minimizing the actual weight of the endpoint and you can do that with a custom query that returns a custom structure. I used a database query. Why not use entity queries? They're cached. Again, if you have really complex or interesting or denormalized structure, such as commerce entities, different entities that you have to join together, there can be performance benefits of just you rolling your own query. Finally, about caching and pagination. The REST resource response class allows you to actually handle caching yourself and any queries that you choose to use, whether it's entity query or the database query that you can roll pagination yourself. So it allows you to kind of tailor and customize the content as you need. You ready? No, I'm done, I talked through the whole slideshow. Okay, so I basically am resuming where Erin left off. Just in case things blow up, I have that part working, but great job, Erin. So we have the JSON feed here. Just refresh to confirm that it's working. Okay, good. We have the album page, nothing on it right now.  That's the app that I'll probably make public in the near future. So basically what we want to do is, switch back to slideshow here. There we go, there we go. So as we said before, it's progressively decoupled. So we're not, it's not running on another server, it's basically embedding in the page. So that's why I use the phrase embedding. We're gonna add it to the page that Erin created. So this is basically what we're gonna do. Quick prayer to the live demo gods. So hopefully things go smoothly. I'm going to, I'm actually not gonna clone React because I don't wanna rely on the wifi. I've seen some problems with that. So I basically have that kind of all set up ready to go. I'm gonna do an overview of sort of the scaffolding app that I'm gonna use. It's a Redux, React Redux app. Has anyone here worked with React or Redux? Maybe a quick show of hands. How many for Redux? Okay, so a few. So hopefully this will be interesting for you guys that I haven't seen that before. Redux is just a way of managing your application state. It's kind of our chosen way that we like to do things. It simplifies a lot of things. So I'm gonna go through sort of the architecture there, the justification for why things are organized the way they are. Redux is pretty opinionated, but there's some benefits you get from that. And then I'm gonna basically attach the app to the page. And we do that by creating a library. So I'm gonna switch back to the demo file. And then we'll maybe tweak the app a little bit, depending on how much time we have and see how far we can take it. I do have some branches at my disposal. If we run out of time, I can check those out and you can show you sort of a finished product or the cooked turkey using the cooking show metaphor. So I'm gonna switch back to PHPStorm here. I'm not a fan of presentation mode, but I'm gonna try it. All right here. So what I did is I took Aaron's app, basically, and I created a little JS folder. I cloned my scaffolding repo into it, renamed it, mastered the universe. And then we basically have a starting point. So what the scaffolding app is, is basically a simple react app. It fetches data from a remote endpoint and displays loops through it, assumes it's an array, loops through it and displays some properties. So sort of the use case where we'd use this is maybe a substitution for views. Like as Aaron said earlier, typically with views you change your search filters and it has to make a request to the server, make the full round trip back, update your results. That can be a slow process. Even a second or two can feel slow if you want a real snappy experience for your customers or whoever, for your site users. So what we're doing is basically loading all the data up front and doing the filter purely client-side. So we have all the data stored in the state of our application and then we can filter on it there, which means you can do the filtering very quickly, essentially. So I'm just gonna walk through the structure of the app first. So those of you who've done React would probably recognize some of this stuff. It's pretty standard. We have like a gulp file that grabs all your components, all your JavaScript files and merges them together and minifies them. That's what we'll essentially be adding to the page, to the library. The package JSON file, that's, you can almost think of it as your make file coming from Drupal speak, a list of your dependencies. And we'll show that real quick. So these are all the node packages that I'm gonna pull in to use. Some of them I probably don't need, but basically, yeah, it's all your dependencies. Now, this is kind of standard React stuff. The components, components in React are sort of, you can think of them as little snippets of markup, little widgets, little pieces. It can be something as simple as a div, a single div. It can be like a full, it could be a full application managing its own state and everything. In my case, I just have sort of a wrapping component called app and then the main component. So I'm gonna open up main component. And every component in React needs to have at least one method, which is the render, and that kind of returns your markup. Now markup in React is actually called JSX. It's like a pseudo HTML. It looks like HTML, but it's not. So you can add classes to it as you would in HTML. Of course, we have to use special words like class name. Class is a reserved word in JavaScript. So we kind of have a replacement for it here. So this is where I'm actually looping through the data and printing out all the different properties. So that's sort of the front end component of it. Now where it gets into more of the, I guess, redux land is these things called actions and reducers. An action is basically defining a way that you can modify your state. Any time the user interacts with it, they're sort of creating an action. So you wanna attach actions as callbacks on say a button click or a filter change or those sorts of things.  The reducers are sort of slices of your state. So in this case, I have a data reducer. So that's the data I'm gonna get from the endpoint. When the app first loads, there's a default state. So everything's basically, you can see null. I'm not fetching, it's not loaded. There's no errors. These properties are sort of flags that I'll use in my app. So when the Ajax request is in processing, when it's processing, I can set that to true and the component can render a loading message or something to that effect. Down here below, I have the function which is sort of essentially listening for these actions. So when you dispatch an action, say from a button click, it fires the action with this sort of a name. And then we can react to it here. What we're doing with a reducer is we're taking the state and we're modifying it. But one of the properties or principles of Redux is that you're not mutating the state. They're actually peer functions, which means you need to return a new state. And that's actually one of the benefits of Redux. The way it manages state allows you to sort of push onto the state stack. You can then get a history of state. You can have undo functions. You can record events. You can actually track every piece of interaction that the user does, which is really interesting for marketers too. It gives them a lot of analytic data. Take a drink real quick. You can see this one comment I put here. Something called object spread. So that's sort of new to ES7. Spread operator is pretty cool. What it does is sort of explodes out your object or your array, returning all the different properties. And then anything listed after it actually sort of overrides the existing one. So what we're essentially doing here is saying, okay, when we get our data back, we want our original state, but we want to update our data with the data we got back. And then we want to set these flags. So that's sort of the reducer. And the actions are where we actually define those things that can happen. So I have a few actions here. First one is get data. That's sort of a wrapper that we'll call the other actions, which I have listed below here. So the data can be fetching, we can get it back. You'll notice that this first one here is the only one that has an export, which means this is the only one we're gonna make available to the app. So the components gonna call get data. You can see I'm using Ajax, or jQuery Ajax here. Could have done it another way, but I think everyone's familiar with jQuery, so kept it simple. So it's actually gonna set our flag as pending. It's gonna fetch some data. I'm gonna have to update this to the URL that Aaron set up. And then when it's done, we're gonna pass the data, which is our response to the reducer, which will update the state. And one of the beauty things of React is that when the state changes, it'll actually re-render the component. So when we initially render the component, we don't have data, so we display a loading message. Soon as we get the data back, it will actually re-render it with it. So you don't have to manually tell the component to re-render. It'll just sort of happen. Some of this other stuff is sort of boilerplate, stuff for redux. The store is basically where all the state is managed. It's the single source of truth, as it were. With other architectures in React, you can kind of have the individual components managing their own state, which is called local state. That doesn't always scale very well. It can get really unruly. We've built applications without redux. And as you have different components, things build up, build up, and it gets a very complicated sharing state between components, getting them all to work together. It becomes difficult to track. So with redux, it has everything all in one spot, which makes it really nice for debugging. And there's some great Chrome extensions that are for React, and there's one for redux too, and I'll show a bit of more of those later. Yeah, I won't go any further into that. So let's actually update our URL here. So I'm gonna update our fetching URL. Oh, that's hard to see. Yeah, it's good. So I'm gonna just replace the dummy URL that I had there, and I'm going to update our response, because I believe there was a root of albums. So that's good. And then over here, that looks good. Let's do, yeah, sorry. Even bigger, all right. Even bigger. Just keep yelling at me tilts. Is that good? No. Oh wow, okay. How's that? I think so. No? What happened there? There we go. Okay, so that built. So now if I flip back to here, what it did is put our compiled file in here, or app.js, so that's what we're gonna attach to our page. How am I doing for that? 20 minutes. Okay, cool. So next thing we wanna do, now that we actually have a JavaScript file, we wanna attach it to the page. So I'm gonna create masters of the universe.libraries. Ding. Okay. And rather than make you watch me type that out, I'll just copy and paste that. I have a little snippet somewhere over here. My cheat sheet. So I'm basically just pasting in the definition of the library. And it's sensitive to the tabbing, so let me just correct that. Okay, so now we have a library. It's pointing to our app. And now we wanna actually add it to the page. So I have another one for that. So in the page controller that Aaron created, there's basically just a render array callback. And we just wanna attach it to that back to here. Let's see what we get. There we go. So it was pretty fast, but what's actually happening is the page loads, then the JavaScript executes, it hits Aaron's API that she set up, retrieves all the data, then we loop through it displaying all the titles. So at this point, we haven't really done anything that views can't do. It is pretty snappy, but what I wanna do next is actually add like search, searchability to it, so we can filter it really quickly. Before I do that, I'm just gonna show you some of the Chrome extensions we have. They're pretty neat. So there's the plain vanilla react one. It's kind of like the DOM inspector, but it just shows you the react stuff, so you can sort of see, here's what it's basically printing out, just bunch of divs. Oh, yeah, sorry. Ooh, can I zoom? Yeah, there we go. So available to our component, we have our data, which you can see here, and our action. So those are the two things that we've exposed. But now I'm going to add some search stuff to it. Cool. I'll update my URL again real quick, because I discarded my changes. Oh, and, go, watch, forgot about that. Golf basically monitors for file changes and will rebuild, so I don't have to keep flipping back here. Okay, so I'm just gonna show you the difference. So what I did is, I created a little on that commit. I created an input on key up. It calls the search title function, which is right here. And all that's doing is calling our action, which is a search title action. So I flip over to our action creators. I created a new one here. It's exported. It just defines it, so it's called the search title action, and it returns just the search term. And the search term is just the value that the user typed in. So they type, dispatches the action, passes it to the reducer. The reducer then does some filtering. Take a look here. So here's my search function right here. So I just wrote like a little one line searcher. So kind of a neat little thing I learned. Index of, if you use this operator, we'll sort of turn it into a truthy value. So, index of usually returns a character position, but this returns it to a true or false. So what we're actually doing is looping through our data. I've added a new property to our state called filtered data. So we now have all our data and then the subset, which is the filtered data. And it's filtering based on this little function here. We then update our state, update the filtered data. So we never wanna override the original data because that's sort of our whole repository of information. The filtered data is what we're always operating with. And then if I flip back to my main component, I'm now looping through the filtered data as opposed to the main data. And if I flip back to my app, we'll see if it works. There we go. So now, if I type, it should actually filter as I type without any Ajax request. So it's completely client side. See how it works. There we go. So it's pretty simple use case, but it's pretty snappy, it's really neat. So typically in this kind of architecture, what we're actually filtering is, in the example Aaron showed you was a vacation site. So they're not dealing with 25 albums, they're actually dealing with thousands of permutations of different destinations and different vacations. So we find it actually really useful to be able to filter quickly. It's a nice experience for the user to kind of not wait for that round trip back and forth to the server. See we're running short on time, so maybe I'll just check out the finished version. So what I did here is actually have like a little cover flow component. So coming from like a Drupal background, Drupal developer by trade, I always kind of find it interesting searching the d.o for a module. There's a module for that. NPM's pretty similar, it's always fun looking for something. So I actually just Googled react cover flow and sure enough, there's a component for it. So if I flip back to my thing here in my main component. So what I've done here is I've just wrapped, sorry, when I looped through my filtered data, I'm actually just printing out the images inside of the titles and then I'm wrapping it in this cover flow component. And that basically does all the heavy lifting. I haven't written any CSS. I've just basically made this little change that you see right here. So it's purely a front end thing. And I'll rebuild my app. We'll see if that works. Guess I did that already. Try and refresh that again. Oh, zoom out. There we go. And if I update it, let it re-render a bit. Oh, so I filtered it down to one. There we go. And I can scroll through it. And one last thing I'll show you. So there's, in addition to the React DevTools, there's the Redux DevTools. And basically that gives you some Redux specific tooling which is really nice. It can show you your history. So you can actually see everything that I did. I can go backwards and forwards in time. So I could actually skip back to when the app was initializing. I can click jump. And look, the whole app went back to the initial state. And I can go back to search here. And there's the state again. So it's actually really useful for debugging the Redux toolbar. I don't even really use the React one. It also has a diff. So you can see the diff between your state changes. You can record the state changes, export them, whatever. We often just push the entire state to some marketing data layer of some kind. So they find that very valuable. So you can get really fine grained reporting on what users are doing, which is really useful. Yeah, I'll wrap it up on that. We got what, a couple minutes. There we go. Yay! So we have a couple minutes. I don't know if we wanna open it up to questions. We could maybe skim over these. Yeah, if there are any specific questions that you wanna come up, ask them. I got a question. What would it take to get React to render on the server so that it's not purely client, so it's like actually working on it? React can be rendered server-side. I mean in Drupal, sorry. In Drupal. I actually haven't done that. That's an interesting idea. I know it can be done. In this sense, we're, yeah, I haven't really done it, but I know it can be done. I would have to imagine, and maybe somebody with more DevOps experience with node environments could jump into Azure this, but it would have to be part of your build process or any kind of cron job. Cool, thanks. How's it going? Good. Good question about the site that you actually built with React and Drupal, so. The travel site that we showed earlier. Yeah, the travel site. Yeah, so with Redux, you get all your data on the client, and I was wondering with like thousands of nodes coming through, how do you, do you get everything at one time or maybe everything 50 at a time and then like when you need to get the next 50, do you remember? We do paginate it, so what you could do is have the app render after you get the first page if you want and have the results filtering in. We tend to wait for all the results to come in before we show customers, especially when it's pricing sensitive, but yeah, we do paginate for large data sets. And optimizing the end points, so you can have a really lean data set we found is important, so we only tend to send information over that we need on the front end so you don't bloat it, so you can send more results. Yeah, that's kind of why we don't always use JSON API because it sends you everything and it gives you the full field name and you don't really need the UID or the published date for some of those nodes. So we keep it lean and keep the payload small, cache it, and it's actually, even with thousands and thousands, it's still a pretty snappy experience. Nice, thanks. Cool. In Toronto we have, we have a couple of offices and most people don't. And we've worked with a handful of universities.


We continue on today with Chapter 6, The Lessons of Love. Introduction The relationship of anger to attack is obvious, but the relationship of anger to fear is not always so apparent. Anger always involves projection of separation, which must ultimately be accepted as one's own responsibility, rather than being blamed on others. Anger cannot occur unless you believe that you have been attacked, that your attack is justified in return, and that you are in no way responsible for it. Given these three wholly irrational premises, the equally irrational conclusion that a brother is worthy of attack rather than love must follow, what can be expected from insane premises except an insane conclusion? The way to undo an insane conclusion is to consider the sanity of the premises on which it rests. You cannot be attacked. Attack has no justification, and you are responsible for what you believe. You have been asked to take me as your model for learning, since an extreme example is a particularly helpful learning device. Everyone teaches and teaches all the time. This is a responsibility you inevitably assume the moment you accept any premise at all, and no one can organize his life without some thought system. Once you have developed a thought system of any kind, you live by it and teach it. Your capacity for allegiance to a thought system may be misplaced, but it is still a form of faith and can be redirected. The message of the crucifixion. For learning purposes, let us consider the crucifixion again. I did not dwell on it before because of the fearful connotations you may associate with it. The only emphasis laid upon it so far has been that it was not a form of punishment. Nothing, however, can be explained in negative terms only. There is a positive interpretation of the crucifixion that is wholly devoid of fear, and therefore wholly benign in what it teaches if it is properly understood. The crucifixion is nothing more than an extreme example. Its value, like the value of any teaching device, lies solely in the kind of learning it facilitates. It can be and has been misunderstood. This is only because the fearful are apt to perceive fearfully. I have already told you that you can always call on me to share my decision and thus make it stronger. I've also told you that the crucifixion was the last useless journey of the sonship need take and that it represents release from fear to anyone who understands it. While I emphasized only the resurrection before, the purpose of the crucifixion and how it actually led to the resurrection was not clarified then. Nevertheless, it has a definite contribution to make to your own life, and if you will consider it without fear, it will help you understand your role as a teacher. You have probably reacted for years as if you were being crucified. This is a marked tendency of the separated who always refuse to consider what they have done to themselves. Projection means anger. Anger fosters assault and assault promotes fear. The real meaning of the crucifixion lies in the apparent intensity of the assault of some of the sons of God upon another. This, of course, is impossible and must be fully understood as impossible. Otherwise, I cannot serve as a model for learning. Assault can ultimately be made only on the body. There is little doubt that one body can assault another and can't even destroy it. Yet, if the destruction itself is impossible, anything that is destructible cannot be real. Its destruction, therefore, does not justify anger. To the extent to which you believe that it does, you are accepting false premises and teaching them to others. The message the crucifixion was intended to teach was that it is not necessary to perceive any form of assault in persecution because you cannot be persecuted. If you respond with anger, you must be equating yourself with the destructible and are, therefore, regarding yourself insanely. I have made it perfectly clear that I am like you and you are like me, but our fundamental equality can be demonstrated only through joint decision. You are free to perceive yourself as persecuted if you choose. When you do choose to react that way, however, you might remember that I was persecuted as the world judges and did not share this evaluation for myself. And because I did not share it, I did not strengthen it. I, therefore, offered a different interpretation of attack and one which I want to share with you. If you will believe it, you will help me teach it. As I have said before, as you teach, so shall you learn. If you react as if you are persecuted, you are teaching persecution. This is not a lesson a son of God should want to teach if he is to realize his own salvation. Rather, teach your own perfect immunity, which is the truth in you, and realize that it cannot be assailed. Do not try to protect it yourself or you are believing that it is assailable. You are not asked to be crucified, which was part of my own teaching contribution. You are merely asked to follow my example in the face of much less extreme temptations to misperceive and not to accept them as false justifications for anger. There can be no justification for the unjustifiable. Do not believe there is and do not teach that there is. Remember always that what you believe you will teach. Believe with me and we will become equal as teachers.  I am the model for rebirth, but rebirth itself is merely the dawning on your mind of what is already in it. God placed it there himself and so it is true forever. I believed in it and therefore accepted it as true for me. Help me to teach it to our brothers in the name of the kingdom of God, but first believe that it is true for you or you will teach amiss. My brother slept during the so-called, quote, agony in the garden, but I could not be angry with them because I knew I could not be abandoned. I am sorry when my brothers do not share my decision to hear only one voice because it weakens them as teachers and as learners. Yet I know they cannot really betray themselves or me and that is still on them that I must build my church. There is no choice in this because only you can be the foundation of God's church. A church is where an altar is and the presence of the altar is what makes the church holy. A church that does not inspire love as a hidden altar that is not serving the purpose for which God intended it. I must found his church on you because those who accept me as a model are literally my disciples. Disciples are followers and if the model they follow has chosen to save them pain in all respects, they are unwise not to follow him. I elected for your sake and mine to demonstrate that the most outrageous assault as judged by the ego does not matter. As the world judges these things but not as God knows them, I was betrayed, abandoned, beaten, torn and finally killed. It was clear that this was only because of the projection of others onto me since I had not harmed anyone and had healed many. We are still equal as learners although we do not need to have equal experiences. The Holy Spirit is glad when you can learn from mine and be reawakened by them. That is their only purpose and that is the only way in which I can be perceived as the way, the truth and the life. When you hear only one voice you are never called on to sacrifice. On the contrary, by being able to hear the Holy Spirit in others you can learn from their experiences and can gain from them without experiencing them directly yourself. That is because the Holy Spirit is one and anyone who listens is inevitably led to demonstrate his way for all. You are not persecuted nor was I. You are not asked to repeat my experiences because the Holy Spirit whom we share makes this unnecessary. To use my experiences constructively, however, you must still follow my example in how to perceive them. My brothers and yours are constantly engaged in justifying the unjustifiable. My one lesson which I must teach as I learned it is that no perception that is out of accord with the judgment of the Holy Spirit can be justified. I undertook to show this was true in an extreme case merely because it would serve as a good teaching aid to those whose temptation to give in to anger and assault would not be so extreme. I will with God that none of his sons should suffer. The crucifixion cannot be shared because it is the symbol of projection but the resurrection is the symbol of sharing because the reawakening of every son of God is necessary to enable the sonship to know its wholeness. Only this is knowledge. The message of the crucifixion is perfectly clear. Teach only love for that is what you are. If you interpret the crucifixion in any other way, you are using it as a weapon for assault rather than as the call for peace which it was intended. The apostles often misunderstood it and for the same reason that anyone misunderstands it. Their own imperfect love made them vulnerable to projection and out of their own fear they spoke of the, quote, wrath of God as his retaliatory weapon. Nor could they speak of the crucifixion entirely without anger because their sense of guilt had made them angry. These are some of the examples of upside-down thinking in the New Testament although its gospel is really only the message of love. If the apostles had not felt guilty, they never could have quoted me as saying, I come not to bring peace but a sword. This is clearly the opposite of everything I taught. Nor could they have described my reactions to Judas as they did if they had really understood me. I could not have said, Betray us thou the son of man with a kiss unless I believed in betrayal. The whole message of the crucifixion was simply that I did not. The, quote, punishment I was said to have called forth upon Judas was a similar mistake. Judas was my brother and a son of God as much a part of the sonship as myself. Was it likely that I would condemn him when I was ready to demonstrate that condemnation is impossible? As you read the teachings of the apostles, remember that I told them myself that there was much they would understand later because they were not wholly ready to follow me at the time. I do not want you to allow any fear to enter into the thought system toward which I am guiding you. I do not call for martyrs but for teachers. No one is punished for sins and the sons of God are not sinners. Any concept of punishment involves the projection of blame and reinforces the idea that blame is justified. The result is a lesson in blame for all behavior teaches the beliefs that motivate it. The crucifixion was the result of clearly opposed thought systems the perfect symbol of the, quote, conflict between the ego and the son of God. This conflict seems just as real now and its lessons must be learned now as well as then. I do not need gratitude but you need to develop your weakened ability to be grateful or you cannot appreciate God. He does not need your appreciation but you do. You cannot love what you do not appreciate for fear makes appreciation impossible. When you are afraid of what you are you do not appreciate it and it will therefore reject it. As a result you will teach rejection. The power of the sons of God is present all the time because they were created as creators. Their influence on each other is without limit and must be used for their joint salvation. Each one must learn to teach that all forms of rejection are meaningless. The separation is the notion of rejection. As long as you teach this you will believe it. This is not as God thinks and you must think as he thinks if you are to know him again. Remember that the Holy Spirit is the communication link between God the Father and his separated sons. If you will listen to his voice you will know that you cannot either hurt or be hurt and that many need your blessing to help them hear this for themselves. When you perceive only this need in them and do not respond to any other you will have learned of me and will be as eager to share your learning as I am. And from the workbook lesson 37 My holiness blesses the world. This idea contains the first glimmerings of your true function in the world or why you are here. Your purpose is to see the world through your own holiness. Thus are you and the world blessed together. No one loses. Nothing is taken away from anyone. Everyone gains through your holy vision. It signifies the end of sacrifice because it offers everyone his full due. And he is entitled to everything because it is his birthright as a son of God. There is no other way in which the idea of sacrifice can be removed from the world's thinking. Any other way of seeing will inevitably demand payment of someone or something. As a result the perceiver will lose nor will he have any idea why he is losing. Yet in his wholeness restored to his awareness through your vision your holiness blesses him by asking nothing of him. Those who see themselves as whole make no demands. Your holiness is the salvation of the world. It lets you teach the world that it is one with you, not by preaching to it, not by telling it anything, but merely by your quiet recognition that in your holiness are all things blessed along with you. Today's four longer exercise periods each to involve three to five minutes of practice begin with the repetition of the idea for today followed by a minute or so of looking about you as you apply the idea to whatever you see. My holiness blesses this chair. My holiness blesses that window. My holiness blesses this body. Then close your eyes and apply the idea to any person who occurs to you using his name and saying, My holiness blesses you. You may continue the practice period with your eyes closed. You may open your eyes again and apply the idea for today to your outer world if you so desire. You may alternate between applying the idea to what you see around you and to those who are in your thoughts or you may use it in combination of these two phases of application that you prefer. The practice period should conclude with a repetition of the idea with your eyes closed and another following immediately with your eyes open. The shorter exercises consist of repeating the idea as often as you can. It is particularly helpful to apply it silently to anyone you meet using his name as you do so. It is essential to use the idea if anyone seems to cause an adverse reaction in you. Offer him the blessing of your holiness immediately that you may learn to keep it in your own awareness. My holiness blesses the world. So today we are receiving and practicing beautiful ideas. First in the lessons of love we read that attack is impossible. Assault is impossible and then we were given a new interpretation of the crucifixion. One not merely in terms of explaining what it was not in negative terms but one that actually expressed it as a teaching of the highest lesson to be learned. Teach only love for that is what you are. Then we were told that if you interpret it in any other way that you are using it as a weapon for assault rather than the call for peace for which it was attended. So this fits in so beautifully with our lesson for the day from the workbook. My holiness blesses the world. This is how we bless the world by teaching love. It blesses our self and it blesses everyone. It truly blesses everything that we perceive. It's the purpose for our coming, our function. It is why we are here. Truly signifies the end of sacrifice because it offers everyone his full due. It offers everyone including myself everything and replacing this wedge of a belief in sacrifice with wholeness is the way that my holiness blesses the world. It is the way that my holiness is the salvation of the world, that the world is one with me, that it has not left the mind of the thinker, that it has not left the mind of the perceiver. By being holy I must have a holy perception of the entire world. So we practice specifically with everything that we perceive as we let our eyes move around the room look out on the things that we see nearby and at a distance. These lessons can be transferred to everything that I perceive and we are asked to use specific applications silently when we meet someone or even think of them by saying my holiness blesses you and including their name. So we shall practice that silently today as we go forward with every thought of a person. My holiness blesses you with every appearance of a person silently within we say my holiness blesses you as we look upon the the trees as we look upon the houses as we look upon the grass or the river we practice with everything that we perceive my holiness blesses the world.


And the National Drug Law Enforcement Agency, N-D-L-E-A, choir state command, has arrested four suspects for electrically dealing in illegal substances suspected, a peculiar pattern to be cannabis, at an hotel location in a law in the choir state capital. Our routine stop and search within the town where we together are intelligent, that is a particular hotel that they've been using to stalk drugs and sales drugs and people goes there to do the illegal activity. We actually stormed the place and were able to pick the two major dealers that have been using the hotel. There is one Chegou Gabriel, that we arrested with Framadol, there is a palm cannabis ativa and Mentan fitamin. We also arrested one young lady called Ishola Bishola that Chegou Gabriel still used to hook drugs and she was arrested with Metan fitamin and cannabis in her possession. It's my boyfriend. Who? This one. And do you know his occupation? Not really. No, I was lodging at one hotel and the boss of the hotel picked us out. And all these things they are talking about is that they met for me, it's not for me. Hello, hope you enjoyed the news. Please do subscribe to our YouTube channel and don't forget to hit the notification button so you get notified about fresh news updates.


Koda Wade is an extremely talented singer and songwriter and today she just released her brand new track called hashtag You Are Not Alone. This is in perfect time for Mental Health Awareness Month and this song has some great lyrics talking about mental illness as well as letting people know that they're not alone in their struggle. So in this video we're going to talk a little bit about her song and then I'm going to take a test to see if I am perpetuating the stigma of mental illness so stay tuned. What is up everybody? This is Chris from the Rewired Soul where we talk about the problem but focus on the solution and Koda Wade is my girl. She's not really like my girl like we've talked a couple times but she's super cool and like I'm so so so happy to see an artist talking about mental health. Some of you who follow my channel I've done some other lyrical breakdowns. I try to talk about pop culture and when they talk about mental illness as well as addiction and things like that like because it's a conversation that needs to happen all right. So before I get started and talk a little bit about the lyrics of her song do me a favor and share this video. Share this video because I'm also going to link to Koda's music video down below and more people need to listen to this song because first off amazing song second off she's amazing and third off she's helping to increase some awareness and let people know that they're not alone so make sure that you share this video on social media all right. But anyways I just went back and I listened to her song again it was great and so I found out about this song from my beautiful girlfriend she follows somebody on Instagram I forgot her name it's one of Koda's friends but she like does modeling for hot topic and my girlfriend's like yo this artist Koda Wade is doing a music video and she's asking people to like make signs you know talking about their mental illness diagnosis right.  A lot of people talk trash about the internet but like if it weren't for the internet powerful statements like this would never happen we wouldn't be able to bring people from all over the world and say look like I got mental illness too so you know a big shout out to everybody who was featured in this video and submitted your pictures or videos like that is awesome it takes a lot of strength and courage to do that and it sends a powerful message but in the song Koda talks about you know some of her struggles with mental illness you know the thoughts that run her through her head and you know how it feels alone and like it it's it's great to hear her talk about it but I don't want to spoil it for you I don't want to spoil it for you you need to go click on the link down below and check out the full music video okay and one thing that surprised me when I was doing some research I'm like who is this Koda wave gal right like she was actually on season nine of The Voice and you know what fun fact about Chris I love The Voice real quick let me tell you like I love watching the blind auditions like if you're having a bad day just watch the blind auditions of The Voice so Koda did this video in conjunction with I believe CureStigma.org all right so I was like what's CureStigma.org and it is run by the National Alliance on Mental Illness and I went and I watched their video and like they have a great video on their website like it's talking about this disease that you can catch anywhere and stuff and basically it's talking about the stigma around mental illness I was like dang so I was checking out the website and it says have you been infected by the stigma and I'm like you know what I might be I don't know like I think it's important for all of us to get out of our our little bubble you know so many of us because of our ego and things like that we're like oh I'm doing the best out there and da da da da but sometimes like I'm screwing up and I don't even know so I thought it'd be fun if you went on this little journey with me and watch as I take this test to see if I've been infected by the mental health stigma all right so let's get started all right start cure stigma quiz let's see what this is all about so question number one I think people with mental illness a need to snap out of it b did something wrong to cause it c need our love and support d are sometimes faking it okay this is a tough one I'm gonna make a video on this at some point so I hope you subscribe like I don't I don't like saying like you know or sometimes faking it I think that every claim of mental illness needs to be taken seriously okay um I do feel part of the the issue wait wait that's the wrong way to phrase it I think that there is an issue because mental health is getting some more visibility some people are saying you know oh I have anxiety when it's really just stress or people like oh uh I'm suffering from depression but they're really just kind of bummed out you know what I'm saying so I do think it's overused in some cases but like I said all instances of mental illness where people say they have it needs to be taken seriously so I'm gonna say see they need our love and support question number two which of the following is a myth about stigma it makes people feel alienated or feel less than b it's not really a big problem for people with mental health conditions y'all tripping c it prevents people from seeking help for symptoms d it makes people feel judgment if they share their story dang dang this this question drops truth so I'm gonna go with a it makes people feel alienated or feel less than question number three if someone in your family is diagnosed with a mental illness you should a treat them differently than you used to what b distance yourself from them c feel sorry for them d listen to them and show support dang okay so I'm picking d by the way if I didn't mention it earlier share this video um I had somebody just asked me yesterday they have a friend who struggles with uh depression and they don't know how to help and like this is a great question like because d and I hope I'm right by the way d like listen to them and show support I would I need to make videos on this I don't make enough about this topic but yeah a lot of times people struggle with mental illness like I think people feel this need to fix them and if they can't fix them then they either see feel sorry for them or be distance uh themselves from this person like a lot of times these people just need you to listen just shut your mouth shut your mouth and just listen typically that is the best thing that you can do how old are you I didn't know this was gonna be on the quiz 30 to 50 like geez can you put like 30 to 35 what the heck what is your gender uh male want to learn more about how to spread the cure for a stigma type your email here sure why not and by the way as I type this in if any of you would ever like to get in touch with me if you need to talk or if you have topics that you want me to cover in a future video boom you're staring at my email address right now all right uh-oh looks like you might have the stigma what what I promise to change my behavior to support everyone affected by mental health conditions I won't use harmful words that prevent people from seeking help that's how I will hashtag cure stigma all right y'all I'm a little I'm a little conflicted about the results so is this one of those websites where like no matter what it gives you the same what the the same answer like is it or did I really like do something wrong there here's what we're gonna do let's play this game okay if you think that I answered one of those questions incorrectly leave a comment down below rewind if you have to let me know which answer you think I got incorrect because like I I've mentioned this before the best people in your life are people who tell you what you need to hear not what you want to hear all right so like am I perpetuating the stigma did I just did I just realize something I don't know leave comments down below let me know what happened or or do this you go to the website you put your email address in and you take the test and let me know what your results are down below all right let's do that let's do that let's do a little bit of both okay um but anyways anyways again um coda you are amazing thank you for such an awesome opportunity and this song like I appreciate what you are doing and and coda if you happen to see this I live in Las Vegas I think you live in the LA area so if you ever want to collab I'm out in LA sometimes and that would be awesome so hit me up you got my instagram all right but anyways everybody again please share please share so people um can check out coda's video so we can help to end the stigma about this thing but also to show people that they're not alone in their mental health struggles all right so please please please do me a favor share this on facebook twitter instagram send it out on an email blast to everybody whatever you gotta do okay but anyways if you like this video please give it a thumbs up and if you are new here I'm always making videos that help you out with your mental health make sure you click that little round subscribe button and if you want to check out some more content on this channel boom you can click her top right there all right so thanks again so so much for watching remember hashtag you're not alone I'll see you next time