Hello, pretty people, welcome back to the channel. Amazon is one of the most influential companies of this time and this book, Working Backwards, describes how they work. While I'm not a fan of Amazon as a company and the impact they have had on society, this book has been one of the best books I've read this year. A lot of the learnings we could implement straight away at voice. This video will give you an overview of the seven main things you can learn from this book. The first one is the value of principles. The second one is using a solid hiring process to build a better team. The third one is creating a rigid system for a very flexible strategy. The fourth is the value of working single-threaded.  The sixth one is working backwards where you focus on creating customer value and by that create business value. And the seventh one is using the right input metrics to measure success. Let's start with establishing principles. Principles are the behavior you expect from your peers and yourself when working together in the organization. For me, the culture of an organization is the behavior that is their default. By putting that to paper, your principles are created. Where the book talks about leadership principles, I think everybody should be a leader in the work that they do in an organization. I see some organizations like Philips, for example, that uses a few principles that are relevant for everybody in the organization and that add to that list for the management of the organization. Putting your principles to paper is very helpful because it sets expectations and gives you the benchmark you hold yourself and other people's behaviors to. It's not only useful for existing colleagues but it's especially helpful for people that enter the hiring process. Hiring is a really big part of the book. Amazon adds a person that really lives the principles to the hiring process. The task of this role is to raise the bar for all people entering the organization. It also helps teams not to be blind in the process because they really need reinforcements. What you can learn from this book is, one, to standardize the process. Two, ask questions in the process that test actual behavior. Three, to look for people that really match our principles. Four, to add a bar raiser to the process. And five, to make sure that each person in the process writes a written evaluation of the candidate to remove bias. I would personally add an introduction day as an excellent tool for the hiring process. It's a day where the candidate joins our team for one day and we see if the candidate really fits the organization and the people and vice versa. The third thing you can learn from the book is to have a very rigid system for a very flexible strategy. Working backwards covers the way Amazon sets its strategy and its goals. We've developed our own process for this called the Outlook process which has a lot of similar components to it. We needed our own system, both because we're self-managed and because we wanted to have a distributed system to set strategy and goals. We've made a separate video series about this which you can find up here. Next up, we move to working single threaded. Part of Amazon's system is to use single threaded leaders and teams. Every project at Amazon has a single leader attached to it which only focuses on making that project a success. Team members also have a singular focus on this project. This is something we copied as an organization and works really, really well. Where Amazon wants teams that can be fed with two large pizzas, we often try to make teams even smaller where as small as possible is our goal. Amazon also tries to remove dependencies of one team to another team, both in projects and in processes. Something I find really beneficial for our organization as well, especially when you talk about the execution speeds of your organization. Lesson number five is to communicate with narratives and with six pagers. A lot of organizations are managed by PowerPoint but Amazon is nuts. They prefer six page documentation that is based on actual data and supported by a strong narrative or story. This also means they plan 15 minutes in the meeting to read these stories and to be able to go in depth into the content. I am a huge fan of written information. If a presentation is given by a person, a lot of it's in their heads is actually not in the PowerPoint. This information will go lost to the rest of the organization.  Amazon prefers six pages because it's focused you to stick to the basics and the essence of the information you actually want to translate. I personally really like linked information which is why our organization heavily relies on a tool like Notion and a video on that is somewhere up here. A tool like Notion also facilitates using the wisdom of the crowd. Something I felt is really unpresented in the Amazon process. We've seen that clear communication and transparent information gives you relevant feedback from all parts of the organization. What you read in the book is that the best results are based on short written information built on real data that have a good narrative story that explains both the information and the data. I would add that these documents need to be living documents. They should live in a transparent environment where everybody in the organization can contribute to them. Where written communication really comes into play is in the essence of the book and that's lesson number six, working backwards. When Amazon develops a new product or service they start with the actual value this brings to the potential customer. They put this to paper by writing an actual press release before they start developing the feature or the service. Next up, they write the FAQ for the press and for the potential customers which is followed by an FAQ for the internal organization. All this is done before they start building or creating anything. We copied this and we now have developers writing press releases for features they would like to develop which is fantastic. It helps them focus on customer value from the get go. We see that working backwards really helps us create the right features way faster. This brings us to learning number seven, input metrics that you can influence. A lot of organizations register output metrics like revenues, stock price and EBIT for example. Amazon however focuses on input metrics that their teams can influence. Even after working with metrics for more than 10 years I've seen that it's really hard to find the right input metrics. What helps is to truly understand the complete customer journey. So let's look at an example and let's say I want to write a blog article. The number of articles I write might be an input metric but this metric is rather empty if I don't know what the result of my input is. So I would want to know website visits of these articles as well but website visit says little about the quality of the article it says more about the quality of the promotion I did. And even if I did the promotion well the article is well written and it's well received it might not lead to new customers. Now you see that every step of the entire customer journey is relevant for me writing blog articles. If I wanted one metric it would be the percentage of leads coming from articles written for our target audience. The concept of input metrics really sharpens the thinking. The true value however lies in the focus on the customer experience. It's in understanding that process and putting measure points in that journey where you can really learn as an organization. So working backwards will learn you the value of principles to create a very solid hiring process including a bar raiser to build a better team to create a very rigid system for flexible strategies. What the value is of working in single threaded teams and with single threaded leaders the power of written communication how working backwards focuses your business on creating customer value and that you should be measuring your success by using the right input metrics. Thank you Voice for helping me make these videos. I hope you learned a lot from the book and I hope my learnings and links will give you new insights which you can apply in your business. And finally, I would love to see you in the next one. Cheers.


I welcome to the 11th meeting in 2024 of the Delegated Powers and Law Reform Committee. I thank to remind everyone to please switch off or put to silent, your mobile phones and other electronic devices. The first item of business is a declaration of interests. In accordance with section 3 of the Court of Conduct, I invite Tim Eagle MSP to declare any interests relevant to the remit of the committee. Thank you convener and apologies, I can't be with you today. Lamming is keeping me at home.  Thank you very much for that time. I'd like to welcome you to the committee and look forward to working with you. Before we do move on to the next item on the agenda, I'd like to take this opportunity on behalf of the committee to thank Jeremy Balfour MSP for his hard-working contribution to the committee. Jeremy recognised the importance of the work of the committee and he worked diligently as a committee member. It's fair to say that Jeremy made a hugely valuable contribution to the committee in his time here. We all like to wish Jeremy well in the future. The first item of business is to take items 5, 6 and 7 in private. Is the committee content to take items in private? Yes. Under agenda item number 3, we are considering instruments that are subject to the negative procedure. No points have been raised on SSIs 2024, 80 and 81. Is the committee content with those instruments? Yes. Under agenda item number 4, we are considering instruments that are not subject to any parameter procedure. No points have been raised on SSIs 2024, 79 and 82. I believe that Oliver Mundell would like to make a contribution. I want to place on the record that I remain strongly opposed to the Hague Crime Bill and the Subsequent Act. The legislation undermines free speech and I don't believe that it should be subject to commencement when serious concerns remain about how it will be policed in practice. I put your comments on the record, Mr Mundell. With that, is the committee content with those instruments? Yes. Thank you. With that, I move the committee into private.


Welcome to session about the entity browser module, which is one of the modules that we created as part of the media initiative, but it's also usable outside of media scope. My name is Yanis. You can notice me on the internet slash RSM. I'm working for a company called MD Systems, which is based in Switzerland. I've been an active member of the Drupal community since 2009. I've been using it even a little bit longer than that, but got actively involved in the community when I went to my first DrupalCon. And if I would do it again, I would definitely go involved earlier. So if you're not actively involved in the community, I strongly suggest you to do that ASAP. I'm one of the leads of the media initiative. It's the initiative that has been working on many modules, mostly contra modules that are trying to solve all sorts of problems related to media problem space. By media, we mostly refer to media assets management from the content creator perspective and storage, et cetera. Recently, we also started to discuss which of those pieces could potentially end up in core, which would make them even more visible and probably even better. I used to work for a company called Examiner.com. Anyone heard about this company? Yeah, some people, but not many. Examiner was one of the first websites on Drupal7. It was a huge media website. We had millions of articles and tens of thousands of active so-called examiners, which were people that wrote for this media site. And for some time, it used to be the biggest Drupal website on the internet in terms of traffic and in terms of amounts of content. Because it was media site, we had to solve all these problems there, which is why I became interested so much in this area. Unfortunately, website is not live anymore. It was shut down and company was shut down this July, but it is like really important part of Drupal's history. So a company where I work now, MD Systems, is one of the biggest contributors to Drupal in general. We are exchanging with Acquia on the first place and on the second place. But if you consider the size of the company, then we are free to say that we're the biggest contributor. Because there are like 700 and we are 20. Our CTO, Berdir, Sasha Grossenbacher, is one of the top five contributors to D8. We started shipping D8 projects more than a year and a half ago, pretty early. Most people were still afraid of D8 at that time. And we also have a lot of media clients. So we are kind of D8 expert, D8 media expert. We are also involved in a club of media companies that work on a D8 media distribution together, which is called MP8. And this distribution is already running a bunch of media sites, mostly in Switzerland. We try to dedicate 20% of each project back to the community. And yeah, if you need Drupal-aid expertise, we will be happy to help you. So what are we talking about today? First I will explain what the entity browser is, what is its purpose. Then I will talk about the architecture, how it's built up, because it's a pretty powerful tool, but it can also be a little bit complex. And understanding architecture and ideas behind it is very important to be able to work with it efficiently. Then we will see a few use cases where you can use it. These use cases will be in the media world and also outside of it. We will also check how it integrates with inline entity form module, which is a module that was created for Drupal commerce in D7. But similar to entity browser, it was created in a general way, so you can use it in many other areas too. And they nicely interact and nicely complement each other, so to say. And I will talk about where we are at the moment and what's the roadmap, what are our current priorities with the module, and if it's ready to be used today or not. So have you ever wanted to upload more than one image at once? Please raise your hand if you needed this feature, obviously. So entity browser allows you to do that. Here we have a standard node and with a file field. And when we open the entity browser, this is now the entity browser, we can drag and drop images to this upload area and select them and they're there. Yeah, this library that is used for uploading, it's called drop zone JS. It's a standard JS library and we have Drupal module for that. You can use it on your own forms, but entity browser then does another step for you and creates plugin that knows how to work with entity browser. Have you ever wanted to select images from media library? Please raise your hand if you wanted to do that. Yeah, this is one of the most requested features that we get in relation to media in Drupal. And here's a similar example, a node with a file field, image field, and I should make this screen cast shorter. And now when we open, we can go to this second tab, which is a media library and we pick few images and they're being selected. In this case, only one, but it also works with more of them. As you will see now, maybe you would want to combine both. Like you are building an article and you want to add a slide to your images to it and you want to select few images from the library and then upload few more and then maybe reorder this selection and then confirm that this is it. And that's actually possible. In this screenshot, we first go to the library, select few images there. And then when we go back to upload page, we can see that this selection is now displayed here. And we can decide to upload more images. Or just one in this case, I think. And, oh no, it's two. And now when we uploaded them, these two images appear below and now we can reorder this selection. We could also remove few items if we wanted to and when we're fine with this and we confirm the selection, everything is sent back to the field and then you do whatever you want to do with that. Then, let's forget about media for a second. A lot of times, especially on media websites, you have this use case where you want to reference related content for your article that might show up in a sidebar block or something like that. And of course, usually we use entity reference for that. And default entity reference field is just this autocomplete, have you ever seen it? Like this autocomplete where you start typing the title of your note and then you get like suggestions and you pick from them. And this works a lot of times, but sometimes we need a little bit more. And we can use entity browser for that. In this example, we have another note that has an entity reference field that references notes. And when we open the entity browser, we are presented with a view and we can use this view to search for this related content and select it and then it's displayed here. It's displayed a little bit differently because it's not an image, it's a note, but also the display configuration can be tweaked. Like in this case, we're only displaying titles, but you could create like a view mode, which you could call thumbnail or something like that and configure a nice thumbnail for your article. And this really depends what the structure of your article is, but you can do that. That's the most important part. And another case, this is not so much useful for related articles, but it can be used for in other areas. So for example, if you want to reference something like another node and you realize that this node that you want to reference doesn't exist yet, usually you don't want to go to some other page to create that node and come back and then find it. In a lot of cases, it's easier if your content editor stays in the same flow. And entity browser allows you to do that. One of the so-called widgets for entity browser that we have is called entity form. And instead of displaying a view, it will display you an entity form. And inside entity browser, now you can create new entity, node in this case. And when you save it, it's created and then reference to this node that you just created is passed to this field and then you automatically reference it. And as you can see, now it's referenced here and the content of the body field is what you expect it to be. So a lot of use cases are covered. All these are real life examples. It's nothing that's like we tweaked. If you download entity browser and in case of those media examples drops on JS, you're able to build that. So what is entity browser? It's basically a very general browsing, selecting and creating tool. It allows you to browse entities that you have to be able to select them and also create them. But in our problem space, we think about creating entity just of another special case of browsing them because this way it's easier to abstract it and easier to work with these concepts. And it can work with fields, but it's not limited just to fields. You can use it for with the wig embedding, for example, or you can use it in your custom forms. If you have a custom form where you want to reference or get a list of some entities, you can use the form element. And the only thing that you need to do is to read values of those entities from your form state. Everything else is handled by the entity browser. Any questions so far? And if you will have any questions, hopefully you will. There is a microphone there in the middle of the room and for the sake of the session recordings, I would ask you to go there to ask them. So let's talk about the architecture a bit. It's very flexible, which makes it a bit hard to understand sometimes. But it uses standard tools that come with Drupal Core. It mostly relies on plug-in system, which is something that was introduced in Drupal 8. So if you know patterns that are already in core, you shouldn't have problems understanding patterns in entity browser. When we were designing the architecture of the entity browser, we were having this mock in mind. So what do we have here? We have a listing of entities here in the middle part, which are entities that we will be selecting from. And then we said probably in general, one list is not enough. Maybe you want to have two different lists. Example for that would be global media library where all the files are or just users media library where files that this user that is currently creating content uploaded. And then maybe another list could be something where you upload and then list is created for you. So that's why we have these tabs at the top. These tabs are allowing us to switch between these pages where we interact with our entities. And then we have also this bottom part, the gray part, where the intermediate selection is displayed. This is what we've seen earlier when we select a few files from the library and then upload a few more. And of course, in a lot of cases, you don't need this bottom part. And you might also not need this top part with tabs because you are fine just with one view that displays something and allows you to select stuff. And cases where there is nothing displayed at the top and at the bottom are just special cases of the same concept for us. So if this is called like thumbnail selection display, thing where we don't display anything and don't allow you to do multi-steps workflows, it's called no display. Because it doesn't display anything. It doesn't allow you to interact with things that you already selected but it just passes everything on to the code that's called entity browser. And it's the same goes with the top part. If this is tabs plugin, for example, if we don't have anything, we have a plugin that displays only the first listing that we have. So we wanted to allow the simple use cases where you don't need to complicate too much but also have architecture support you to go crazy. And these parts that I just described are basically plugin types in entity browser. This middle part, which is the meat of entity browser where entities are displayed or uploaded or like whatever is called the widget. And it really can be a lot of things. It can be a view, which we've seen already. It can be a file uploader, like it can use just a plain HTML5 upload element if you want or you can use the rubzone.js which gives you nicer user experience and thumbnails and progress bars and stuff like that. Or it could also be a remote resource browser. You could have a widget that connects to YouTube's API, allows you to interact with it and then like search and get some results and when you pick videos that you want to reference from that list, it creates entities behind the scenes for you and passes them on. We are currently working on the integration widget for one of the commercial DEM providers. DEM are digital asset management systems. And this is exactly what we're doing. Like we have a list of images that they have in their system. We interact with their system through APIs, display what could be used on the side to the user then when user selects images, images could be downloaded to your site and used locally or you just store the reference and host images through the DEM system. Or it can be an entity format, allows you to create an entity inside of this context. All the items that have stars are already implemented. And you've seen most of them except of HTML5 file uploader you've seen the rest. And many more, like modules, different modules in contrib are already building their own widgets and like integrating with whatever they need to do. If you want to build your own widget, you basically implement a class which is a plugin and you need to implement three functions. One that displays the rendered output of the widget, one that validates the selection and one that handles submit. And it needs to implement this interface. And then propagation of the selection when you call submit works through symphony events. But if you don't have any special requirements you don't need to deal with that because on the base class we have a helper function that you can call. You just pass a list of entities that were selected to it and then everything else is handed behind the scenes for you. Any questions about widgets? Yes, please and please step up to the microphone. This is maybe a silly question. Just when you have a view and you're paging through. Yes. Do your selections from the previous page somehow persist? No. Or they're lost? Not yet. And as far as I know also in core, like if you have content listing on admin content I think that there is not persisted either if you want to use bulk operations. It's a bit tricky problem because you need to store the state. Obviously it should be possible to do, of course. And it's on our radar but it was never the highest priority. Okay and it's still not. It's still not. Okay. Because it's a thing that also plagues to use bulk operations in Drupal. It's a big request somehow. Yeah, I mean, yeah. It's definitely possible to do it, I think, but we didn't get to it yet. For more low level stuff that we needed to sort out. But you can join us on Friday. Okay, next plugin type is so-called widget selector. It's called widget selector because it allows you to select widgets. It allows you to select which widget you want to use. Makes sense, right? And in this architecture mockup thing, it's represented by tabs. But it can be many other things. It can be single widget as I mentioned earlier which handles the case where you don't need to select any widgets because you always use just one. It can be a dropdown, like instead of having tabs on the top, you have dropdown hidden somewhere on the side. And when you select new widget from the dropdown, page reloads and displays the widget that you want. It can be buttons, which is basically similar to tabs, but appearance is different. And it can be tabs. In reality, most of people use either tabs or single widget. The point was that by implementing these different options, we showed that this is possible. And if you have a very custom use case, you can do it. Like we had this nice feature request that said I have uploader in a library and I want like initially when you load your browser, I don't want to display anything, just two links, which say I want to upload, I want to select. And then when you click that, you are transferred to the widget that you wanted. But then also your selector is displayed as tabs on the top. From the user experience standpoint, it could be a nice improvement. There is an issue for that. There is like a back of the napkin mock, but nobody got it, got to it yet. But it's a nice idea and this concept of widget selector would allow you to do that. Yeah, and really there are not more widget selectors that I would know about. I suspect that in contrib, this will mostly be it. And then other crazy stuff will be custom projects and solving their really custom requirements. Again, if you need to implement your own widget selector plugin, you need to create a class, a plugin that implements this interface. And again, you have get form, validate and submit function, which basically handle how widget selector is displayed. You validate selection of the widget and you submit and trigger the change of the active widget. And there's also one function that is called initially, which is called set default widget. And this happens at the beginning when the entity browser is being loaded so that entity browser knows what to display for you initially. Any questions here? I need some water, cause I talk too much. So the third plugin type is called selection display. It's called like that cause it displays your current selection. Here it's displayed at the bottom, but you could move it around. Like you will see example later when it's initially hidden and then you can press a button and it's like rolls up. And yeah, it's the part that displays current entities and also decides when your selection is completed. Like in this case, it decides so when you press the use selected button. But if you are using the no display selection display, that sounded very weird, which essentially means that this bottom part is missing, it decides that selection is done every time when you select something, which basically supports this use case where you don't need multi-step workflow, but just like when you selected something and where you uploaded something, it assumes that you're fine with that. Then we have a view display which uses a view to provide this list of entities for you. With view display, there are two limitations. One is that we cannot do reordering with it. And the other one is that if you have the same entity selected twice, which generally works, nothing wrong with that, view will display it only once, which means that the actual selection might be different from what you see. And these are limitations with views, so we cannot overcome that. And then we had this rendered entity display, which is what you will see later. And it essentially looks like that. And these pieces, each individual item, is rendered entity and you decide which view mode you use for that. Again, plug in, class, implement this interface, get form, validate, submit. Get form defines how your selection display looks, validates your submits and submit decides when the selection is completed. Any questions about this plug-in type? I will assume that you understand everything, which is nice. And then the third, actually the fourth plug-in type is so-called display plug-in type, which basically defines how your entity browser is displayed. Currently, we have three implementations. One is iframe, one is model, and one is stand-alone page. Stand-alone page is not really used anywhere as far as I know. It was more like a proof of concept to show that this is possible to do. But iframe and model are used almost, it's either one or the other. And obviously, model is when you decide that you want to select entities, it will open a model for you in display entity browser inside it. And iframe will display it in line with the form where you are trying to do whatever you want to do. And in the demos before, you saw both examples already. With the files example, we used model. And with the related content example, we used the iframe. Maybe you remember that when we selected that, like select related content button, it didn't open the model, it opened like another frame inside of the main form. Again, we wanted to make it flexible so we don't make any assumptions for you. We implemented plugins that we think would work for 95% of people, but still if you have crazy requirements, you can use that to modify the behavior. Same story, plugin type, plugin class, interface. In this case, functions are a little bit different. Display entity browser is function that is called when you want to inject entity browser into a parent form. And this is now also abstracted, like if you usually don't call this function, it just everything happens internally. If you would be to implement your own display plugin, you need to implement it, but you will probably never call it. And function selection completed, which is also called internally when selection is done. And then entities are passed into this function and this function is responsible to informing, like upstream code about the selection. This usually happens through some kind of front-end interaction, but it could be anything. So where we can use entity, sorry, any questions about displays? Displays are maybe sometimes a little bit confusing, but for now you just have to remember that what you probably need is already there. And just remember if you have any special requirements in this area, you can probably do something about it. So where we can use it? We can use it with fields. We've seen that. This is entity reference field. It's a widget for entity reference. As I said, you can define how this looks. In this case, we are only displaying titles, but you can also render notes or actually any entity. You can reorder this, like you can drag them around. You can remove items by clicking the remove button. And we also have edit implemented, which basically opens a dialogue and displays an entity form for this entity. So it's, in some cases, you might need something like that. Then it can be used as a file or image field widget. We've seen this earlier already. Excuse me. And it can be used in entity embed. Entity embed is a module that allows you to embed any entity into WizzWik. And it integrates with entity browser, which means that you can use entity browser to select those entities. And then it allows you to define how this entity looks when embedded. It also allows you to add a caption to it to define alignment. And in this case, when we are embedding an image, it also allows you to set the alternate text and the title. And we've embedded this nice animal in our body field. This is done through entity embed module. It is another module that we created as part of the initiative, media initiative. Again, we knew that we need to solve this problem of WizzWik embedding, but we didn't want it to be media specific. And that's why we created, we implemented architected it in a way that allows you to embed any entity. You can embed a node, you can embed the taxonomy term, you can embed commerce product, like whatever entity that is able to render itself can be embedded. Or, yes? So the question was for the recording, what is stored in body fields if it's just a reference or a rendered entity itself? It's just a reference. We have, it's still an HTML tag, but it's a special custom HTML tag called triple dash entity. And then it has data attributes on it, like the entity type, UID, and display configuration, like definition of how it should be rendered. And then when everything is displayed, we have a text filter that searches through your body fields and finds these tags and uses these data attributes to load the entity and render it based on the configuration that you saved.  And since it uses UIDs, it should, it works with like deploy module and things like that. And yesterday at core conversation, there was question about this, and I've never tried it, so I wasn't able to answer if it actually works. I just theoretically know that it should work, but then I had somebody in the audience that confirmed that they used it on their own project. So, I'm going to question in the back. Yeah, the question is, if it's possible to use entity browser with paragraphs, the answer is yes, it works. We just add a field, like an entity reference to paragraph and use widget for entity browser. There is only one catch. Sometimes if you have more than one paragraph field on a form and both or more of them are using the same entity browser, values can leak around. And this is one of the critical bugs that we need to solve to get to beta. This is one of the highest priorities right now. And some people, including myself, are working on this bug this week. So, it should be resolved soon. But if you have only one paragraph, it should work without, I mean, only one paragraph field, you can still have more paragraphs. It should work without any problems. Yes, as I mentioned, you can also use entity browser in your custom form. We provide the form element for you for those who are familiar with form API. This is like part of the form API structure and you basically say type entity browser. You define which entity browser you want to use and then you can also define cardinality, which will mean how many entities you expect to get from the entity browser or also it's possible to add more validators. So you can write custom validators that will be applied to your selection and if validation criteria is not met, entity browser will complain about it and won't accept the selection. But for 80% of use cases, this is what you need. Just define which entity browser you want to use. And then, when the selection is complete, the selected entities, reference to selected entities, appear in a hidden form element, which then when form is submitted, leaves its values in the form state values. Very easy. Any questions? The plan now is to do a demo, to show you how to configure entity browser a little bit because this is the part where a lot of people are lost sometimes. And the first example would be how to do the reference, the related content use case. Now I will have to switch my screens here. Okay, this won't be as easy as I wanted to, but we'll figure it out. Okay, let's try to zoom this out a bit. Okay, I have to look at that screen because it won't mirror it. So I have a Drupal site. It's a clean Drupal installation. The only thing that I did is pre-configure the content type so we don't have to do that because that should be clear I guess and generated some content so we don't have to do that either. And basically what we have here, can you see like is this visible to everyone? Size okay. We have this article content type, which has a title of course and a body field and it's probably not working. Switch from full screen and back. So body field and we have image field where we basically attach images to our article and we have related content entity reference field and also text, but we won't deal with that. It's here because I used the default article that comes with standard install. And as we can see, like we can search for related content with standard autocomplete field and we can use this standard uploader. Okay, we'll see if that, okay, whatever. Now we would like to use entity browser for this related content part. First thing that we need to do is to enable the module, which is called entity browser. I already downloaded it of course. If you search for Drupal entity browser, you should be able to find it. And now if we go to configuration page, we can see that we have entity browsers. We can see that there are no entity browsers yet. We can add one, but it says that this form depends on C tools module and you need to enable it to be able to do that. The reason for that is that C tools provides a wizard for multi-step forms, which was very useful in our case, but we didn't want C tools to be dependency for the entire module because you actually don't need it for entity browser to work. You only need it to do the administration and that's why we made it a sub-dependency. And now if we go back to entity browser page, we are presented with this form where we can create it. And now in order to be able to use ref, like to use a view for related content, we will obviously need a view first, which means that we should create one. It will display content. It can display any content type. Let's make it a table. So the titles of the nodes will be displayed in a tabular form. And let's add a filter on title. So we will be able to search and we need to expose it to be able to do that. And we will use contains operator. So if we enter a word into this field, if a title of a node will contain it, it should be displayed with the results. Now if we update the preview, we can see that we already have that. List of nodes with titles. And now two very important parts. First part is that we need the entity browser display for this to work correctly. It's like similar concept, you have block display and page display which will create a block view or a page view. We have the entity browser display. Like your view won't be capable of interacting with entity browser if you don't create it. And then when you've done that, you need to add a field which is called entity browser bug select form. There are two of them. This is a UX bug which we want to resolve. And but basically either of those should work. The problem why we didn't resolve that yet is like if we would simply remove it, we would break possibly break entity browsers for people that were using the one that we removed. So we need to provide some kind of update path which is obviously a bit harder than just removing it. And now we basically see those check boxes here. And I usually prefer to have checkbox at the beginning. I can just reorder that. So now we have checkboxes on the left side. And we save that and the view is created. And now we can go back to not this but configuration. We can go back to entity browsers configuration page. No problem. And now we can create our entity browser. We need to give it a name. I will name it related content. And we need to choose which plugins for each type of plugin that I explained earlier we want to use. I will decide that I want it to be displayed as a model. And since I will be only presenting the user with the view, I don't need any selector for widgets. I will just have one widget which will be my view. So I will use single widget, widget selector plugin. And I don't want my selection to be displayed. I want it to be immediately passed back to the field. So I will choose no selection display plugin in this case. And then I go to the next step and each plugin has its own configuration. Here we are configuring the display plugin which is the model in our case. And we can define how big it is. Or if we don't define any size it will be responsive and it will use the whole space that it can. And the link that opens the model has a label there and we can define how this label looks. And instead of select entities we will say select related content because it makes more sense for our use case. And then we're in the next step. This plugin has no configuration. The other one also. This is also like a UX problem because a lot of times people just need to go through these steps. You can also, no you can't. Sorry, there is an issue in the issue queue to detect where there is no configuration and like jump to the first step that has something that would be a nice improvement but for now you have to press next twice. And we're at the last step where we select which widgets will be used. And currently we have two widgets available. One is a view widget and the other one is very simple upload. In our case we only need a view. It's being added to the table. We can give it a name. In this case the name is not that important but if we would have tabs at the top then this name is used in the tab. So you can define how tab names the widget that is underneath. Then we can also define how the button, like below the view you have this button that says select and you can also define the label for that button. We will call it select related content and we need to select a view that we want to use. We have only one view in the system that knows how to work with entity browser. It's the one that we created and the reason why it knows how to work with entity browser is because we created that entity browser display earlier when we configured our view. And we save it and we just created our first entity browser. One important thing when you will be doing this, also there are links. Just found another buck I guess. Your entity browser it's not saved when you press next. Like if you change something and you press next it's not saved yet. You have to go to the last tab and click finish and this is when the configuration is saved. It's very important. Some people were like opening bug reports. Yeah, my configuration wasn't changed. Yes, it's also a UX problem for this configuration form and there is issue to add like finish button on every step which would be also very nice to have. And until that is done, just need to be aware of it. Okay, now we have our entity browser. We have 10 minutes left. And now we have to tell our content type to use it because it's still using that autocomplete field that I showed earlier. We do that by going to the content types configuration page and then finding our content type here in this list and going to manage form display configuration page. And here we can see the list of all fields and we can define how those fields are represented in the node form. And we can see that we have this related content field here and it currently uses autocomplete and we can change that to entity browser. And this is not enough. As you can see, it says here no entity browser selected which is a problem because then field won't know which entity browser to use. And we need to go to the configuration here and define which entity browser to use. It's only one that we have. And we could also define how entities when selected are rendered. We will be using just the title and we can decide to opt out like edit button, for example. Like earlier we've seen case where we had edit button, now it won't be displayed, so we won't be able to edit. And another confusing part sometimes, this was not saved yet. Even if the subform disappeared, you have to press this save and then it's actually saved. So not only entity browser has strange UX issues, also corridors. And now if we go back to article creation page, we see that this now looks differently. It says select related content. When we press that, we see the view in the entity browser and we can search for something. It's Loremape Sumi kind of stuff. We found two articles based on this search query and we select them. They are like passed on to here. We can reorder this. We can remove them by pressing to this button and you also see that edit button is now not here. It's because we disabled it earlier when we configured the form display. As you can see, I'm using same strings every time. And now when we save this, we can see that related content is here and it's currently configured to display a link. But this is another part which has nothing to do with entity browser. Any questions? Yes, yes, please go to the microphone. Yeah, so for our content developers that are used to working with featured images for blogs and whatnot, they're blog entries to be related articles. Is there any way those featured images could be used as thumbnails for the related nodes? Yeah, in both places. It could be used here. Like to put them here, you would basically want to create a view mode which displays just that image that represents the article and then configure form display to use this view mode instead of the title. And here is up to you how to configure the view. The only requirement that we have here is that you place these checkboxes in the view and everything else is completely up to you. And you can style it, you can display it as a table or as a grid or whatever you want. And we've done some client work where we used paragraphs to solve the same problem. Can you see a reason for using this instead of paragraphs? Is this more performant or is it just different ways of doing the same thing? It's a different way of doing the same thing. You are talking about like related content, specific use case or- Yeah, then we just configure paragraph to- Yeah, it's up to you how you want to model your content. Like this is not, as I answered earlier, entity browser and paragraphs can be used together. You might have reference fields in your paragraphs and you might want to use it inside. So that perfectly works for you. So yeah, it's like your decision how you want to structure your content. And we also use paragraphs a lot. So it's an architectural decision. We also use both a lot. For images, do you have a successful crop solution? Yes, it's not a scope of this session, but basically there are two modules right now in Drupal 8. One is called focal point. It was already there in seven. And it basically displays a cross on top of the image and you just select the area of the image that has the most information for you and then cropping will try to keep that area intact. This is one. And then the other one is image widget crop which uses like the standard rectangle approach where you decide which area you want to use. And it can have different types. So you can select one area for one image style, the other area for the other image style. And the nice thing about these both solutions is that they both use the same storage component which is crop API, which is something new in Drupal 8. And the reason to do that is if you start with focal point and you're not fine with it anymore, you can switch to image widget crop and some information will be preserved. Obviously, there is difference between the two because one only saves the location and the other saves location and the size, but you could solve that. You could apply default size or something like that. And crop API uses crop entities which means that you could make them fieldable and add more data to them if you want. And our desire is that every cropping solution out there uses this for the storage because then it's easily swappable. It integrates with field widgets. So when you have image fields, it adds, that's a UI to the image field. Not in scope of the entity browser, not yet, but you could write a widget that does that for you. Allows you to do that. We're unfortunately out of time. I wanted to show you another example with the files example that we've seen earlier with drop zone and that stuff. And actually, there's a module that pre-configures everything for you. It's called file entity browser and it integrates with drop zone and it has this masonry-driven grid of images. And this is actually the module that I used for screencasts earlier. And if you download this module, it's called file entity browser or file underscore browser here in the URL. If you download this module and you enable example module that is part of it, then you will get everything that you've seen on the screencast. But conceptually is pretty much the same. The drop zone is its own widget. You select it from that drop down in the configuration form and that masonry-grid is a view that has some custom styling on it. So nothing super crazy. So road map, we are very close to beta. We just need to fix few critical bugs like the one that I mentioned earlier about paragraphs and we should tag beta. We're not planning to break BC anymore. So if you start using it, we won't be breaking your configuration. The reason that we didn't tag beta is that these bugs that we have are quite nasty and just didn't want to commit. But if we will break something, we will do everything to provide BC layer. Definitely for configuration, internal API might change if needed, but probably not. And internal APIs shouldn't affect you. We need to improve user experience a bit. I've just seen, especially in the configuration part, and we need to add more tests, but you can use it today. And lightning distribution, thunder distribution, which is an enterprise media distribution made by Berda. And MP8, which is a similar distribution built by us for our Swiss clients. And many more sites are already using it. And we've seen very fast adoption. Like every week when new stats come out, we have like exponential growth every time. We need help if you want to get involved. There are issue queues. You can come there and report bugs, have open support requests, help us work on it. We also have a copy of the entire code base on the GitHub. If you prefer pull requests, you can open pull requests. All the code is synced between GitHub and Drupal.org. So wherever you clone, you always get the latest code. The only thing that we ask you, if you prefer to work with pull requests, and if you open a pull request, please go into the issue queue, create an issue there, and link to pull request. Because issue queues are still the main place where all the communication is going on. We have meetings, general media initiative meetings every Wednesday at 2 UTC on Drupal-media channel. Come on spring or Friday, we will be there. And thank you and please evaluate the session. And I apologize for being a little bit too long. Unfortunately, we don't have time for any more questions, but if you have any, we can meet outside and I would be happy to answer them. Thank you.


The African Parliamentary Advocacy and Reform Group have advised the Nigerians to take parliamentary elections seriously and ensure credible lawmakers have voted into the Senate and the House of Representatives. The group observed that for some time, parliamentary elections have always been conducted in the shadow of the executive-during elections. The group team leader Chibuzo Okerekei observed that parliamentary elections, which are supposedly the symbol of democracy, is often times neglected during the build-up to the general elections and this year is no exception. Okerekei says this perceived attitude by Nigerians and the electoral empire must stop and the pride of place of the parliament must be granted for democracy to thrive in the country. Media platforms are saturated with the presidential campaign rallies and media engagements with presidential candidates and their policy documents in all the political affairs programs of major media organizations in Nigeria. Little or no attention has been channelled towards the electoral campaigns of the National Assembly elections. Members of the team also drew more light on the need for Nigerians to see the parliamentary elections as the most important in our democracy, while urging them to vote only lawmakers with proven track records. We're calling on the media, on behalf of my colleague and also our co-chair, we're calling on the citizens, civil society organizations to also do a bit more of work in amplifying the need for people to cast their votes for the National Assembly choice members. It's about a low voter turnout in elections. The National Assembly elections has been the worst in that category. The report has shown where we have senators at the National Assembly sitting at the National Assembly with probably less than 3% of the eligible voters in their constituents. That's very, very appalling. In all the group wants, Ionic, the media and Nigerians in general, so starts paying attention to the legislature as doing so will further enrich the nation's democratic system going forward.


You know, in the end, we're all narcissists, but there is a difference between varying forms of narcissism. Hey there, NJRoot22.com in my zero degree basement recording studio. Here I have a better mic now, and hopefully I don't have any more problems with my mic cutting out. But anyway, we recently did a video about digital narcissism or something like that, about how the new technology era we're in and how technology specifically, and more specifically than that, the smartphone and social media and even video games are all meant to psychologically hook you and profit others. I would think that most people who use such technology don't really know the mechanisms behind this whole racket, this brain racket, but even those that do know, oh yeah, they're just addicting us. They don't really care. They enjoy the addiction. Sort of like a cipher, whatever, in the matrix when he wanted the frickin' steak to be in the matrix and be powerful. I mean, that was a very good analogy to what I'm talking about here. But I've been thinking about this, and I realized that we're all narcissistic. I'm freezing here. It's like zero degrees where I'm filming this, and I'm only wearing sweatpants and a thin jacket. But anyway, all human beings are narcissistic to a degree, or you could even call it self-absorbed. For instance, we eat to keep ourselves alive, and we have a job to earn money to buy us things, or to have a house, for instance, to live in. Even people who are big on charities, they do it for their own, oh, good pat on the back. Hey, good job with that. Thanks for helping the homeless. It feeds their own ego. Even things you do in your spare time are for your pleasure. Oh, I enjoy watching sports, or I enjoy watching movies. I enjoy. It's all about me, me, me. So there's the basic simple survival, which I wouldn't necessarily call narcissistic. It's just survival. And then there's people who are borderline psychopaths and sociopaths and hardcore narcissists. Me, me, me. They'd look at me. I'm going to do it for me. I'll stab someone in the back for me, me, me. At the same time, you can also justify all this and say, everybody dies. Why don't we just do whatever we feel like living for our short time on earth? There is a line, I think, between people who do things for their own survival and how technology accelerates and amplifies the whole narcissistic realm of society. I think it's gotten, and I've jabbed the apps and the social media things and the selfies were never this big 30 years ago. People weren't just taking pictures of themselves all the time. It seems like everybody's alone and they're just taking pictures of themselves out of nice background or horizon or skyline or sunset. I really think this whole narcissistic acceleration has happened in a very short time. And I think the parameters have changed a lot too. I mean, anybody can become recognized now. You can have an unattractive person if they lift their shirt up and they're popular on some sort of dating app or hardcore pornographic thing. Everybody can become, I call it a mini-celebrity. I'm a mini-celebrity. I get likes and everybody's competing with each other for likes and they get these dopamine hits and you can find an audience for anything.  So technology has expanded our ability to become mini-celebrities. It used to be your group of friends in your neighborhood. Now it's anywhere. For any subject, doesn't have to be just a weird kid because even the weird kid now has an audience somewhere. Except for us, you know, because we speak the truth. It seems like that's the least popular thing on planet Earth now. It's unreal. But what happens is once these people get their mini-celebrity dome, celebrity dumb, celebrity whatever, they then feel obligated to keep it going because they don't want to lose that status. And no one wants to lose their status as the king of something or a popular person or people are talking about them. And I don't know. So they end up, it shapes them and their future.  That's why everybody takes pictures of their food when they go out to eat somewhere so they can tell someone they went to this new place or new restaurant. It's like the technology has really kind of ruined it. Whereas you would just wait till you saw your friend the next time. You wouldn't call all your friends when you went to a new restaurant. You were one of the first people. I went to this place. They had a great sushi. I went to this new place. The technology has made it profoundly easy. You just send out one message. It's like a lazy. And everybody's like, oh, you went there. How was it?  Oh, I'm going to jump over this creek in my BMX bike.  I'm going to hang off this building. And then they end up falling and dying. The bottom line is like tech has artificially enhanced all this narcissism and made people bigger narcissists than they probably possibly could have been in the past.  It's people who make these platforms and these social media apps and so on. They're the ones getting rich off you taking advantage of your psychological weakness for not understanding what's going on here. It's like this weird Bermuda triangle. It's happening to everybody. I wish I could explain it better. But I think perhaps maybe this is something that we have to go through to learn more about the human mind and everything else.  If my speech has been jittery or whatever, I have such a small window to film these things. I have to take advantage of the moment. Please hit the like and subscribe if you have any suggestions or anything I can do better here. Let me know and I'll see you next video.


Hi, everyone, Joe for Jaspy's casewrakes.com. Happy Wednesday, happy hump day, happy National Treasures Baseball New Release Day. Here is pick your team three coming at you. Four boxes, pick your team three. A lot of great stuff here. Everyone's familiar with the quality that we can find in NT Baseball. Big thanks to everybody here on Wednesday the 11th for getting in on it. We got Alan with triple last spot mojo we got the last three teams. We avoided creating a filler, which is always nice. Just do this all straight up. And there's the full case right there, NT Baseball. We've got plenty in the store. So, hey, get in on it, keep getting your spots. Adjust my camera angle here a little bit. That'll do for now. Adam Cuperman, Adam is saying Jason set the bar high. Yeah, thanks to Jason for coming in a little bit earlier on New Release Day to get things started. He set the bar high. Three one of ones? Bar is set high. So the only Soto, it's a treasure jersey number. Only 20th jersey number in the release, all right. So, bar being set high, ladies and gentlemen. Let's see what we can do. There's another PYT in the store right now. And we're planning on putting that into a filler after this break. So if you wanna avoid that, be sure to, there's this blank car, the blank side to hide the hits, but be sure to get your team before it ends up in a filler. What else? Also, if you wanna try a different version of this, we have a full case random number block break. So if you wanna do a full case number style, we can definitely do that as well. All right, good luck everybody. There's Donelson-Lomet. 14 out of 49 for the Rockies.  My spot mojo, 70% of the time, hits 100% of the time.  Two braves plates in the last case. The bar is set high. And a Spencer starter up here. Here's Ted Williams, 38 out of 49. Nice. That'll be for Crystal. Pick up the Red Sox. Straight up. Game worn material, always cool to see. Especially with the old school guys. We got 40 out of 99. Straight up Texas, AJ Alexi. That'll be for Tanner and the Rangers. Is he straight up Texas? I guess he is. And we've got Cody Ponce, seven out of 10 legacy signatures. Nice little shadow box autographed look there for the Pirates. That's gonna be for Matt and the Pirates. We're gonna, Otani would be nice. We got CTT and the Twitch stream. I'd like to see that as well. Here's Bryson Stott. Nice RPA, 23 out of 49. Part of the Phillies lettering there. That's a great patch. That's gonna be for Josh and the Phillies. Another nice patch. Here's Josiah Gray, 89 out of 99. Rookie patch and autograph for Adam and the Nationals. Former Dodger prospect. Pretty highly touted prospect too. We got Tony Oliva, 22 out of 25. Hall of Fame signatures. Twins. It's gonna be for Josh Proust. And a Minnesota. And the book, Bookit. Albert Pujols, Legendary Materials, 15 out of 20. Piece of his Game-Worn Jersey. All right, box one in the books. The book that Pujols book goes to Ed and the Cardinals. All right, next box. Ooh. Fat box. Look at that. A giant book.  We do have a book on the bottom, but the rest is just thick hits. Plate of the Whistle, Kenny. This is just box one. 25 out of 99, Tyler Stevenson. Mark. Red legs. And he got Stars and Stripes, Danesby Swanson. 23 out of 25. I like that design right there. Sort of a kaleidoscope-y kind of design.  Going to, still Braves edition, going to Adam. Six out of 25, Cal Ribken. Yeah, Reds. Did I say something else? Tyler Stevenson, Reds. Mark. This is going to be for Nick. It's the Cal Ribken relic. Next up we got, we got Tyler McGill. Nice. Nine out of 99. Let's go Mets. That's going to be for Ed, the Metropolitan's. It's going to be a formidable team next year. What is upcoming here? Nice, McGill Vargas. 22 out of 99, Jersey and Autograph. Dodgers plan to play the kids a little more this year. And he's going to be, he's going to be part of that, that youth movement. Kind of a high energy guy, great personality, fun guy. That's going to, hopefully he does well. Ryan with the Dodgers. And we've got Andres Muñoz. It's kind of cool, the Jersey in the background there. 43 out of 99 for the M's. That will be for Diego, the Mariners. Got another Mariners, Cal Raleigh. 80 out of 99. Nice RPA for Diego and the Mariners. Cal Raleigh had a nice, nice here last year. My good, good, thanks to baseball catcher I think. Get some home runs. Got a thick hit here, Josh Young. 20 out of 25, the future. The way of the future. The way of the future. I'm going to fit into a 180 top loader. It might have to be, I think it's just slightly larger than a 180 top loader. This is going to have to go into a slider box. And we'll put some extra blank cards that our shipping team will take care of that. But still, nice looking card. Tanner and the Texas Rangers. You got Taylor Walz, 56 out of 99. Colossal Raleigh and Autograph. It's for Tampa Bay. It's going to go to Rob and the Rays. And the book is, oh, legendary material stature. Duel's Statline. Wow. Eddie Matthews. There's the Duel Relic. There's the Cut Auto there. Commemorating the 512 home runs. And that's Milwaukee Braves. Eddie Matthews, right? Yeah. He's a brave. And that's for Adam. The Braves just keep on rolling, huh? It's a nice one. Adam out of 5s and under. All aboard, the big hit express. Game-worn material as well. Pretty nice. All right. Halfway through this case. We've got more in the store, ladies and gentlemen. JaspysCaseRakes.com. Remember, the next pick your team, I'm planning on popping into a filler. So get your teams before they're gone. There's also a full case random number block version, if you want to try it that way as well. Just a little different style. All of that. JaspysCaseRakes.com, brand new release. Make it happen. All right. What else do we have here? Ooh. Laundry tag or something like that? 4 out of 8, Taylor Ward. Stars and stripes. Nice patch in there for the Halos. And that's going to be Kenny. Big patch. Chainbuzz. Rookie patch, 5 out of 10. That's for Rob and the Rays. Nice lettering there. Got field gear, Fernando De Tis Jr. 60 out of 99.  Padres also making big moves in the offseason.  Tyler Stevenson, 11 out of 99. Jersey and autograph for the red legs. Mark with the reds. And we have David Price, 23 out of 26 legacy signatures for the Dodgers. Ryan. Oh, wow. Padres added Nelson Cruz today, one year, one million. That's it. That's not bad. Put Nelson Cruz. Don't mind him coming off the bench at $1 million for a year. 35 out of 49. Ryan Jeffers. Twins. Josh Proust. Jersey and autograph. Got Drew Ellis. Nice patch. 49 out of 49. RPA for Adam and the Diamondbacks. Diamondbacks have a good crop of youngsters. Coming up the ranks. And you got for the Cardinals, Steve Carlton. Five out of 49. Cardinals addition going to Ed P. Legend. Got a book. We got dual signature materials, 43 out of 99. Gavin Sheets on the left side, Jake Berger on the right side. Dual relic, dual on-card autograph, 43 out of 99. Nice one for the White Sox. Ed Ehrens for that one. The Eds. The Edwards is going back to back. And the card on the bottom is 50 out of 99. Treasured stats. Ricky Henderson, the man of steel. It'll be for Emma and the A's. All right, final box coming up. Good luck, everybody. Another fat bottom box makes the rockin' world go around. What do we got here? Ooh, look at that. What's that? Look at that fat book right there. That's going to be a randomizer. It's going to be all for one team. One happy person, a lot of sad people, or just one very happy person. Stay tuned. All right, we've got Travis DeMarie for Atlanta. Colossal, two-color relic, nine out of 10. And that'll be for Adam and the Braves. We've got Hans Krause to 99 for the Phillies. That's going to be for Josh. 19 out of 25. Harold Baines for the White Sox, hollow-fame relic. Hollow-fame materials, that is. It's for Ed A. and the White Sox. Got Lucius Fox, two out of five. Century signatures. And that will be for Adam and the Nationals. There you go, Adam. All aboard the Big Hit Express. Woo-hoo! Fox in the box. For the Orioles, Trey Mancini, 69 out of 99. It'll be for Nick and the O's. We've got Mile High City, die-cut materials signatures. Ryan Vallad, 19 out of 25. That's for Alan and the Rockies. Those last-bought Mojo teams. We've got Romeo Gonzalez, 67 out of 99. Big RPA. Nice patch in there for Ed A. and the White Sox. We've got Field Pass, autographed. Bobby Whit Jr., 30 out of 99. It's a sweet-looking card. DY with the Royals. A lot of nice stuff here. Behind the book is another royal, 9 out of 25. Angel Zerpa, dual relic and autograph. Another one for DY and the Royals. All right, now let's see what this book is about. Wow, it's two out of 10. National Treasures, Timeless Treasures. It's Ricky Henderson, Reggie Jackson, Catfish Hunter, and Mark McGuire. Wow. All Oakland A's out of 10. That's Emma with the A's. There you go, Emma. Congrats to you. That's a good-looking card here, good-looking book with the real classic A's colors here. Two out of 10. All right, Game War material. Yeah, no randomizer, no sad persons. Just one really happy person, Emma with the A's. There you have it, ladies and gentlemen. That's Pick Your Team 3 in the books. We've got more in the store, jaspyscasebreaks.com. Check it out, and let's do some more. jaspyscasebreaks.com. I'll see you next time for the next break. Bye.