the diversity of the campus. We've got people of California and New York just all over the place and you know it's like being able to have an event like this it makes us kind of proud to be able to show them how far we've come. I'm surrounded by positive people they're always encouraging me to strive for the stars and just stay focused on my school work. Everybody here is going to welcome me with open arms and they're always going to want to see you succeed so here you're going to get that one-on-one experience that you might get. This is an absolutely massive campus there's corners and buildings that I've never even stepped foot into but what I have been able to do is really find those groups that I fit in well with and you just make your big campus small and you find your group and you find your community and you stick with them and they'll stick with you. I had so much support not only from the deans of the honor top but also from so many of the people in the community that I've developed I've absolutely fallen in love with my culture with African-American culture and for me I think it's really important that I take the opportunity in this space to share that culture with people around me who might not necessarily have had that same exposure to my culture. There's so many people from like out of state and different parts of the world who all come here we're all just mixed together and you're learning about different people's cultures and experiences different than your own it's just great. Nothing is going to be being a Brian Denny especially at night but that first buzz roll of free game and everything starts off there's no better feeling than that. Joining organizations gets you into smaller communities and really makes this place small and helps you find your family and your niche. This place isn't as big as people think it is. My parents are from Sudan and I bilingual home as well so understanding and and speaking in different languages is really integral I think to who I am and I think at the University of Alabama you can really set yourself up for anything that you wanted to. So I honestly came here for football but they offered like so many opportunities. I joined the Sorority my first semester here and like just being in the Greek community it like gave me like a physical longing. I came to Alabama as a challenge. I wanted to broaden my horizons, meet people and just seek out new adventures and after coming here my eyes have just been open to it. It's important for everybody to represent groups like be a part of and feel welcome on campus. Obama school is the favorite like school in the world now it doesn't mean I have to stay like everywhere like I'm so glad I can be bigger yes


So my session is about state of hooking into Drupal. There are talks that we are slightly, slowly moving from hooks, the procedural hook system, to object-oriented hook system that we have technically borrowed from symphony, I would say. We would be using symphony to event dispatch a component for hooks in Drupal. So we're already on the track. How soon we can get there would mainly depend on the effort and prioritization of this thing by the community. So there are many other more important and I would say, yeah, important issues that need to be taken care of right now. So this may not get that much of an importance, but it surely will get there. We would eventually have the traditional hook system replaced with the object-oriented event system. So brief intro about who I am. My name is Nidai Smileshya. I am a developer at Acquia. It's been two years now that I've been with Acquia. I left college and straight joined Acquia. This is my contact info. I come from a beautiful place. It's Kashmir in South Asia. So I encourage you to visit us, read about it. We have a Drupal community, Drupal Kashmir as well. Google it and find ways you can come and contribute. An overview into what I am going to be talking about. Everything should be pretty simple. We'd basically be looking into what hooks are and why they were used and when do we use hooks and what for. Then we'd move to a state where we are currently, what's up with hooks and what about events. Since we are using events for some things in Drupal 8, we'd be looking at how we can do that for our custom things and what all we can achieve with events right now and where we are still using hooks in D8. Then we'd also be exploring a bit about symphony event dispatcher. Basically the same thing, how we can use and explore the symphony event dispatcher component with D8. And then as I mentioned, we are not yet there. There are still hooks are still there in D8. Then if you really don't like symphony or you don't like object oriented for reasons I cannot imagine, then you can still use hooks in D8. We'd be looking at that as well. So mainly a transition from Drupal 7 to Drupal 8 has been interesting. There have been a lot of changes for developers basically. It is, I think this talk is the benefits of moving from hooks to event dispatcher component is more about developer experience. So there are not too many benefits on the user front. Not, I guess, we cannot think of any performance reasons or something like that. But certainly developer experience has enhanced in a way. So Drupal 7 to Drupal 8 journey has been procedural to object oriented way. We have imported or used symphony components, dependency injection, service container, and event dispatcher component. Code has been a lot more modular in a way. Drupal itself is a modular system. But now we have sort of moved from making Drupal modular to making our modules modular. And eventually we are now writing cleaner code and we have enhanced developer experience as a result. So some things that have changed are like we have dependency injection for core services. We have event subscribers for hooks. We can now write portable code with the introduction of services and with the introduction of dependency injection, we can use other people's code. We don't have to worry about writing our own stuff, complex stuff. There are a lot of non-Drupal stuff, non-Drupal people who have created so many awesome things that we can simply use with services now in our systems. We can, as I said, use code from somewhere else. And unlike Drupal hooks, we can now write events that can be unit tested. So we can have objects and we can have mocked objects, mock dependencies, which can help us write better unit tests, which certainly wasn't possible with Drupal 7. So we'd be starting with looking into hooks a bit where we have come from, what purpose did hooks serve, and how they were executed. So we could then compare it with event dispatcher component. So this is exactly I was, while researching about this talk, I was going through previous talks as well. So there was a talk by Kim Pepper in Ruppelkorn Asia. So he mentioned this particular comment by Dries in 2000 when he started this hook system, the concept of hook system. The idea, I think, is to decouple components to be able to sort of, through the lifecycle of the program, to be able to run our custom code, run certain snippets of code at certain stages, or at certain events, to be able to decouple our event triggering mechanism from the event listeners. So to make them separate components, that is the basic idea of the hook system that hook system was started with. So to extend your functionality, your custom module would simply need to implement a hook. And when Drupal wishes to allow intervention, like when core wishes to allow intervention, or when you, as a module developer, want other module developers to intervene into your code or to extend your functionality, you'd declare a hook, and then the other module developers can hook into your module, or we can hook into core by implementing those hooks. So hooks are basically discovered in the module file. They are triggered by a naming convention mechanism. You basically declare a name, and then prepend it with your module name. And then whenever whichever module calls your function, implements a function with that name, prepends it with their module name, Drupal will call it. We'll look into how that happens and how it's happening now. So basically, there are many types of hooks. There is not a clear classification of hooks done anywhere, but I've tried to generalize a bit. Info hooks, which are used to declare metadata, as you can remember, we used to have hook block info and hook block view like things. So those info hooks, I think now we have gotten rid of them in D8. We have sort of removed all the info hooks.  And then if you wanted other module developers to intervene into your code or change that data, you used to have alter hooks. One fine example could be a form alter, wherein you had a form array. And then you were able to hook into other people's forms, and you were able to let other module developers hook into your forms. So the way we can create hooks is we have to decide a hook name, and then we, in our modules, and this is what core is also doing. Module invoke all, this is a famous function. This is how hooks get executed. What we need to do is module invoke all name. So whenever we just, if we have a hook, we decide on something, some name, we have hook, whatever. So if we call module invoke all, it would find all the enabled modules in your system and call all of those implemented functions. Module invoke all would find all the enabled modules off your site, and then execute all those functions. But if you want to execute a particular hook from a particular module, then you would need to call module invoke, then module name, and name. This is basically what's going on in D7, or what I can say what used to go on in D7. There's also a Drupal alter that I was talking about.  That would be myData, and then you would pass in an array of data that you would want the users or developers to alter. Then the users would implement hook myDataAlter, and then they would get this data array as an argument, and then they could change that. This is how the naming convention mechanism that I was talking about earlier. This is how D7 does it, the hook system. If you can see the return call user funk array. Basically, we are deciding, creating the function name here, module, prepending it with the module name, and then a hyphen, and then your hook name, and then Drupal is calling all those functions and providing it with arguments. Similarly, with Drupal alter as well, we are just dollar hook, and the dollar type is your module name, and then, sorry, dollar type is your hook name that you would pass in here, myData, and then alter would be appended to it, and then it would be passed in your data array. An interesting thing would be was to manage the order of execution of your hooks in D7. So again, what Drupal used to do is use its own hook system to decide the order of execution of its hooks. So we used to create a Drupal alter module implements, and then pass in the array of the hooks, or this implementation array has all the hooks mentioned in it, keyed by the module name. So basically, if you wanted to alter the execution, if you wanted your module to a hook from your module to run before another module, so you would go to this array, you would implement this hook module implements, and you would unset your module, unset the element keyed by your module name, and then you would append it to the last so that the hook from your module gets executed last. So the state, this would be mainly about where we are. All the info hooks are gone. Info hooks are replaced with either annotations or EML files. As you can see in hook block info, we have an annotation block that replaces the hook block info. Hook init, hook exit, hook boot are gone. Alter hooks are still there, form altars and other altars. They will be likely to be replaced with event listeners, I can say. There are some Dorotto issues that have these conversations going on to prioritize this transition from hook system to event system eventually. But then that would be up to the effort that community gives and the progress of those issue queues. So that way we can, I think, get an answer to when we would be able to finally replace the hook system with the event dispatcher component. What's wrong and why do we need to change from hooks? So basically, hook block info. Block hooks are a perfect example to analyze what's wrong. So we have four block hooks in four view, configure, and save. Whenever we want to declare a block, we have these two required hooks, hook block info, and hook block view. But then out of these four hooks, it's not clear as to what's really required to implement, to declare your own block, which is something that we have managed to do away with in D8. We have a block interface. Blocks have been basically managed by plugins in D8. We have a block interface, and then we have build array, if you want to, that would determine the output of the block. And if you need a configuration form of your block, then you have this function within your interface block form, within the block base object. And you have this submit function as well for your block form. Also, it's always preferred for a better developer experience to have object-oriented code. That way, your code, as I already said, remains highly modular. And we are able to write unit tests. We are able to better decouple our components, suppose if you have a form submit function. And if you want to do so many things with the collected data from your form, you want to email them to someone. You want to save them to database. You don't have to worry about how to get the database connection and how to store that value to the database, actually. And with object-oriented, with this decoupling possible now, you don't have to worry about managing your mailer or something. You don't have to worry about how we can email that to. Only thing you need to worry about is your form getting submitted. Your submit handler only needs to worry about submitting your form. So that basically gives us better code reuse as well. We don't have to duplicate code, basically. We have so many hooks that are eventually doing the same things. So once we have decided on some basic configuration, we can reuse the code by extending our objects and stuff. And also, with object-oriented, we can mock our desks. We can mock our objects and then give better room for unit desks as well. So there's some simple comparison between events and hooks. Events are obviously object-oriented, easy to write, extensible code. And one thing that was clearly not possible with D7 hooks was that, or D8 hooks as well, was to stop propagation of a particular event from going further. You had no control over deciding on when to stop hook implementation.  For some reasons, I mean, if we ever need to fire a hook twice, we are not able to do that. Now with events, we can do that. And we have loosely coupled implementation of an event system now, the reusability and also services. With the inclusion of services and object-oriented code, we can now inject services into our event handlers, into our event dispatchers, and into our event listeners. And we could sort of explore the possibilities with about what we could achieve with that. Do we have any questions so far? Events. Moving to the event section, an event is an action or an occurrence recognized by a software and handled by a software. So this is a basic, I think, simpler definition of defining events. The concept is, I think, same as that of hook system. But as I said, with a better developer experience now, we have this event system. So events are part of the symphony framework, symphony two component. They allow for different components of the system to interact and communicate with each other. Object-oriented way of interaction with core and your custom modules, I would say. Basically, events are an implementation of events or hooks, I can say, as well, are an implementation of a mediator pattern that I would be explaining further. And Drupal basically uses the container-revere dispatcher. That means your event dispatcher are always seen through your container. So basically, you have access to all the core services that you can instantiate with the help of the container. So as I said, again, better code extensibility. And with the use of services within the events, we can do wonders with this event subscriber sort of event dispatcher component. So the mediator pattern, I think this is a perfect example of decoupling we could achieve with the events. Suppose we have this radar thing at the airports. And your airplanes continuously landing and taking off, they do not need to interact with each other. They do not need to check in which plane is landing and which plane is taking off and to avoid collisions and stuff. They only have to interact with the main radar. And then the radar decides, has a function to decide on which one to which plane could land and which plane can take off at a particular time. So the intent of mediator pattern is to encapsulate how a set of objects interact and to basically decouple them from each other. That a particular object has a defined functionality. That an airplane, I would say, has a functionality of taking off or landing. It doesn't have to worry about if it may collide with another plane or something. So now I guess look into creating and subscribing to events, how we can subscribe to already exposed or already fired events, and how we can create our own events that other modules can subscribe to. So what we need is the context. I think wherein we can decide that I have an array or I am at a particular stage in a module or in a program and I want other module developers to intervene into my system. So we need the basic logic wherein we can decide I need to fire an event for this. Then we basically dispatch the event and then other modules can listen to that event and do something about it. So how do we listen or subscribe to an event? Basically, in Drupal, we have the symphony event subscriber interface in your subscriber class. We basically have to implement that interface. Implement this interface in our subscriber class. The event subscriber interface forces our subscriber class to implement the get subscribed events method, which basically returns the array of all the events that this subscriber is subscribing to, and with the PHP callables that would execute once the event is fired. Then we need to write those callables, obviously, and to extend the functionality. Then we also need to declare the event subscriber as a service. So the container could instantiate it automatically. This is the event subscriber interface. This is straight from the core. So I have tried to maintain that thing. Basically, it forces the, if you're implementing your interface, it forces the subscriber class to implement this get subscribed event method. And this is from the config factory subscriber class from core as well. It is basically subscribing to events, events, config events, save and config events, delete. So we have this events array, keyed by the constant that represents the event, and basically we have the on save, on config save and on config delete callables that would get executed when this event is fired by the config factory. Then also we have this event subscriber. Basically, we have our event subscriber config factory that implements event subscriber interface. We now need to declare our config factory subscriber class as a service. So how we do that in D8 is we have to tag this class with a tag name event subscriber. That is how Drupal comes to know that this class is an event subscriber. We can also have using, exploring the dependency injection. We can also have services injected into our event subscribers. So this is how we do it. Suppose I have my custom module and I have declared a service that is subscribing to some event and I would declare this arguments array wherein I would inject the logger factory into my event subscriber. So then we need to obviously implement the callable to do something about the event that we are subscribing to. Suppose I have my own custom module. I have this class that is basically a subscriber class. Alter response that implements event subscriber. It is returning, it is subscribing to the kernel event request that is fired at every request. And it expects it to call the logging demo function whenever that event is fired. We need to give the implementation of that function, logging demo. This whatever the callable that we are implementing would receive the event object as a parameter by default. So as an argument by default. So this kernel event request is getResponseEvent. It is basically an object of this class. So our custom, you know, this callable gets the getResponseEvent object. As a argument. So the order of execution is simple in event dispatcher component, as compared to Drupal hooks. So what we require to do is this array, whatever this array that we return from the getSubscribed events takes in as the parameter, a priority parameter. So the higher the priority, the events that have a higher priority that get executed, sorry, callables that have subscribers that have a higher priority get executed first. And those that have lower priority get executed afterwards. So summing up the listening process, we define a service in our module, target with event subscriber. That is how Drupal comes to know about our event subscriber. We define a class for our subscriber or a subscriber service that has to implement event subscriber interface. Then we implement the getSubscribed events from the event subscriber interface and then return a list of all the events that we are subscribing to and what all methods and with what priorities they should get executed. And then we obviously write those methods, write those callables that we want to execute once the event is fired. Now we'd be moving to dispatching process, how we can create our own events and how based on some context, we can dispatch or fire that event. Static event class, this is from the symphony event dispatcher component. Basically the static event class does nothing. It only assigns a special constant for your events so that developers can better know what the event is all about. So it's not a mandatory thing to have this event class but for a better developer experience, it is always recommended. Suppose I have this kernel events class from symphony. It has constants for all the events that it exposes. Constant request is kernel request that basically fires on every request, similarly with exception and view and controller and others. And then our event class, this is the event class that symphony exposes. We don't have much here as well. So developers could extend this class and extend their functionality as required depending upon whatever the use case is. This event class has a property, propagation stop that decides, that determines if the event is currently running or not. And also is propagation stopped, this would be a getter function for that property and then the stop propagation. There are two more methods that belong to this class that are deprecated now that would be get dispatcher and set dispatcher. And the base event class is provided by event dispatcher component is deliberately empty to allow the module developers to extend it and depending upon whatever the case is implemented accordingly. So how we extend this generic event class, we have our own event class. Suppose I have to dispatch an event, I have to create my own event. I would be, first I would be creating the general event class to determine the constants for my events. Then I would be extending the event class with extending my, sorry, extending my own class with this event class. And I would have, suppose I have this event class, I have created this event class that could get a configuration object from Drupal 8. It would get, and be able to alter this configuration in particular context. Dispatching that event. So first getting the service event dispatcher from Drupal and then I would be creating instantiating my event object and passing in the config object that I would be getting in whatever context I am in. Then to dispatch the event, I have the, I have a method dispatch that is from the dispatcher, event dispatcher component. What I need to pass into this dispatcher is the event name or either the event name or the constant that I have to find in my event class and the event object. So then I can alter the data. Once I have subscribed to this event, I can alter the data in the subscriber of this event and then get the data back from the event object, from the subscriber object, that is by these methods. If we have setters and getters in our event class, we can get the configuration back. So the whole process of dispatching the event would be summed up like this. To dispatch an event, we have to basically call the dispatch function and pass into it the name of the event and our event object. So the first argument obviously is a unique event name or a constant that we should be defining in a separate static class. The second argument is obviously the event object. We would need to extend this class into our own custom event class so we can provide our own functionality. By which we can extend the functionality that the core provides. So basically this is a simple dispatcher. We have other dispatchers and listeners as well. We have the event object that has the dispatch function, most important function, dispatch. We also have generic event object from Symphony which has certain functionalities. We also have a container event, a container event dispatcher. Basically this allows us to use services within our events and event listeners. Event dispatcher, event dispatcher, where events and event dispatcher are where listeners. So basically this would be having an event dispatcher, having an event dispatcher and having event listeners which have access to the event dispatcher. So we'd be able to dispatch some more events within our dispatcher or we'd be able to dispatch more events within our listeners so to have better extensibility of our code. So what's happening currently in core? We don't have too many events that are fired for things. We have config events, delete, import, save and rename which are fired on when a configuration event, configuration object is deleted, imported, saved or renamed. We have entity type events, field storage, field storage, definition events, console events. We have kernel events, controller, exception request, response, terminate and view. The exception event would fire when we have an uncaught exception for a request. Request event fires when we have fires for every request when we have a response delivered to the browser. We have this response event fired when a request is terminated, terminate event fires. There's also one special event, kernel event view that is fired when the response is not a response object, when we can have responses to requests as render arrays as well. So when the response is not a response object, kernel event view gets fired. We also have migrate events, map, delete, whenever an entry from map is deleted, map, save, whenever an entry is made into the map, post import that runs after the import process is over, post rollback simply runs after the rollback, similarly post to delete and post to save. We also have routing events, routing event alter, lets module developers to alter the routes or controllers for a request. So with this being said, we still have hooks in D8 and we basically look into how D8 is doing it, how D8 is letting module developers expose their hooks and how D8 is exposing its hooks and how we can still expose our hooks if need be. So what about hooks in D8? Some are gone and some are still there. I think most of the alter hooks are still there, which we should be replacing with the event dispatcher component. Some hooks are gone, there is no hook in it, there is no hook boot, there is no hook exit. So one way we could implement hook in it in, we could achieve the same functionality in D8 would be to implement, would be to subscribe to kernel event request, I would say, and then that way we would be achieving the same functionality. Similarly, hook exit would be, we can subscribe to kernel event terminate as well. Hooks in D8, this is the code chunk I have pasted from the user module file, sorry, the .module file from the user module. We have a function invoke all simplest, just like what we had in D7, the invoke module invoke all file, we have a module handler class, module handler object, which has this invoke all function. So basically what we are doing here is, we are exposing a hook user login and passing in and passing the user account into it so that other developers could hook into it by implementing hook user login. So how this invoke function is doing it, it's basically the same thing. And the function naming mechanism, we have these magic names, you know. So whenever we have a hook invoke all user login and then we'd be passing in the user account. User login is the hook name that we have to decide, just like here, dollar module is the module that would be implementing this hook. The dollar hook is the name that we decide. So for this user login hook, the function name would be your module underscore the hook name, your module underscore user login. And it would be getting the user account as the argument. And if we are invoking our hook from all the modules, we'd be needing to call this function from the module handler class. This again does the same thing, function module underscore hook name. This is the event, this is the function regarding the alter hooks, alter function from the module handler object. So this again does the same thing. This again does the same thing from, you know, the same way we would be in B7, we would be needing to call the Drupal alter function. Herein we would be needing to call the alter function from the module handler object and then pass into it the array of data or context, whatever we want to alter. And regarding the order of execution of hooks in D8, it's again implementing the same, exposing the same hook module implements alter, which, you know, has the array of implementation of all the, which has the array that has all the module names as keys that are implementing our hook and then the hooks get executed in the same order. So to alter the execution of hooks in D8, we would simply be, we'd again be needing to implement this hook, hook module implements alter. So how to, you know, again, how to alter if we had an array of data and we wanted other module developers to alter our data, we'd be needing to call this alter function, pass in our, you know, the name of that hook that we'd want to, you know, expose and then pass in data as well. This is how we are exposing hook views data. Alter in D8, we basically have, we basically call the alter function of the module handler. So somebody, if you are, you know, the basic question is if we should be going with hooks or events, if you're writing your custom module, I think we should definitely be, if you need to expose something, if you need to allow other module developers to hook into your system, we should definitely fire an event and there's a saying that we should, you know, for better experiences, we should log everything and trigger an event for everything. So if you're interacting with or altering code, subscribe to an event if one is fired, I have already mentioned some of the events that are available. If not, I don't see too many options for us, we still have to go the hook way. For configuration and admin forms, just like I said, hook block info, hook block configure, hook block save and stuff like that. We have plugins and tag services as well. And now I think I'd be going for a simple demo. We'd be subscribing to a few events in D8 and we'd be, you know, creating an event for a form submit and then we'd be executing some silly code while we have subscribed to that event. So basically, I have a simple site. I have a simple controller written for this page. It returns the render today. I also have this config form. There are a few fields that I have. So in the code section, I have these two modules config form that is responsible for creating my config form and the form that is available that I just showed. And I also have this event demo module that would be subscribing to a few events. So first we can look into, you know, as I said, to subscribe to an event, we'd be needing to have our own service, the event subscriber class. How we can define it is here in the module.services.yml file. I have this alter response class declared as a service. It would be getting this logger factory as an argument. I have declared this as a dependency and it would dependency would be injected by the container into my class. And I have tagged it with the event subscriber tag. So this is my alter response class. Basically, implementing the event subscriber interface and then implementing the get subscribed events method from that interface and then returning an array of, you know, various events that we can subscribe to. I have, you know, currently commented out all these events. So we could, you know, uncomment one by one and check what happens. I have for kernel element response, sorry, kernel element request. I have a function logging demo that is here. We'd be subscribing to kernel event request. So this would be happening for every request that our site makes. I am currently fetching the path from the request object that we are visiting and I'd be, you know, I'd be logging that path into the Drupal logs. So how we would be logging that with the help of the dependency injection, the injected logger factory object would be, you know, helping us to log the path. So let me just clear cache and let me just refresh this page so we make a request and then let's check logs. You can see our config form was visited and then reports and then this current page DB logs was visited. We can actually change this method, change this to better check if it's executed and then I can refresh this to make another request and then check the logs. This page was visited just now. So I also have, we also have this, you know, we can also have config events save to do something. We can also, you know, determine the, we can also set the priority for various events from callables to be executed. We'd also be subscribing to the kernel event response that gets fired for every time when a response is displayed to the user. Demo response function would be, I don't think, yes, I have, would be, we'd be getting the response object and then we'd be setting content on our response object to this, basically removing all the content from the response object and passing in a simple string to it. I would need to clear cache again. So for every request, I should get a simple string. So we can actually change the string and check if it is basically coming from here only. So this is this. Now, as I said, you know, I have this configuration form. I can also, you know, to, I am currently, the config form is coming from this module. I have a form, I have a few fields declared in this form and I also have a submit handler for this form. I am storing the values from this, from these fields into the configuration. Before that, I'm exposing, I'm firing an event and I'm letting other modules to subscribe to my event and then alter the data that gets submitted to the configuration. So basically I have this event demo class that is already defined, the event demo class is here. Event demo class extends event. So it would basically have the dispatch, access to dispatch function by which it can dispatch the event and then I have some getter and setters for the configuration that it needs to alter, that I want other module developers to alter. So I have this my module events class here, which would be defining the constant for my event that I'd be exposing. The unique name for my event would be event demo dot form. So to subscribe to this event, I would need an event listener that would be subscribing to this event. So I have this alter response subscribed to this event as well. I have this alter config function with a priority of zero. This alter config function would be basically changing, getting the configuration, getting the value of the text field and then setting it to I won't show really. So I would need to clear cache since I'm subscribing to a new event. So I have this, I can change it. I was altered. I can change the video field and then save the configuration. And then it would basically override the value that I had submitted in the submit function and that I'm overriding in my custom module. I can change it here as well to check if it is coming from here only. I can submit my form. So this is the method, this is the value that I'm getting. Now to explain the priorities thing as well, I can have this another function. I can, yeah. So I can basically subscribe to an event from the unique name as well and also from the constant as well. So I have these two functions subscribing to the same event, alter config with a priority of zero. So I can just comment it out. I have these two functions, alter config again and config again, alter config and alter config again, subscribing to the same event with a different priority. So with the higher priority of 10, the alter config function would be executing first. This would be executing first and setting the value to this. And then the alter config again function would be executing and then it would be setting the value to this. So once I submit this form, we should get the previous value. So this explains the priority thing as well. And this information about the contributions prints evaluate my session if you think it was helpful. Questions if any, no questions? Yeah. Like I said, it really depends upon, I mean, because it would require some effort to replace all of the hooks with events. But then it really depends upon the effort that the community could provide to take that initiative forward. I mean, I don't, there are issue queues in Drupal D.O that have that wherein the conversations are going on whether to which what all hooks need to be replaced first and then with the plans further. So we can definitely check issue queue and figure that out. Yeah. So basically you don't, you would have to go to the event object, sorry, you would have to go to the event class to figure that out. Once you have, if your method is subscribing to multiple events, you'd have to somehow do a check about what event it is receiving and then plan your actions accordingly. Yeah. Any other questions? Well then, thank you for your time. Thank you for your time.


from the computer museum in the heart of Silicon Valley, extracting the signal from the noise. It's theCUBE covering OpenStack Silicon Valley 2015. Brought to you by Morantis. Now your host, John Furrier. Okay, welcome back everyone. We are live in Silicon Valley. This is theCUBE Silicon Angles flagship program. We go out to the events and extract the signal from the noise. We are here for day two of coverage of OpenStack and Silicon Valley. This is where all the thought leaders are here. A lot of companies are here. Obviously Silicon Valley is where the innovation engine of entrepreneurship and also the big companies. Trying to figure out this next generation infrastructure, unlocking the future potential in a software driven, software enabled environment. Our next guests are Boris Ransky, co-founder at CMO of Morantis and Jonathan Donaldson, VP and general manager of software defined infrastructure at Intel. Guys, welcome to theCUBE. Thanks for being here. Intel also announced, you guys, Morantis announced a $100 million fresh funding, real fat financing, good to have some dry powder as the quote bubble is bursting, which we'll talk about later, but another question, Intel again, the big blind as we say in poker, you know, it was out there as $100 million. You guys led the round.  You guys backed out of the distribution business of big data with Hadoop, going all in with Cloudera. Now Morantis, again, a big bet. So what does this mean? I mean, besides the support from Morantis. Right. So we like to, if we see trends, right? So obviously from being the Silicon landscape, which covers a tremendous amount of the data centers, we have a good landscape to kind of view across and see the trends that are happening. And then also from that same trend line and from that same landscape, we get a lot of feedback from our customers. And so in the Morantis case, right, we were getting a lot of feedback from customers. How do I get open stack in my enterprise, right? How do I get private cloud to be real for me? And obviously we had a great relationship with Morantis as well as some of the other announcements that we'd made. And so we said, well, this is a perfect place for us to reinvest for some work upstream and then some work that really can move the needle on private cloud. Obviously we're in the Computer History Museum. Obviously former home of an Intel back in the day, but Intel, Moore's Law, and Lou Tucker yesterday, from Cisco, who actually has a product in the museum. Like Lou, you're an old guy now, like us. He's actually got a product here in the museum and he was commenting that it was the fastest machine he's ever built, it was the fastest in the industry for a year, and he was highlighting Moore's Law. Obviously Intel, you know, Gordon Moore. Moore's Law is coming to this cloud, right? So that means a complete change over. You guys have made great investments, certainly everywhere from wireless down to the chip level, compute, multi-cores, all this stuff's happening. Is that the part of the vision here is to get Intel's assets into the market with the software-enabled infrastructure? Is that kind of the vision? Absolutely, and I think it's a little bit of a two-pronged approach, right? So obviously we have a tremendous amount of those valued assets in the market already, and so it's exposing the value that our customers are asking us for. So making sure that they receive the value for purchasing Intel, and then on top of that is exposing the new features that we're coming out with so that we can continue to drive that Moore's Law innovation cycle through the rest of the data center. Of course, I've got to ask you as an entrepreneur, you've been the trials and tribulations of starting a company, you get to a point now where the market is at an inflection point, certainly with OpenStack. The cloud, I'll see it's out there, it's games on, it's totally, you know, the genes out of the bottle, cloud is the future. How do you feel about this?  What is the current state of, I'll see this is going to be a good trajectory for your company, but what does it mean for you guys and to your customers? So I think that I mentioned this before, I view the collaboration of Intel and now kind of this motions that Intel's making under the cloud for all initiative is kind of a symbolic period in OpenStack's life, because Intel historically has had a very solid track record of backing various open technologies. And Intel has always been behind OpenStack, but it's just in the last several months that they've joined the foundation as a Platinum member, been accepted, and now have started really making very meaningful contributions through the cloud for all initiative. You probably know about the work that they're doing with Rackspace, now they're doing the stuff with Morantis, and to me, that means that OpenStack has reached the point where there is a consensus in the market that the open cloud fabric of the future is OpenStack and Intel is going all in. And another interesting data point, which relates to a lot of the things that are happening here around containers and things like that is according to the recent market survey that was done by McKinsey just this year, when people think of private clouds, they think of free options. And the free options is VMware, Microsoft, and OpenStack. And there's a lot of interesting stuff and dynamic happening around the containers and all that stuff, and people can argue to Diff that maybe OpenStack is not the same as VMware and it will never be there and that it works with VMware, it doesn't work with VMware, but the thing is that enterprises and CIOs have a very short attention span. They don't have time to look into how these technologies work together. They look at things in a fairly straightforward fashion. And the straightforward fashion that they look at it right now is that private cloud means free choices. Two choices in Microsoft and VMware for proprietary cloud, Open, private cloud is OpenStack. So it's exciting times ahead of us at Morantis, I think, that we have a tremendous responsibility to make that vision a reality at this point. So talk about the dynamics of the customers. Right now, customers here, OpenStack, and they're a little nervous. And we had a quote yesterday on theCUBE here where the comment was, hey, the cloud with OpenStack is a puzzle piece kind of concept, it's Lego blocks, or it's an engineering opportunity for this open fabric and that message resonates, that's clear, we hear that. But everyone worries about one-offs, right? How do you have one-offs and how do you scale a one-off? So the comment we heard yesterday in theCUBE was, and have to look back at what we said, I can't remember which guest said it was. The range of bias problem. No, but it was good comments. I was basically saying, there's a problem here, is one-off doesn't really create a scalable cloud. And no, I think it was Todd from IBM, he said, yeah, they want to basically do one-off with standard components. Which really kind of hits home to kind of the value of an open fabric. If you standardize, you then can mix and match technologies to cobble together or engineer together whatever system, from POC to full scale production. So, okay, take us through, what does that mean? Standard components, and how do customers mix and match, and then what's under the hood, via Intel and or other things that are abstracted away from the customer. So I think that there's kind of two sides to this. On the one hand, I completely agree with the sentiment that there has to be some opinion, there has to be some degree of prescriptiveness when you're delivering a product to the customer. Because the customer wants a standard, that's true. And it's also true that to a large extent, in the open stack world, we've seen a lot of snowflakes because of the nature of what open stack is, right? It's a pluggable framework. But I think that the most dangerous thing is to assume that something is a standard before it really has become a standard. And open stack in a data center cloud market is a very new thing. So when it comes to, and it touches upon many things, many data center technologies. So there's SDN, there's software defined storage, there's container standards, we have Rocket and Docker, all this stuff happening, right? So the ideal kind of vision will be like, just let's standardize, open stack will have one SDN, one software defined storage, one container framework, et cetera. But the thing is that because the market is so new and so nascent, so many things are changing around and moving around, that's not a very wise strategy because the one thing that you will embrace might not be the thing that is the standard of tomorrow. So the open stack approach historically has been about actually creating the glue for different components and leaving some options as far as an SDN or storage or all of these things. And then over time, as certain areas kind of mature, there's always going to be some standard, a couple of standards that will emerge. And these standards will naturally plug the empty holes in the open stack puzzle. So, and I think that the open stack community is approaching this completely correctly. So there's glue, does that mean control plane? Is that what you're kind of referring to? API is control plane. I think Boris is correct in that, if for enterprise customers, they want semi-packed solutions, right? It's like ordering a car or buying a car, right? You'll have certain brands of vehicles that you like and you will then say, okay, based upon whatever the character says that a vehicle are, I'm going to have certain options that I would select in there. I think you're going to see the same type of thing happening in the software stacks. You're going to trend towards that package solution that offers the general care abouts that your business needs, and then you're going to pick some of the guard railed options internally. So Jonathan, if it's a car analogy, let's go with that a little further to the next level. Are we in kind of prefabricated designs? Is there an assembly line? Is there cars? Is there Ferraris? Is there a Model T? I mean, take us through the life cycle. Exactly. You have, I think, all of the above, right? So depending upon if you're the kit car kind of person, right? So using analogy and you're the DIY type of enterprise or cloud service provider and you want to pull upstream and cobble it together yourself and you're going to have to spend the engineering time in the garage to go do that. And that might be good for, like, say, service providers and big, big operators. Somebody that has an absolute strategic benefit for building it themselves, which are not very many customers, right? It's only those that have some sort of secret sauce that they're going to inject into that. I would say predominantly, where OpenStack is going to play, will be for those customers that want to have that opinionated solution as Boris, but it, right? Or more big-doubt use cases, if you will. Or big-doubt use cases, right? That have some guard rail set, right? Choice is great. Too much choice is really, really bad, right? Because you get some of the analysis paralysis, like, do I choose this, do I choose that? And then you get some of the technical debt that can build up behind that. If you make a left turn when everybody else goes right. Unknown, unknown, certainly in the enterprise business, we know, scene puts the brakes on. People, whoa, whoa, I need to see some proof points. So, Boris, with that, what are some of the use cases that you guys are seeing that are standardizing, that are accelerating, that are becoming much more, hey, I need a Ferrari because the roads can go fast or, hey, I need a bus because I'm trapped. I got more people coming in. So there's a lot of different use cases. What are the most common that you guys are seeing? Well, for OpenStack, there is two major use cases on those use cases. One is, I think, specific to a particular vertical. Another one cuts across all verticals. One use case is enabling DevOps, basically. OpenStack is a platform for developers. It's much of the same use case that actually, you know, AWS is addressing. It's an acute problem. I think that AWS has paved the way for a lot of organizations. And in fact, a lot of organizations that we engage with, they have started with AWS. They've built kind of a significant AWS footprint. They were kind of transformed into the cloud mindset and culture by their embrace of AWS. And once they've gotten comfortable with it, they want to bring some of that in-house and they complement it with a private cloud that is OpenStack. And that cuts across all segments. It's just enterprises, telcos, service providers, everybody's doing it. The other use case is pretty specific and that use case is around network function virtualization. So telco manufacturers, now telco equipment manufacturers, are going through the stage of kind of, you know, separation between the software and the hardware. So before, you know, people would ship those huge boxes like mainframe like switches that are telco grade, so cost millions of dollars. The new paradigm is that you have some sort of virtual infrastructure management fabric and on top of that you have a network functions that you can provision in an agile fashion. And OpenStack has emerged as the kind of almost de facto standard for kind of the NFV. Is cloud native a big use case? You hear about cloud native with OpenStack? Are people interested in that piece too? Well, I mean, that's standard. That goes to my first use case. So that's cloud native, that's correct. That's the DevOps cloud native stuff, exactly. Okay, so I guess in the last couple of minutes I want to get you guys to answer a couple of questions. First one is, does hybrid cloud exist? I mean, this is something that I want to put on the table. We've asked all the guests here. Is there a hybrid cloud? Is it a category? Is it a product? Do I want to buy some hybrid cloud? Do I just back the truck up and hybrid cloud just shows up? Is it subordinate to public, private? Is it the top level? It's a combination of the two. And I think that's the thing that people tend to forget sometimes, right? So I don't think any of it will dispute that public cloud is there and it's available, right? So as we saw yesterday in Diane's presentation, the actual production implementation of private cloud is still very, very early. And what we mean by that is, self-service portal, easy access directly for developers and exactly. All of those things. But that's in a data center, the private cloud can be based on premise, right? And then the big thing for hybrid is when you connect that with the public cloud. So by default, if you have public cloud, but yet you don't have a predominant landscape of private cloud, you don't have hybrid cloud yet. And so I think that we do in pockets and in more sophisticated users, they are using what we would consider hybrid cloud. But I think there's a lot more that needs to happen for that. Is hybrid cloud the top level solution or outcome? Absolutely. And is private and public subordinate? Because if you say, I'm connecting them, that's just a kind of an umbrella to a concept. It's like distributed computing. I mean, hybrid cloud wins, right? It will be the paradigm for how people consume and deliver IT services in the business, right? I'm moving forward. But it's not a pure play kind of thing. There's no hybrid, or is there? What's your take on that? It's like, I mean, people try to put things in buckets. Is a hybrid cloud category? Is there a category? Is there a product? I mean, or is it just a... It's a category. It's a category of how you deliver your IT service, right? Where you draw your resources from, how you connect the public cloud to your private cloud. Are you sharing things like authentication and identity and some of those other policy type of things that you would normally do internally? And I think kind of our kind of bar is, if it's absolutely seamless to your users inside your enterprise, that they don't know where their resources are coming from. They just select from the right criteria. And it either chooses in a public cloud environment or in a private cloud environment. If it's that seamless experience, you've actually reached hybrid cloud. So basically, Boris, I want you to kind of go with taking the next level. So like that answer, if I'm connecting, it's hybrid, right? And if it's seamless, it's even more hybrid. It's the ideal hybrid preferred environment. Okay, now let's go to the customer. I don't care about all that stuff. I got cash to spend. I have capex that I've invested in, legacy. I want cloud native DevOps. And I got a lot of workflows I need to move around. Alex kind of brought this up yesterday, your co-founder. And he's like, look at this at the end of the day. It's I got cash, I have how I buy and how I deploy. What's your take on that? Yeah, I think that I mentioned that the most predominant use case is DevOps. And the consumer in the DevOps use case is a developer.  The developer wants to just get exposed to a consistent set of APIs, hopefully, you know, high level APIs to be able to increase developer velocity. So for me, hybrid is just kind of like a feature of a cloud. Really it's like, do you want to have your cloud in this data center and that data center, do you want your application run to run in this rack but developer doesn't really care, right? And as far as, you know, our customers are concerned, you know, to a question of whether or not exists, it absolutely does exist because that, for example, Alifium on stage yesterday and they were talking about how they have AWS and they have in-house open stack and they have an abstraction layer running across both of them and the developers are exposed to that abstraction layer and it's really, where do you run this workload or that workload is very transparent to the developer and a lot of people are doing that already now. And this is kind of a traditional tactics of policy-driven software-driven infrastructure. That's kind of like your wheelhouse. Right, I think that's the big shift we're seeing here is that developers are king, right? So they used to be second-class citizens kind of behind whatever the infrastructure teams were allowing them to go do. I think the advent of AWS and the success of that has really raised the developers. Well, mobility too has put them close to the customers so developers used to be kind of, don't bring the developers in front of the customer but now they're involved in UX decisions really closer to the customer. So I totally agree with you on that. The developer is the first-class citizen now, right? And you're starting to see the infrastructure teams catch up to their needs and not wants and demands. Okay, final question for each of you guys to answer individually is what is the open stack Silicon Valley event about? I mean, it's a special place. Obviously, we live here. We love it. We love the Valley. Silicon Valley is great innovation, entrepreneurship to huge established companies driving change and change in the world. What's open stacks vibe here? What is, what's about open stack and Silicon Valley that's different than some of the other venues? Yeah, so I think I'm in a good position to answer this question. We specifically purposefully call this the Unlocked Infrastructure Conference. And what we meant by that is this event is really about bringing open stack and the entire ecosystem of data center software components that interoperate of open stack. So the theme for this particular one is open stack and containers. It might be something else next year. But the whole notion here is that we see open stack as a fabric that eventually as it evolves, we'll be able to glue together best of brief components and kind of put together the innovation of the open community overall into a cohesive fabric consumable by the developer. So this conference is about actually marrying open stack as that fabric with all of the different innovative components that are becoming a new standard inside a particular kind of area in the data center. And a lot of players are here in Silicon Valley, too. Right, and that's why we're here, right? That's because. Hey, John, now you're taking Intel, I'll say in Silicon Valley, huge presence. Right. Generations of innovation, Mars law, it means epic, it's been great. So what's your take of open stack and Silicon Valley this event? Right, so I think the most interesting thing for us, and I was actually thinking about this this morning when I was doing the welcome, I looked out across the audience and I see people that, oh, I need to go talk to this person, I need to go talk to this person. When we're at the larger events, you ships in the night, right? You may say hello and you may pass and buy, but because this is such a focused event with some good focused topics and you draw a lot of the talent and a lot of the leaders in the community for open stack together, you actually get some of the time to actually have that community building experience to share, here's what's working, here's what's not. Hey, we should go work on this together in the community, et cetera, et cetera. So I think this is a really good focused event to really push forward kind of the whole goal of the community. It's really a great industry event too because people get to look at each other doing, share best practices, avoid scar tissue. You know, see how people are making the money and see how people can participate. Yeah, exactly correct. Jonathan Boris, thanks so much for spending the time on the queue, we went a little bit over. Sorry, Greg, producer, give me the hook many times, but I wanted to get those questions and thanks for sharing that insight. This is theCUBE, live in Silicon Valley. We'll be right back with more after the short break.


The industry clusters were begun at Fisher College of Business to give students an opportunity to enhance their overall educational experience by not only learning what is taught in the undergraduate program in terms of the functions of business, but also have in-depth knowledge of a particular industry. The cluster experience at Fisher College of Business is something very unique. Clusters provide an opportunity for the students on a weekly basis to work on many problems that are given to them by the industry executives. The level of executives was pretty amazing. We had a lot of vice presidents, we even had a couple of CEOs. We got to go through a banking simulation with KeyBank. We got to go through and figure out how an actual bank works, make decisions, see what those ramifications were of our decisions and correct them. In addition, the industry executives come back to the students with projects that the students have to work on for anywhere between 10 to 15 weeks and present to the top management their findings. You will meet the managers and executives in that company so you will have a real business meeting and you will have a lot of tours around the company. Having this opportunity to be able to connect classroom to reality to what you will actually experience in, not in the classroom has been one of the great benefits of the program. All students had a chance to go to Chicago on a field trip and the healthcare industry people went and visited several hospitals as well as Abert Labs in Chicago. The financial services people went to LaSalle Street. The sustainability people went to a bunch of organizations which would read certified and so on. When companies are in need of talent for interns in the future or for full-time employment, these clusters are where they are coming back to because they know that these students have not only been trained in business discipline, but they also have a very thorough understanding of the industry as a whole. So I will be interning at Cardinal Health and Cardinal Health is actually one of the sponsors for the cluster program. So throughout my interview process I think they were really impressed and that kind of gave me that little extra step up compared to the many other students applying for these internships. And those are active engaged students that nationwide is excited to have both as employees or as potential future customers. So for us it was really a great program to participate in. I think the cluster program here at Fisher is really a unique and innovative experience for the students. I think it's really going to prepare students in a special way to come out and be prepared to add value day one in their career.


Hey guys real estate gaming here today.  Yeah, we're gonna solve this mystery man We gotta figure out who killed that boy Mario. So we're here with tweeters. Hi tweeter There you go, buddy, and then we're here with a bee Daffy and amazing one up. So let's begin Okay, uh, let's see what's up with this officer right here quick come with me. What happened man? Oh Mario he's been found dad. Oh, no God, oh god. What do you want me for your detective my brilliant detective? I don't think I am but okay Not a very good one. There you go. That's a good answer. Come on. We need somebody now Okay, I guess we have to go man. I guess we're detective as of today guys All right guys, let's head out. Let's go to the courtyard. Let's see what happened over here Hey officers, it's me officer RG here. What's up, man? Never plumb the day in his life The mushrooms didn't save him this time. Oh, wow, that's a low blow man Okay.   Let the guy rest at peace.   I really want good for you man. Okay, well, let's continue guys Oh, let's do VIP Wait, do we go this way? I don't think we go that way. Do we have to go this way guys? That's for the VIP Okay There's nothing here an empty house. That seems very suspicious man Okay. Oh This picture's a Mario. Hey, that's the model. I like to see My buddy the good Mario man. All right. Oh, we go to the rooftop. Okay Where we going? Okay, we made it across at that. Oh, we have to make it across the wire What now it's like an obby and the story at the same time. This is genius Okay, let's go.  No, man. Hey, what's up, mr. Penguin? Wait, that's the guy that was like I repeat the game But was it him? I think was the other guy. I don't know man. Let's go I know I fell off man. I'll wait for you. All right, you don't really have to hey, excuse me mr.  He still walks for a second. Oh No, oh no, man, mr. Daffy just fell. Oh, oh, oh spaghettio All right, man. Oh, come on mr. Daffy. Come on, bro. Hurry up, man. Hurry up.  What is wrong with this face? Why is his face so serious? Why so serious, man? Okay, where do we go? I see some old key. I just grabbed the key. Let's go Come on. Okay, so we go down here now So we're in the house I don't know whose house, but we just barged in this house like if it's our old right one. Ah, what? Where's one? Oh No, she just moved. Oh My god Why don't you have to grab the key? You have to grab the key man Okay, see a crack in the wall here. Maybe that's something Let's check it out. Okay. Maybe it's not anything because we can't go up there I see this thing over here where that looks like a little obstacle thing. Oh I just hit my head at the top. Oh, well, there's a shortcut Okay, we go here now what? Do we jump on the TV?   Amazing one. Uh, what do you do? I think one has stuck man. Let's help her out. All right, so we got out of there Hey, what's up, mr. Guy with this with the serious face? How can we possibly get out of here? There must be a there must be some way there must be some other way of getting out but how I'm not sure let's look around Okay, hmm. Okay Okay, so I see a tree. I See this right here Okay. Oh No, this is getting a little complicated Okay, where do we where do we? Oh? Okay, I see this I See I see what's happening here Okay, so we jump on the roof then we jump on the trees right here We jump on the trees Okay, and then we jump in here in the tree house. Let's go man. Too easy So cheesy and it seems so sleazy Okay, let's go. Hi. Well you play with me Sure, I'm kind of busy right now So, yeah, man. Yes No, fine. What do you want to play man? Jesus?  Look at this. It's horrible Dude the bridge just collapsed there. I know so many dead people. Why won't we ask the person behind the rock what happened? All right, man. I was gonna say this guy, but there's a rock over here I was about to say that guy's not even alive man Wait, what do you mean? We can't even talk to this guy You just got oh Are you talking to him? I don't think so All right, man Okay, I only wanted to cross the bridge Oh, I think we have to cross the bridge now We have to jump across the bridge Again to the other side Okay, so if you step on those rusted parts the bridge falls down that makes sense All right, man, let's hit out. Let's cross that bridge And let's go home Once and for all even though I don't know where this bridge is taking us But let's just say it takes us home. Okay, so we can feel safe. Oh my god. I just realized there's a dude down there I'm sorry, mister. You will be remembered Right, let's get out of here. Oh my lord. That was scary Okay, so now what we have to play like froggie where you have to cross the road. No, no Wait, did he just go through the car and nothing happened to him. I think he just walked through the cars My god. Oh no, he got wrecked Hi, hello Wait, so let's keep going just keep going just keep swimming just keep swimming me swimming Oh, it's why not stuck in the room still. I think she is man Okay, let's do it this guy wants here That's odd what's down here. I don't know. Do you think the murder went down here? He could have let's go have a look Okay, you go down first. I'll come down after you of course have to go first, right? My god, this is not like Friendly at all, but here we go Okay, what's up my body friend? What what is this place? No, there seems to be puzzles on the wall though. Let's try to answer them This one looks tricky. Oh, no, we can do it. We just have to focus. All right, man Click for hint Puzzle number one three horses are racing around the track. Oh, no Not these not these Horse can do two laps of the track in one minute Okay, horse a I mean I'm gonna start that let me read it again horse a can do two laps of the Horse a can do two laps of the track in one minute on the track in a minute You mean horse B can do four laps on the track in one minute or C can do five laps on the track in one minute Oh my lord, I went from two to four. How many minutes will it take? Until they are all lined up at the start of line again Three horses are racing around the track wait, so it's asking well I would like when all three of them line up at the same time How many minutes will it take until they're lined up at the start of line again? Okay, so it takes them each one two They can do one minute one minute three minutes. It should be three minutes Okay, there's the three minutes that we are wrong already Horsey can do five laps on the track in one minute.  Hey, what for the head? What does it say? No math skills are required Boy, let's put one minute. Yeah, because it takes a meter one minute guys Okay Puzzle to it for yellow house is made out of yellow bricks a red house is made of the red bricks and The blue house is made of blue bricks. What's a green house? out of What if a yellow house is made out of yellow bricks a red house made out of red green house made out of green Grass oh, wow. He got it. Nice. Oh, man. Okay puzzle three. There's a bungalow Everything in the bungalows green the walls are green the carpet is green the chairs Green the tables is green. What colors are the stairs green? Green it's not what stairs. Oh, yeah, because bungalow don't have stairs My god, that was a brain fart. Amy's father has five daughters Emily eat it that began Rachel. What are what was the fifth girl's name Amy Duh, it was Amy of course because they said Amy come on man These are questions that you don't have really have to think about guys, you know Just like any when you guys are taking tests on how he's overthinking because if you overthink it that's what gets you into trouble Because you're gonna be like skeptical about picking an answer, right? Where now over the river. Maybe we're out boy My god, come on, bro. Can't you see we just have to cross the river now? Oh Chad ended because he walked away. Yes. I did Yes, I did. I walked away from that dude What? I thought he would move you along with it. I guess not I guess not today junior Okay, uh, let's try this. I didn't want to take so much time trying to do an obstacle So if I don't get it this time, I'm just gonna skip it because I want to discover who killed my boy mario man We have to get to the bottom of this case The world okay. I'm skipping this Three robots just skip it. Okay, man. No, let's just skip everything I'm just kidding man. I'll just get down because I don't want to take too long Wait so much for skipping it. Oh, yeah, just skip it Wait, I did it. Hmm. We can climb this building or actually just skip it All right, awesome, man All right, so we have to climb up on this building.  Of course.    You know, we just fell to the bottom. We just have to climb all the way back up Not like I'm mad or anything I am not angry. I am happy as you can see All right, excuse me mister Too slow bro No, that's what I get. I'm just gonna skip this. I do want to continue the story Let's continue all with the story. That's the whole point of this game Okay, so wait if I skip. Okay, let me reset Hide in the big climb team I was already in the big climb Okay, so it just stole my three roll bucks for skipping it So it seems like we have to actually have to do this one.  We got this buddy Everybody's left already.  That was me. Why did you why would you do such a thing, man? Uh-oh take turns if we both go at the same time, we're not gonna be able to get it. What? Nothing goes cray-cray Okay, okay. Okay back to square one Okay, so if I press give again, will it just steal my robux? Will it steal my robux again? Yes, if we did. Oh my lord. This guy just takes robux left and right nice nice one, man Okay, uh, okay We got this tweeter How Dude those things launched me back. How is that even fair? Tell me guys. How's that fair? Let's go back up there And let's try not to get flung by that thing anymore Okay, okay.  Go bro. We got this. It's a me mario You see we're going pro mode right now, man. That's enough, right? So here we go once again Back to this there. Okay, let's go up here Hey, Juana's right there So Juana, she probably have a case. She's probably still in the airplane. She was coming back from her trip Oh There you go. We're okay. Let's go You guys see that I didn't even plan that that just happened because I'm awesome. Yes. I know random applause for me. Thank you guys That was all expected man Okay, if we fall from this if we fall from this To the last part we have to get to I'm gonna cry I'm gonna cry if I fall Because you guys have no idea how difficult it was to get to this other side because I kept getting flung By that thing over there, which is not cool Uh-oh, there you go Can we just drop Yes, we can nice About time man. Now what? He couldn't have possibly gone in there. Oh, that's a cemetery man. Why not? Why not man? Why would he because it's an easy access to go up the village because he's scared of nothing unlike you I'm not scared. Let's go in there boy. All right. Let's go in there, man. I'm sure Yeah, he was totally scared It's all right, man. We're all scared of something. Okay. Now what? Oh my god, look at all the ghosts. Hey, mr. Ghost. Uh, I'm just here to solve my boy, uh, mario's case Because he got murdered so I'm trying to find the killer man Oh, wait, it's another obstacle curse course. I mean curse. Of course.  Wait until you go in here Hey ghostie. No you don't What is this? Let's just go bro. Excuse me Can you please move? Okay, yeah, oh no that guy just fell down No That was super close At the top tip it top. I find a new way to do this This is super high up Imagine I just fall straight down to the other side. I would rage like totally Okay. Well, that was scary. Oh wow. We're safe. No, I will really save isn't the killer still on the loose So how does that even make us safe? Okay, or are we the murder could be anywhere. That's just what I said, man That is true. Why don't you ask the locals for help? What do you mean just barge into their houses? Um, yeah, we'll split up. Just don't cause any trouble me and never cause trouble All right, even though my middle name is trouble Okay, so let's go check in the house is uh, daddy. I'm a cow move Boy Uh, yes, you are son. I guess his son is a cow guys So you can be anything you want Uh, why is the guy that guy is angry because we just ran into his house. Okay. Let's get out of here, man We don't want any problems Eli John for Ellie John. Okay, George and the man George the madman. Hey, uh, George the madman What are you doing in here?  Okay, let's get out of here tweeter that guy seems very angry. Jesus. Okay, uh What did you say?  Why would you say that click for a head? Find the key. We need to find the key now great Like we haven't been uh having trouble with all these mysteries that we've been doing lately We just have to find the key now. Isn't that awesome? Yeah, totally, man Okay, uh, where can we find the key somewhere out here? Hey, mister. Have you seen the key anywhere? He has no face and no mouth so he can't talk to us Let's move on Build a fiber What do you want? I'm investigating in the test tomorrow I see but what do I have to do with it the murder he she is in the village somewhere Are you calling me the murderer? No, not at all. Just wondering if you've seen anybody live The murderer is wearing a black coat Well, I while I think about it. I did see somebody go into Tim's house wearing black Tim lives here Tim Of course bottom left. How do you know him? He's been helping me investigate What that's not right Why not? What is going on here guys, uh Tim he hit mario What? Tim hates mario and he's been helping us. This is fishy here guys Uh-oh What that's odd Indeed, maybe you should go check its house break in It's not breaking in if you have a key. I don't have a key. Do you? No, but maybe I have a spare one somewhere Where tell me boy I don't know try looking around the place. All right, man. So let's go find this key I bet you it's in here Oh, man. I thought it was in there. Okay, guess not Just totally shot down We just got totally shot down right there Have a feeling it's going to be like up on a tree or something because this game is a little crazy like that But what is this is this uh, can you go down here? No Guys if I were a key, where would I be? In here, maybe What is this a chicken coop? Okay, it's just empty in here. Oh wait House key. There you go. Let's go Now we're gonna go break into tim's house. I think tim is the murderer guys Even though that guy has said something in the beginning, but let's go There's a picture of mario all over this house. Look at this Tim Here we are Well, this is odd I know so many pictures of mario. Nothing else unusual. Well now that I think about it What tell me Timmy you said he helped you. Yes, he did. He hasn't left the house in days What he must have okay, so now he's saying that he hasn't left the house What okay, uh, but there's no other exit from here Unless unless what? There's another way out. Correct I'll look around man. Good luck. I'm going home. See you man Okay, so we have to look for an exit Oh, I just found it secret tunnel Of course, what a genius This dude is a genius Okay, so let's go down here now We found the tunnel. Where are we at now? The sewers So now we can't touch the uh the nasty goo coming out Okay, so how do we get out of here? Uh-oh good thing that's bouncing helped us if it if it was for that. Wait, what? All is revealed. Oh, it was Tim the whole time Look at this dude. Hey, why did you do this to mario me and mario? We go long back What I don't understand then if you go way back with mario, why would you kill the guy? Uh mario's my father What? No, what then why kill him exactly? He abandoned me as so mario abandoned timmy. Oh my lord Why did he abandon you? Those mushrooms. He was obsessed He chose them over me and he left me out alone so he could go to the mushroom kingdom Oh my god, mario. He's such a bad father, man. And so you killed him I simply wanted revenge That's not the best way to get revenge. Oh my god, this guy is cray-cray That isn't the answer exactly what else there to do. You could have just put ice down on his back ice Yes, it actually stinks a bit Can we get to the point?  I see but I have one more question. Yes Why go back to the crime to the scene of the crime what murder goes back exactly nobody would have suspected me That's kind of like I see it was smart but fail take him away officers indeed take this guy to prison He doesn't deserve to be Free because he just wrecked mario man recipes mario common recipes mario Nice work officer stock. Okay, so I guess our name is officer stock What I've been doing all the work here right now, man Obviously you're tackling the murderer across the river like that's where and I went through a sewer Okay, okay, as long as you show up you can use these givers that are behind me Well, I guess so man. Well, that's it, man That's it you guys say bye twitter. There you go, buddy. All right, so all this time The one helping us tim aka mario son He was the murderer the whole time That is so that is a crazy plot twist, isn't it? My god, let me know what you guys think below in the comments So thank you guys for watching thank you guys for the amazing support as always and I'll see you guys next time. Bye