Så, bare å teste om dette arbeider, og det ser ut som det gjør. Great! Takk for så mye. Bare vann vi vært. Jeg kan se at vi er veldig lykkelig, fordi vi har det veldig beste soundengineer i bullinget i dag. Så, jeg håper. Det blir bra. Ja, vi er veldig glad. Ok, alle. Det er 4.15. Og når folk kommer til å se det, så kjører vi starten. Jeg har støtt til noen av dem som var ute her. Vi har en veldig små survei. Det er en bit mer enn 30 sekunder, som noen sier, men det er ikke langt. Vi vil mye gjerne få noen feedback om hvordan folk bruker guttmørk, og noen ting til å improve, og bli i touch med alle av dere. Hvilke eller ikke har dere vært bruket guttmørk. I det enda er det også en mulighet å leave e-mailadresset, så vi kan få ut og bli i touch. Vi sender ut noen frågor, og informasjoner om nye versene, og disse interessante ting. Det er veldig, veldig gøy å oppdage av det på hver point. Så, som vi har sagt før, vi vil se noen friske lødder, noen nye lødder. Ja, ok. Så, let oss starte. Vi taler om duplig guttmørk-editoret i dag. Vi ser på en masse nye lødder som er der. Det vil ha en developper-orienteringsfokus. Jeg vil si, vi vil give noen demoer, og se noen lødder på det, og vi vil også gå inn og se noen metoder for development og hvordan vi skal gå. Så, let oss starte. Så, jeg er Marko. Jeg arbeider med Drupal for mer enn 10 år. Jeg har en passion for future-oriented technical solutions som gjør jobben. Jeg er usually deep into JavaScript og php-related work. Vi byrder ting som fungerer effektivt for det som er for en user eller webeditor. Jeg har også gjort en gammel development i min spare time, så her er det en fra 13 kilobytes kompetisjon i 2016. Du kan googlere den nede. Ja. Jeg er Thor. Torand Regretland. Jeg arbeider også i Frontcom, sammen med Marko. Frontcom er en open-source-fokuserad digital agency som spreder across Europe. Vi har en head-office som ligger i Frederikstein, Norge, hvor jeg er usually at. Vi er omkring 80 mennesker, arbeider på digital projekter fra strategi og design, til implementasjon og mantning. Vi gjør en masse av Drupal. Men å være en open-source-fokuserad i genere gjer oss bra å kjøyere den reie teknikken for de reie projekter, og også gi oss en masse av kvalitet på hvordan kjøyere er handelt i andre open-source-fokuser. Det er det vi har høyere Gudmurg i først. Vi har tatt til å finne, eller evene å kjøyere, om vi nødder det absolutt bedste editør- og landingspagelskjøyere på markedet. Long story short. Hvor er vi kjøyere Gudmurg med de klienene vi har kjøyere? Det er fordi de høyer det, og fordi det gi oss en bra bussnes. For oss og de klienene. Det viktigste av en god kjøyere-fokuser er å kjøyere. Det er et par signer som vi har høyere i en hotel til å hjelpe kjøyere å finne vennet. Hvor vil du gå hvis du vil finne vennet? 43, 37. Og folk er ikke høyere kjøyere for solusjoner. De er ikke kjøyere. Min kjøyere gjer oss. Han er 79 år gammel, og han vil aldri kjøyere en smartphone for flere reisens. Han har en av de som er der. Det er en skjøyere kjøyere. Det er gammel for folk som ham, men det er veldig svært. Og han tror også at det er veldig svært. Men han blammer seg selv. Jeg har ikke disse komponenter. Jeg tror at han er en part av den seneste generasjonen høyere. Og han blammer seg selv for å ikke understå hvordan vi bygger arbeid. I nogle situasjoner jeg ser ut til komponenter som har en sort av servis eller projekter, som prøver å gjøre dette med din app men jeg kan ikke... Ja, du må bare klikke her. Gå innen der. Gå over her. Du løgde inn med Google account. Men du har også en annen. Du løgde inn med dette. Ja, det er det. Men problem solgt, ikke? Han mener på hvordan det går. Men jeg tror at vi er gammel med det. Jeg tror vi kan ikke kjøyere folk til å kjøyere kursen eller å løgge manualer eller sånt. Vi må bare inspirere. Løg oss å bygge ting som folk vil. Det er også vår vision. Drupal skal være den mest brødige ut der. Det skal være løst å bruke de som har drupal. Vi starter med Gutenberg. Hva er det nå? Det er en editor og en lønningpagel builder. Og det er mange av dem ut der. Og det er også en god userinterferis for å addere data til drupal. Men sometimes we need more. We see that very often we need more. For eksempel, her er en simple landing page builder a landing page to the left og this is how it could look in drupal to the right. Well, I know that there are also a lot of even better, more obvious ways to do this currently. But what we imagine is that it should look probably something more like this. It's not perfect. This is just a demo site. We're not working this every week. But it really does the job. You can see that I've selected something in the middle there. Actually, I will show you how it works. Okay. So here it is. I have a banner up here. I can choose a couple of types of background images. This is one for cell phones and so on. I can move the content over here to the left. And here, you know, I'm just going in and typing what I need. Don't click the button, but it works. I could paste the URL there, but I could also start typing some title of a node, and it will live search and find my test here. On this Gutenberg block here, and by the way, when we've done sessions on Drupal Gutenberg earlier, we've been very much focusing on demos for what you get out of the box. With this example, it's more like there's some custom blocks here, but they're obviously styled. So, you know, Google it. Or now test it out yourself, that's better. Ja. So I can choose some different templates back here on how this should look. I'm going back to black here. And here for my, this three column grid, I can do the same. So this should have this color. This should have this color. And then this over here. And then when I click one of them, I can also see what icon I have selected, and when I click around to play around with other ones, it's instantly updating. And of course here, I could just, you know, work on the text in the same way as the other ones up there. Here we have a background. It's actually a video. Can you see that's the video? Ja, it's moving. Ja. And let's say now that, same thing here, I'm working with text, removing some words here and there. And then I can go over here and find a new video. So I'm borrowing this one. Thank you so much, Andrew. And then if you go back to Goodmurg, I'll just paste that ID in here. And what happens is that it starts playing. So I can just continue with my work and see how that looks. Straight in the editor. So here's another Goodmurg block. It has a title in the top. I can work on that. And then it has some well, you know, I can teasers into, it could be products or solutions or whatever. And that's about it. Last thing I want to show you here is this block down here, which is quite simple and something that you use in a regular basis, I suppose. I can flip it as I want and then, you know, the same kind of, you know, toggles and needs. So that's a quick quick peek. And well, who's using Goodmurg? Is this something you can trust, you know, dare and go into? I would say yes. You know, it's it's about almost now 80 million websites out there that is actively using this editor. It's in the WordPress communities, you know. So the numbers for Drupal are way smaller, obviously. But still there are, like, almost 200 000 posts pages created every day using this. So it's, you know, it's here to stay for a while. We can say that. And then the number currently on Drupal.org for Drupal Goodmurg is about 3,000, I think. And, yeah, as usually it's probably a bit higher because, you know, for example, all of our sites that's using Drupal Goodmurg is not there because we have other systems to control updates and so on, and then it will be left out of the statistics. Okay, now let's get into it. Let's say now that you have a site and it could be an existing one or a new one, but you want to go into the Gutenberg ecosystem. So you create a new content type for that and say we'll do Gutenberg here. So let's talk a bit about how you then could go in and style that, extend it and change it and create those different building blocks. They're called Gutenberg blocks. First of all we start off over here. You can see that it will be more complex as we go in that direction. So he's the most complex part of the presentation just now. That's great. This is only tech, you know, humans always, you know, they are up there still. We start over here with the core blocks. Things that we get out of the box with Drupal Goodmurg and it's a lot. As you can see, it's like 65 of these building blocks that you get out of the box. And you know, if you do something similar for other projects you probably build like, you know, 6, 7 or 8 kind of blocks that you can build landing pages with, you know, widgets. If it's a large project with a large client it might be like 12, 13, but then you're really pushing limits. So now when you see that we're getting 65 out of the box, you know, already there, some people are saying, okay, I'm never going to use this. That's way too complex. You know, this needs to work together. Now, to be fair, some of them are quite small, you know. One of these blocks are title, you know, heading. Another is list, you know, number list, those kind of things. But still, the first thing we do when we start building Goodmurg pages is to remove most of it. Get it out of there. You know, there are so many things you never need.  Oh, it's, you know, the regular ones that you probably need, YouTube, Vimeo, Twitter, and all that kind of things, but then there's a lot of other services as well. So we just turn it off so we don't have to worry about some content creator feeling like, well, what I'm working, this is a verse, yeah, it's the verse block, you know, and then we never style it, and then you have it going. And, you know, so we start there, and, yeah, it's a lot. So beware. And then in addition to that, when it gets a bit more complex, we also have Drupal blocks. Every Drupal block on your site can be activated and fetched in Goodmurg in the editor. Now you just go to the content type that you have Goodmurg editor on and there's a checkbox for every one of them. You just tick the ones you want at Goodmurg, and you'll find it in the block list there. So now that could be, it could be a view block, it could be a web form, or it could be whatever. Next you could do with that is of course, you know, work with this in a theme layer. You could style it, obviously. So it matches the rest of the design. On purpose it starts, you know, right after the core blocks here because, well, you get some styling out of the box but you know, let's be fair. You want to do more. In addition to that, you have a YAML configuration file for your Goodmurg setup. Now this is really powerful because and we do that all the time. I don't think we've ever recently set up a Drupal site with Goodmurg without doing some configuration because what you can do here is to for example say that, you know, yeah, people should obviously be able to write this paragraphs, but maybe not set the text color to be pink. You know, maybe not. No, we don't want that. So the free select color, yeah, it's there. So when you install Goodmurg, it's in demo mode, you know, you can play around. But you know, you can also restrict it. And in addition to that, and this is quite new. It's a concept in Goodmurg called patterns. And basically Mark will explain how we do it. It's quick to set up, but it's about taking all of the smaller building blocks, building out layouts, and then saving that in your configuration so that we can reuse that as a more complex block. So now we're sort of moving, moving a bit further into the depth here. Another concept that Mark will show later is something called dynamic blocks. And what we mean by that is a way to sort of override and extend the markup for a core block, that you borrow down here, so that you can make that match the CSS structure of your site, for example, or you just want to restructure the markup somehow. And then as a last, of course we have the custom blocks. And there you know the possibilities are endless. You know, you can build whatever you want. We have created custom blocks that, for example, for the larger media houses just, you know, when you add it into a page, you can search in an external database a dam system maybe, or a product from a PIM, and then that's fetched straight in, and you could choose the different layouts that you want to have available and do all of those kind of things, and make sure that they're not able to do something that they shouldn't. So all in all on the top here well we have the typical front end also the blocks down here, they come with styling and so on, so that should also probably be up here but you know in the bottom here these are the different kinds of blocks that we build these things with. Now let's move straight into the patterns. Okay, so Torlander already gave an overview of the patterns.  They let you easily create a complex layout of blocks in a matter of seconds and save it like a template. It let us easily nest or blocks. You can then use these patterns anywhere on your website to recreate repeating sections with minimal effort. Block patterns are defined in a theme or costume module using Gutenberg's YAML configuration file. Let's see how it works. So here the idea is to create a pattern with some layout that will be used to show future speakers. First we start with a blank page so we can build our pattern. It will be a section with a title and a three column grid and on each column it will hold the speaker name profile picture and some text and also button at the bottom. Here I'm just filling the first column then I copy paste to other columns. After this is done I'll just select the hold the content and copy it. Now we go to the configuration file in this case located on the custom theme called Drupalcon and here I already set up the pattern configuration with some properties and I'll just paste the copied Gutenberg HTML into patterns content property. Just need a little adjustment for intimidation. Now we are ready to use the pattern. So let's do this by editing an existing page for example. All I need to do is go to the insertor sidebar you notice the patterns tab next to the blocks and now I just drag and drop to edit the blocks. And now I just fill with my information or data that I want. I set the title fill the data in this case it's RIS and I can also style the button if I want. We could do this more advanced also so that all the buttons are in line and this is just out of the core box. And also note that patterns can be grouped by categories which makes it easy for the content editor to find them on the insertor. Ok, so we are almost done and we just need to save it and we are done. Cool. Ok, sometimes you have a block it could be a core block or a custom one but if you want to override its markup structure for some reason it could be adding a class to it or that it matches the CSS structure of your site or to fully restructure the blocks markup. Well it could copy that core block and make it a custom block but then you would need to maintain it. So Gutenberg offers a way to do this restructuring through a concept called dynamic blocks I'll show you how. So you just need to go to the Gutenberg's configuration file and add that section dynamic blocks and under it you just define which blocks you want to override. In this case I'll just using the core list block. So that's basically just a bullet list, right? Exactly. And then you need to create the templates right there. So you create it on your theme folder. And there you have the template. So there are several template variables that are available in this case we are just using block content. So as it is it will just render the block as it is. But what I really want to do is to add a wrapper to that block content. So I'll just add a div with some class. And then when rendering you can see that it will add the wrapper. Just a few comments on the dynamic blocks. When you do this it will instantly apply the template to all your pages and content using this block. This changes does not render within the Gutenberg editor. But this is a quite easy way of doing these tweaks if you are a Drupal developer because you can fix it in a nonreact way. In addition Gutenberg features versioning of blocks. This is powerful and great when you improve your blocks but also requires work. If you use the dynamic block concept for the change you avoid the precated block handling. Yeah. Now let's look at another new feature which works quite handy. And that is the Duotone filter. And it basically works like this. I will just give an example here with dragging a photo in here. Here we go. And that loads. Just center it. Clean up. Like this. And up here I have an option called Duotone where I can choose that this should be a black and white photo. Colors. Like this. It works nicely. And of course then these colors also are something that I'm able to define in the configuration, right? So that you could basically play around with your designer and say that for this content type for those images we could just add those colors as a default maybe. And the user could choose to turn it off for example. Another thing, next thing, is cropping out of the box. Same here. This is just a simple installation. And I could take the same photo and go in here and say I want cropping. So I could either scroll or just pinch zoom like this. Let's focus on that car back there. I could also go in and say that I want to switch to other landscape format or some square or whatever. I'll keep my original for this one. And then I just apply. What actually happens then, because the previous picture is over there, it was not really fully sharp, because I had set up to use an image style that was quite low resolution. So now when I crop, it fetches the original, crops it properly, creates a new file and saves that. So it's not really just CSS covering overflow, but it's actually serving something and then of course you could just use image styles on that to make sure that you can do this, but sometimes you don't want to do that and then the configuration kicks in. So as you've seen throughout this presentation, most features and customizations were enabled by using Gutenberg's YAML configuration file that you can set on anything or module. You can also customize things like restrict the available font sizes, colors, base colors, gradient colors and as Thorander mentioned you can set which text format options are available for the editor and some core blocks come with predefined styles but you can also overwrite them or just add more to them. You can restrict which blocks are available for the theme and in this way overwriting the settings on the content type and as we've seen, this is where we set the patterns. Okay, so Drupal Gutenberg at his score is at text editor pretty much like cka editor and like cka editor the content is saved as HTML. Of course the generated content can be more complex using Gutenberg when using blocks like group columns or any other block that affects the layout but even so we believe that the advantages of storing the content in this way outweights disadvantages, sorry. Using the field mapping functionality with templates we can solve the cases where Drupal fields are blended in the contents you can learn more about field mapping at Drupal Gutenberg's documentation at Drupal.org Although there's this one use case where we need structure data at less or the couple applications. When building the couple application it's very likely to be more useful to have the information structure so that all the frontend we have at the frontend we have more flexibility in building the UI. Okay, so let's say you're building your frontend app with any javascript framework for example Next.js In your JS app you can import parse function from this light wordpress package called block serialization default parser so this parse function will take the Gutenberg formatted HTML taken for example from Drupal's JSON API node endpoint as a parameter return a javascript object representing the content blocks. In the next versions of Gutenberg we will work on integrating the structure information of the blocks in the endpoints of the nodes available in the core module JSON API. This is the current JSON output from the node endpoint and as you can see the value is just HTML kind of. And this is the initial draft of the JSON output we want to integrate with the node endpoint. This structure output will help a lot when consuming this data for a headless application. In recent months we have seen some movements in the Drupal community towards the adoption of JSON fields already available on my SQL we will be watching its progress and if we see that brings value we will certainly adopt it. We were talking like outputting. Just a comment on that because you said that some of the last things there are like fans in the future but serving that javascript object for a decoupled setup is something that can be done. You just need to use that package and that function from the package. Let me introduce you to this very handy tool Gutenberg converter. This command line converts generic HTML to Gutenberg blocks formatted HTML. This tool is very useful for migrations for example converting content from a Drupal 7 site to a Drupal 9 site with Gutenberg enabled. Just a little word on the custom block development. When doing custom block development one of the things that annoyed me was to set up webpack. So I'm not sure any developer that already work with webpack here in the room. OK. For this case or any bundler for I mean it was a bit hard time consuming task to set up webpack or any other bundler into web project. But a few months back I've discovered a lot of Elmix. Hold on. I know what you're thinking no we are not bringing Laravel to Drupal not at all. Laravel mix just has Laravel in its name because it was developed by the Laravel team. Mix is an opinionated wrapper for webpack. It comes configured to cover most cases on development. OK. Let me show you just a quick example. So to work with Laravel mix you just need to install Mix as a dev dependency because it's an npm package then create this simple configuration pipeline into a file name called webpack.mix.gs So from this example you see I'm declaring some external variables like react taking the index.gs file as source compiling reacts to gsx filing the css and even using browser sync for live reloads on your Drupal development site. When running this script Mix will handle all the dependency so you don't have to worry about it. Of course there are many tools out there that you can also use for custom development custom block development but I find Mix to be quite simple to use and it allows me to save time on the project setup. Thank you. So yeah we got a bit deep into the technical parts there luckily there were a bunch of developers here already so it was never easy to know but well our summarized take away from this session is probably that well for all the Drupal websites that we've been setting up for the last years we always have set up Gutenberg. It's not like a policy we're not forcing it on anyone but we always do it and why well it's working really well people like it it's stable and it's very great for a typical especially marketing departments that has a lot of content creators and they need that for their everyday work that's really important and yeah there are things to learn it's been a learning curve also for us and part of this session also is trying to sort of help a lot of you developers out there to be effective getting this thing to work as easy as possible for you in the right direction for getting quickly up and running with this we are doing an onboarding program it's a paid service but a business owner that might be thinking should we go in this way this is definitely the most effective way for your company to get up to speed with what you need to know about Drupal Gutenberg all the concepts here yeah and some of the sessions that we'll run through in the beginning of that and of course there will probably be equally amount of levels and the experience have you used react before or not and so on so we need to talk through that and set up something that works for your team if that's interesting at some point yeah thank you so much I know that there are some questions so that's great just before people also feel that this was long enough there is a buff going on to discuss the next steps right now at 5.15 so it would be super great to have someone there to be able to discuss these things further also in the beginning there there was this survey where it would be great to get some feedback from you we will leave an email address so we have someone to reach out when you want to communicate and have dialogue about the decisions being made and yeah just we can just leave that there feel free to reach out of course and let's do some questions hello so we're going to start with the questions from the app and then we'll go to the floor question from the app can you optimize image sizes when uploading through Gutenberg if for eksempel the media module and media library is enabled, Gutenberg will use the media module by default so it will be all handled by the media module yeah so that's a yes ok, questions from the floor, hands up when you created this cropped image is it that stored, is it a file entity and linked to the node so when I delete the node the file is removed or how you solve it the image copying when you do the image copying it will create a new file entity and it will work like a file entity so it will create as a temporary until the node is saved of course just one note regarding because duotone filter we've kind of missed that for the duotone filter it's not creating an image it's just an SVG filter that applies to the image two answers for that question let's make it three three hello could I use responsive image styles with Gutenberg I'm asking because if I want to use webp images I need to use responsive image styles again, you can use the media module and media module together with the responsive images module, I think or the responsive module will handle the responsiveness hi, how much do I need to learn my to do this I need to learn React should I learn my React developer's Drupal should I learn my Drupal developer's React where's the line that's a great question I think that most of our developers at least started off from the Drupal landscape and actually through some of the tools that you use when you start working on Gutenberg blocks you'll sort of get what you need out of the box it's a very good way actually to learn React, you learn React that way yeah, of course yeah, it's definitely doable you sort of get the structure there quite quickly even though you know I shouldn't really want to answer the question yeah, my question is does the Drupal Gutenberg project do they follow updates to the Gutenberg itself like for example when WordPress 6 was released with some enhancements to the block editor did those things flow down to this project well, we try to yeah because WordPress Gutenberg has this big team so they keep and they aren't kind of not afraid to just release new versions so it's kind of hard to keep up with them so we try like to wait for like a big set of features so we do the updates in Drupal Gutenberg okay, that makes sense, thanks yeah, thank you for the very inspiring presentation I have a question, when you have a Drupal website which is structured with paragraphs and maybe nested paragraphs how would you recommend how would you recommend to bring Gutenberg into the website because I think it's not the solution to bring just the Gutenberg UI into the paragraphs there must be a way to use Gutenberg at a whole and migrate those paragraphs into the website but it sounds very complicated I would say yeah, you can take the tech part but well, we've been talking about several ways of doing that I need to migrate somehow but for a couple of cases we're sort of building a side by side way of using this so if you have paragraphs set up from earlier we have an additional body field that we use for Gutenberg and then you're able to switch back and forth and you could sort of port the HTML from those blocks into Gutenberg and then from there we'll just go and at some point that will be like a clean up where we leave paragraphs behind for the end but you also mentioned nested blocks and that is so much easier with Gutenberg because of all the performance issues and translations and everything like that that's like it's just a body field so that's super performant and easy to handle in that way but there will be not to migration good point anything to add to that yeah I was like thinking a way to kind of migrate paragraphs content so Duple would be like taking the outputs HTML from paragraphs and go through that that tool that I've showed the Gutenberg converter and it will try to you know it's just HTML so we'll try to convert to Gutenberg HTML you've had some statistics slide and there was also a number of pages created using Gutenberg how exactly this number calculated is there any tracking code or something that's from the WordPress communities so that's Gutenberg so those 80 million doesn't include the 3000 Duple sites so and I think the site that delivers this every day is called Gutenstats.org I think they explain somehow how they get the stats but yeah now behind you yeah first of all nice speech, nice presentation I've used Gutenberg myself on a couple of new projects but as far as you see Duple uses a lot the new it's not new theme but you know it, the theme gene for the backend and this theme is really cool and we are using it a lot and it's still I see that Gutenberg has a big lack of compatibility with the other themes than the one it comes from the box, yeah that's nice it looks even better than default Duple themes I admit it but what do you plan to do with the compatibility issues they are still right now on Drupalorg because I monitor it also for myself and again about the complex elements like exposed view blocks exposed paginators facets edge stuff and stuff like that which is conflicting with the GIS how can you provide something like more stable here yeah yeah so there's actually a content model which is called a gene Gutenberg that he could use that maintain us in the front rows so blame him no but it's trying to solve the usability issues that we see when using gene and Gutenberg yeah and it's very good we use the exact same module for all our setup so we use gene and the gene and Gutenberg module hi thanks for the presentation I haven't used Gutenberg myself but it looks really nice I understand that the integration with Drupal entities is working well so for example when you drag and drop the image it's creating a media entity so now I'm wondering I think this is a two fold question how well integrated is with entities like they're coming from layout builder or even does it make sense mixing these two tools or it's a completely different approach I see the the benefit of using for example you explain patterns so that will completely replace the need of layout builder for example but then my concern would be how well integrated is Gutenberg the Drupal entities yeah again it's a text editor so all those integrations are basically with media and we probably have some third party modules that allows you to insert for example nodes into the editor but that's about it there were some discussions about integrating with layout builder but can't do anything we can't do more alright our time is up I think so thank you so much I hope to see you at the buff


Have you guys seen the astrophotography of the anomaly posted to MUFON? This is extreme zoom levels that are being used to peer into deep space and appears to show an object moving very quickly, thousands of miles within 3 minutes in fact. This thing appears to have a core and other side objects that are part of the network of systems and reminds us of the Nibiru system which is said to have its own sun as well as other planetary objects on its retrograde highly elliptical orbit around the sun. There is an unimaginable amount of objects and events in space that are identified but still completely incomprehensible from planets in our solar system to inexplicable energy burst from across the universe. It's almost like the core of this object is reflecting on the two side objects. What is this thing? As we look deeper into space there is very little doubt that we are going to find things that stretches our imagination. Our understanding of what space is is very contained to the earth and what surrounds it. We live on an Eden in a universe where every possible scenario you can ever think of is probably happening all at the same time. This thing looks like a fireball of sorts. Is it a very small sun that is being monitored by alien satellites? Who knows? Anyway guys, shed some light on what this is, comments below and thank you for watching.


So let's take a look at what we're actually going to do today, we're going to be talking about. I'm going to try and burn through some slides and then maybe if people are up to it, we'll talk about it a little bit, see if it's a good idea, if not. Since this is a core conversation, I wanted to give a little bit of background on some of the things we were talking about. We are going to be talking about analytics, web analytics, software analytics. We're going to be talking about managing experiences, alluding back to Driz's keynote for the past couple of years. And then we're going to talk about a little bit of high-level architecture about how I think we can bring analytics, experiences, personalization, and Drupal all into one awesome, beautiful thing. So let's talk about analytics. Analytics is basically, you have your data, you look at it, you make decisions based on it. Pretty straightforward. A little bit more context around that. The data that you're analyzing doesn't necessarily have to be purpose-collected. There could be data that you were looking at that is actually application-level data. Like in a commerce system, you might be looking at items that are in someone's cart. That needs to be there in the system for the commerce application to work. But it's also useful to look at to make decisions. So you can do analytics based on really, really local, small sources in Excel, flat file CSVs. It's more common for analytics to be done on purpose-built databases, sometimes offered as services, or very, very, very large data warehouses. Examples would be like a Google Analytics or on the warehouse side, you might have Amazon Redshift or Google BigQuery or Hadoop, et cetera. In this process, the whole reason why you're doing it is you make queries against your data so that you can actually make informed decisions and improve your organization in whatever way you deem fit. For our purposes, we're going to focus more on web analytics and software analytics because Drupal is both web and software. So let's look at some basics. I thought that GA provided a great framework for it, but also that's the one I'm most familiar with, so I'm going to give you a little bit of background. We've come to kind of expect out of our analytics platform a way for data to be automatically gathered, and GA does that at the page view level. Like every time someone hits a page, it'll collect some information. That page view is really just an event, and it's usually keyed by something like a URL or a path. Some data gets collected automatically like what's their browser, what's their operating system, where are they located, that kind of thing. That data is then aggregated in such a way that we can, for instance, count how many people were on this page, how many unique visitors were there to this whole system over this period of time. In addition to that, we can do some filtering, segmentation, how many of those people were from Tokyo, how many of them were from China, and we're also using Internet Explorer, and based on that, we can make decisions like, I'm going to stop supporting Internet Explorer 7 or not. Beyond the basics, it's really, really important for an analytics system to be extensible, and usually what you can do with these types of systems is provide custom events, be like this user clicked on this thing, this user filled out this form with this value, and you can dump that into your analytics repository and do analysis on it later. In addition to the custom events, you can usually provide some kind of custom metrics or dimensions, so that if someone visits a page, you can say, the visitor on this page is actually associated with this taxonomy term ID, or the page that this was loaded from is of this type. And then obviously, when you're analyzing those things, they're treated like the default stuff that you get from GA, the page view stuff, you can look at events, segment, see how many people in this industry clicked on this element this week, or that kind of thing. Moving kind of further up the stack in the typical organization, we can kind of apply a little bit more business value to the stuff that we dump into our analytics engine. You can set up goals, which basically just define relationships between two events that are in your analytic system. Say, user visited this page, and then on that page, the user clicked this button. And then we can kind of track conversions, which are just like, how many people did that thing that we set up, and conversely, how many people didn't, and what is like the conversion rate of that happening. And then obviously, we can analyze those conversions and segment and do that kind of thing, where it's like, how successful is this page in helping people become engaged constituents, if you're like in a non-profit kind of situation, or how many people downloaded this software that I'm trying to sell? How many didn't? And a really important part of analytics, I think, is a focus on developer experience. It's super, super easy in Google Analytics, for instance, to do those extensible custom things that I just mentioned. You can do just like a... It's kind of encapsulated in this facade where you just call GA, and then you'd say send event, and then you give it a category and an action, or you can say GA set, and here's my custom dimension, and you give it a value. And then next time you send an event or send some data to Google Analytics, it's just going to know. It's also performance-oriented, highly scalable. You just stick an asynchronous script on your page, and it just magically works even before the script is actually loaded. It just kind of does everything for you. Software analytics is a little bit different, but it's pretty much variations on the theme. Rather than looking at page views, rather than looking at click events, that kind of thing, we're looking at transactions that our application is handling. We're looking at network connectivity between different servers. We're looking at app-centric kind of events, but we're doing the same things with them. We're saying how many times was this route called to handle this request? How long did it take looking at it over time and segmenting? Same kind of thing. And then in terms of software analytics, we're looking more at monitoring and making sure that things are below certain thresholds rather than looking at conversion rates. Vendors in this space would include New Relic, Appnetta, Airbrake.io, that kind of thing. So I mentioned a lot of vendors, but I didn't really mention Drupal. Does Drupal do this kind of thing? No, not really. You have the statistics module which can count hits to nodes. We used to be able to look at page generation time in the access log, but that's gone in Drupal 8. And typically these would be the types of things that you would pretty much just turn off on a Drupal site because they would just bog your site down. They would make your site less scalable. I like how my colleague kind of described it. It's like a module that is a burden that you choose to turn on or off. There's some interesting stuff that gets logged. The developers put in their code, and it's called Watchdog, of just like events that the developer thought the module had that were important where if something was going wrong you would want to know about it, but also things that were just happening that are noteworthy. And that's kind of interesting, but it's not really what we're looking for in an analytics system. Basically, Drupal just doesn't do it. Rather than doing anything, we rely on these third-party vendors and services to do the analytics for us. We install New Relic on our servers. We install Google Analytics on our website, and Drupal is just totally unaware of important events that we may or may not actually want to look at. So the whole point of the session is what do we do with that? Do we decide that Drupal doesn't want to do analytics and just live with that and continue pushing all of our data to these third-party services in a way that we can't use or and just actually get rid of the statistics? Like should we just delete this module from core or should we improve upon it in a way that is useful to us in Drupal? Obviously, just deleting it is way easier, but I'm going to make the case that we should build upon it. And I'm going to give you a use case, which is the use case that Dries and Acquia have been really kind of cramming down our throats the past couple of days, which is the experience web, managing experiences, personalizing content. To give a broad definition, it's kind of a fluffy marketing term, but basically it just means a content management system that is capable of personalizing the content period. You can kind of think of it in terms of personas where maybe you have user stories or something on your website. Maybe you want to treat customers different than prospects. Maybe you want to treat in the nonprofit world, you have like the pyramid of engagement and you want to treat those different pyramids differently because they have different goals. And you want them to get their goal easier and you want to personalize it in order to make that happen. That is the like content delivery optimization part of the personalization there. The part that a lot of people don't really talk about but the most important part I think is when you do that personalization to help a person reach their goal on your website better, you need to measure it, make sure that what you did actually works and if it doesn't, fix it and if it does, keep doing more of that thing. I think that's a very key component of managing web experiences. So let's think hypothetically what it would take to actually build something like that on Drupal right now. At a minimum, you would need some kind of mechanism to customize the way that content is delivered. We would need some kind of mechanism to determine who a person is and what kind of person they are and then we would also need some kind of mechanism to analyze the personalization process. We need to measure what we do. If we take a look at Drupal specifically, I think in terms of personalizing content delivery, we're actually doing pretty well. We have a lot of ways that we can build layouts, a lot of ways that we can display content. We have blocks, we have regions, we have the like a contacts module, display suite, panels. We can alter the types of content and how they're displayed very easily. That's like a very, very core part of Drupal and I think we're doing great. In terms of visitor segmentation, we're pretty good, we could do way better, but at least we can throw fields on a user. We can add a taxonomy term reference to a user and know that this user corresponds to this taxonomy term. That's pretty powerful. Obviously, connecting to third party services is kind of like an integral part of Drupal's DNA and we do pretty well with that. There are a lot of enterprise-y real-time identification services that we can hook into and be like, oh, this person corresponds to this IP address and we can get a whole bunch of information about that IP address and associate with that person. That's the thing that we do pretty well. And then there's some like modules in the contrived space like Browsecap or IPGLocation that kind of bring that functionality into Drupal itself. Pretty good at that. I think that the biggest problem that we have if we're going to support the experience web is that we just have no data. Like everything that a person does on a website, Drupal does not really know about. So if we're going to personalize a website for Drupal, we need to have a better understanding of what that person is and we need to do that by kind of tracking what they're doing. If a person happens to go to a lot of pieces of content that are tagged a certain way, Drupal should know about it. Because if it doesn't, then you're going to do personalizations that are not really relevant and if you don't even have a way to store that information, you're not going to have a way to measure whether or not that personalization even worked in the first place. So I think that if we're going to do web experience management, we need to do it in a data-first way. We need to do it in a fully integrated way. That might look like a Drupal where collecting data, analytical data is part of core Drupal. I think that the data collection should be totally plug-able. I think that the process of managing the analytics in Drupal should be targeted at site builders, website administrators who are not developers. They can just click through and configure what they want to know without having to talk to someone in their development team. I think that if we're going to make data collection plug-able, we need to make it so that similar to responsive web design, if your theme that you're providing is not responsive, then it's broken. We need to get into that mindset about Drupal and data. If your module exposes interesting data, you should integrate with this system. I want to be able to, if I have Mandrill installed or something on my website, Mandrill knows if I sent an email to someone and that person opened that email, that needs to be part of this system. Not only that, I think it needs to be done in such a way that this data can be easily accessible throughout the rest of Drupal. So if you have a view, you should be able to make a view of this data. You should be able to make a view of something else that you would do normally now, but relate it to this data repository that we have so that we can more easily personalize the experience for that person. That's my vision. How do we get there? Scalability is hard, especially when we're dealing with, like, if you load a page and we're telling Drupal, hey, this person loaded this page, they scrolled, they clicked on this button. While that was happening, some other thing loaded and you were loading all of those events into Drupal. It's going to be hard to scale Drupal to do this. However, I think that we're actually doing pretty well. In Drupal 8, we have web services and core so that we don't actually need to... Well, web services and core, and also we have this whole re-architecture of the bootstrap phase in Drupal. We have the concept of the Drupal kernel, and so every time we respond to a request, we don't have to load every single module and go through a whole process that we don't actually need to do to generate a page, because we're not generating pages, we're just collecting data. I think we're doing pretty well there. At least we have a path to scale at the application layer. The database layer is kind of interesting. Drupal supports multiple databases, but none of them really support the level of scalability that you need in analytics database. However, recently, I would say, in the past three to four years, we've been seeing this proliferation of highly scalable databases, a lot of which are open source and anybody can download and just use right now, like a MongoDB, CacheDB, that kind of thing. I think that that would be a good path. We should have support for that kind of thing. We already do have some support for that kind of thing in Drupal Core. That might be a good path to supporting this kind of scalability. But in addition, we have this consumerization, commoditization of big data type warehouses, and a lot of that is kind of like software as a service kind of thing. If you have push button Drupal, you should also have push button bottomless pit of data storage, and I think that's actually kind of possible now. We have Amazon Redshift, Google BigQuery, that kind of thing. I think that in order to fully integrate whatever data storage that we have for this data with Drupal, the simplest way to do that is through the Entity API. Entities already have a concept of pluggable storage backends, and they have deep integration with views in other parts of core, like the REST pool services component in Drupal 8 that we can just plug into and use. So I'd like for you to imagine an entity called like a stat entity where each row is just an analytic event and we have properties on that event. We can plug the storage backends so that rather, like by default, smaller sites, nonprofits, whatever, with a database backed analytic engine that just goes to MySQL and they can still have all this functionality that larger enterprise customers would need out of the box. However, it would also integrate with your MongoDB or your New Relic Insights or what have you. If we use entities, we get the entity configuration UI for free. Imagine customizing your analytic system in the same way that you customize fields on a content type. Super easy, anybody can use it with a little bit of background information. The pluggable storage is also super handy because we have this system in Drupal Core called entity query or entity field query in Drupal 7 which allows us to query for entities against arbitrary data sources without having to expose any kind of crazy SQL assumptions. I think that's the way to go. In addition to this stat entity, imagine that we have these plugins for actually collecting metrics, dimensions, basically like data getters. Say you trigger an analytic event and it calls this getter and the getter basically just says, hey, Drupal container, I need to know about the request object and from the request object I'm going to return the user agent or something like that. On this plugin you might define like a JavaScript plugin so that we can compile a whole bunch of plugins into a single file that we can load on any page. It's just going to be like, hey, somebody clicked on this thing and the administrator said that when someone clicks on this thing they want to hear about the user ID or they have RedHend installed and RedHend is like, I know what the RedHend contact ID is so I'm going to store it on this thing. I kind of feel like with this plugin system every module maintainer would just implement plugins for interesting data that they happen to be aware of so that site administrators can just have the whole breadth of the Drupal ecosystem at their fingertips when they're configuring their analytic events. I think that there should be this concept of like data management plugins. In Core right now in the statistics module and in DB log we have this concept of like rotation where because of the limitations of MySQL we don't want to just endlessly store watchdog events or access log events so it will just like, you can configure it to say after I collect 10,000 of these go ahead and just truncate whatever's left. Rotate those out. Or after it's been like two weeks go ahead and delete that information because I don't need it. In this system if we make it a plugin we could do that by default for instance but somebody else could come and be like oh I want to aggregate this data on this column and store it in this table or I want to apply some kind of a filter to delete this information which I don't actually care about. I think that one of the difficulties we're going to run into with this system that it proposes is that we don't really have a way for site administrators to say like hey here's the data that I want but I want you to collect it when these things happen. At least not in Core. We have rules. Rules would be a super interesting way to do it. I know the AQUIA folks have built out some really interesting UIs on how to collect, how to trigger certain events on the client side and maybe we could pull that kind of thing in. Maybe we should rely on like symphony, event handling system that could be pretty cool and just like build a UI on top of that. I don't really know what the best way to do it is but I don't think that's a difficult problem to solve and I think that that's a problem that Drupal has vested interest in solving. In terms of data analysis I think we have a little bit of a problem because views would be the natural way to kind of generate reports based on this data. However, it's really kind of hard to build a view if you don't know views well especially if you get into the aggregation functions. Like if we're going to make Drupal analytically awesome we need a way for people who are not developers or Drupal experts to be able to pull their data down without having to I don't know, come to Drupal.com. There are some kind of deeper technological problems with this views entity kind of integration where if we have our application data stored in one type of database, MySQL and we have our analytical data stored in a larger data store in a totally different type of architecture kind of joining or blending or making a relationship between those two types of backends is going to be super hard. But that needs to happen, I think. The way we're going to do it, I think, is with that entity field query but I think there are some problems that we need to solve there. If you go to Google Analytics or you go to New Relic, you notice they have these awesome pretty charts and graphs. If we're going to have an analytically minded Drupal we're going to need those but it's really, really hard to do visualization and it's really hard to do well. I don't think that it would be in our interest to build a visualization framework. Drupal is a place to manage content and experiences. Drupal Core is definitely not the place to build a visualization framework. However, I think it's a feature that we need if we're going to do analytics and if we're going to do it, I think we should do it in a way that any other module can introduce their own way to visualize a thing and it should probably be done through views and it should just be a light kind of wrapper and maybe we'll provide a default that is okay at what it does. So, yeah, that's kind of the vision that I see for Drupal and analytics going into the future. We don't do it right now. We should be doing it if we're going to support managing experiences as trees has kind of outlined to all of us at DrupalCon. We should be doing it even if we don't necessarily want to support that, I think that there are values in standardizing on a way to do analytics in Drupal so that Contra modules, like whatever provides Google Analytics or other modules that provide interesting data can integrate seamlessly without having to do something in a totally custom way. I think that a lot of the work that we need to do is already done for us in the entity API, in views and core and that kind of thing and the problems that are here are totally not big. They're solvable and they're solvable within a release cycle, I think. Yeah, so either we get rid of statistics and let large third-party vendors do the analytics for us or we build the analytics in a way that it's totally integrated with Drupal and valuable but still also analytically valuable, which should we do if anyone wants to come up to the mic and talk. Let's have a conversation, a core conversation and if not, that's totally fine. It's the last session. We can take a nap. Do any of the existing analytics platforms have an API to get data back out of them? That way, Drupal could just say, hey, we have consumers for the APIs of Google Analytics and these other ones. If you send your data off to them, we can read it back and offer you some insight on what you can do. I think that might be the way to go if it's possible rather than build everything out in Drupal Core by itself. Right, so that's kind of the trend right now. The most compelling, interesting product I've seen so far has been New Relic. It has a piece of software in beta right now called Insights and it's basically just a giant data store by default that gets populated by the same data you send to New Relic for your monitoring but you can also send it custom stuff. Like, hey, here are my events and there's an API to pull it down as JSON. So, and a lot of the vendors are doing that now too like Google Analytics. They're building out in Universal Analytics more and more APIs to pull that data back down. And actually, if you pay them a whole lot of money, they will dump that data into BigQuery and you can pull it down that way too, right now. So, rather than, I agree with you, we shouldn't be building out that kind of thing in core. We should be building out a way to integrate the data that's in those external repositories and bring it back down as like core entities so that we can filter views by them, we can do whatever but keep the data management somewhere else. There's no way to do it that we wouldn't have, Google wouldn't be storing the data. It sounded like, you know, in your proposal, you'd be taking all the data back down and storing it but is there any real reason to do that as opposed to just processing what we get back? So, the only reason we would be doing that is for smaller websites that don't have the ability to spin up those types of instances and store it off-site. I don't think we would be storing it in Drupal, actually. Like, there's this thing, are you a developer? Yes. Okay. So, in Drupal 8, you have entities. Entities have a storage controller and you can write your own storage controller for entities. So, you can hook it up to, by default, there's like this content entity storage controller that hooks up to the Drupal database through the database API. But you can have a storage controller that's like, I'm going to pull all of my data from Google Analytics, but Drupal is going to treat it as this core thing that it knows about. That's the basic idea. You could go either way. Okay. That wasn't immediately clear. Thank you for the feedback. We good? Should we just do this? Does anybody know how we can do this? How... Question? So, the question for the recording is, have I put these ideas, proposals into the queue for developers to consider? Yes. Kind of. So, like three months ago, I built out kind of an early working prototype of this in the Drupal contributed space. It doesn't work anymore because they've just been changing so much of Drupal 8 constantly, especially the APIs that need to be used to do this. So, kind of. And the problem is that the process of developing core is so hard to describe, like where the responsibility is for decision-making, who actually decides, hey, this is a good idea, let's do it. Like it's not very well-defined. And I was hoping that I would get feedback on that from core developers here, but I don't know. But yeah. Yes, I should just make a ticket for this. Probably. Thank you. What kinds of assumptions does entity storage make? Like, I guess what I'm getting at is, we get so much integration out of entity that I would be very cautious in building a different storage interface. Hopefully, the recording picks all of that up. But, yeah. Totally, totally agree. So, you're at Mark, right? Do you, how do you recommend from a process perspective that we propose and implement this kind of thing? Okay. Cool. If anyone wants to continue talking, I am known as I-M-E-A-P, pretty much everywhere. Drupal.org, IRC, Twitter, whatever. Let's make this happen. It really, really needs to happen, in my opinion. Thank you.


everyone and welcome. This is Melissa Armo with the Stock Swoosh and I'm doing a Valentine's Day Golden Gap Course special. Valentine's Day is coming up. I know the Super Bowls this weekend and everyone's thinking about that, but Valentine's Day is Monday. So I'm going to do a one week special for the first class of the year for the Golden Gap course. If you have questions, if you'd like to sign up, if you'd like a trial to the live trading room, you can email me and Melissa at thestockswoosh.com or call me at 929-3200-Gap. You can also follow me in Twitter, Facebook, YouTube, or Skype. So happy Valentine's Day everyone. I hope you enjoy Monday. Spend some time. Order some chocolate strawberries. In fact, I have to do that by tomorrow or they're probably gonna be sold out. Or maybe I'll make some of my own again. I tried some last week. They they tasted good, but I think they could have looked a little bit prettier. Anyways, it's a fun time to spend the weekend with family and friends with the Super Bowl coming up and then of course your loved ones on Monday. So the first Golden Gap course of the year is going to be at the end of this month. It's been one of these years where I mean we just had so much volatility in the market and it has allowed us to have some really big place. If you've been following, if you've been thinking about signing up, if you didn't join in 2021, again I apologize for not doing a class in January. I just got super-duper busy with trading, TV, everything going on in my life right now. And so I'm not getting to do this first class until two months into the year, but you can join now. You can do the class in February and then you can start trading then, which would be actually March 1st. So the near is upon us. It is a time to go after everything you want. It's a time to love your life, love your job, love what you do for a living. And if you don't, it's time to think about changing careers. So I always thought I would do something different with my life and I was doing mortgages, but I never knew that I would be doing this. But I knew that I wanted a new career back in 2007, 2008 when the mortgage industry started to get really tough for me. I said, I want to do something else.  This looks something like I could do. Of course, it took me three years then to figure out from that point to figure out my strategy. It was a long road for me, but I love trading. I love shorting, which is what I mostly do. And I love the freedom of being able to work for myself and have unlimited income. So that is a wonderful, wonderful, wonderful thing. So the Golden Gap course Valentine's Day special, if you want to learn and sign up by Friday the 18th, you can get the trading room free until the end of 2022. This is a huge offer. It's a nice offer. So you get the daily support in the room, the live calls, and the class dates are February 26th and 27th, nine to five. Class tuition is $69.99 a year. I mean, I'm sorry, $69.99 for the class. And then you get the trading room free through the end of this year. The whole rest of your 2022 free, you've got to pay and sign up by February 18th. And then you would take the class and do the class February 26th and 27th. So this is the live trading room. Again, the class is online. If you want to sign up for this special, email me at Melissa at thestockswish.com to register. Now, as I just said earlier, I love to short. So what is a short? A short is where you're basically betting that a stock price of the market is going to go lower. Why do I love shorting? Because panic comes into something, a stock, the market, whatever, and shorting sell-off moves, big, big moves like we saw today in the market actually happen quick, fast, out of nowhere. So I love shorting because you can make a lot of money shorting. I love shorting because of the whole idea of the fast speed of the shorting. I like to be in and out of trades quick most of the time today in that holding because of the move we had the follow through. But we are out of our trades many times in five, 10, 15 minutes of the day. So, you know, again, I'm not going to kill somebody if it's going like we fell today into the close, but we have one of these things where I have perfected shorting and a lot of day traders don't know how to short, don't understand how to short. They're scared of shorting and I've really become an expert in shorting and that is my niche. And again, that is what you will learn in the class. So, again, as I was saying, what is a short? It's where you're taking a trade and the stock price is going to drop. So, you can short something, for example, at $10 and if it drops to $9, you have a thousand shares, what would you make? A thousand dollars. And it's just like that. Now, I also teach gaps. That's the way that I'm making the picks what I want to short. Today we shorted the market. This is a chart of the QQQs. So, what is it got? Again, how do I identify that we want to do this? How do I know that the direction of this is down, that we are going to short this? This is what you learn in the Golden Gap course. It is a 26-point rating system that tells me this is going to fall, which it did. So, anyways, this is the chart of the QQQs, but very basic here, what is it got? It's when something closes at one price at four o'clock and opens at a different price at $9.30. Most everything gaps every day, but not everything is playable in the direction of the gap or opposite it. So, I'm trying to find the good ones every single day and I do that with a rating system. That is the meat and potatoes of what I do and what you would learn in the class from me. So, getting back to this here, this was a gap down. So, the market closed here yesterday, which was Wednesday at one price and opened today at a different price, which is Thursday at $9.30. Then we rallied, then we fell. Okay. So, again, that is what a gap is. Now, let's look at what a gap up is. So, this was a bearish gap. This is a bullish gap. Market closed here at four, open here at $9.30, open at a higher price, rally. Okay. So, this is a bullish gap. So, again, it's very interesting because being able to predict where something is going to go based on the pre-market, that's what I look at, is something that I'm very good at doing and that is what you'll learn in the class with me. Now, one of the trades we did in the live trading one was PayPal. Actually, we did this again today too. This closed here, this gap down, fell. This is back to the beginning of February, February 2nd. We shorted it, called the trade in the live room. Again, if you sign up for the class, you'd be in the room for the rest of the year free. If you sign up by February 18th, we entered it at $136.70, shared the rate $800, risk was $3120, exit $131.50, profit $4,160. That was this day, February 2nd. There's the drop. So, again, this gap down. I rated it in the pre-market. I said, wait a minute, PayPal's going to drop. So, we shorted it. Again, you shorted it one price. You exit at a lower price. You profit. You could risk less than this. You could have taken 100 shares and still made money. So, here we are. It is already February 2022, the new year is upon us. It is time to make all of your dreams come true. Think about where you want to be by July 4th, okay? You want to be in love with your job. You want to be happy. Everyone's talking about inflation and kind of panicking about the data numbers that came out today and everything that's going on and everyone as well as me. Listen, you can make extra money by doing something on the side. That means what? Well, you can get a part-time job or you can work for yourself by trading in the market. So, and a lot of people, quite frankly, do not have the time to actually go and get a part-time job for 20, 30 hours a week. They're out there though now. I mean, people are looking to hire people. I think training is easy because you can do it from home. Now you have to learn how to do it. So, it may be difficult for you if you're doing it now and you don't know what to do. So, make it easy for yourself by learning a system, learning a strategy. That's how you make it easy for me. Some days are so easy for me. When everything's clear and it just plops in my lap. Some days I get up and there's no trains. There's no good gas. We don't trade those days. Sometimes I do have a hard day where things don't work out exactly the way that I planned because some trades I take are losers. But more trades that I take are winners than losers and that's how you get somewhere with this. Overall, I have so many few losers and so many few hard days now after doing this for 12, going on 13 years that it's very interesting. And I wonder, I said to myself, fast forward 10 years from now or even five years from now, what will my win ratio be and where will I be at that point? How much I will be risking? I think if you're on the road up and you're succeeding and you're doing well, you've got to keep going and you've got to keep going. People always say, well, I would like to have this much money and this much money. Listen, if you have a small account, start with a small account. You can grow it. You're making money along the way. You're learning along the way and that's how you get somewhere. It's one of these things where it is a process. It is a process and you get better over time the longer you do it. It's like a sport. So I'm very good at what I do because I'm doing it for a long time. I don't do anything else. I created the system I do and I do nothing other than gaps. The options trades I do are gaps. The day trades I do are gaps. It's all based on my gap method, but I do really love to short. I really, really do. And again, if you're looking to make some extra money in the sign and you've got time to train, then we trade in the morning. So you will learn the Golden Gap system in the Golden Gap course. This is a 26-point rating system. You must have charts and we look at day charts. That's what the points are based off of. You can wait until after you do the class to open a brokerage account if you want. You need charts, though, to do the system and to trade. And then, of course, you need the one-minute chart too. We focus on that to take the entries, but making money trading is about using the right system. You got to put all the pieces of the puzzle together. It's never about looking at one thing. As I said, I look at 26 points. That may sound like a lot of things, but if I could look at 126 points and never, ever lose, that's what I do. So far to date, I have not added any points in my system, but my overall analysis and the nuances I see in things, particularly in the market, has improved over the years that I've been trading and doing this. So it's a benefit being in the room because you get the live calls daily and obviously what I say about the market. Today, the market was tough. I called it correctly. I said the market would fall, but I didn't know what time I was right. And so if you were in the room today, you had the benefit of that and getting the calls. People are successful trading with me. The fact is, you can do it. You've got to be out there and decide and make a decision if this is something that you really want to do. It's a time commitment for an entire weekend for a class, but it's one weekend. That's all. You learn it, then you're in the room. The time commitment during the week is not so much. It's an hour a day or half an hour a day. We open up the room at 8.30. I usually start talking about 9.15 Eastern time. So if you want to come and learn my system, take the opportunity because I, like I said, I didn't do any class in January and I don't know when I have the next class plan. I am very busy right now. If you weren't new, I have taught new people. I would not worry about that either.   It's the making money part of it. It's the success part of it. It's advancing. And again, all of this incorporated with having the live trading on free to the end of the year is a nice bonus. The live insight that you get from being in the room and hearing my market call is extremely important in a day like today. The market rally a lot today this morning, all the way up, I think to 10.30 in the morning, an entire hour before a broken fell. It was a tricky day, but I had the call. I had it right. I'm very good at what I do. So part of being in the room is the mentoring, the calls, the targets, the stops, everything we go over and the teaching we do on the days that we don't end up trading. If you're somebody that wants to make money, this is one way to do it. I do not think inflation gets any better between now and the end of the year. I think eventually it might, but we're in a situation now where you just got to find a way to make more money. And everybody wants to make money in the market and not everybody does. Most of the reason is because people do not have a good trading system and they do not follow a good trading system and they do not have a good mentor either, which really helps. Like I said, particularly on days like today, but it is about the conviction. You've got to keep your eye on the ball. I'm trying to find a bullseye every day and hit it, hit it, hit it, hit it. That is how you can do it. One trade a day is all you need really. And there are some days we do more, but really I try to focus on one. And again, I do prefer to short. So I'm trying to hit a bullseye every day. It's, it's, it's, I mean, it's a lot of work for me in the morning, but I really enjoy what I do. I love analyzing charts. And today, I love a day like today where I basically called the market lower and that was an impossible call. And that was right. So if you want to learn my system, it's called the golden gap course. And the first class of the year is February 26 and 27th, 9 a.m. to 5 p.m. Eastern time. You must email me to sign up. It is the first class of 2022, first class total, first golden gap to class two, classes online, like I said, and the Valentine's Day special is going on through February 18th. It is the golden gap course you will see the trading room for you to the end of the year. If you sign up, normal price of the class, and this is a good deal because the room is normally 399 a year and it's or 500 a month. So this is a nice bonus. If you want to sign up for the gap options newsletter, just want to do options. That's not the trading room. The trading room is day trades. The options newsletter is separate. These are emailed to you. I have two choices. 12 months subscription for 6999 or six months subscription for 4999. That's up to you.  And then I have the combo, which is going to be the Tuesday after the Saturday Sunday class. It is 11 a.m to 3 p.m. You save if you sign up for both of these together. It's the trends course with the golden gap. Trends course is long-term trends. This is a beneficial class if you're doing options. And it also really helps your day trading too. So if you're interested, email me at melissa at thestockswush.com. Have a wonderful happy Valentine's Day everyone. Have a fabulous weekend. Enjoy the Super Bowl. And if you're interested, email me if you want to sign up.