 Ok, hello everyone. Thank you for coming to the Tweet Talk, a few more Tweet files you see, the better I like your theme. My name is Jorge Diaz and I'll first present myself. So, as I said before, my name is Jorge Diaz. I've been working with Tupo for like nine years already and currently working as a themeer and front-end developer for a company called Evolving Web. We're based in Montreal and you've probably seen or stand on the other side of the wall. So, to kind of break the ice, do you guys know what this is? It's a dialogue model. The one you connect to your phone and get online. Well, that's what I've been using for seven of those nine years because I originally come from a pretty nice place located in the Caribbean, known as Havana, but eventually I followed up with Tupo. I ended up moving to Canada two years ago. So, when we moved to Canada, I started working at Evolving Web and we loved doing Tupo Evolving Web. I was founded like a long time ago, like ten years ago, by Alex and Susanne Degacheva. We've probably made them from previous accounts, they've been around for a long time. And essentially we hope and assist organizations to build multiple kinds of Tupo solutions. I mean, multiple kinds. I prefer to, from traditional portal or platforms, to present information using Tupo, to document management systems, like the one we built for the Canadian government, or a certification platform for Internet of Things devices that we built two years ago for all seeing allies. Many other things. And more recently, we've been like mainly focused on moving Tupo 6 and Tupo 7 websites into DA. This is something that, of course, started after DA was released almost two years ago. We kind of were pioneering on doing this migration process. So, we've worked with a lot of big fish, like the Linguist Nation, the Canadian government, a lot of universities, travel city, and so on. So, I'll be talking about today about Tupo thing. As I said before, I've been working with Tupo 6, 7, and A more recently. I've done a lot of things on top of those platforms, I would say, to 30 and 40 websites in total all this time. And for this presentation, I'll come up with a case study of a website that we recently built and launched called LISCUS Canada. That essentially it's just a car website that came up after the idea of we were looking for a car and then we didn't have any idea what options did we have for a monthly budget. So, we started doing Excel spreadsheets, a lot of things. And finally, we came up with like a slider where you can go and say, okay, let's say I want to pay $400 per month for a car, what options do I really have available right now? So, this started as a hobby and ended up being a product. We built like a manufacturer page and then we built like a huge home page to attract clients, present the information, and build business around it. So, that's what I'm going to be using as a case study today. So, I've just seen in the previous slides, this is a triple site. It seems okay, it might be nice or not, but let's say it's an average nice looking site. But that took some time to ship. So, we have to ship this with either a triple or whatever CMS you need to build a fee. So, going to the most basic definition, what's actually a fee? It's in just more than a folder inside of your project where you're going to have a template folder inside of it and then in there you're going to have a lot of files that define how your site's going to look like for everyone. But before jumping inside of that folder, I would like to go first to what's actually the fee process. So, if we also see it like pretty basically, feeing it's more than going from basic triple site to a final end product that we can actually launch or make life right away. So, essentially this is a process. And this is what I'm going to be talking about today. For us, that process and what principles we follow each time we need to take the product from position A or status A to status B. So, I'll be talking about today the six main theme and principles that I believe should be applied in any triple theme and process. And before jumping into that, let's say I jump into an interview, I'm looking for a theme or someone to work with me in a project which will be the ideal prospect that will really help me if it's important. So, if I would make a definition of a triple A themeer, I would say if someone has front-end developer skills like CSS, HTML, a day query, a JavaScript course, and some other front-end libraries like Bootstrap, Foundation and so on to build up solutions, but at the same time has a strong knowledge of triple site building. It's in just like one site or the other one. It's like this midpoint between the two. And I would say that if a candidate fits into that or a client or someone at hiring to build a triple theme, that would be the most appropriate person to go with. So, principle number one, even if it's using a base theme, it's okay. So, as soon as we saw triple A or seven or any other triple version, we're going to have running right in front of us a triple base theme. So, a base theme is something that already gathers together a lot of features like functionality, libraries, visuals that create a final end product. This might be very simple, but for the triple core developers, this is their end product. For us, might be our start products to come up with a new site right after that. So, plus that, each theme that comes with triple core, let's look at this way. We have core modules, node, each module inside a triple has its own template file. So, we can see here inside of nodes, we have the template folder, and then each module adds to triple the template file that he specifically needs for displaying the features for information, it's going to add to the triple project itself. So, seeing it just roughly, triple itself is a basic theme. It's the most basic of all themes we can use. So, if you want to go further, and that, of course, for us is like the second level of implementation, you can go for additional contributed themes, and this is what people use the most nowadays to build triple types. So, on this specific case, I will be frank into the case study, I'm going to use the bootstrap base theme that is also maintained by multiple core developers that take care of making the best match possible between the popular frontend library and the triple core. So, a lot of times I come out in discussion, why don't we move the library into core? That's a separate theme. So, whatever external third-party library that wants to be added to core should be maintained in trick, because triple is one thing, and then whatever you want to add to it should be separate. And that's a philosophy pretty well followed with this template. The fact is that it ended up that bootstrap is the most popular theme used by the triple community. It has that many amount of installs, and you can see how many it has so far for the eight. And, of course, why is it based theme of that level? Because this third-party frontend framework provides us a lot of tools and functionality that doesn't come with triple by default, or not that easy, like this kind of drop-down navigation, like building advanced grids and content containers inside of the site. The actual responsive behavior of all these elements, like models and many other things that we might need to use in our project. So, going back to the file I showed before, we were inside of no templates, and then we have the list of template files. As I said, core comes with its own template files. But, at the same time, we have running core, then we have the template file, sorry, the bootstrap-based theme running on top of it, and then we have our theme. So, that file I was referring before, the node-specific template file, it's using all three levels of this stack. So, core helps its own template file. The bootstrap theme has its own template file that matches the best possible with the framework, and then our theme is going to have its own template file. So, this heritage is heritage all the way bottom up, which means that, of course, it has a file with the same name also, in the main theme, and then we have another one. Our final site will be blindfolded for whatever is from this level down. So, if you're using bootstrap theme just natively, we will be ignoring core files, but that's okay, because bootstrap theme is maintained by a community or by a sub-community inside of the trooper community, and they take care that this works well. But, they are creating our own theme, we need to be sure that we're doing things right, because we will be blindfolding our site for everything that's right below it. So, if we come up with updates, whatever we update core, if there was an update on that file, our site won't use it. And the same with the base theme. So, as I said before, core is maintained by a community, the bootstrap theme is maintained in the issue queue for one site, and on the other side it's maintained by the bootstrap community, which is totally separate, and these guys on the issue queue take care of providing us the top level users the best integration possible, and then, right on top of it, we are. So, we have to do it right. First thing, we always need to sub-team. That's the first thing. You always need to have a third layer on this stack. If you're going to use a base theme, you need to ensure to be always separate from the actual base theme. That way you will support future updates and be a wouldn't get hurt if you actually update your own core. Of course, second, stay where you need. If you really find something that is broken in the actual sub-team, then go to the issue queue and notify, hey, there is something broken here, do you mind taking a look at it? The community is pretty active, all the people help, and it's better to do it that way. It's like the right way to address that issue. Don't move things around. I mean, you can go into core, take an old file and put it right on top. And that's going to work. But that doesn't mean it's going to work right. You might be breaking even the bootstrap behavior or relationship chips between your files. Number four, first update as regularly as possible. Stay up to date with core and the community theme too. And the same goes for modules. And number five, as I mentioned before, if you find an issue and you can't identify by yourself, that it's core-related or it's bootstrap theme-related, go to the issue queue and report it. So you can go to our blog. Our blog goes from almost a year ago about planning how to choose a Drupal-based theme and another one doing an analysis of why Drupal bootstrap-based theme is so successful. So, principle number two, theme, it's side-building. As I said before, side-builders, working on theme, it's really, really important because they will save a lot of time. Doing side-building, it's using themes, it's using modules, it's incorporating libraries, it's creating content types instead of going to Twig files and creating fields and things. And a lot of people do it, that needs to be... It's hard to maintain and the proper way to do it, it's always to follow the Drupal-8 structure way of managing things. So, one of the main things when doing side-building, it's checking what's available out there for modules. When you use a module, you will then need to know what library will require, what else, or what additional set-ups you will need to do. With modules, it will save you a lot of time on doing things. I've seen people trying to reproduce during months like a shopping cart, things like that, instead of using commerce or using Uber cart. So, just to mention an example. In Drupal 7, there's a really popular module called Webform that is used for capturing visitor submissions on many things like actual polls or contact form submissions. And when Drupal 8 got released two years ago, Webform wasn't available. In fact, Webform is available since six months ago. So, this doesn't mean that you cannot use Drupal 8 if you want to get a message for one year and a half. So, you have to look for options. And instead of jumping into building your own custom module, you need to actually research what's people doing. So, using combinations like the contact core module, contact storage and contact lock, people were able to reproduce most of the functionalities of Webform and achieve the same objective because the key is to actually reproduce functionality. So, like, building a form with Drupal 8 is not that hard. We're just setting up a few things. How many modules are out there? Well, Drupal 8 only. If you filter, more than 3,400 so far. We have an envelope, of course, talking about some Drupal modules without my colleague Susanne. And, sorry. And some other one that I wrote. Okay, number three. And this is where I'm going to spend most of the time of the presentation. Theming is building views. Okay, so probably most of you, if you've worked with Drupal before, are aware of what a view is, in case to set ground. What is a view? So, if you go to Google right now, and you Google for something like Drupal 8 themes, you're going to get a set of results. Now, if you look closely, you're going to see that there's first set of results that have this app blocked in the beginning that it spares results. And then, you're going to have the rest of organic or natural results on the page. If you do YouTube, you're going to see that there's also a list of videos. If you go to Twitter, you're going to see a list of trends on the left, a list of tweets in the middle, and then who to follow right in the right side. Sorry for the Spanish side. If you go to Facebook, this is a little bit more advanced. You're going to see like a notification list on the right and then the active shot on the right too. The wall, and many few other lists on your site. And even if you go to Google Maps and you do a search, you're going to get the paid one, the organic ones, or the ones that are inside of this context. But then, this is also a list, but it's a geographically set of items. It's not just using biffs or containers or whatever we can call it. It's just a set of dots geographically located where they're supposed to on the map. So a view is just a set of data that's being represented in many different ways. And I'm just showing you the top four popular sites of the internet. So everything today is a view. And Trupal was conceived to create views. So everyone can work on it. So this is a sample page of the car site. It's like the page starts here and continues over here. I have to split it into you to make it more like a Twitter. And then this car page has multiple views. For example, this is a view showing the prices. This is a view showing the prices within this count. This is a view showing related models of how to save it. Another one. Another one. This is a view of feature cars. This is a view of blog posts. So everything in the site is actually a view. If you go to different pages, you're going to see the page of a view with all the blog posts. And then the page with a single item view that's showing the feature model of the brand. And then more views, more views. Everything inside of the site is a view. So now I'm going to show you a couple of samples from the live site. Okay, so let me just refresh multiple displays. Okay. Let's go to a car page. I'm logged in. That's why it takes so much time. Okay. Okay. So take a look at these views over here. I'm going to maximum. So I'm seeing right now, I'm seeing a Subaru car that it's all wheel drive, that it's from, that it's an SUV. So based on this context, I'm also displaying four additional blocks, those four that display additional or related information to the car I'm seeing right now. For example, here I'm showing all base offers from the same top level model, like the 2017 Crossteg, the 2018. This is the manual. This is the automatic. And here it's saying this model. So this is the one you're seeing. If there are more, this view right over here, it's displaying all these results with JavaScript. It's just being resumed to the first three items on all views. So if you want to dig more on each one of the contextual views, you can just expand it and see more. I'm going to hide it. So this one is the same, but it's all SUV vehicles by Subaru. So I'm seeing, from the context, I get the type of vehicle, SUV, and the brand. And that's another contextual view. Then we have these more automatic all wheel drive SUV vehicles. This view for sure, it's way longer. But you expand it if you really need to do it. Let me talk about performance. And then this one featured deals, this is the same for every car page. You just expand it and all featured deals are going to be listed right over here. So now I'm going to go and I will edit this view. I'll maximize to make this more. Okay. So you may notice, as I show here in the slides, you can create multiple displays for the same view. So these four views, these four views right over here, they use the same CSS, the same HTML, the same exact structure. The only difference is where they are placed and actually the title works on the top. But all the rest of the elements to show more and every single item is being reused all across those views. So based on that, using views, you can have like a common set of fields to display. And then you can have multiple displays to reuse this view everywhere. And then after building those four, we say, okay, how about if we go now to the... Sorry, brand page and I go to Subaru right over here. And I want to display the cheapest cars on the right. We don't need to code again. We haven't viewed that. It's 90% set up for that. We only need to change which partner we want to use. So right here on the manufacturer page, we added this cheapest offer to Subaru Canada. It's the same list, but it's displaying all cars that match that brand. And then we have the exact same view. Instead of displaying three cars, it's displaying four, to make it match with the height of what I'm showing on the left side and make the visual more balanced. And then you have an additional information that people can browse through. You don't need to have a page for the cheapest offer for each one of the manufacturers. You can contextualize all of that on different places and build multiple things. So the same way you can do this, we added a lot of things like... This is another view. This is geographically located view using clusters. So with clusters, you can, for example, right over here in Thunder Bay, you click on it and then you're going to see the dealer that's right over there. But if you click on the Ottawa area, Google Maps API integration with views, it's going to expand. There's no coding over here. To ship this, there's no coding. You just need to add the API key. You have to set up the margin. You have to set up a few things. You have to test. You have to use CSS style for setting up the ground to be black. The green word to be blue. The rose to be another color. But the actual coding, it's zero. You don't need to do it. You just need to set up the database components to it. So I'm going to drag. I'm going to go to Ottawa. Then I'm seeing Subaru. Yeah. I'm going to see, I don't know. I'll give you Subaru. You click on it and then you're going to go to the dealer page, which is just a node like the car is. And then each one of these nodes has a geographic position. You can use again to create this kind of contextual blocks. Like closest dealerships to this one. Each one of the nodes knows where it's geographically located. And you can say, I want to display the proximity from the main node. It is only this about the performance thing. I want a view that shows the four items, four items, any items, but sort by distance from this one. And then you get the closest dealer server. So using this, you can do a lot of things. Like this exact functionality over here. You can create an additional complementary view that will give an idea if you see this dealer, how far away is the closest dealer of the same brand. This may seem like you've given too much information, but you don't know. Sometimes people might read it, sometimes they don't. And it's not expensive at all. Setting up that takes probably more time doing the CSS than actually maybe work. And then you can go again. I don't know if you've seen this block before. Well, here they are all of them again. Each one of the models of the car with all the available options on the dealer page. So it's a huge mesh of information that views allows you to merge and present in many multiple ways. Either geographically, by different sorting purposes and so on. It's definitely amazing the things you can do with it. So as I said before, I'm a front-end developer. I'm not a back-end developer. And most of this has been CSS and view set up. Okay, so I'm going to go back to the presentation. Okay, 2x and view, sorry, I missed that part. Let's go to a complex. Okay, have you seen each one of these? It's a row, that is a result of a query. So triple, it's asking the database all the models of Subaru prospect and this and here. So this results like this in sequence. When I say simple, it's an image, a title, a model of the transmission, the payments, and the term. But I'm going to go for one that is a little bit more complex, like this one at the bottom, that it's on every page. I'll just sum it out a little bit. So take a look at this one. This is the feature deals of this month. You're seeing now four items. So each one, four items are featured on this section of the website. But each one of those rows or results, it's explained like a label of this month, photo, price, additional description of the card, and a few other things like contextual pop-ups and so on. So this is not something you can easily track from the database. It takes some HTML customization and it takes some templating. So you have multiple ways to do it. This might be a little bit arbitrary and for some people might be a little bit uncomfortable to do it, not. It's not the ideal way to do it. But many people like me do it. So I'm going to edit the view. And then as you can see right on the left side, I will maximize to make it more readable. These are the list of all the fields I'm using. But as you may notice, I'm going to search in my browser for hidden. Most of the fields are hidden. So I'm displaying something on that view of work because it displays something. But each field I'm getting from the database is hidden because I'm going to use it eventually at the end. So this is the thing. On my query, I didn't return the price and make the year in multiple things. But then I want to handle and manage that on my own way. I don't want to do it using the default views way. So here I have this global custom text field. And if I click on it, you will get where everything comes from. See, this is a custom view scale. Custom view fields allow you to use tokens from a few other fields that you have and build your own custom HTML. And then how to put all these fields in your own custom way. So this is like really variable. You can do it either here or in the template file. But I personally prefer to do it here because somehow I need a new field. I just go in the view, I add a new field, I hide it, and then I have the available token right over here. Like the make, the model, the term, the IDs that I might need for something, not visual. I mean, you can do a lot of things if you are inside of this complex. Just imagine you have a strong database query tool that is view itself and then you have this not so nice HTML editor. That's why I mean that's probably the most uncomfortable side of this approach. It's that you don't have maybe the coloring or the tab or the actual wireframe management. But the good thing is that TripleA allows you to export configuration. So you can export this config and you have your git track of every change to do on this layout. So that's definitely something that's amazing. So going back to the slides, I won't change anything. I don't want to screw the slide side. Sorry. So this approach, it's pretty flexible, it allows you to do a lot of things and it has two main benefits. The first one, we already saw it, is how much you can reuse the things you do. So you can reuse things like, I don't know. We were not expecting to have a recent blog post block, but we had a menu and we said, okay, let's do the slides with the new blog in the homepage for every page. And that worked. And it was a compression rate and people were going into blog posts from different places. And the effort was minimal. It was just setting up blog for a system view. The choice we are going to start all over. And you've seen this case already. Okay. So here's the question now. Okay, you've seen a lot of things that can be set up easily and it's a lot of database queries. And here's the question. How fast is this? Is this feasible to take this approach? So let's take a... Let's do some post analysis on this. So this is the card page. The card information is just the photo and this text over here. The rest is external nodes and additional nodes. And you can see this is related information, the offers, it's a separate node, all that is split. So we have the card page and the manufacturer page. So what does this mean? That this query or this set of blogs and views over here, they need to pull from the database some information before display. So now the card. And this card is named as a feature bar manufacturer. As the first one of the cheapest. As the first one of this full list of cards. And also as the card itself in those created blogs over there. That's a lot of SQL queries running in your MySQL or whatever server you use. Every time a user goes into your page. That's heavy, heavy, heavy. But okay, even in the home page, if I feature the card, that's a query too, also in the home page. So it's a lot. But what happened? Triple eight has something called tag-based cache. And it's amazing. How does it work? I'll share the slides at the end so you can go and see the URL. How does it work? If I have this card displaying all those views, the first time the visitor goes to this page, all those data queries are going to run for the first time. But the results are going to be stored in a cache table. This means that the second time that a person goes into the page, that person won't run all the queries. That person will be getting the HTML that was sent to the first person. So this makes everything crazy fast. I forget. The first time you go into the page, you generate the cache for everyone else. Because the second person that goes into the site, is going to get the generated page. It's not going to get all the queries again. Except that I go into my site and I update the year from 2017 to 18, then you know what I can say is going to go, you are invalidated, you are invalidated. It's going to invalidate all views. And then when a new person goes into the site, he's going to update the page again for himself and for everyone else. So that's known as cache warming. So the cache to exist, someone needs to create it. I'm going to talk about later on how to warm your cache. And keep your site fast. But let's jump down again to the next page. Have you heard about this tool? Web page test. It was created by Google in the years to test website performance. They have a cloud set of servers that emulate browser loading to compare page space. For example, if you're running YouTube.com, you're going to get four seconds of page load. That's the time YouTube takes, or the fastest time that YouTube can take load. And it makes 67 HTTP requests to YouTube servers. If you go to Facebook, just the login page takes two and a half seconds. If you go to Google.com, you're going to get 2.0 seconds. Two seconds. And 12 requests. It's pretty small. Okay, you can go to all these URLs. As I said before, I'll share the slides and verify all those results. I'm not making up any number. And here are also the results of the one I'm going to show now. So, okay, Drupal 8, come in please. Oh, okay, this is a simple Drupal 8 site, a fresh one, just installed without the caching in it. You run the test site and you get 3.6 second load and 105 requests. Okay, now if you go and just say, okay, I want to enable caching and I want to enable aggregation, that it's all CSS files into a single one, all JavaScript files into a single one. And then I run again. You get 1.2 second load on a simple Drupal site. Even that site takes SQL queries. How many blocks go into the home page? What menu items go here? What menu items go into the contact menu? So each one takes also, it's a small number, but it's SQL2. But when it's cached, it takes this time. But CDM1 request is highly reduced to 7 from 105. So a lot of CSS files and JavaScript files are simplified. So discuss. I'm putting the page, for example, to get in a little bit better. Okay, so each one of these vertical columns is a block. And let's say that this one, it's a SQL query that involves multiple entities, like cars, prices, merged together. We have the latest block forms. This is also a view that I'll talk about later. And these three are just blocks. And then we have the menu structure that is a drop-down menu. So there's an SQL query that fetches all items. And the load mode and the footer menu. There are multiple things that require an actual data besides this. So without aggregation, it took 4.7 seconds to actually load. And with aggregation enabled, it took 1.8 seconds to load the page. It seemed like a little bit sorcery, but it's then fast if you use it the right way. So I'm going to show a different example. This is the car page. It's a little bit more complex. It has the same footer as any other page on the website, including the homepage. But then it has this a little bit complex view with multiple prices. And then it has four heavy load views that you saw you can expand again like 50 or 60 results in a column. Just a single one of them. And you get four. So for this page, with caching... Sorry, without caching, it took 2.6 seconds. And with caching enabled, it took 1.8 seconds. It's pretty fast. And it took more requests. Because there's a lot of files and many other things. More car images and so on. So this is the cache forming app I mentioned at the beginning. It's free. It's developed by a colleague of ours. It's called Cache Ready. Essentially you go into it, you set up your sitemap.xml file into it. And then you will go running through all your pages. And we will be creating the first access to your site. And whoever comes after your visitors will receive cache pages pretty fast. In the Google or whoever gets them all. So of course, a Drupal is fast if you put it where it's fast. So in this case it's using the Drupal caching system. It's running on Phantium that is really optimized for hosting Drupal sites. And it's using Cloudflare for caching files to all these services. Drupal is free. Cloudflare, it's using the free Pantium. And Pantium is like 25 hours per month. And you can see how fast it can be. And I'm not talking about any HTML simple site. I'm talking about a Drupal site that's using HTTPS, phone calls, Bootstrap, web phones, high resolution images. So it's a heavy loaded website. It doesn't make any sense to spend time trying to simplify it if Drupal by itself can be fast. So Drupal is going to be slow, of course, if you don't do it right. So it can actually fly. So remember, you have to use the caching system. Because for using the caching system you need to use something that's ready for the caching system like Views. If you do your own custom HTML queries by your own, you're getting out of that. And then you're compromising the performance of your site. So if you use Views, then you can use Cache. If you use Cache, then you're going to get a really fast site. If you're fast and your SEO optimizes, then you're going to be highly ranking, highly ranked. And then you're closer to succeed as a website online. So that was the longest I've ever seen it for. So FIMI is improving your information application. There are things that you don't expect to be actually entities on your site, but somehow you can do it, and then you can optimize your site. There was a presentation before this one about paragraphs. That was really good. This is the blue stripe I mentioned at the beginning. So this is like an informational text you can put in any page of your site. Traditionally, you will say, okay, blue stripe, I can create extreme depths, and each one's going to have, I call md4 to have three columns, and then this, and this, and this, and each one's going to be arranged. But then somehow in the future that leads to the change, then you need to ensure that the client can either contact you to fix it, or they know HTML to fix this. So one of the nice approach you can do is just in views. You can have, as I mentioned, paragraph to create these kind of entities that you don't want it to be a page. You don't need to have a page saying 15,000 million years, blah, blah, blah. You don't need to have that. You just need to have something to store your information. And then you set up a view to display three items showing those blocks in your homepage. So initially, you didn't conceive, or your client didn't conceive, I wanted to have a content type to manage three pieces of information in the homepage. And if you, as a theme maker, as a developer, can provide that kind of flexible solution to that, because that can be multi-envolved, can be editable anytime, and the actual website management experience gets definitely boost. So, yes, yes. This is like the image they have in the Paragraphs module page. With Paragraphs, you can create multiple things. I just showed text that you can create images. You can re-sort things, re-arrange them. It's really useful. Or, slash, project, Paragraphs, to learn about them. And then, theming is doing CSS. There's not really much to talk about it. Theming is doing whatever I talked before, plus doing CSS to achieve the visuals that you really want to do. So, if you want to make your site beauty, I mean, if you want to use the default look, that's good. But if you want to improve a little bit, arrange things, even to reuse the CSS and so on, then that's, if you have to use CSS today, there's no way to escape from it. And finally, theing is doing tweak. When the five previous principles didn't ship what you needed to. Like, for example, you need to add a region. You need to do a really custom function, then use tweak. I'm not saying don't use tweak. It's the biggest power you can give to a front-end project in Drupal. But see how many things you can ship without using tweak out to this point. So, you're not authorized to go inside this folder to whatever you want. So, the Drupal community has pretty good guidelines of how to work with tweaking templates that they're really good. As I mentioned before, you might need to create a region. You need to customize things inside a thing that's not in place, or even to adapt to bootstrap. There may be modules that doesn't fit nicely with bootstrap, and you might need to do it in your own thing. Then, that's the proper way. So, those are the six principles. As I said before, always remember, if you start using views, your project has a really high chance of being able to succeed either with search engines or future maintenance and many other things because you're going through the right path. So, my phrase is, if you use cache, you know what happens. In case you want to learn Drupal, we're doing a lot of training in the next couple of weeks here in Ottawa. This is in Ottawa. There's a theme training next week. Online, site building, Monday, module development, in two weeks. And another theme training. Sorry, these three are going to be actually in Ottawa. These three are going to be online, but you can be in Ottawa and do it here. And that's it. This is the euro for athletics. Thanks for your time, questions. I'll be happy to answer. Yep? Oh, sure. It's all right. Any other questions? Thanks a lot for your time. I hope you had a good one.