Video equipment rental costs paid for by peep code screencasts. Hey guys, my name's Yehuda. There he goes again, refers to the fact that I'm going to be doing some live coding at the end of this, but not the whole time. Also the live coding is going to be more audience directed, so it's going to be more showing you random features and not trying to achieve something. It's probably going to help. My audio is very distorted. I'm going to move my mic down. Okay, does this help? Hello, is this better? All right. So, my name's Yehuda. I work at Engine Yard. I work on Dayquery, Datamapper, and Merb, which are killer stacks. I've seen my children before. So, basically I work on all the technologies that I usually talk about. It gives me a good perspective to talk about how they work together and basically how to actually use them for real things. Some things about Merb, Merb is fast. Pretty much there, you can choose when you make a framework between fast and elegant and Wave does functional programming. You can try to make choices and it seems today that if you make or people have made the claim that choosing speed automatically means you lose elegance or you lose other things. Turns out not to be a zero sum game. Turns out that if you decide up front that you're going to be fast and elegant, that is possible to do it. But that it requires significant amount of thinking and work and we do that. Basically, slow is not allowed in Merb. A lot of people say, well, I know inject is slow, but you should just do that and boot up or something. It turns out that when you write code in a framework, especially an open source one, it is extremely hard to figure out in advance what code is going to make its way into the critical path. So if we said, oh yeah, we'll allow super slow stuff in boot up, some guy is going to make a patch sometime down in the future where he copies some code out of the boot up and puts it somewhere else and everybody else will say, sounds good, it looks like it comes from elsewhere in the framework. So we pretty much don't allow slow code anywhere in the framework, which leads to really fast code. Leads to Merb requests rendering in 500 microseconds. It leads to things like it seems like controller set up cookies, there is 75 microseconds. That seems like a lot. It is a lot. It's going to get smaller. But it's good when you're thinking about things like 75 microseconds. There's a lot. That means something. That means that your app has a lot more headroom than other things. It means that your app will be able to actually do things. Let me rewind. So Merb is frequently used for things like ad networks, where you get 10 million hits a day or 20 million hits a day. In fact, there are Merb apps running today that get into 10s of millions of hits per day. That's only possible because it's possible to write Merb actions that render in less than a millisecond. It's not actually possible to write Rails actions that render in less than a millisecond, because the Rails stack is two or three milliseconds. So what else about Merb? So there's this thing called the public API. That sign over there is sort of what has happened to Rails. So you have to decide when you're making an app. Usually in most languages you have to decide what the public API that you're going to expose to the users is. And a lot of languages like Java provide facilities where you can say, this is private and you can't touch it. And thankfully Ruby doesn't do that. Ruby actually lets us experiment and do all sorts of interesting things with things that the person who wrote the original code might consider private. What that lets us do is it lets us say, okay, here's a bunch of code and it lets other people write plugins or experiment and come back and say, hey, without having to write, recompile or do any sort of, without having to do any sort of hard work to get it running, they could simply at runtime make some changes, see what happens and then come back and say, hey, you should make this change. But that doesn't mean that we should give up on the notion of what an API is. So MIRB has a strong sense that there is an API that MIRB intends you to use made up of all the public methods in MIRB.  Obviously that doesn't, like I just said, that doesn't make them verboten for experimentation. But it does mean that there's a contract with our users that we make. You only use the public API, we won't change it, and we're going to make it super robust. What that means is that if you find something that you can't do with the public API, we're going to make sure that you can do it. Usually when I say that someone says, really, anything, the answer is probably not anything. But our mission is to not use Ruby as an API. It's not to sort of expose all corners of the API and then let you do whatever you want and then forever maintain every private method as an API, which is sort of Rails' position right now. Because of the fact that people have overridden, you know, the way that Rails looks up dependencies in order to add special functionality, Rails can't change the way they look up dependencies anymore without breaking people's apps. So we're going to, we're trying to avoid that. But we're committing strongly to if there's something that you want to do that's relatively sane, adding it. One example of that is MIRB made an assumption for the first two years of its existence that templates came out of files. Seemed like a really good assumption. And then one day someone said, I want to put templates at the bottom of my controller. But I've started it since Anatra. It's been cool. And our first reaction was, this seems crazy. But then our second reaction was, why are we making an assumption about files without templates being the files? And it turned out that by modifying our API so that it no longer made that assumption, we didn't have to add a lot of, it was, you know, a couple lines of code. We changed the way our assumptions worked. All that code was already private. And we were able to give this person a feature that he wanted without having to, without him doing what he initially wanted, which was alias method chaining render, something like that. That was his initial. He said, this was one of the times when someone came into the merge out room and said, I came up with a really good reason. I have to use alias method things. I found the reason why you need it. And this was one of them. And the solution was a very simple two line change that changed the fundamental assumption about how Merb worked, but didn't break anybody back. Merb is modular. What that means is that pieces of Merb don't know about each other. Really. That is sort of a fundamental way programs usually get written, but somehow, because Ruby is powerful and flexible, lots of code written in Ruby doesn't end up being modular. It requires discipline, but what it means is that you can easily, if you want, swap in and out pieces of Merb, which leads to very hackable. That's Roomba. Roomba actually decided that they are going to promote people hacking Roomba. But they could have not. They could have said, this is Roomba. You can't touch it. They could have been Apple and said, if you open it up, they didn't.  That's actually sort of our same approach, which is make Merb as hackable as possible. Make it a framework that, if you're a hacker and you want to make the change, it's going to be really easy. You're not going to have to go walking through the code base for several days trying to find something to be obvious between modular, etc. One of the things that came out of this is Merb slices.  It actually ended up not requiring almost any changes to our public API. So we had one change. This was a big feature. It was a people wanted this in Rails forever engines sort of provided for breaks sometimes and seems like a big hack. So we were willing to make some change to the public API but it turned out we didn't need to because we already didn't make any assumptions about where files live or where controllers, models, or views should exist or how and when to load classes. And so everything just worked. And the person who wrote slices who is currently doing a bunch of really interesting work in Merb actually getting paid by engineers to do something in Merb has said that without the way Merb's infrastructure worked he wouldn't be able to do it. And I think he wrote slices in like a few days or for sure under a week. So that's pretty cool. And that's sort of a testament. This was the first testament. This was the first time where I knew for sure we were right on what we were trying to do. So people sometimes say, well, it sounds like you're getting all configurable on me. So put that. Do I need an XML file? And the answer is no. We like convention over configuration. So here's how Rails does convention over configuration. They have Rails and then they splatter throughout Rails all the convention. So that's one way you could do it. You could say 20% of people want something done this way. We'll just hard code it into the framework. These rollers are supposed to be in app controllers. We'll just have it in the framework that it's an app slash controller. And we won't really have any notion of when you want to say app controllers go somewhere it goes into a special place which is the default place. Merb works differently. So Merb has Merb core which has no default in it at all. So assumptions that you would assume would be true like models or are nowhere to be found in Merb core. In fact, if you would download in a small Merb core right now you would not you would not be able to make any sort of assumption about anything. You would have to pretty much start from the ground up. So yes, you would have not XML files but a lot of configurations too. But we're not EAs. It is true as Rails proved that a lot of people want the same thing. So we have layers on top that are seen and known that are Merb more which has a generator in it that generates files and unknown configuration.  And then we have a layer of defaults on top of that which says okay, most people actually want their things in app models. So we have one file which is the bootloader which puts the defaults into place and it's the bootloader unlike Rails which has just one giant method which says do this, do this, do this do this and it's just one line like 40 lines or something basically if you want to change the way Rails stuff you're going to have trouble the bootloader in Merb allows you to simply just say okay I don't actually want the load framework bootloader so I won't have it. Just take it out and in fact the active record plug-in for Merb adds a bootloader into the bootloader in a specific place where it needs to be which adds its own set of defaults because obviously you don't come with Merb and that's sort of the way you like it so that's sort of the philosophical treatise on what Merb is and now I'm going to go into some cool features and then I'm going to do some code. So first of all the Merb router is pretty cool you can do stuff like this you can request that anything so what that route says is match flash-foo but only if the user agent matches MSI and what user agent matches MSI means is request that user agent matches MSI you can also do really easy optional segments as you can see here nested optional segments so you don't have to do weird things with splats and simply put optional segments in Merb and then you're good to go we also have something called deferred routes which is sort of the reason why this set of slides is in here deferred routes basically let you take a piece of code that is routing code sort of related to the way where you want to go and put it in the router block of code that gets the request and the parameters and we've actually because of the fact that the session is not really part of the controller it's just part of the request you can even do request.session so over here you do the request.session is logged in then send you to main merge main in controller main with parameters otherwise send you to log in sort of the request.session that logged in is also another interesting thing about Merb which is that the session is the first level object so in atmodel.session you can actually go in there and add methods to the session obviously we'll have access to self and actually do things like request.session instead of overloading helpers or your controller with things like log in plus and plus which obviously would then make them inaccessible for the route so one of those coming out October 11th I don't see any reason why we announced that a couple weeks ago and we're very much on target Merb camp is October 11th and the goal is to release 1-0 by then some things that are in 1-0 form builder with automatic client side validation so like Rails Merb has a form builder but Merb's form builder is actually really powerful and easy to swap in other form builders with anybody noticing so Merb has a plugin called Merb jQuery that comes with Merb more and obviously you can take out nothing is entangled into it but part of Merb jQuery in 1-0 will be a form builder that when you say input or text field who will go in to data mapper and I guess act a record to provide the same functionality that it wants to that would look for validations and automatically add the appropriate metadata in .gov and could do anything which would automatically then give you client side validation and the router that I showed before which didn't have like r dot blah blah or map dot blah blah is part of a ground up rewrite of the router mainly the mission of the new router was to provide better URL generation so the existing router is really fast the initial mission for the router was for it to be super fast but it is because of that super fast and super powerful because of that it's very hard to do URL generation that user agent MSI hard to figure out how you would go from a URL method and go to something that's in the router so it turns out to be really hard but it turns out that if you operate within a subset of the allowable routes and we're trying to make this subset as big as possible then you'll be able to generate routes from the client side we made a decision with the new routes not to to not really support URL generation of anonymous routes that may sound really scary it turns out that you should be in rails also using named routes because they're much faster for URL generation so like we're talking milliseconds of time that could be spent in a reply to a lot of URL generation purely just generating routes because you have to go through a massive list and start figuring out what's going on and okay which one is the least ambiguous or all sorts of crazy rules so turns out you should be using named routes and MIRB is going to enforce that you should use named routes for URL generation with the exception of the default route that has its own name closed as well so you can do URL and you can do like controller through action bar and that'll work fine because it's the default route but otherwise you should do the thing that's best something people have perhaps criticized MIRB for I think it's fair to criticize Ruby web framework for this because it's really hard to figure out how to test things MIRB has some nice things in it like the fact that you can instantiate controllers usually you can do controller.new and then you can call an action and get the method and it turns a string cool but we still don't have a clear testing strategy there's a bunch of people doing MIRB apps though and we're all testing our apps so before we know we'll get together and form up what appear to be the best practices this is definitely going to need to be something that I don't know what to say because it seems like obvious that we as a community care about testing but it seems like there's big holes in what exactly we care about and how likely we are to actually test in a way that so in my view testing should be that when you find a bug when you create a bug a test fails and when you do not create a bug then it's going to fail and now we're near that in the Ruby community pretty much all testing strategies produce test failures when there's no bugs and we need to not do that so hopefully the MIRB testing strategy will be closer to that but I think we need to step up as a community and get closer to that ideal there's also going to be something called MIRB stack so another criticism of MIRB is like I said oh my god which we don't have but oh my god configuration I have to know about all these gems that are in MIRB more and what I need and it's going to take me days to even figure out to begin what I need and it seems like everyone's doing the same thing anyway so what are you guys doing so we agree that it would be good to have one thing that if you wanted to just get up and running it would work and everyone would probably do that so there's going to be this thing called MIRB stack it's going to be a meta gem that's going to be a developer and will also include a generator that will generate that will sort of free fill in the configuration for you so you don't need to figure out exactly what all the gems are what's kind of nice about MIRB stack though is that if you after generating MIRB stack would want to change up what you're doing it would be pretty easy because it's just sort of pre-filled in generation for example it will be really easy to take it away like I said much better URL generation this is as I said before sort of a combination of restricting URL generation to named routes and then making URL generation through named routes as powerful as possible again because we do things like matching user agents and doing deferred routes it becomes super hard to work trying to make it as good as possible a really interesting promising thing that we sort of spiked out and now are on the fast track to getting into MIRB is so fusion passenger is cool because fusion passenger lets you do fast restart they have all these forking tricks which they use and because of the fact that they fixed the forking problem in Ruby with Ruby Enterprise Edition they can do all these interesting techniques for deploying but we don't want to patch it most MIRB people don't want to patch it but they release this open source for Ruby Enterprise Edition so what we've been working on is getting a lot of techniques that are in fusion passenger into MIRB proper so one example is that when you load up MIRB in 1.0 it'll assuming you have fusion passenger installed otherwise it could be a bad idea it'll fork right before all your classes are loaded so it'll start off your app and then it'll fork off and then the parent process will just chill out right before forked off waiting for a signal and then the child process will go on and do its thing like works right now and so far everything would be moving along as expected as MIRB and Rails work today but then if you sent a hang up signal to MIRB for the child process the child process would exit the parent process would be reawakened fork again from that initial point so in case that wasn't clear what that means is that you'll be able to tell MIRB restart quickly and it will reload any file so you'll be able to do a deploy totally change the files that are in the tree tell MIRB to restart and instead of having to restart from the beginning load all your gems and all that stuff it would start just from the point where it has to load your classes which would be faster start we're also going looking into and this is tricky across all the servers being able to manage a whole cluster through one parent process so we already have this working for mongrel and to supply what this means is that instead of a parent process instead of if you want a cluster having the initial process sort of shell out and make a bunch of MIRB you have the initial process working for processes and be in charge of listening for the child getting killed for instance by monit and making new one so what this means is that because you also fork from in this case you fork from a much later stage so you fork from right after all your classes are loaded but right before you actually down to a fork so what happens is you have a process and all of a sudden it blows up to like 6000 megabytes and if you're using monit which most people are with God your process will get killed so what that means today for like a mongrel cluster is that your process gets killed and has to boot up from the beginning all over again which means that there could be 5, 10 or 15 seconds where one of your processes doesn't work what happens instead is that because the parent process knows what's going on it can simply just refork as soon as the process dies so you have a child process that gets killed the parent process is like okay I receive a sig tile make a new fork and then probably 100 milliseconds something without the new process anyway all that stuff is courtesy of season passenger actually releasing ruby as ruby enterprise and I would encourage people interested in like long lasting ruby processes in general to strongly consider the possible benefits of forking as she's working I know it's been like a long time that forking hasn't worked in ruby so sort of the conventional wisdom is that things don't work it seems like a crazy plan but it actually worked with ruby enterprise seems like something worth considering another thing that we're doing with forking is code reloading sucks in everything because ruby has side effects if you say require some file who knows what it does might require another file that will do crazy things you can't really just say like unload the constant but Rails sort of enforces this notion that you can only put a controller and a controller file but as probably everyone in this room knows if you find a mistake don't do that very scary and bad things happen Murobb sort of tries to get it better by tracking what constants are loaded when you load a file but even that it's impossible to track every single possible side effect so what we're doing now is we're going to try also because it doesn't really matter how big your development process is so we fork really early again and then if we detect that a file is loaded we just kill the child process and start again and ruby loads in less than the amount of time it takes to push back your browser so what that means is that you have actual reloading that is perfect and foolproof again something that because forking is sort of a verboten concept and ruby people haven't thought of but once we started thinking about what forking to let us do the cameras a lot of really interesting ideas so I'm going to do some live coding well here's what I mean by live coding I'm going to make a verb app and I'm going to show you I consider doing slides here I consider showing you an action returns a string and hoping that you would understand what that means but it's actually really hard so what I'm going to do instead is I'm just going to make an app and I'll do some things hopefully directed by people wanting to know what things work and then hopefully you'll know what's going on so let me re-mirror my base before I do that are there any questions this is sort of 096 the verb right now is on a two week release cycle usually the weekend is the release so today or tomorrow there's going to be a release of 096 and so things like the new router are probably not going to be merged into 096 but it will probably be in 097 so pretty much everything I said in 1.0 is on the roadmap for a release between 096 and 1.0 so alright I don't mind that so let's make a so first of all if you say verb gen I'll just sort of give gives you generators we used to use ruby gen but we stopped using ruby gen because it has a dependent and active support and active support is very scary when it finds its way into your app and somehow that was happening sometime so some guy wrote a thing called templator and he started using it and it gives us it so if we say a verb gen app it'll tell us sort of what we can do is it big enough by the way to make it good so here so let's make an app verb gen app loanstar so I'm making a flat app here because there's something interesting in it so what a flat app is because merb has no doesn't care what directories you put things in merb supplies a flat and very flat app or an app with a single file and directories what to use so the reason I generated the flat is to show you this template location thing with super-wide apparently it's not an 80 character of a violation so what template location so basically what merb does is instead of just assuming that your template is on a specific location merb has a method called template location that gets called inside of the controller by default it means the exact same thing that rail is used by template location but in merb you can override that if you want and make your template the way you want this is one of the things that merb flies as easy to deal with you can use this in combination with rails as template root so we also have template root we actually have template roots I think rails might have that now so you can use template location in combination with template root to do a lot of interesting things so here we are inside of a controller and you can see that index just returns hello so let me just turn on the mode process ah but we do not actually just have a route I have to say controller I don't actually have a controller okay I'm going to back out of the bone so I just generated that to show you the template location message so I'm just going to make a regular merb app in a regular merb app comes with the router it comes with people around now let's make a controller so like I said if you make a string here and say hello and then turn on mode so that's what you would expect it to do so hold on and this is just because if you do we want to view and we say hello here hello from template and we say render over here unlike in rails it doesn't do anything magical it simply returns a string so it says hello from template and if I was to do x equals render something like render plus render it's just going to say it but it's a lot of time to turn it so so that works you can also return back if you also if you do redirect so let's make another method called you know, redirect it say hello if I say redirect to render it works that also simply returns a string so that sets the header and what not but it simply returns a string so while in rails you would say redirect you know long star redirected and return because in rails this does something special and then you might have other stuff here so this doesn't really matter since we're at the end but potentially we might have other stuff so you might want to return in Mirb we do the opposite so we can also simply return a string now I'm going to do something that you could never do in a real app just to demonstrate something so let's say I have a global and it has awesome there and I render the global obviously this is going to work now Mirb has a facility called run later which is simply a background thing you can say you can put in there $ax push so this global is going to get awesome push into it and it's still returning $ax so I'm going to restart to make sure that my globals aren't so what happens is that $ax over here gets awesome pushed into it but it happens in the background so what run later does is it provides you a block that gets pushed into a background queue and you can do whatever you want in it and if I keep running it like I said I would not use a global in your life run later could be used for example sending mail because it happens in the background thread there's a queue object that gets these run later blocks pushed onto them you should not use it really for mission critical stuff because if your process dies you lose the queue so that sucks but if you have something that you want to happen immediately and you could potentially clean it up later like you could easily determine that mail wasn't sent and therefore send it if your thing crashes or if you have a thing that never crashes or seems suspicious to me then you're good to go it's useful for operations that you want to happen in the background you don't want to clog up your render so you want it to happen quickly but you don't really care about you don't really care about the reliability of them you're willing to accept a process dying before everything gets sent so that's this is all cool so let's say I raise an exception here so I get an exception stack trace which is cool the stack trace lets you specify what you want if you say by default it just shows you your app stack trace and you can see inside it but you could also turn on the stack trace from the framework which will show you merbstuff gems which will show you anything from other gems like mongrel you could also turn on the stack trace the merb binary and obviously turn on and off so yeah that's cool and you can also see parameter exceptions you don't have any cookies or mingrats so that's cool so here's a common problem so what if I want to trap exception into something special I want to send an email so merb has this thing called exceptions control let's raise something more useful like a knock sound let's go into exceptions and go knock sound and let's replace this with a knock sound so it goes and renders that that's fine and you can use this for anything you can use, you can catch any sort of error you can even catch regular errors so you can catch standard error I'm gonna show you something this is the last time I showed this people were confused as to how this works and it seems magic but it's not really that method so if you do standard error that action name what merb does is merb tries to detect whether an action exists in the exception controller that map this it's literally a six line method the last time I did this somebody said wow merb hates magic and that seems really magical and I literally pulled out the method and it just does a recursive look and returns no if nothing is found and so you can this is sort of a way to do a rescue since you're not in control of the stack a rescue of everything but here's another problem let's say you're sending mail and your mail error is out it is it's own error raise let's make a mail error so if you do that the problem, so this happens in rails this is an exception let's go back to instead of raising the not found let's raise a standard error standard error is going to go here so if that happens you get an error stack you get a two dimensional stack of the error so the first thing that happened was you had the standard error you can see the stack trace at that point you can do the normal things that you normally do stack traces and then after that you can handle it here so you can use this to handle for instance an exception order fire which we have you can handle the case where there was an error in the mailer, do something else like maybe dump it into a file called you know, bad super evil errors that I couldn't catch and send mail through because you don't want it going to the log you want it somewhere else that you can look at and be like here are the things that I didn't get mailed at so that's cool what else does anyone else have anything they want to see before I move on so what else can you do with Merb so I'll show you our provide syntax so in Rails and Merb Rails has this thing called respond to which looks something like this you say respond to to format you can do something like format.html format.html maybe like JSON some object so let's imagine we have an object and we'll give it a 2JSON which let's say returns so in Rails I'm just compensating for the fact that I don't have an ORM object here so you might have something like something equals something.new and Rails would have this respond to block and it would handle it correctly but it turns out that you do this a lot anybody does Rails apps here which I seem to do this pattern happens a lot and you're constantly having to say well if I want to accept JSON in this case and if I want to accept HTML and you're just doing the same thing over and over and it's quasi-dry because at least you don't have to have a case theme or something but it's not really as dry as it could be so what Merb does is Merb has so you say in your class provides JSON and you don't have to say HTML, HTML is automatic you can say it does not provide HTML if you want but by default by default we provide HTML so and then instead of saying render or something like that you say display something and so we're in LoneStar and we have an index here so the first thing that display something does let's do the first thing it does is it gets your content type so let's start by assuming our, by the way Merb will tell you if it tries to remove a constant this is obviously pre the forking reloader and on Windows or some other platform doesn't support fork so if I go to LoneStar we see this thing, something so the first thing it does is it finds your content type in this case it's HTML and it says ok try to find a template called index.html.erb it found it so it found it and so it ran it but let's say I ask for JSON I'm going to start that JSON I love Firefox it's not any better so that's the JSON that came down so it's step one is it says ok what's my content type if it's in the case of HTML it was HTML it found the template all as well it just rendered the template if it doesn't find the template the next step is to attempt to try to call 2JSON or 2 whatever on the thing so this is the equivalent of render something or just something.2JSON right if I was to do this right if I was to do that now it's HTML because Merb accepts strings that's fine right so what display does is it encapsulates the pattern of that respond to blocks that Rails uses the fact that what you almost always what you pretty much always want is check see if there's a template matching the content type if so render it if there's no template then call 2 something on it and the 2 somethings are also just a layer of default that are provided by default in the bootloader but you can add your own MIME types just looks like this Merb.add MIME you say like shockwave 2 shockwave and then you provide a list of it's like application awesome x shockwave or something and this part over here tells it what you care about what incoming accepts headers should match this tells you what to call on it and this tells you what to look for templates so it would look for index.shockwave.erb so what if you don't provide JSON and you ask for JSON so it explodes with 406 not acceptable which is just coming here so I can say 406 not acceptable and then it will say 406 not acceptable so that goes back to the fact that you could catch exceptions another common question is ok so let's say I have something like so if I have this and I say 404 not found right and I go into lonestar let's say I raise my sql not found I want it to probably do this right because it's not the error but so far I've not shown you any way to disambiguate between that error and any other error because we only use the last part so we considered not only using the last part but it seemed silly because it seemed like the number of cases where this would happen would be low compared to the utility of having short names but you can just do def self.action name my sql not found right and then it will work that's because action name again is not anything magical it's just a recursive lookup for matching things in the exceptions controller so if you override it to something special it just works fine works just just the way you want so what else I'll show you action arc so what's an action arc so let's say I have in my lonestar thing I actually want to take a parameter let's say I want it to you know prams awesome right and if I do this I can do awesome equals lonestar and it will render it that's the normal pattern that works just as well in merb as it works in rails but rail, merb also allows you to do this right it lets you specify it as a parameter it even lets you do this and it does this using parse tree which a lot of people think is crazy but this is actually probably the most magical thing merb does and it does this because it provides a completely non-magical tsl right it provides a a mechanism for you to treat your controllers as though they were really actually ruby and what does this do for testing right in testing you can actually do this right that'll work that seems well worth the fact that we're using parse tree and both Rubinius and jruby have added to their implementations a non-par tree dependent version of dot arg so the way this, the way I would like this feature to exist if it was in ruby is something like you'd be able to do method index dot args and it would return something like this and yes I'm aware of the fact that if it was not a literal it would have posed some problems but assuming it was limited to literals which is the only case I actually care about something like this would be cool and that's in fact the api that we provide using parse tree and that's the api that is provided using rubinius and jruby which is cool ok so one thing that we do that sort of departs from ruby a little bit the ruby's normal behavior a little bit is that we do this so let's say x y equals hello z equals one star and let's say we did so first of all if you provide no if you provide no parameters in this case it returns a bad request which basically means you try, you try to call the method using without an x but ruby requires an x so there's a required parameter here called x you didn't provide one so boom bad request which is an htp error if I do like x equals whatever then it works fine what is not intuitive and again a departure from ruby is that if I do this it actually the middle it's able to call this leaving the middle default there but overriding this one that's just because of the way we do the lookup and the way we do the sends we actually just explicitly say ok we know what the default is so we'll send that in this case whether or not this made sense because it seems like it should just do what ruby does but it turned out that it's extremely common to have optional things and because we don't have to worry about the normal keyword arguments problem normally ruby has no way of specifying keywords arguments so sorry you're out of luck but in our case we do have a way of specifying them so we implement this as though there were keyword arguments cool any questions yes sir we support so if you do ok there's two questions there's two questions you're asking one of them is just in general how do we handle JavaScript like returning JavaScript back first of all as a person that does a lot of JavaScript I'm uncomfortable with the way Rails does it namely actually sending back JavaScript to be eval because it seems like sending back stuff from the server to be eval on the client side is bad like the is used on the client side to eval things which means that you're causing like this trust barrier that seems dangerous and I just I try to avoid having eval arbitrary strings in my code in JavaScript that just seems like a bad idea but so you can do something like provides js right and then you can do and then you could have you could potentially have it do like so this is not going to work because like I said there's no eval rigged up on the other end so I think it'll just probably return a string so it just works the same way anything would work by the way in my in this demo here I'm sort of cheating by appending .js or .json or .whatever that's because if you like in Rails if you do .js or .json or .whatever it'll automatically win out over any content that's provided by the accept header but if you do provide if you if you do this but you send in an accept header for instance if you're JavaScript or a web service we handle that just fine and that's handled using the list of accept headers that are provided by admi does that answer your question people tend to write JavaScript my 30 seconds should be on this is if you're a web company that has any kind of significant app and you don't have somebody on board that knows JavaScript you're silly it's like not having anyone on board that knows HTML so it's a core web language presumably you have a team of some people finding someone that knows Ruby and JavaScript isn't that hard so just do it if you look at 37 signals which sort of popularize RJS has a ton of custom JavaScript right so RJS is cool but they end up writing a ton of JavaScript on their own anyway because it's just not hot like Rails it's like a it's an 80-20 solution that is actually one of their worst 10% things ever and then if you in fact do use it at some point in your life you're going to be hitting a weekend and you'll be like oh my god I have to actually know JavaScript but I don't actually know any JavaScript so time to learn JavaScript over a weekend it's not ideal basically just get make sure you have someone on your team that knows JavaScript all be well other questions yes so actually this is a good opportunity to announce something so Merb typically starts up at around 20 megabytes for like these processes there's a site that had been running Merb for on a 40 megabyte footprint running a few three or four engine yard slices just getting like 7 million hits a day and I don't know probably had a couple dozen Merbs total on those four slices slices normally hold like three Rails instances so you could just pack more of them inside but the announcement is so I don't know if you guys noticed but if you require RubyGems and then require any gem RubyGems requires the entire RubyGems repository into your system and that could be a lot of RAM so just take double straight so here I am in IRB and that's here I am in IRB and it's four megabytes and let's require RubyGems and all is still going to be well I already required RubyGems actually that's fine but now let's say I require something small like JSON first of all did you notice that perceptible pause there and let's look at it now 9.9 megabytes so what happened there what happened there is that that pause was Ruby loading in the gem index into memory and that really sucks and that is actually the reason why any Ruby process involving gems that you run doesn't start instantaneously I can do like Ruby minus E puts awesome that will be instant and I think that's actually like a mission of Ruby is to be able to do that instantaneously or perceptibly instantaneously but once you add RubyGems automatically there's like a pause and that is actually unnecessary so what we have done is we're releasing a gem called MiniGem which is just all it does is allows you to instead of requiring RubyGems and it will does what Ruby 1.9 has something called gem prelude which mocks out a lot of the RubyGems methods lets you still say gem blah blah blah we'll still load everything it still adds stuff to the low path but it tries its darnedest not to load RubyGems ever because RubyGems is huge by the way I don't have that many gems on my system if you have a lot more gems than I do that number will be bigger that's possibly your process, randomly the reason we didn't just use gem prelude is that gem prelude works to avoid if I just so gem prelude was written so that in Ruby 1.9 that's still instantaneous because Ruby 1.9 has required RubyGems in it and so they didn't want to have it explode so it does sort of defer but gem prelude falls back to RubyGems way too often so for instance if you do in Ruby if you do like gem JSON bigger equals to 0.5 or something like that that works you don't have to do this in gem prelude the first one will trigger a requiring of the entire RubyGems library so there's a bunch of cases like that and so instead of trying to figure out how to fix gem prelude so that it would not so that it would work for all cases we just basically rewrote it something a little bit differently in that we require gem version so gem prelude has like a method that takes a string and makes a version out of it which is an array which seems silly since gem version isn't very large it's like a K or something and has all the functionality and so we did that a few times we also require the gem specification of any gem you actually load which is again very small so that we don't have to guess about where to require files from which is still possible using gem prelude but yeah it's cool and it's going to be released soonish like this week probably cool, yes so I have one minute so I don't think demonstrating is impossible plus I gave a talk about jQuery this morning but I can tell you the answer which is it's not any different from using jQuery with Rails jQuery has getimpost helpers, getimpost things and HX and if you just say dollar.get someurl provide a callback it will hit merb with the url it goes through the router then you probably want to ask for JSON so jQuery has like $getJSON someurl function JSON puts stuff in there and what you want to do is let's say we did like lonestar it's like the url you would put in the browser so if let's say I did lonestar index for instance with getJSON it'll actually so it'll go to lonestar.rb and if I say it provides JSON and you display something it'll return back to jQuery a JSON object which will be available as jQuery so it'll be available as json.awesome which is pretty much as far as I'm concerned all the integration that I need that pretty much lets you pass RubyHash directly down to JavaScript seamlessly and that I do a lot of good works well for me cool video equipment rental costs paid for by food screencasts


The main focus of our research here is within biotechnology, especially the area called medical biotechnology. So what we basically do is that we take the soldiers of the body, the antibodies, and we take them out of your body and into the lab, and in the lab we can generate more and new soldiers to fight disease in a better way. We have made many great achievements within my lab. I would say the most important within recent years has been the generation of technologies or development of technologies by which it's possible to generate antibodies against one single rare cells in a heterogeneous population.  On the screen we are looking at cells taken from a colon cancer patient. What you see is the cells from the blood of the colon cancer patient. In yellow you see the cancer cells. These cells are yellow because we made them yellow by the antibodies that we have created. The goals of our research is to contribute to the area called biopharmaceuticals. Within this area therapeutic antibody reached a sale in 2013 of $63.5 billion. This is around 20% of the Danish gross national product. We would like to contribute to this market.


Just one minute. Yeah, you see optical isomerism is what again the same basic thing is same same molecule same molecular formula, but different behavior. But behavior if you talk about here. What we have observed that there are some compounds. Okay. There are some compounds through which through which if the light passes through. Okay. Okay. So when the light passes through it is then it is a phenomenon that we observed. Right. So first you try to understand what is optical isomerism. Okay. So what happens if a light passes through a given compound. Right. Then we observe what that this light get deflected like this, either in clockwise direction or in anti clockwise direction. Or it is also possible that this light passes through without any deflection like this. That is also possible. Okay, without any deflection. So when we have this observation, this one or this one, then the compound is said to be optically active. Okay, this deflection shows this deflection in the light. Deflection shows optical activity of the compound, optical activity of the compound. Yes. This yellow when there is no deflection, it means the compound is said to be optically inactive. So first of all, this observation we get or we found this observation with some of the compounds. And this phenomenon, the deflection in the light is called the optical activity of the compound that we are using this light that we are using here. This light is plain polarized light. I'll tell you what is this plain polarized light. This is plain polarized light. So the deflection in the plain polarized light when it passes through a given compound. Then the given compound, it's said to be an optically active compound. So it is the optical isomerism is nothing but it is the behavior towards the plain polarized light of a given compound. Understood. Okay, so plain polarized light is what you can understand by the name itself that the light is polarized along a along a given plane like parallel lights we have like this. Okay, this is the light we use parallel lights we use along a given plane. Because suppose if you have a light source, correct. So this light source radiates lights in all direction. Right this in all direction the light we have. Right. So suppose directly if you allow this light to pass through the organic compound. Right. So obviously we have light in all direction over here. So when the light comes out from this, whether it deflects or not we cannot say because here also we have the light in all direction. So with this light we cannot understand or we cannot conclude that the light is getting deflected. That's why what we do we convert this light into plain polarized light. Okay, and then this plain polarized light is allowed to pass through a given organic compound. If you observe some deflection either clockwise or anticlockwise, then the molecule is said to be optically active. If there is no deflection, then the molecule is not optically active. Did you understand the logic here the concept did you get it. Tell me, guys. Yes. No no no it's not chirality. It's not chirality. I understand what I said. Yeah, I'll explain. See when you have a compound suppose I have this compound, and I'll ask you whether this compound is optically active or not. And what you will do you'll take plain polarized light PPL and you allow this PPL to pass through this given compound. If there is deflection in plain polarized light, then the compound is said to be optically active. Got it. So what we have done why first of all what is plain polarized light, and why they're using this why not we are using normal light here, because you're observing this deflection. So we should have light in all in in one single direction, then only we can say okay it was along x. Now it is going on into XY direction. So there's deflection. But if we have light in all direction, then we cannot observe whether there is any deflection or not. That's why from a normal light source, right from a given light source, we have to convert this into a plain polarized light. How do we do that one simple method I'll tell you what is that, but that is why we are using that is the reason we are using plain polarized light here. Okay, so what happens and don't draw this I'll just give you what you need to draw. Actually what happens. We have a light source. And from this light source, it travels light emits in all direction, electromagnetic radiation in all possible direction light goes. Okay, now this light source from this the light we allow to pass through a Nicole prism. Nicole prism is what I'll tell you. It is a Nicole prism. When this passes through a Nicole prism, this light which is there in all direction. Now it is polarized along a single plane like this. This we call it plain polarized light PPL in short. Now this plain polarized light, we allow to pass through an organic compound which we need to figure out whether it is optically active or not. If we observe some deflection in plain polarized light, either clockwise or anticlockwise. If you observe this deflection. Then it is, then the compound is said to be optically active. Is it clear. This is the phenomenon here, and this entire setup is done. The entire thing is done in a device called polarimeter. So we have this device in which we have a space we have an inlet there where we can place the compound, and then from one side we can inject the light source from the light source we can inject the light. And then we have a Nicole prism which convert this into PPL, then all these things happen. Nicole prism is what you can understand this. It's like a, you know, you must have observed the bar, you know, fixed in the window like this. The iron rod or any bar you must have seen it fixed in the window like this. Yeah. Is it. So in Nicole prism also we have ultra fine slit like this. Okay, parallel ultra fine slits. Okay. Suppose a light is not parallel to the slit that we have over here that won't process through the Nicole prism. I suppose we have a, I'm just just trying to make you understand we have a slit like this suppose ultra fine slit we have like this. Now all those light which are parallel to this can pass through. If one light is going like this in the in a direction perpendicular to this. Like this suppose the light is going it will collide with this and reflect back if any other direction collide with this and lift it back only that light which is parallel to this slit like this one. This can passes through the slit. Did you understand this. So in Nicole prism. Long in the sense can show long in the sense the length of the Nicole prism. No that is not required like whatever the amount of light goes that is more than enough the diameter is such that the light passes through and then whatever light it passes through this. It just enough to detect whether the compound is optically active or not. Right. So the thing is this ultra fine slits through this only the light passes through and we have many ultra fine slits like this it is present. So all those lights which passes through the Nicole prism. It is along a same plane that we call it as plain polarized light. Did you understand this entire setup. Yes. Now this is just for your understanding that what is optical activity often compound. Obviously when you get the question in the exam you won't have all these things like it's not like the compound you will take and you'll go to the lab and perform the experiment and say whether it is optically active or not. This is that you cannot do. So it is just for your understanding, theoretically how do we get to know that the given compound is optically active or not. That is what we have to understand. Right. The phenomenon is this optical activity. So let's go down optical isomerism. Right down the compound having similar physical and chemical properties. The compound having similar physical and chemical properties. The compound having similar physical and chemical properties. It differs only in the but differs only in the behavior but differs only in the behavior. Towards the plane polarized light are called optical isomers and the phenomenon is optical isomerism. Compounds having similar physical and chemical properties but differs only in the behavior but differs only in the behavior towards plane polarized light are called optical isomers and the phenomenon is optical isomerism. Clear. All of you have written. Yes. Okay. Now you'll see if the plane polarized light PPL rotates clockwise that is right side clockwise. Then it is said to be Dextro Rotatory Dextro Rotatory Dextro is the word which names the right side. Okay. So Dextro Rotatory represented by a small D small D or plus plus means also Dextro Rotatory. Plus. If the PPL rotates rotates anticlockwise that is towards the left. It is Levo Rotatory that is L or minus. Okay. This you must remember D and L. Obviously this is experimental thing. Okay we cannot say for a given compound it is Dextro or Levo till we do not perform that experiment. Are you getting me. Okay. Any compound it is given D or L. We cannot find out this logically or theoretically we cannot find out whether it is D or L. To find out D or L we have to perform that experiment. Suppose you have a compound AB and you will ask me so what is the optical behavior of this Dextro or Levo. Then you have to check this either you give this compound perform this in the lab and then check whether it is D or L. Or you have to refer some book in that book some book the data is given D L like that. Then only we can. So it is the experimental thing theoretically we cannot find out. Is it clear. Okay. And hence they won't ask you this whether it is Dextro or Levo understood. Now, so the experimental thing we have discussed like what is optical activity. No explanation of that you know what happens when it goes to clockwise anticlockwise why we take PPL what is Nicole what it does everything we have discussed but like I said. This information you must have but you know all these are experimental thing. They can ask you some theoretical questions on this right but this won't help you deciding a given compound is optically active or not. Right now to understand whether a given compound is optically active what we have to do right so before going into that we need to understand few terms. First of all, okay, now this is important right from this only you will get questions most of the terms that we are going to use the first term you write down Karen center. What is kind of center definition right down and sp3 hybridized atom and sp3 hybridized atom, having, having all four atoms or groups different is said to be Carol center. If carbon is the atom, then it is called Carol carbon, then it is called Carol carbon any doubt in this see the basic difference between stereo central Carol center is what stereo center was can be sp2 or sp3 but Carol center is only sp3 very important. We have an exception in this exception is what tertiary a mind is optically inactive. Once again, don't write this once again guys write on one note before this exception. Write down the note. If the molecule has if the molecule has only one Carol atom, if the molecule has only one Carol atom, it is optically, it is said to be optically active. If the molecule has only one Carol atom, it is said to be optically active. So, listen to me very, very carefully here. I am not saying that presence of one Carol center is the condition for optical activity. Are you getting me. I'm not saying this I'm not saying the condition of optical activities one Carol center should be present is not the condition condition for optical activities something else will see that. Okay, but we have observed when the molecule has only one Carol center, it is optically active. Once again, we'll talk about it once again. Let me first explain the concept. So what I was talking about condition of like of optical activity is not the presence of one Carol center. Right, but it is observed that only one Carol center if it is present only one, then it is optically active if more than one is there, then we cannot say we have to see other things in that case. We'll just keep that in mind. Then you write down this exception, tertiary amine tertiary amine is optically inactive this is the exception we have tertiary amine is optically inactive. If you look at this tertiary amine like nitrogen has three different alkyl group present R1, R2 and R3. And obviously we know it has one lone pair also. So if you look at the Carol behavior of this just now I said, if only one Carol atom is there it is optically active. So if you look at this molecule nitrogen is the Carol nitrogen here. It is sp3 hybridized, right. Having four different groups three different alkyl groups and one lone pair. So that's not the logic that I said that if one is present optically active, but this is an exception it is not an optically active. It is because of amine inversion. Amine inversion we'll talk about it later, but you consider this as this as an exception. Okay, for you know optical activity does not show optical activity. Okay, you must keep this in mind. Okay, what is tertiary acid? What is the formula prakul? Tertiary acid, tell me. And what is your doubt? I'll write down, wait. That's what I'm talking about. You're talking about meso that's what you've written meso there. Yeah, meso tertiary acid is not optically active meso compounds are not optically active. Because we have a plane that's what I'm telling I haven't discussed the concept like how we get to know that given compound is optically active or not. Okay, so you have asked this question a bit early, like we haven't done this concept, but you must take care of one thing that meso compounds are optically inactive, because of plane of symmetry present into this answer to your question is plane of symmetry is there. That's why it is optically inactive. Then you have so many questions again, why plane of symmetry? What is the other things we have. So that's what I said, we'll come to this one by one. Okay, let me first, you know, explain, like what is the condition for optical activity we have then you will get to know. Right, so have some patience, let me finish this you will understand. No, obviously not today we don't have that much time but yes once we finish all these things you will understand why meso compounds are not optically active. Okay, so this is one thing kind of center we have discussed sp3 hybridized atom with four different atoms or group attached to it. Okay. Second term we have that is chirality.   Okay. What is the difference between chirality and chiral. See if you think that chiral center and chirality are the same thing, you are absolutely wrong. Okay, then name is very much similar chiral chiral center and all like that. But chirality is has nothing to do with chiral center. Okay, so this term chirality right down first of all has nothing to do with to do with chiral center, chiral center. This is the chirality is the necessary condition necessary condition for a molecule for a molecule to be optically active optically active. So if the molecule is chiral, it is optically active we can say it's not like color center is present. Hence it is optically active. If the molecule is chiral, it is optically active so condition is chirality it's not chiral center but again I'm adding one more line here. If only one carol center is present, then the molecule is said to be carol and hence optically active. So most of the time in 80 to 90% of the cases, you can solve the questions by checking how many carol centers are present. Right, one only one optically active. That's the one thing. The point is what is chirality right down when the molecule cannot be divided when the molecule cannot be divided into two equal half equal half. It is said to be carol. It is said to be carol means there should not be any kind of symmetry. No symmetry should be there. If symmetry is there across that symmetry we can divide the molecule into two half. Right, so condition for a molecule to be optically active that there is no symmetry present symmetry means we can talk about plane of symmetry. We can talk about center of symmetry and other things also we will discuss little bit of plane of symmetry and center of symmetry also will discuss that. Okay, so a given molecule, if you think of a imaginary plane or imaginary line across which you can divide the molecule into two half, then the molecule is said to be optically inactive. Right, carol molecules, next line, carol molecules, non superimposable, non superimposable to its mirror image, non superimposable to its mirror image. Next slide right down, I'll explain all these things okay terms I understand the new new terms we have here so you need to understand all these terms here. So superimposability, impossibility is the 3d phenomenon is a 3d phenomenon. If two molecules, if two molecules are superimposable are superimposable, superimposable. If a single molecule, it looks like a single molecule looks like a single molecule when placed over each other when placed over each other. Superimposability is what suppose you have a one, you have one molecule and another molecule if you place one over other. If you cannot identify that there are two molecules present it looks like exactly similar, exactly similar than the molecule is said to be superimposable. Correct. Hands are not superimposable. Right, if you place the hand hands are not superimposable to each other. Right. Okay, so when we can divide the molecule into two equal halves, right, two equal halves then obviously when you add the two like two molecules which is divided. If you place one over each other, they look like one molecule one single molecule because they are identical, right, both are identical actually. So it is what canal molecules, since there is no plane of symmetry, hence it is non superimposable. Like I'll give you one example of superimposability, then you will understand that what we are talking about here. Did you copy this all of you. Okay, one last example we'll see for today. Suppose we have a molecule say this one, we have done the portion for your school, optical activity or optical isomerism, your school portion is covered. Okay, all these are comparative things. So suppose we have a molecule here CH3 OH OH CH3 H and H. What we are doing we are taking mirror image of this we have we place a mirror like this here. So it's mirror image would be like this. This two are superimposable. Okay, you can also understand the reason here you see this is a mess or compound because we we have a plane of symmetry over here. Like this if you cut the molecule to half. We have a plane of symmetry and this kind of compound we call it as meso compound. He has asked, that's why I told this here. And since we can divide the molecule into two equal half, we have a plane of symmetry, it is optically inactive. Don't write this meso and all, we'll discuss that later. But this is a mirrored image of this. Now what happens, this molecule and this molecule are superimposable. Superimposability we can understand, we can rotate the molecule, we have to place this molecule over this. By any means, rotation is also possible. Rotation possible means what? You can rotate the molecule in the same plane. Like you can rotate the molecule like this. Like you are, no, like the car guy's steering. Okay, you can rotate it like car guy's steering, correct? But out of the plane rotation is not allowed. Means you cannot flip it. Flipping is not allowed. Are you getting me? This is not possible. Could you respond guys, all of you? Yes, flipping is not allowed. Like car steering, you can rotate the molecule to check whether the molecule is superimposable or not, right? So what we do here, you rotate it by 180 degree. This CS3 will come over here. This OH will be here. This H will be here. This OH will be here. This OH will be here. And H will be on this side. And when you, after rotating 180 degree clockwise, you place this on the other molecule on its mirror image, it is exactly same. Yes or no, right? It will just come over each other. Like OH will come over OH. H will come over H. CS3 will come over CS3, correct? So this is superimposability of the molecule. Did you understand superimposability? Clear? Right? So if it is an optically active compound, its mirror image is non-superimposable. The reason is because we do not have any plane of symmetry into that. I'll give you one example. You see, carbon case, suppose I bought CS3 here. I'll take here OH. I'll take here H. I'll take here CL. Here's an example. Okay? This molecule, you see, it is optically active molecule. Why optically active? Because there's only one caron, when only one caron, sorry, carbon, which is carol here. SP3 hybridized carbon. It is a carol carbon here because it has four different groups attached to it. Simple. Now what happens if you have only one carol carbon with four different groups attached to it? We cannot find any kind of plane of symmetry. You think of any symmetry, you won't get it. There's no plane of symmetry in this molecule. And it is true with all the molecules which has only one carol center. That's why you can also check presence or absence of carol center. If it is only one, yes, optically active. If it is more than one, then we do not know. We cannot say. We need to check the other thing. Then in that case, you need to check whether the molecule is carol or not. Tell me, this carbon is carol or not? This carbon is carol or not? Yes. Yes, it is carol. Because it is, first of all, SP3, one, two, three, and fourth group is this bigger one. This carbon is carol or not? Yes, it is also carol. So this is two carol center. Two carol center is still it is optically inactive because we have plane of symmetry over there. Point I'm trying to make, what happens here? This carol is carol. Suppose it rotates a plane polarized light clockwise 15 degree. Randomly, I am saying clockwise 15 degree. This is Ulta. It will rotate the plane polarized light clockwise, anti-clockwise 15 degree. So overall, when the PPL comes out, we do not observe any deflection into that. So its counter here, its counter here. Yes. So that is what the thing is. I know we have done a lot of things today. Like it is a kind of topic that we need to analyze, we need to think, we need to go slow to understand all these things. Again, like next class also will take up from this only. I will discuss all these things again. Superimposability, carol, carbon and all. But for today's session, you must keep this in mind that the condition for optical activity is the molecule should be carol. Carol molecule has nothing to do with the carol presence or absence of carol center in the molecule. Carol center is different. Carolity of the molecule is different. Carolity is associated with the symmetry thing, plane of symmetry, center of symmetry. Carol center is nothing but it is an sp3 hybridized atom with four different atoms or groups attached to it. Is it clear? Yes. So tomorrow, obviously you have bio paper. After finishing tomorrow exam, NCRT, you must go through the superimposability, basically optical activity part. From NCRT, you must read. Otherwise, you'll get confused here, right? Not today, let it be. After finishing tomorrow's session, must read NCRT optical activity. They have taken the example of hand while the hands are superimposable or not, right? So we cannot rotate, like we cannot flip. We can rotate in the same plane, but we cannot flip. Out of the plane rotation is not allowed. So when you go through that portions of optical activity given in NCRT, you will have a fair bit of idea that what we have discussed today, okay? And then again, to the next class, we can take up from this. Without also, we can discuss. Yes, any doubt? Clear? Till here? Tell me, guys, clear? Okay, fine. Okay, thank you so much. See you in the next class. Next Tuesday, we do not have any class. Next to next Tuesday, we'll have class, okay? The normal schedule. Yeah, thank you, bye.


Basically, rhyming slang consists of a pair of associated words, where the second associated word rhymes with the word intended. In this case, Mickey is associated with Mickey Mouse, and Mouse rhymes with house, which is the intended word. In speech, it suffices to use the first word of the associated pair. I went to my Mickey simply means I went to my house. The origins of cognate rhyming slang are uncertain. One idea proposes that this slang originated in the marketplace. The vendors could communicate without the customers knowing what was being said. Of course, you would not want your customers to know that you were going to lower your prices in ten minutes. Other stories say that it originated in the prisons, so that inmates could communicate without the guards understanding what was said. Some slang words have more than one meaning, for example, iron. Iron tank can be a bank, whereas iron hoof denotes a homosexual, where hoof rhymes with poof, which is a specific English expression for homosexuals.


What's good Josh Morales back again with another video. So we got another episode of botcha mania for 61 man should be a good one botcha mania they have some of the the most hilarious compilation of clips Wrestling related clips and memes same way with promo Joe as well So we're gonna check this out man appreciate all the love and support you guys have been showing on the channel Let's see what this episode of botcha mania has for us What's up? This is not the one and only Korean president illustrator and your nxt Korean commentator Oh That spot Not the old carrying cross it's a tire But Oh my oh my I love this intro With all the botches God, this is great.  Yeah You see these shoes on my feet here guys shoes of a champion this jacket right here Shoes of a champion Never shut up The microphone Drew McIntyre the chosen one back in the day carrying cross released of course from WWE now comes back Thanks Umbridge with that the first strap matching WWE since 2013 and it's here at Extreme Rules tonight. How are you feeling about this? No, I'm not good. It's Johnny Gargano. Oh Man and women of scissoring left and right Right here in Canada the UK Tokyo soul Korea geography Jones They're everywhere even Virginia speed of Virginia Tony Khan just sat down. No, it was Tony Shabani Actually, but they got digressed Tony Khan's not from Virginia. It's from Illinois, but I digress again You get your states mixed up here My Tony's Okay, but nonetheless, you still have a chance to join us and tomorrow night the Leacore Center EWTX comm Look at sing right there with that neck breaker back break.  Lady kicked out, but he kicked out You know it's about to come Oh No No, no No, no, don't do it. Don't do it. Don't do it Exactly I need to get me a cape like that. I like that You could pull it off. I couldn't I don't know if I can pull off a cake. Maybe captain is saying I'll go pull off a cake We'll see whoo Referee blew the spot. See that zebra is always getting in the way The only good zebra is a fired zebra All right, Harry, what else happened in 97? Hey, no, did you gain weight?  Wow What I know I would and now for something completely different. I Did see this on Twitter, bro.   I just said hey, would you guys?  Oh That cut so deep to those guys Pillar had been drinking so he hopped the rail and totally overpowered Jeff like it was nothing Which isn't a position you theoretically want your top guy on Love our industry. I take my knee and try to put it in his privates And then Miller piled over and then it just got completely out of hand And I'll say this God rest Jerry to soul malice knock the hell out of Fred Miller I The way again appreciate this is not supposed to be part of the show and you hit a motherfucker with a chair That was great I don't care if it was scripted or not scripted. It was great entertaining TV Boy, that was funny, bro. Oh my god. That was funny. They legit like a bro We'd be chatting. I just want to talk to Why do you have a shotgun? I just want to talk to him.  I just want to talk to him I just want to talk to him. I just want to talk to him. I just want to shoot him. I just want to talk to him What what do you do? I was to say that kind of stuff.  Oh no I never know who any of them are. That's the trouble.  Oh moss in the ring. I don't fail for him because he's really trying It don't help that he's really helpful temporarily This is such a great carpet like how they cut this together Oh, he's getting better as he's going on. I don't think he is He can only get better He could have a great career as a spirit level I hate you Oh, bro What is this?  Oh, that was that was crazy, bro. That that was that was fantastic dog I think there's something else at the end. I know reaction. Oh my god. This was another great one, man About too many of love checking out the videos dog Man, this this had me rolling man comment down below. Let me know what was your favorite part from this video, man But I appreciate all the love for support you guys show on the channel roll to Honey k appreciate y'all kicking with me. See y'all next time. Peace