mid-century we're going to have about 10 billion people on the planet. We'll need a 50% increase in the amount of food we produce in order to feed them. They'll be using energy at an increased rate, putting more carbon in the atmosphere, and on top of that many of the drugs that fight diseases will no longer be effective because organisms have grown resistant to them. Today I'm going to talk about engineering biology to solve these challenges. First I want to describe where we get most of our products. They come from petroleum. We bring it up from underground, we refine it, we turn it into fuels, and when we burn those fuels in our automobiles or in our jets we put that carbon in the atmosphere. We also produce nearly all of our products, our materials, our chemicals, using petroleum as well as a number of drugs. We'd like to have a renewable future where we take renewable feedstocks and turn them into all of those same products. In the cases of fuels when you burn those then in your automobile that carbon is returned to the atmosphere and you don't add net carbon to the atmosphere. Doing all this can save a huge amount of energy. It can also lead to a renewable future, but I want to talk about that biorefinery just a minute. The center, the hub of that biorefinery is the microbe. That microbe takes the sugars from the renewable biomass and turns it into chemicals. Prior to the genetic engineering revolution in the 1970s we used natural organisms, but now we have the potential of genetic engineering. We can take genes from any organism, from plants, from humans, from microbes, from snakes, put them into a microbe and get that microbe to produce things that are completely unnatural to biology. We use this iterative design build test learn cycle to engineer biology and do that repeatedly till we get it right. I want to tell you about one example from my laboratory. Artemisinin is the world's best anti-malarial drug, but it's too expensive as it's produced from the plant. So we took the genes from the plant, Artemisia. We crafted them, put them into Saccharomyces yeast, Brewer's yeast, and got it to produce this drug. And now Sonofi is marketing Artemisinin combination therapies based on this. We did a similar thing, taking genes from plants which put the hydrocarbons on the leaves that make it a lot waxy surface, and we engineered microbes to produce advanced biofuels that are now fueling planes and buses all over the world. Engineering biology is an expensive process. It takes a lot of time and that's demonstrated here. The Artemisinin project that I talked to you about was funded by the Bill and Melinda Gates Foundation. It took $50 million to accomplish that science in ten years worth of work. A similar project by DuPont to produce carpet fibers using a product from E. Coli took them about $130 million in 15 years. Because of these extreme costs it's very hard to get biologically produced products into the market. The reason it's so expensive is because biology is practiced in an artisanal manner. We have these artists, graduate students who work at the desktop, they design their biology, then they go into the laboratory and build it and over months test it. And then we learn whatever we can from that, but the learning process is slow. That's the past. The present is having foundries for biology, where our students now design the biology on the computer using computer aided design software. They send those designs to robots in the next-door lab. The robots build the biology, they test it and then we use machine learning to collect all the information and analyze it. But in the very near future what we'll have are distributed or foundries that are centrally located. They won't have to be next-door to you. The designer will at their desk design the biology. That design will be sent off to a factory somewhere. You may not even know where that factory is. It'll choose the best factory. When that design is perfected the factory will send it back to you. And the beauty of this is that that factory can learn from all the organizations that use it. Companies won't have to have their own foundries. Academic labs won't have to have their own foundries. They can use the central foundries and they'll collect the learnings from all of these and distribute biological components out to companies as well as to academics and industry. The farther into the future is where we actually have something very near to what Paul talked about. Actually having a 3D printer for biology where you might design at the desktop and right sitting beside you is all the robotics everything needed to build a microbe, to build a plant. You could say build a design for engineering the synthetic efficiency of a plant so that it produces more corn or more peas. We can engineer microbiomes in our guts so that we can get better access to drugs so that they might even produce the drugs. We can engineer microbes to produce new chemicals, new fuels and even new classes of antibiotics to fight diseases where they've grown resistant to them. So what I've talked to you today about are building foundries for biology for the future. We can solve a huge number of problems using this new technology that we've developed. The question I have for you is what problems would you like to solve? And if you can do anything, if you can print anything with biology, who should be able to use that? How far can we go in printing biology? Can we print new humans? Thank you.


Hey, welcome back everybody. Jeff Frick here with theCUBE. We are really excited to have a CUBE conversation here in the Palo Alto studio with a real close friend of theCUBE and a repeat alumni, Leslie Berlin. I want to get her official title. She's the historian for Silicon Valley, archived at Stanford. Last time we talked to Leslie, she had just come out with a book about Robert Noyce and the man behind the microchip. If you haven't seen that, go check it out. But now she's got a new book. It's called Troublemakers, which is a really appropriate title. And it's really about kind of the next phase of Silicon Valley growth. And it's hitting bookstores. I'm sure you can buy it wherever you can buy any other book. And we're excited to have you on. Leslie, great to see you again. So good to see you, Jeff. Absolutely. So the last book you wrote was really just about Noyce and obviously Intel, very specific. And you know, the Silicon and Silicon Valley, obviously. This is a much kind of broader history with again, just great characters. I mean, it's a tech history book, but it's really a character novel. I love it. Oh, thanks. Yeah, I mean, I really wanted to find people. They had to meet a few criteria. They had to be interesting. They had to be important. They had to be, in my book, a little unknown. And most important, they had to be super duper interesting. And what I love about this generation is I look at Noyce's generation of innovators who sort of working in the, or getting their start in the 60s. And they really kind of set the tone for the Valley in a lot of ways. But the Valley at that point was still just all about chips. And then you have this new generation show up in the 70s and they come up with personal computer. They come up with video games. They sort of launch the venture capital industry in the way we know it now. Biotech, the internet gets started via the ARPANET. And they kind of set the tone for where we are today around the world in this modern sort of tech infused life that we live. Right, right. And it's interesting to me because there's so many things that kind of define what Silicon Valley is.  But really a lot of those kind of attributes were started by this class of entrepreneurs like just venture capital. The whole concept of having kind of a high risk, high return, small carve out from an institution to put in a tech venture with basically a PowerPoint and some faith was a brand new concept back in the day. Yeah, and no PowerPoint even. No, that's right, no PowerPoint. Which is probably a good thing. Right, cause I mean we're talking about the 1970s. I mean what's so, really was really surprising to me about this book and really important for understanding early venture capital is that now a lot of venture capitalists are professional investors. But these venture capitalists pretty much to a man and they were all men at that point. They were all operating guys. All of them, they'd worked at Fairchild, they'd worked at Intel, they'd worked at HP. And that was really part of the value that they brought to these propositions was they had money, yes, but they also had done this before. And that was really, really important. Right, another concept that kind of comes out and I think we've seen it time and time again is kind of this partnership of kind of the crazy super enthusiastic visionary that maybe is hard to work with and drives everybody nuts. And then always kind of has the other person. Again, generally a guy in this time and still a lot who's kind of the doer. And it was really the Bushnell Alcorn story around Atari that really brought that to home where you had this guy way out front of the curve but you have to have the person behind who's actually building the vision in real material. Yeah, I mean I think something that's really important to understand is and this is something that I was really trying to bring out in the book is that we usually only have room in our stories for one person in the spotlight when innovation's a team sport. And so the kind of relationship that you're talking about with Nolan Bushnell who started Atari and Al Alcorn who was the first engineer there is it's a great example of that. And Nolan is exactly this very out there person, big curly hair, talkative outgoing guy. After Atari he starts Chuck E. Cheese which kind of tells you everything you need to know about someone who's dreaming up Chuck E. Cheese, super creative, super out there, super fun oriented. And you have working with him Al Alcorn who's a very straight laced for the time by which I mean he tried LSD but only once, you know. Engineer. And I think that what's important to understand is how much they needed each other because the stories are so often only about the exuberant out front guy to understand that those are just dreams, they are not reality without these other people. And how important, I mean Al Alcorn told me look I couldn't have done this without Nolan kind of constantly pushing me. And then in the Apple example you actually see a third really important person which to me was possibly the most exciting part of everything I discovered which was the importance of a guy named Mike Marklah because in jobs you had the visionary and in waz you had the engineer but the two of them together they had an idea they had a great product, the Apple too but they didn't have a company. And when Mike Marklah shows up at the garage you know Steve Jobs is 21 years old. He's had 17 months of business experience in his life and it's always a tech for Atari actually and so how that company became a business is due to Mike Marklah, this very quiet guy very, very ambitious guy. He talked them up from a thousand stock options at Intel to 20,000 stock options at Intel when he got there just before the IPO which is how he could then turn around and help finance the birth of Apple. And he pulled into Apple all of the chick people that he had worked with and that is really what turned Apple into a company.  But it's funny though because in that story of his visit to the garage he's specifically taken by the engineering elegance of the board that waz put together which I thought was really, so yeah he's a successful businessman yes he was bringing a lot of kind of business acumen value to the opportunity but what struck him and he specifically talks about what chips he used, how he planned for the power supply. You know just very elegant engineering stuff that touched him and he could recognize that they were so far ahead of the curve. And I think that's such another interesting point is that things that we so take for granted like mice and UI and UX. I mean the Atari example for them to even think of actually building it that would operate with a television was just, I mean you might as well go to Venus, forget Mars.  Yeah I mean I think Al ran to Walgreens or something like that and just sort of picked out the closest TV to figure out how he could build what turned out to be Pong, the first super successful video game. And I mean if you look also at another story I tell is about Xerox Park and specifically about a guy named Bob Taylor who I know I keep saying oh this might be my favorite part but Bob Taylor is another incredible story. This is the guy who convinced DARPA to start the art, it was then called ARPA to start the ARPA net which became the internet in a lot of ways. And then he goes on and he starts the computer sciences lab at Xerox Park. And that is the lab that Steve Jobs comes to in 1979 and for the first time sees a gooey, sees a mouse, sees windows. And this is the history behind that and these people all working together, these very sophisticated PhD engineers were all working together under the guidance of Bob Taylor, a Texan with a draw and a master's degree in psychology. So what it takes to lead I think is a really interesting question that gets raised in this book. So another great personality, Sandra Kurtzig. I had to look to see if she's still alive, she's still alive. I'd love to get her in sometime, we'll have to arrange for that next time but her story is pretty fascinating because she's a woman and we still have big women issues in the tech industry and this is years ago but she was aggressive, she was a fantastic sales person and she could code and what was really interesting is she started her own software company. The whole concept of software kind of separated from hardware was completely alien. She couldn't even convince the HP guys to let her have access to a machine to write basically an ERP system that would add a ton of value to these big expensive machines that they were selling. Yeah, you know, I mean, what's interesting, she was able to get access to the machine and HP, this is a not well known part of HP's history is how important it was in helping launch little bitty companies in the Valley. It was a wonderful sort of benefited all these small companies but she had to go and read to them the definition of what an OEM was to make an argument that I am adding value to your machines by putting software on it and software was such an unknown concept. A, people who heard she was selling software thought she was selling lingerie. And B, Larry Ellison tells a hilarious story of going to talk to venture capitalists about when he's trying to start Oracle with, he had co-founders, which I'm not sure everybody knows. And he and his co-founders were going to try to start Oracle and these venture capitalists would, he said, not only throw them out of the office for such a crazy idea, but their secretaries would double check that he hadn't stolen the copy of business week off the table because what kind of nut job are we talking to here? Software. Yeah, whereas now, I mean, when you think about it, this is software valid. Right, right, software in the world. There's so many great stories. Again, troublemakers, just go out and get it wherever you buy a book. The whole recombinant DNA story and the birth of Genentech, A, is interesting, but I think the more kind of unique twist was the guy at Stanford who really took it upon himself to take the commercialization of academic generated basic research to a whole nother level that had never been done. I guess it was like a sleepy little something in Manhattan they would send some paper to, but this guy took it to a whole nother level. Oh yeah, I mean, before Niels showed up, Niels Ramers, he, I believe that Stanford had made something like $3,000 off of the IP from its professors and students in the previous decades. And Niels said there had to be a better way to do this. And he is the person who decided we ought to be able to patent recombinant DNA. And one of the stories that's very, very interesting is what a cultural shift that required. Whereas engineers had always thought in terms of how can this be practical for biologists, this was seen as really an unpleasant thing to be doing. Don't think about that, we're about basic research. So in addition to having to convince all sorts of government agencies and the University of California system, which co-patented this, to make it possible just almost on a paper work level, he had to convince the scientists themselves. And it was not a foregone conclusion. And a lot of people think that what kept the two named co-inventors of recombinant DNA, Stan Cohen and Herb Boyer, from winning the Nobel Prize, is that they were seen as having benefited from the work of others, but having claimed all the credit, which is not A, isn't fair, and B, both of those men had worried about that from the very beginning and kept saying we need to make sure that this includes everyone. But that's not just the origins of the biotech industry in the Valley, the entire landscape of how universities get their ideas to the public was transformed. And that whole story, there were these ideas that used to be in university labs, used to be locked up in the DoD, like the ARPANET. And this is the time when those ideas start making their way out in a significant way. But it's this elegant dance, because it's basic research and they want it to benefit all, but then you commercialize it right and now it's benefiting the few. But if you don't commercialize it and it doesn't get out, you really don't benefit very many. So they really had to walk this fine line to kind of serve both masters. Absolutely. And I mean, it was even more complicated than that because researchers didn't have to pay for it, not for it. It was, the thing that's amazing to me is that we look back at these people and say, oh, these are trailblazers. And when I talked to them, because something that was really exciting about this book was that I got to talk to every one of the primary characters, you talk to them and they say, I was just putting one foot in front of the other. It's only when you sort of look behind them, years later that you see, oh my God, they forged a completely new trail, but here it was just, no, I need to get to here and now I need to get to here. And that's what helped them get through. That's why I start the book with the quote from Raiders of the Lost Ark, where Sala asks Indy, basically, how are you going to stop that car? And he says, how are you going to do it, Indy?  And that really could almost be a theme in a lot of cases here. They knew where they needed to get to and they just had to make it up to get there. And there's a whole nother tranche on the genetic story. They couldn't get all the financing, so they actually used outsourced, so that whole kind of approach to business, which was really new and innovative. But we're running out of time and I want to follow up on the last comment that you made. As a historian, you are so fortunate or smart to pick your field that you can talk to the individual. So I think you said you've been doing interviews for five or six years for this book. It's 100 pages of notes in the back. Don't miss the notes. But also don't think the book's too long. But no, it's a good book. It's an easy read. But as you reflect on these individuals and these personalities, so there's obviously the story you spend a lot of time writing about, but I wonder if there's some things that you see over and over again that just impress you. Is there a pattern or is it just, as you said, just people working hard, putting one step in front of the other and taking those risks that then in hindsight are so big. I would say, I would point to a few things. I'd point to audacity. There really is a certain kind of adventurousness at an almost unimaginable level and persistence. I would also point to a third feature at that time that I think was really important, which was for a purpose that was creative. I mean, there was the notion, I think the metaphor of pioneering is much more what they were doing than what we would necessarily today, we would call it disruption. And I think there's a difference there and their vision was creative. I think of them as rebels with a cause. Right, right. Is disruption the right, is that the right way that we should be thinking about it today or are we just kind of backfilling the disruption after the fact that it happens, do you think? I don't know. I mean, I've given this a lot of thought because I mean, I actually think, well, you know, the Valley at this point, two thirds of the people who are working in the tech industry in the Valley were born outside of this country right now, actually 76% of the women. 76% of the women, I think it's age 25 to 44, working in tech, were born outside of the United States. Okay, so the pioneering metaphor, that's just not the right metaphor anymore. The disruptive metaphor has a lot of the same concepts, but it sounds to me more like blowing things up and doesn't really think so far as to, okay, what comes next. And I think that we have to be sure that we continue to do that. Right, well, because clearly, I mean, the Facebook's like the classic example, where when he built that thing at Harvard, it was not to build a new platform that was going to have the power to disrupt global election. They're trying to get dates, right?  That's the way it goes, that's exact. I mean, and you can look back at the chip industry, these guys just didn't want to work for a boss. They didn't like and they wanted to build a transistor. And then 20 years later, the huge portion of the US economy rests on the decisions they're making and the choices. And so I think this has been a continuous story in Silicon Valley. People start with a cool, small idea and it just grows so fast among them and around them, with other people contributing, some people they wish didn't contribute. Okay, then what comes next? That's what we figure out now. All right, audacity, creativity and persistence. I get it? And a goal. And a goal, and a goal. Pong, I mean, it's a great goal. All right, so Leslie, thanks for taking a few minutes. Congratulations on the book. Go out, get the book. You will not be afraid or you'll not be disappointed. And of course, the Bob Noyce book is awesome as well. So thanks for taking a few minutes and congratulations. Thank you so much, Jeff. All right, Lisa Leslie Berlin, I'm Jeff Frick, you're watching theCUBE. See you next time, thanks for watching.


OK, so we're going to talk about some more advanced sides of the render cache system. I always thought I was pretty knowledgeable of the cache API and has been a Drupal 8 developer for a long time and add my tags and my context and thought I knew what was going on. But in the past year, I've been digging into the caching problems on a really complex site. And I found out that there's a lot more to it that I didn't know. So these are sort of the topics that I wish I had known a year ago that I learned the hard way. And so my name is Jody. And I used to be the CTO co-founder of ZipTec, which I did for many years. I'm currently the web development manager at Renaissance Electronics. We have a really large Drupal 9 site. It's a semiconductor company. It's a really complex site. We have a large Drupal 9 development team. And when I came to the project about a year and a half ago, I was just like, well, this site is just really slow. We're going to fix this because there's no reason to have a slow website. It's a problem that we're going to solve. And I really met my match. I really thought I was going to make the site fast in a couple of weeks. And it's like a year and a half later. And I'm still fighting with the caching. So along the way, I was able to hire Yana as my expert consultant in the cache system, and let you introduce yourself, Yana. Yeah, I'm Yana. I am with Tag1. I used to be a D8-9 media initiative lead. And a few years back, I also worked at examiner.com, which used to be the largest group of websites on the internet. It was still D7. That was fun. And if you don't know about Tag1, we work in many technologies, but primarily Drupal. And we have probably the highest concentration of core contributors. We also found full-time person to work on Drupal health with Drupal.org, with infrastructure, and all those things. So we really tried to invest back into the community that made us successful. And we're always hiring. If you are looking for a new job, let me know. And yeah, we were brought up to work with Joanie and Renaissance to try to help them improve performance. And we also had some help from Fabian, who's one of the creators of the cache system. Fabian Franz, who's our director of technology, I believe, is his official title. We really thank you in core for being contributing to core a lot, really knowledgeable. So the cache API that we're talking about, that is the render cache system with its system of tags and contacts, it was introduced with Drupal 8. And previous to that system in Drupal 7, there really wasn't a caching system for authenticated users. There was no real way to have parts of your page be dynamic for the authenticated users and still have good caching on your page. So this system that was created for Drupal 8, of our render cache API, is this incredibly powerful system that lets us have caching for not only anonymous users, but for authenticated users as well. So it's a very powerful system. And out of the box, the Drupal 8 caching step works pretty well. And you'll have a pretty good cache hit rate so long as your content is not updated too often. Or you don't have a crazy number of different pages on your site. And or if your audience is mostly all anonymous users, it'll all work pretty easily. So the problem that we had with the RenderJas.com is it supports authenticated users, so that makes caching more complex. The content is edited frequently, like all day long. Like every five seconds, the content's getting updated because we have scripts that are updating content in mass. We have a whole team of editors editing content. We have thousands of pages. And we have 27 different region and language URL variations so that it makes like we have those region language prefixes because we're a multinational company. And that makes it much harder to get page level caches because now we have 27 times more pages. We have tons of custom code. We have heavy use of views module, which we'll get into views module specifically and how it works with caching. And we have these really large complex pages that have just hundreds of content references on them. So we kind of had every possible. And then, of course, we had a team of people who had originally built the site in Drupal 6 and then had upgraded it to Drupal 8 and nobody had ever really taught them how the cache API worked. So they didn't really know what they were doing with the cache API. So we had just every kind of bad practice that you could have in the custom code. So what we're going to go through today is we're going to just like review some of the basics. Hopefully you guys know the basics because otherwise it's going to be a lot, but just to bring fresh to mind, review the layers of Drupal caching because they get pretty confusing. And then talk about how caching often goes wrong, how the place-holding system works, how to debug your caching, how to log your caching with cache metrics module, and then some specific issues with views module and caching. So some of the basics of how this system works is all about the tags and the contexts. So the caching works on render arrays. So really a common example of a render array that you would need to add caching on would be like if you made a custom block plugin, you're going to output that as a render array. You need to add your tags and your contexts into that render array to make sure it's cached properly. So tags are what's used for invalidation. So all the render arrays get these cache tags, and those are saved with them in the cache. And then Drupal fires cache invalidation events, which clear things based on cache tag. So if your data had a cache tag of node 11, and then your editor went in and edited node 11, and they hit Save, then everything that had a cache tag of node 11 would get wiped out of the cache because it's now stale and get recreated. So in that way, Drupal always knows what exactly to clear out the cache when somebody edits content or makes some other type of config change that would affect the page and make that piece uncacheable. You don't normally have to write your own cache invalidation events because the ones at Core already does cover most cases, like just typical ones are just invalidating things when someone edits the content and stuff like that. But there might be a case where you're doing something really customary. You have to add your own cache invalidation logic. But usually all you're doing is just adding your cache tags. Then cache contexts are the system for the variations in what the cache data is. So a really common context that you stick on a chunk of a render array is route, because a lot of times your block has to be different on each page because it's showing you something specific to that page. Sometimes you have to vary things by language or by per user even. So but the more specific you make these contexts, the less likely you're going to get cache hits, because now somebody has to have hit that specific context variation before it's going to be cached. If you don't use the context, so then it just gets cached for the first situation that someone looked at it as, and then you're screwed to it. So there are actually default required contexts that are configurable in your services.yaml file. The defaults are languages, theme, and user permissions. So those just get applied to every single render array by default. So you don't have to add the language context that's already there. The other property in addition to tags and context is max age. Max age you don't normally need to use. The default is negative 1, which means that it's permanent. Since the tag system is really smart and can clear things out at the right time, you normally shouldn't have to set a time-based. There could be some situation where you do. But in general, you don't really use max age as often. And then we come to the concept of cache metadata bubbling. Cache metadata are all those three things. Like that's the name for tags, contexts, and max age all together. And when you were thinking about bubbling, you really like, I think that the best model is to imagine a single page as a tree structure where you have the root of the tree is the page. And then each element is a child. So each block would be a child.  These are the children of the block and so on and so on. And then the smallest pieces on the page are the leaves of these three. And what is going on is when you add some cache metadata to any of the children, at the end when the page is being rendered, everything that is all the metadata that is on the children will bubble up. So if you have a block on a page that has an image, and on that image, you added a cache tag to clear it when node 1, 2, 3 is being updated, then this cache tag won't only apply to the image, but it will also apply to the whole block and to the entire page. So everything that you put will eventually end up influencing the pages of code. And that's really important because if you add something that causes problems on an element, it will affect the entire page. So if you have a link that changes per user and you have to add user cache context to that link, you potentially created the whole page basically un-cacheable because you will have to potentially vary the whole page per every user. That's not very effective caching strategy. And this is why thinking about bubbling is really important. When you do things, you're not only affecting that small element on the site, but potentially the entire page. It makes it really easy to break your caching. Yes. There is one tool that we have that breaks this bubbling, which is called placeholdering. And we will talk about that a little bit later. Yeah, I told that. Especially a lot of times, you would see when people setting max-h0 to some element, usually because they are bugs related to caching and they don't know how to fix it. And then they just put max-h0 to it, which can potentially make the entire page un-cacheable, which is not what we want. And this is really problematic. And then cache contexts that cause too many variations, like user and sessions, are also very problematic. So when using these things or max-h0, we really should stop and think about it and figure out if we really need to use this or there is some other way to make it in a more efficient manner. And yeah, I mentioned like lazy loading slash placeholdering is a tool that helps us make caching more efficient in situations like this. And there is also auto placeholdering in Drupal Core, where Drupal tries to identify pieces that are bad for caching and it will try to auto placeholder them if a few conditions are met and we will come to that part. OK, so just to review all the different cache systems that you're dealing with in Drupal, you've got the Drupal Core systems. So the first layer is the render cache. So that's the fact that each renderer array with its tags and contexts, that can get cached. So there are just bits of cache data for each rendered. Well, it's a render array, but what gets cached is the actual markup after it's rendered. That's the point of it being cached.  That's the render cache. Then the other things kind of build up from there. So the internal page cache, which is pretty much the same type of cache that we had in Drupal 7, is a page-level caching that only works for anonymous users. It's a core module that's enabled by default. It does use the cache tag system so that it knows when to invalidate the entire page with it figuring out which cache tags are on the page by bubbling them up from everything that was in those render arrays. So each render array has a bunch of cache tags. Until you get to the whole page, then you have a whole big list of cache tags. And if any of those cache tags get invalidated, then that flushes the page. So that's a lot nicer than in Drupal 7, where they just would flush the internal page cache anytime anybody edited any content or added any content, because there wasn't the system specific cache tags. Then there's the dynamic page cache. That system's new in Drupal 8. That's the caching that works for authenticated users, as well as anonymous users. And that system uses cache tags and contexts. And it also, in the same way, bubbles up the cache tags and bubbles up the context from the render arrays until you have an entire page with its tags and contexts that can get fully cached even for authenticated users. So it might be that there are parts of the page that are specific. It says, hi, Jody, in the corner. Well, you can't cache that and serve that to every user, but that's where the placeholder in gets into it. So the dynamic page cache can cache most of the page. And then process the things that couldn't be part of that cache and then add those separately. So it can kind of cache the whole page, but then get back. If we're using a reverse proxy, like, say, varnish or a CDN, do we need, does the internal page cache module operate that, or do we want that disabled, and it's going to run it itself? Yeah. So the internal page cache isn't really going to do much for you if you have a CDN because it's just going to be a kind of redundant layer of doing something similar. Yeah. Like, we have ours enabled, but it doesn't really make much difference. It's just the same type of level of cache. And then big pipe is a core module that can build on top of the dynamic page cache. And so it's just adding a way of streaming in the placeholder elements in a different and faster way. So once you have your cache and working well with dynamic page cache, then you have the option to enable big pipe, which would let you stream your page and then bring in the placeholder things later on in the stream as a separate chunk, instead of trying to render, instead of grabbing the page and then grabbing these non-cacheable pieces and then shoving them in and then giving it to the user, it gives you the fast cached part immediately. So that's a great tool as well for authenticated users. And then for the external page caches, those are the systems outside of Drupal. So a lot of people have varnish and or a CDN, like Akamai or Fastly or Cloudflare. These systems, these external systems, can be integrated into the cache tag system. There's a module called purge that a lot of people use to help integrate those. There's some of the CDN type of custom modules. But basically, the idea is that you include the cache tags in the HTTP response headers. And then you have Drupal when there's a cache tag invalidation event. You have it reach out to varnish or the CDN and let it know it needs to clear everything based on those cache tags. So if you have this all set up, you can see that all of these parts of Drupal all use the cache tag system. So if your cache tags are right and working well, you can achieve caching that allows you to never have stale content ever, which is really important. Because even if users can live with stale content, a lot of times editors can't. It's impossible for them to do their job if they can't see the changes that they just made. And it's not just them being confused about caching or something. They can't do their job unless they can validate that what they did looks right to the end user, and now they can move on to the next task. So it's a very necessary thing that you can serve fresh content and make sure that your site is correct. Yeah, so this would be the list of the most common problems that we see when we do performance audits of Drupal sites. And the single most important one is Max H0. Like, I've seen sites that had this put on so many places that basically the entire site was uncached. And usually why this happens is when you have a cache-related bug where things are behaving strange, when things are not updating when they should, or even more like you have, if your cache contexts are wrong, you will, in some situations, serve wrong content to wrong people. And these kind of bugs are usually really tricky to reproduce and to fix. And a lot of times people are just like, OK, Max H0 done fixed. But that is not a fix. That just masks the bug and makes your problems even bigger. So never, ever, ever do that. There are some situations where you actually need parts of the page to update very frequently. So in those cases, maybe this would be a valid option. But even then it's usually better to at least cache for a few seconds or 10 seconds or whatever works. Like, it's still better to cache for a short period of time than never. And if you have pieces that need to be updated so frequently, then you also have to placeholder them. Because otherwise, the whole page could be affected. And the other problem is missing cache tags. If you have custom code and you forget to include tags for everything that affects a piece of markup, then your things won't update. And this would usually then end up maybe with Max H0 or some other half solution. But when you are, this mostly comes to custom code. When you're building custom code, you have to think about what is the data that I'm taking in to build this piece of markup. And you have to include cache tags for all these data. Otherwise, at some point, it won't update correctly. And then besides not adding all the cache tags, a problem can also be using tags that are too general. One example is there are entity list tags in core. User underscore list, node underscore list, taxonomy term underscore list. And these cache tags are invalidated every time when any entity of that type is being updated. And then if you have a site that uses nodes for everything, and if you have this list cache tags put on your elements, which views do, every time when you update any node, everything would be invalidated, whether it's affected or not. Which basically wipes out entire cache. So yeah, try to avoid this. And for views, we have a module that will recommend that you have to solve this problem. And with cache contexts, the problem is usually either not using all cache contexts that you need. Like here, you have to think in which situations this piece of markup that I'm building will be different. And you have to cover all the possibilities with correct cache contexts. So for example, if you have a view, or no, no view. If you have a custom block that takes a query argument from the URL and does something based on the value of that query argument, you have to include a cache context for query arguments. If you, as Jodi mentioned before, are doing something different in your block based on the route, then the route cache context needs to be used, and so on and so on. And then the other problem with cache context is if you use cache contexts, that's very too much. And examples of this are basically user, session. These two are the most problematic. But then also even the simple URL cache context could be problematic. Like you want to try to go more specific. And an example here would be instead of going with URL, if it's query arguments that affect the content, then use URL.query arguments. And even further, if it's just one query argument to some cache context, you can send in parameters. And here at the bottom of the slide, you see an example of that. Like if you have user.query.arch's cache context, you can tell it which query argument you're interested in. And now the markup will vary only when the value of this specific query argument changes. If you just use URL, it'll be like if they come in with a different query argument, it'll be a mess. So sometimes people use URL when they meant route. And they're like, oh, I just need to vary it by URL. That means that when somebody comes in through a Google ad that has a little query at the end from their Google ad, they're going to get a cache miss now. So you're going to pay for these Google ads. And then as soon as people take the Google ads, they get the slowest page in the world. Because you're getting them cache miss every time because it's a little unique string that they have. I have to also mention that this could also be a tech vector for a DDoS attack. If somebody knows that you are rebuilding caches for every different value of a query argument, it's very easy to just change it all the time and you will be constantly rebuilding caches and your style will go down pretty quickly. Yeah, we already mentioned the topic of place-holding a few times. And place-holding is a tool that we can use when we have a high-credibility context, aka we have markup that changes a lot, that varies a lot, or if we have a high-frequency validation, like if we really often invalidate things. Things that are problematic in terms of caching the entire page. Like if you have pieces like that, then we can use place-holding to basically remove that piece of markup from the general markup that is then cached separately. And then we use place-holders to render these problematic parts separately and then put them into the places where place-holders have been left before. Then when you have place-holders, big pipe can leverage that and can deliver you most of the page initially and then serve these pieces that are place-holders separately and then the appeared performance is much more. And there is also automatic place-holding available in core, which will work if you are using lazy building. And then if Drupal detects that there is a piece that is lazy built and there are any of the problematic contexts or tags attached to it, it will automatically place-holder it. You can do it manually, and I will show you how, but if you don't do it and you don't specifically say that you don't want it to be all place-holders, Drupal will try to be smart and do it for you. And one example in core where this is used is blocks. So blocks are built through the lazy builder and if you have problematic things on block, Drupal will auto place-holder it. One thing that we just learned yesterday is that context when it's serving blocks doesn't do lazy building, which means that auto place-holdering doesn't work and there is a patch about that. So if you're using context, use that patch. It will help. Now an example of place-holdering. Can anyone guess which piece on this page will be place-holdered? Which piece will change very frequently? Any right? The message, yes. So the nature of the status message or error message or warning is that it's only meant for a single user and just once, usually. So if we would cache this page together with the message, we would basically need to cache per user and we don't want to do that. And that's why, if you look into the render element for status messages, it won't build the message in the main build function, but it will only apply this lazy builder callback and say create place-holder. Lazy builder is basically just telling Drupal, okay, I don't want to build this part of the render array just yet. You can do it later. And in order to do it, just call this callback and it will return you the render array that needs to be there so you can use it when you're rendering the page. And if you don't place-holder it and if Drupal doesn't decide that it wants to auto-place-holder it, when the page, the render array is being rendered, this will be called and injected into the general, the bigger render array and rendered as normal. But if you have a place-holder, then Drupal will not call that at all and just call it after when it built the page-cached it and it needs place-holders it will render them separately. And if you go to the next slide, here we see the example of this lazy builder callback and it's basically just a standard render function that returns a render array. So if you know how to work with render arrays, you can use this tool. So you just declare a function that returns a render array and that's it. You obviously also have to provide cache metadata for it. So this piece can be also cached, probably not as efficiently, but you can still cache it, right? And then if you go on. And here I have two examples from the renaissance page where we used place-holder in and at the top we have the top bar of the site. And I'm not sure if you can see, but in the right top corner, there is a card icon with the number. And this icon basically counts how many products you have in the card. So as you can imagine, like the entire top bar, it's pretty, you can cache it pretty efficiently because it's more or less the same for everybody. But then this card will change basically by the user. So we place-holder that icon. And in the support block, we have a few links that are basically static, basically. But then we have this link that says subscribe to document updates. And depending whether you are already subscribed or not, it will change, it will say subscribe or unsubscribe. Which means that this link will vary per user. And then if Drupal would auto place-holder that, the user cache context from that link would bubble up to the block. And then the block would be place-holder in the core block system context. But if you lazy build and place-holder just that link, then the block will still be cached efficiently and only that link will be place-holder. So it's still better results than place-holder in entire block. There are a few tools in Drupal Core that you can use when you are debugging problems related to caching. One are the cacheability headers. If you enable this parameter in your services.yaml and you don't want to enable that in production, you usually do that in local environment or maybe you're in a UAT server or something like that. And then Drupal will add headers with all the cache metadata to your responses. And that lets you see which tags, which contexts are added to that page. And here we can see, I hope, that there is user context in the list, which is then, you know, when you see that, you have to wonder why is this page varied per user? Can I avoid that and how can I avoid that? And well, this is very useful when you're thinking about a single page as a whole bigger piece. We also now have a tool that lets you debug individual pieces of the page separately. And that one has been committed just recently. It will be part of 9.5. We are using the patch since we're still on 9.4. So if you, we really recommend it, it's really nice. And when you have the patch, or when the 9.5 will come out, there is another parameter in services at YAML that lets you enable it. And then if you go to the next page, when you have that, if you open the source of the page, you will see these comments on top above every element that was rendered cache. Like each block, each article or whatever you have, like each piece that is cached, you will get this information for. And what you will see is whether it was cache hit or not. If it was not a cache hit, you will see how long it took for this piece to render, which is really useful if you have a page that takes a lot of time to load. Usually it will be just one block that is responsible for that. So you can enable that and just scroll through and find the one that took the longest and started looking into that. And then you will see all the cache context to this element used, all the cached tags. And you can also, it's separated by pre-bubbling and post-bubbling. So you will see which cache metadata was added to this element as a parent. And then which cache metadata was there on this element after bubbling happened. So you will be able to see, for example, which tags were added on a block and which tags came up to the block from something that was beneath, like from an image that was displayed as part of this block or something like that. And this is useful when you are trying to figure out why you have a user or a session context somewhere. And if you see that it only appeared post-bubbling, then you know that there is some element on that block that caused it. It's not the entire block that's causing it, but something like further down in that mental tree structure that we talked about before. So really nice when you're dealing with caching and performance problems, this patches. I also sometimes look at these because if you're deploying a hot fix and you would like to not clear the entire cache for your site, these tags will tell you what you can change that'll clear out just the thing that you fixed. So if you had a bug in a certain block and you're like, I really need to just clear the cache for that block, you can see in these tags, you're like, oh, if I edit the system site configuration, I'll just go in there and hit save and that will clear out this block. So then I'll have to do a full, oh, can't do that. Can you do that to get a brush as well? Yeah. It's brush, clear tag or something like that. Yeah. I don't know what you're talking about. Look at these keys all about. You didn't mention those before. Yeah, keys are basically the name of the cache item when it's stored into the cache back. Keys are also set on the render array and just as you can set tags and contexts, you could also add keys to any render array. What that does is if you add cache keys to something, it will be cached separately. So if you have a block and block has some general text that doesn't change much and then below that block you have something that is changing very often. You could add cache keys to that thing that is caching very often and then it will be cached separately like the content of the block will be cached but then also the thing that is below will be cached separately. Usually when you're doing custom codes you don't need to use that. It's very specific situations but that's basically what it does. And you have to be careful if you do it. If you use cached keys that are already used somewhere then you will have a collision. Yeah. So then the other kind of side of debugging this is so you can see those cache tags and cache contexts like in your local and see what's going on but that doesn't tell you the whole story because you still need to see what's actually happening on your production site in terms of cache invalidations. It doesn't really matter what the cache tags are without knowing what's going on with the cache invalidations. So you don't know that like you have problematic cache tag if you don't know what your invalidation pattern is like. So there's a fairly new module for the past couple of years called Cached Metrics from by Moshe Weitzman and it sends you this logging of what's happening on production into New Relic. And this really helped us to solve some problems that we just couldn't explain to by really being able to see what was going on on production. So what the Cached Metrics module does and it's pretty much just like an enable it when you're done type of module. Every time there's a cache invalidation event, so like when an editor saves a node or something that creates a cache invalidation event, it logs that. So you can see all of that data and you can see the patterns of like which tags are getting invalidated a lot and then compare that to the tags that you're using. Because only together can you kind of get the full picture. It also tracks the cache hits and misses. So you can understand like how good your cache hit rate really is and like which which things are not getting cached. So this is like a dashboard that I set up in New Relic using that data. So in here I can see like within an hour like which cache invalidations are happening or I can change the time range and I can see like oh this user list cache tag is getting invalidated a lot. And I found out oh that gets invalidated every time a user logs in. So anytime any user logs into the site user list gets invalidated. Then we found oh wait a minute, we have user list cache tag on tons of our content. It's like all over our site. So every single time someone's logging in it's like wiping out our whole cache. We found out that Drupal likes to stick a user tag onto like your like node content just in case you wanted to display the author's name which you never do. But just in case you did, they will helpfully, every time you have like a person who's like their job is being the editor every time they log into the site it'll clear out the cache for every piece of content that they authored. That's just what it does like by default. So you have to like go in there and like get rid of that cache tag to get that to stop happening. So this caching validation by URLs that's like helping me understand this data a little bit more. So like this is our like SSO callback. So when they're going there it's clearing out the like those user tags. Then this are like my overall dynamic page cache misses. 71% are misses. So obviously we're still fighting the good fight over here. So like get our cache hit rate up. And then I can dig into it and I can see like, okay, these are certain URLs where I'm getting these misses a lot and I can start to dig in and like see which is what I need to fix. So the last thing we need to talk about is views because one of the big things that we found debugging this stuff is how many problems we got with caching from using views. So views as a core module so people can be fooled to think like that it probably works pretty well with the caching system is actually pretty problematic. So I would recommend not using views if you're trying to have like a high performing site because it's kind of a hassle. But if you're using views and you're trying to fix things in views what you need to know is there's three options in each view how you cache it. The first one's tag-based and that one is just using the cache tags but views isn't really that smart of like which cache tags it's going to add to your view. It will add the node list cache tag to every node view. So that means that like every time that anybody edits a piece of content or adds a piece of content on your site which in our case is every five seconds it'll wipe out the caches for every single view across your site every five seconds. So that's basically like not having caching at all. Then you might think okay I'll get around this problem because I'll use time-based mode. So you ever like try to change the mode to time-based? Well the time-based mode your thought is that this will clear based on some amount of time but actually what it does is it keeps the cache tags the same cache tags that were already there and then that we're already clearing every five seconds and then it adds like a time part as well. Yeah, that's not what you would think it would do. No or want it to do but that is what it does. Just in case it was cached properly it will invalidate after a certain period of time. Yes, so there is like an issue for it it's been around for years but yeah never use the time-based thing it just doesn't work. The other option is none. If you use none you're thinking okay it's never cached maybe that's what I need but the problem is unless you had like place-holding working for that view that's gonna make your entire page uncacheable not just the view. Another really fun way to make your entire page uncacheable with views is to use like a random sort. If you go into like the sorting and pick random then views is like well we can't be random if we're caching we better just like invalidate this entire page cache so that it can actually be random. It doesn't warn you it just quietly destroys your performance. So the way that to deal with views is you have to add this contrib module called views custom cache tags. When you add this module it adds a new option in addition to these three that's called like the custom cache tags. And when you set your views to use that option it removes the node list cache tag and then lets you set more specific cache tags onto the view. So typically you would use like node list article if it was like a list of articles and that way it'll just clear when somebody updates the article. Because the issue with these node lists like tags a lot of views if you're like just listing like here's like the 10 newest articles you can't just use like specific cache tags of like these are like the 10 nodes that we're gonna clear it if these update because if somebody adds a new article then it has to be in there. And so you have to wipe it just because somebody added a new article. So you don't always know like every piece of content that might affect the cache. You have to program it, program out of the kind of tag design that's not so big. It's configurable, it's in the UI, yeah. Yeah, you like change the mode and then you have to type in the cache tags, yeah. So yeah, it's advanced but it's the only way to cope with it. It's also like just if you enable it and you know that you have a view with only list articles, it's actually very easy. You enable it and you put this node list colon article or whatever your constant type machine name is, but it also lets you do really complex validation techniques. Like I had a client that they had a list of users but only some fields on the user entity affected this. So we started issuing custom cache tags just when these fields updated and we used those in here and that increased the key trade immensely. Okay, anybody got questions? Yeah. Do you do the cache tags in context automatically bubble up or do you have to explicitly ask them to bubble up? No, they always bubble up. How do you handle to part cache tags table? It's growing old. Can you repeat? How do you part? How do you delete the cache tags tables in a database because it is growing old? I mean, you can delete it, it's not a problem. If you delete data from that table, it will just mean that all the cache items will be invalidated. Because the way this works, like in this, first, if you're using memcache or redis, you should put cache tags in memcache or redis because it could be faster and it depends on which one you use. There is in Rhythmify, there are instructions on how to do it, but the way this works is you have this table in the database or in memcache that has a cache tag and account. And then each time when you invalidate, it increases the count. And then when you are loading an item from the cache, it has the count at the time when this cache item was stored and it compares them and it says, oh, if they're the same, this cache item's still valid. If they're not the same, it's invalid, so I will do a cache miss. So if you just drop that table, it will basically invalidate all the cache items because the counts won't be the same anymore. Are you purly purly purly don't know if it's available? Are you delete the cache tags? Sorry? Are you deleting your query? We are usually using memcache or redis, so we don't have this problem on the database. Yeah, I think it'll just, when it runs out of room, it'll start to drop stuff. Yeah, and it will drop stuff that was accessed. Usually it will drop stuff that was accessed, the most amount in time in the past, so cache tags will be pretty frequently accessed, so it won't be dropping those usually. Where's that lock cache cache? For context? Yeah. Yeah? Can you see it? It's on the slide, but it's node ID 2919934. 2919934, I can write that. Yeah, the bottom there. Yeah. I have a silly question, but if you invalidate a parent cache tag, does it also invalidate the children? No, with cache tags, you don't have a tree structure. They're all independent. But if you have, for example, on a typical situation on a view would be that you have a bunch of individual cache tags, so node one, node two, node three, representing the nodes that are displayed on the view, then you will also have node underscore list. And if you added node one, both these cache tags will be invalidated. If you added node 55, it will be node colon 55 that is invalidated, and this view that we are now imagining doesn't have this one, but it will have node underscore list. So every time when something is, when some action is happening on the side, a lot of cache tags are invalidated, not just one, like not just node colon, node ID, but also other cache tags that are relevant to that event that is going on. Thanks, Kist.


Elizabeth City State University was founded in 1891. Since then the institution has developed into the region's regional university. Our goal now is to serve all of the citizens of Northeastern North Carolina and the state in general. We have impact not only on this region and on the state but we're also moving into global interaction. We believe we're one of the best kept secrets about North Carolina. Most of the people who even know where Elizabeth City State University is don't know how closely we are situated to the waterfront. At ECSU we are building on our 125 year legacy of students centered education. Student body looks a lot like society. We have a number of students who are 18, 19, 20 years old. But we also have students who are working mothers. We also have students who are middle-aged men going on through second careers. There is never a dull moment at ECSU. We have great on-campus facilities. We have great off-campus opportunities for students whether academic or extracurricular. There's always something for someone to do. The small class size at ECSU is one of the major benefits of this institution. ECSU is a college that allows one-on-one interactions with your professor. Professors help us here by not only motivating you but being available. The ECSU student-teacher relationship is really one of the prize possessions of working at this institution. As a professor we have a chance to get to know our students in a very intimate setting. I came to ECSU to shape the only four year aviation science degree program in the state of North Carolina. We're also very close to the largest postcard air station base in the United States, which is in Elizabeth City, just within two miles distance. And that really helps our students that they can study here and do internships. Medical school entry, dental school entry. We have those that have direct entry into professional business programs. We're also able to build networks with professional programs so that we can build pipelines from here to anywhere. When I graduate from ECSU, hopefully I will pursue a graduate degree in mathematics. Choosing a school like Elizabeth City State University prepares you for life way beyond graduation. A student that graduates from Elizabeth City State University regardless as to discipline is going to find that they are very well grounded technically in whatever they choose to major in. My students have opened up my mind to so many things I've never thought of before. I learn from them and they learn from me. ECSU, we're different because we're a family. The ECSU philosophy is when you come here, you can be anything you want. We live together, we love together and we appreciate one another. My professors encourage me to go beyond the boundaries of the classroom. Our students have the courage to imagine the freedom to challenge and the audacity to change their future. We have an impact on everyone's tomorrow. We train tomorrow's teachers, scientists and leaders. I am receiving a high quality education at a value that my family can afford. When you're fortunate enough to acquire knowledge, it is your responsibility to give it back. That's why I'm here at ECSU. I'm here for students. You are part of a student family, a campus community, the Viking story. I am studying aviation science. I'm studying to be an engineer. I want to be a pharmaceutical scientist. I am a biologist. Every day I discover yet another reason about why ECSU is exactly where I belong. This is my ECSU. We are all Vikings. The philosophy at Elizabeth City State University is to live is to learn. Your entire life is learning, but not just learning for yourself. It's learning so that you can make your community better. Learning so that you can pour your legacy into the world and make the world a better place. If you are in the pursuit of excellence, you'll find a welcoming place here at Elizabeth City State University.


The Lord is good. The Lord is good. We thank God for giving us an atom of unity this morning so that we can be able to go back to the word and see what He has for us this morning. Welcome once again our online wash pass and those who are in our office co-attenders.  Immensely bless you. I know Paul is writing unto us in the book of Ephesians chapter 3 verse 20 where he says, he who is able to bless you and keep you and give you abadans abundantly exceedingly and that's what you want this morning that God can able to give us whatever he wants in abadans. Now welcome you once again to our morning devotion. Just a reminder that this week we have a theme on our morning devotion that is saying let God be God. Once again I'm back with this theme. We want to see and know and at least get to understand when I'm saying that let God be God. Yesterday we ended by saying that even if it is death you still want to maintain it and say I will be faithful, I will stand with God even when it seems that he's silent, that God is never silent, that God is speaking visibly. It's only that he has given us time to open our eyes and think in the word and be able to give the world what it needs. So this morning once again we are here and before we go to read that word may we pray. Our heaven father, our God who reigns from the asian to now untreatanity. We pray that God you can able to speak to us this morning. We are still maintaining this theme that God let God be God. This morning may you speak to us in a power way that you see it is better for us in the stillness of your voice may we hear it and answer it according to our will. We pray and trust in Jesus name. I want to start by saying this that many times when we are facing adversity we ask ourselves so many questions and we want to wonder and ask is God really hearing my prayer? Is God answering me? Is he walking with me? And one thing that comes to my mind that at times when we have been crushed and we feel that we are in despair that there is a time we don't worship God in the right way. But it means that sometimes we disconnect. But here this morning I'm here to let you know that do not disconnect from God. Remain holding on because him he will never stay away from you unless you stay away from him. Him he will remain to be God. Him he will remain with the mightiness that he wants to be able for you to see in his life. And that's why sometimes I sit back and pond in my mind and see the mighty works of Jesus Christ in my life. Then when I look around and see that people can doubt God and ask is God really answering? Is God really hearing? Is there with us? And I remind you this that even in silence God speaks the loudest. So this morning I want us to turn our eyes to the story of Elijah. Elijah was a man of God. And Elijah has been caught up in a situation whereby he must be able to tell us whether this God is worshiping. Is he the true God of Israelites?  Can you still hold on? And Elijah was given a word from God in the Book of First Kings chapter 17. But I will go to chapter 18. But quickly in chapter 17 Elijah is given a prophecy from God and the one says that there will be no rain for three and a half years. And people suffered and people had issues. People were not able to get food. Then quickly the story changes when God is coming in to let people know that when he is given an opportunity even in the worst adversity he will be able to stand and let people know that now this is the one who is supposed to be worshiping. Now Elijah, he faces King Ahab. And this is what the Bible says from chapter 18 verse 17. It says, and it came to pass when Ahab saw Elijah that Ahab said unto him At Thou hid that trouble at Israel when he was able to see Elijah is like this man you have given us trouble enough you have set us on fire and there is no way we are going to get it out. He did not know that the Lord was answering was able to take these people to the decisions that they had made once you disobey God there must be consequences. Now the people, the Israelites they were facing their consequences of disobedience and when they did not have rain for three and a half years it was because of their what their disobedience. Now when he saw Elijah is complaining but Elijah answers this and he answered, I have no trouble Israel but Thou and their father's house in that ye have forsaken the commandments of the Lord and Thou has followed bound. You see the problem of the Israelites at this time they were worshiping God's God's I know from a Bible study we are differentiated yesterday the difference between the small g God and the true God that we serve so he was telling Ahab it is not me but you people have turned your back against the true God and you are worshiping other God's and now you are facing the consequences. When this man had like this then Elijah when he looked to King Ahab he said now let's have a challenge let's see which God is supposed to be worshiped who is supposed to be given the reverence who is supposed to be given that power who is supposed to be worshiped in reverence and say that now when he stands no one can be able to stand against this God and was that one then Elijah came up and said this and Elijah came unto all the people and said how long had he built how long had he between two opinions if the Lord be God follow him but if Baal and if Baal then follow him and the people answered not a word why they knew what they were doing they knew they have been serving God they have been serving Baal and now Elijah is coming to them and saying if you know that the Lord is God if you have been letting him to be in your situations serve him and we want to see what he can do but if Baal is then continue then these people they kept quiet then he said now let's do this these people we are going to divide ourselves we have the true God who is supposed to be serve and we have Baal and there were prophets of Baal and there were prophets of Arshel these people in total but when they came here they wanted to be able to confront who Elijah with his God then Elijah said now let's do this let's have two blocks brought here you cut one you dress it on your altar and do not put fire on it I will also cut one and put it on the altar and I'm not going to put on fire on it then we are going to pray verse 24 says and call ye on the name of your God and I will call on the name of the Lord if you see that word Lord is written in capital L-O-R-D that one was a unique way of addressing the mightness of God infact in the Hebrew canon it was written Y-W-H-W it does not have the vowels it is just consonants meaning they were unable to pronounce the word and even when they were writing the Bible those who were writing the Bible when they got to get this word then they will go wash themselves well come write the letter Y they go again they consecrate themselves once again they come and write the next one meaning it was that mightness and they were saying it was holy it was not supposed to be what to be even uttered so he is saying you people if you know that you are serving your God go and offer your sacrifices to what to your God but me I will call the name of the Lord and the God that answered it by fire let him be what be God and the people answer and say yes well spoken now we are able to take the challenge you know sometimes I wonder when Satan has taken a seat in your life you can even cheer on something you are not even sure what is going to happen you are not even sure of the consequences they were cheering because in the past they have seen what their Gods have done but they are not experienced the power of the God of Elijah then the sacrifices were given I love what is happening in verse 26 and they took the block which was given to them they dressed it and they called on the name of who Baal from morning even until noon where was this God where was he hiding they have been calling him morning it is now noon they are still calling on the name of who of Baal saying oh Baal hear us but there was no voice nor any that answered and they leaped upon the altar you see they were very joyous they were now let us show you that our God is able to work this miracle out when they sat there they started praying they started crying to their God they cried they cried it was morning time was going it was midday now every other person was like what is happening they ripped up here and there around the altar calling the name of the one of their God and it came to pass at noon then Elijah mocked them you know when God is in your heart you do not fear Hallelujah you do not fear Elijah came in and mocked them and said cry loud why perhaps for he is a God for he is a God Elijah knew what he is talking he is saying cry even if you cry he is what he is just a God he is not someone who is going to be able to answer this thing neither he is talking or he is pursuing or he is on a journey he is God who can be able to forget that is what I can be able to say that this God that you are praying unto he can be able to forget maybe he was struggling and now he has forgotten he was offering a sacrifice then he says all paradevenja he is sleepy he is sleepy a God who is sleepy a God who is lambas is that a God who can be asked anything and he must be awakened Elijah is telling them you people see look here if you are if you are God as travel he is on a journey maybe he is relaxing somewhere he is sitting maybe he is taking tea this man maybe he is having his dinner or something of that but one thing that makes me to be able to love what Elijah said paradevenja this man this God is sleeping a God who is sleepy our God that we let into our situation he does not he does not then he says that maybe this God must be awakened for him to be able to know that there is something that is happening if you are calling or you are going for help to somebody and this somebody is not like answering then you are on a wrong way but they cried aloud and caught themselves after their manner with knives and lances till the blood gashed out the issue here is when Elijah is coming unto them is asking them if you are God must be awakened for him to be able to know that there is a mission that is supposed to be done then you cry aloud make sure that you tell him what is supposed to be he is supposed to hear then make him to be able to be awake to answer your prayer see they cried until time was not there but let me come back and remind you this but our God is God our Lord is God and he says when he says in the book of Jeremiah 33 verse 1 verse 3 says that call unto me and I will answer and show you great things that you do not know about Hallelujah when you call unto God our God has answers even the things that you do not understand when he answers every other person around us can be able to experience that this one is not an answer from the human being then Elijah went forward and said unto all the people come near now if your God went for a journey he is sleeping he has not been awakened now come come come come come near let us experience the power here then he brought the people near they came near to him and he repaired he repaired the altar that was that was ruined the altar that was supposed to be used for the power of God and he repaired the altar he called every other person there then he dressed the pulok he put it he put it on the on the altar then verse 36 says this and it came to pass at the time of the offering of the evening sacrifice that Elijah the prophet came near and said Lord God of Abraham Isaac and Israel remember in our Bible study yesterday we were told in the old testament God was a person of God was a person of being that if it was it was Jacob it was God of who God of Jacob now he is referring to that God of Abraham the one who answered in the bush he is calling the God of who the God of Jacob who traveled with him far and wide and brought him back and he is saying then the Lord of Israel let it be known this day that is now at God of Israel hallelujah let it be known even if you are going to answer this prayer in another way but let every other person know that you are the God to be worshiped and you are the God of Israel hallelujah then God then God and that I may and I am that servant that I have done all the things at that one so whatever Elijah was doing it was not his own making it was the making of the Lord himself then he said hear me O Lord hear me O Lord that these people may know at the Lord God and that Thou has turned their heart back again then then the fire of the Lord fell and consumed hallelujah hallelujah you see when these people they were dressing their block and doing their things they prayed they lived all around they cried they were able to cut themselves even blood they were able to be out of their bodies but their God did not answer but the time Elijah came to be able to dress his sacrifice he even told them if you go back to the in verse 35 32 and 33 he said that he even told them when you are I have dressed this sacrifice but even bring water pour on this water on this sacrifice but I am told when he prayed the fire came from heaven and fell on the sacrifice it consumed the burnt sacrifice the wood and the stones and the dust and it lit up the water that was in the trench hallelujah when it comes is a mighty God hallelujah and that's why in our own in our own in our own saying we can say that Yahweh you are might but because the Hebrew people were writing the Hebrew canon they were not able to speak they say that Lord you are God when you are given a situation you never let down your people you come and you stand and the people they will experience the mightiness of Jesus Christ this is the same God I am bringing to you brother sister which situation do you feel is too hard for God to be able to come in is able to come and when he comes even those people who are doubting they will be able to see because he came he consumed the sacrifice not only the sacrifice the woods the stones for God's sake the dust and even lit the water the water meaning he was able to consume why when you ponder on the mightiness of Jesus Christ when he comes to your life he will resolve your problem not only what you are going through even what you do not know hello even what you do not know and when he was given that opportunity God came out and when all the people saw they fell their faces down hallelujah they were able to know that now this one is not a normal thing and they said the Lord now they have shifted from their little gods they have shifted from their small gods and they are saying the Lord he is God the Lord he is God hallelujah I love that God I love that God because when he comes every other person must be able to do what to feel the power they are saying now let our gods be let them be born because if he was sleeping he was not able to be awake to be able to attend to us now we have shifted our focus to who the God the one who reigns forever hallelujah and that's why the psalmist is saying that our God let me read that one the psalmist is saying in the psalm 121 he says I will lift up my eyes 121 psalm I will lift up my eyes unto the hills from west come with my help my help come from the Lord still the capital Lord the Lord which made heaven and earth meaning every other thing that is happening here on earth it is seen and it is visible before God and he says he will not suffer they should be moved that he that keepeth the will not slumber hallelujah but behold he that keepeth his life he shall neither slumber or asleep if you think you are calling on God and you feel that he is sleeping he does not do that our God is awake 24 hours a day maybe 3 or 4 or 6 5 years in here is right there with you every moment every second I see the tickles God knows what is next in your life so when you call on the name of the Lord he will come and be sufficient in your situation hallelujah he be able to do something and when these people they were able to see that they all were terrified and one thing that makes me happy they knew that this God of Elijah who has been led to this situation is not going to be washed even when you are standing they fell on their faces they wash this God my friends this morning we are going home hallelujah we are going home the fact is whether you are in trauma or not whether you have been washing the gods or you have been washing the Lord we are going home it is not far from home but the only thing that is needed before we get home is that we turn our hearts to our Lord Jesus Christ one thing that makes me happy our Jesus says Father for those that you have given unto my hands I will make sure that I give them unto you hallelujah so which side are you standing are you with the bells are you with the Lord God in heaven because our God does not want he will keep your feet he does not slammer neither does he go for a leave he does not take a leave and say now maybe I am taking my deal our God is ever present his mighty power can be fell even the darkest part of your life hallelujah this morning my friends test this God and see that he is good our God neighbor slamba is looking just is waiting for you to recognize and let him be God in your situation and once you have given him an opportunity he will be able to stand up and make sure that every other person around you can be able to feel that this one this one is a mighty God this one is Jehovah and that's why many times we sing and say he is our Ebenezer sometimes you are unable to walk but when you have allowed God to be God in any situation in your life you find yourself today here worshiping and you say it is true that you are Ebenezer our God who does not sleep our God who does not slamba may I tell you that friends may we look to Jesus in every situation when you are found in in between the rock and the hand please place on a little bit and let Jesus be Jesus let God be God he will return the situations around and every other person be able to say that now this is the God to be worshiped I find it so sometimes we are daring we tell God now you know this is Nairobi we have to go up and about and do our works give God an opportunity to order your steps give God an opportunity to make sure he is ordering your family give God an opportunity to order your job give God an opportunity to order your children what about our husbands and wife give God an opportunity to do that and he will mightily do that you are going to be blessed beyond borders I will tell you that if you ask God he will bless you and when he comes to your life he will leak everything out of your life any impurity is going to wash them get them out of your life give you away and we are going to enjoy in Jesus Christ I am inviting the choristers we are going home our song 439 we are going home I have been asking around is there someone who is going home who is upward whose mind is upward who is saying that now I am tired of this journey but I want to go home time is tickling soon we are going home but before we go home let God be God in your situations let him stand to be your hero hallelujah let him be able to order everything in your life then when we are almost there he will be able to welcome us another impurity every other thing has been taken away I want to welcome you if you have a prayer request right on our prayer boxes this one and the other one as we sing this song prayerfully on our feet then you can be able to go on our knees as we pray our choristers welcome