Rails 5.1: Awesome Features and Breaking Changes

Video in TIB AV-Portal: Rails 5.1: Awesome Features and Breaking Changes

Formal Metadata

Rails 5.1: Awesome Features and Breaking Changes
Title of Series
Part Number
Number of Parts
CC Attribution - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this license.
Release Date

Content Metadata

Subject Area
Each minor release of Rails brings shiny new features and mild headaches for developers required to upgrade their applications and gems. Rails 5.1 will support Yarn and modern Javascript transpilers, remove jQuery from the default stack, integrate system testing and a concurrent test runner, introduce a new helper to create forms, provide encrypted secrets and more. In this talk, I will cover the improvements brought by Rails 5.1, explain the Core team’s motivations behind each feature, and illustrate the upgrade process to smoothly transition gems and apps from Rails 5.0 to Rails 5.1.
Point (geometry) NP-hard Slide rule Context awareness Group action Open source Code View (database) Commutator Sound effect Bit Line (geometry) Mathematics Computer animation Single-precision floating-point format Software framework Computer-assisted translation Resultant Spacetime Row (database)
Mobile app Group action Computer file Code ACID Control flow Sound effect Bit Database Instance (computer science) Symbol table Mathematics Exterior algebra Computer animation Different (Kate Ryan album) Semiconductor memory String (computer science) Touch typing Pattern language Resultant Set theory Condition number
Game controller Group action Matching (graph theory) Observational study Decision theory Plastikkarte Revision control Subject indexing Mathematics Computer animation Causality Meeting/Interview Information security Library (computing) Row (database)
Default (computer science) Stapeldatei Presentation of a group Key (cryptography) Database Virtualization Bit Limit (category theory) Event horizon Numerical analysis Equivalence relation Revision control Human migration Computer animation Bit rate Order (biology) Electronic visual display Family Row (database)
Revision control Medical imaging Computer animation Uniqueness quantification String (computer science) Network topology Family
Dependent and independent variables Mapping State of matter Code Database Line (geometry) Complete metric space Power (physics) Computer animation Meeting/Interview Computer configuration Natural number Single-precision floating-point format Order (biology) Software testing Endliche Modelltheorie Writing Sinc function Social class Condition number
Group action Context awareness Hazard (2005 film) Multiplication sign Weight Content (media) Control flow Parameter (computer programming) Line (geometry) Subject indexing Mathematics Computer animation Meeting/Interview Computer configuration Personal digital assistant Computer programming Order (biology) Endliche Modelltheorie Near-ring Computing platform Form (programming)
Slide rule Meeting/Interview Source code Electronic mailing list Metropolitan area network
Mobile app Digital electronics Computer file Interior (topology) Real number Multiplication sign Source code Electronic program guide Sheaf (mathematics) 1 (number) Repetition Product (business) Mathematics Latent heat Meeting/Interview Different (Kate Ryan album) Encryption Computer-assisted translation Address space Social class Default (computer science) Addition Email Information Key (cryptography) Software developer Physical law Instance (computer science) Sequence Radical (chemistry) Radius Computer animation Integrated development environment Repository (publishing) Order (biology) Configuration space
Satellite Group action Digital electronics Code INTEGRAL Multiplication sign ACID Real-time operating system Web 2.0 Mathematics Computer configuration Different (Kate Ryan album) Single-precision floating-point format Diagram Endliche Modelltheorie Covering space Scripting language Software developer Shared memory Electronic mailing list Instance (computer science) Type theory Arithmetic mean Data management Benutzerhandbuch Process (computing) Repository (publishing) Order (biology) Configuration space Text editor Procedural programming Remote procedure call Quicksort Web page Server (computing) Mobile app Computer file Link (knot theory) Open source Virtual machine Web browser Student's t-test Login Event horizon Power (physics) Product (business) Energy level Data structure Default (computer science) Dialect Key (cryptography) Cellular automaton System call Word Computer animation Integrated development environment Query language Library (computing)
Web crawler Group action INTEGRAL Decision theory Multiplication sign View (database) 1 (number) Water vapor Disk read-and-write head Mathematics Single-precision floating-point format Videoconferencing Error message Stability theory Social class Physical system Instance (computer science) Flow separation Type theory Process (computing) Mathematical singularity Configuration space Data logger Quicksort Imaginary number Web page Slide rule Game controller Mobile app Link (knot theory) Image resolution Electronic program guide Web browser Event horizon Theory Statistical hypothesis testing Revision control Goodness of fit Profil (magazine) String (computer science) Software testing Form (programming) Content (media) Database Line (geometry) Cartesian coordinate system Numerical analysis Computer animation Personal digital assistant Logic Library (computing)
2 and the the hit
it the I have an answer to you all rails 5 . 1 which is are the latest release of the framework that we are lot and enjoy and the slides are available online and you may wanna go there simply because they're being sue the pull request them gonna talk about so I only have 40 minutes I can't go into beers by invited to go there and see and commits the discussion and hopefully get involved you would open source and to give you a little bit about the context I 5 1 is going to be reduced any minute now and they now on but I mean just a given a B A 1 5 point always me is that was the result of 18 months of work in about 10 thousand commits about an a thousand commuters that 5 . 1 and you can think of it as kind of hard for me 9 months the work about 4 thousand comments I did this just with the key get command and if you actually go and look at the given date you going to see a lot of lines that have change in the code based and 1 of the reasons is that the rails and team is now using will look up for styling so us many things like and space is single what's novel courts but that is not really gonna affect you as users of rail so that is what I wanna talk about today if you use so how is this new version of effective and so when we talk about is uh breaking changes then active record active support an action view ties and action back and so the last discriminant for an starting is that and cats in this Paxil so and when the start of his
book the mayor but but but but but that break into this is that with the blue and red instances on really
I have a bit of my apps 5 1 and I haven't really encountered many that have effectively I found something the code and when I
talk about it but there are not that big winner so with the first one which she
is the um engine that reads 0 you're B. files uh under the hood has changed from a rule-based to Ruby and the difference is not just an acid and it's also that there will be rule-based was not really uh being maintained since 2011 and a Ruby has a simpler internal as more memory for the way now if all you're doing in Europe is just having you the files this is not an effect you at all because the result is the same as this is all that affect you if you actually are explicitly calling a rubik's in your code for instance if you have a jam like camel or something that touches action you then you might wanna look at its otherwise it just uh benefit for you it's gonna be faster on the next 1 is when you are a set suppose could convex you can add conditions you can say said if skid if and this conditions you can pass them as strings the and let me show you what what emits I tried to write an example here if you have opposed your database and then before you see in this indisposed if it doesn't have the the title song less the pattern is present you wanna sad no title there are less you you could pass a string in 5 0 the same with not miss feels where did did did did feel weird to me it's because there are alternatives to do this on 5 1 you're not gonna be able to use a string anymore but you can still like user Proc because they use a symbol so a few using strings for conditions then you may want to change to this new syntax still talking about breaking changes this affects you can't think about so when you sign around your summary used strings even say and get dashboard to all things like that so this string there are actually a couple of special symbols that you can use in your
answer can do get and then this the common controller is less common action was much comedy so this kind of syntax and I was valid until is 5 and these are wild card so if you have that in your notes you basically saying match any controller with any action or any this is really powerful but also was the cause of a couple of security issues that have already been fixed in previous version of Wales but the decision was made so that going forward this index would not be acceptable and more this study if you have many controllers all actions you my 101 this them explicitly which I also think makes for better empirical of
so if that's that I have so far for breaking changes are claimed is all of them and they might you to go and look at the change of the libraries but I think it just means immediate uh by the fact that it's from another be hard for you to upgrade to the place 5 . 1 0 0 and so now we can start looking at the future of what has been added or improved and what you can benefit your every day at work that's would Active record I on the
primary keys in your database they use a B S integers and now they can be as big into or big serially to impose gross so you basically have uh 64 bit so if you have a which you you need to reference many records and that the rate is now this is the default if you just beginning as you probably keys this can be this will and still talking about databases that this is only for my SQL or equivalent family the there is no support for virtual columns and I also from initial example for this let's say you have a user stable every user has a name now every user you can as as a has an opera name which is just the uppercase version of the name uh my SQL lets you do that with his opera name in SQL so basically as Stewart has this virtual column which is not like a duplicated just calculating the uppercase version and I can reference this column in your migration by writing playing you just due to the virtual happening and it has even uh more features let's say you have another virtual column which is name land which is the number of characters all the name you can that can and I ask you have to store this column here and also to indexed by this column so if you wanna display user sorted by the number of characters you may ask you I can do this and this is what they're called you need and what is good about this is that you don't have to write your as structured down SQL and you can just write you which I guess we'll refer still talking about database if you had to deal with many many records like thousands of records uh actor Racal provides methods to do this like find each or in batches so ifyou to Ituri and 5 thousand policy wanna do we we find each and this works and there was just 1 guy Archimedean 5 . 0 if you wanted to use that limits matter it wasn't you really working if you had right postali limit 500 of finding which you actually get a warning saying scoped orders and limit are ignored and so the way we just fetch a thousand because that's the the for in 5 . 1 The Limit method is now supported so that's good but
but I and having nominal fasten this and I'm sure of new features it's because maybe you've not heard about them and hopefully I'm giving you is about I'm going to see everything that's changed so so they would meaning that I get to the end where you probably going out and see that the features that have made the news event other presenter he talking about here but it's continually actor support
the and there is no support for unique of 9 and and here's an example of what this entails the when the value of the constant you could version is now 9 and not a as as an example that's the other string and the string has just a single emoji this image is called a family with 2 mothers 1 daughter 1 song this is 1 character it's 1 of knowledge about the 5 0 if you had asked for the men of this tree you would you would have gotten 4 and if you had also to reverse this string the family would have been split into 4 characters which is by no what you want and so now in 5 1 wonders for support for you cannot and families and of the separated the actors aboard duration has 2 methods called Since and until and now they have aliases after and before this is also easy to understand with an
example if you know call you're writing 2 weeks since christmas day nite can say 2 weeks after christmas it's the same thing about among some more natural in English 5 days and to because the state you now have the option to say 5 days before Christmas there maybe in your test this is something that you like that may have the option again let's get to 1 of the so bigger and requests there is there is a new method of being a model called delegates listened to I think this is going to be very and power for for the people who use them delegator pardon so if you have a class with a bunch methods and then you have another class that wraps the first one busy getting it's coming all the methods of the first one except couple then this can help you then we should have and another example here imagine have an order an active equity connoting database so users can create orders state wanted the story the so that's just an active aggravates and then you have another class called order completion that is delegating all the madness of your so doing everything the order does accepted create when an order conditions created it's also sending notification this is of apparently you can do in rails and a way to do this it's using the delegates method which really exist the problem with the delegate method is that you have to list all the map of the world delegates on minor be your 1st shots another way to doing this is to use a Ruby is uh metaprogramming methods and you can define respond to missing and can define what the missing and now works you just have to remember how to ride them and then it's like 10 more lines of code In race 5 when 1 I mean is this we just under a single bennigan listen to which this is exactly what explains so if your called a map of 1 order completion and the method does not exist there then it's gonna get called on the order and it's just a single line of code so I think this is very powerful tha
the I the
the action you the action actually few changes in action you and the very interesting
1 the 1st 1 is how do you out
in HTML tags we will be used by actually having because we actually have to helpers who's 1 helper called tag it is 1 had become content that and if you went out with the tag like that of the R N a break in line a way to do it in a way this is tagged the are nailed true that that works but you just have to remember the order nailed there was a true it it is because of the i doesn't have any content or options and that's why it's near and also itself closing but sometimes it's hard to remember and also there is another method content tag which you can also use In the past the and and then the option in the context if I 1 this index is still available it's not deprecated but you also have a new syntax we just call tag done the were tagged on this it's physical 5 . 0 and then the HTML tag it and you don't have to remember the order of the arguments and so I think this is really an especially important for newcomers when somebody and you can still Reyes they only have to learn once the way of that In order creating HTML tags and that they think it's o Caesar to remember now still talking about helpers and the user the neck size if think probably question that everybody who has ever programs In Venice has wonder when you want creative form why are there to help us ways there form for and form tag short into different thing in 1 index accepts the model but by the look so similar in that sometimes it's confused so what's gonna change in 5 . 1 is that instead of having to help pairs to create form you have 3 have 1st that I think that if you there's a new form of weight now the good thing is that this is 1 to rule them all so that in the long run the idea is that given a switch 2 forward and then on a form with where survive but for now nothing has been deprecated so users there if you create a brand new um scaffold act with 5 1 it's the use of form with but for now you can use all of them so let me just show you how you can upgrade syntax from platform for from top to form with using form for in this case I a form to delete a post you can still do it which form with you have to say actually uh model also you have to pass it and like I just visiting the syntax differs if used form tag than the 1st argument is is that your you want to submit to and which for week you have to specifically say for with you URL that there are other changes here for instance that in 5 . 1 major you created when you're up for a week is going to be reward for the for the no so what's pretty interesting is that form we whichever block hazardous and all the time and from tag does not so would form with you can actually makes the different outbursts like submit tag or of thoughts made you have the chance that anything can the ends of the messengers the
of that not I think probably through
a list of features and then I think the
reason why I made this stock is also to uh
invite you all to look at the source code
and then of 4 of course of the year and subjugation to and 5 . 1 and as
a as a man personally to thank all the people that are mentioned in this slides
that creators of uh of this request the
contributors so now let's continue around
guys so the 1st story is
on if used as you are in your terminal you can guide readers initializes and that is gonna read out all the initializes of your app now the problem is that In uh 1 0 it's only printing out the method and different classes can be using the same rep you can't really help In 5 . 1 it's going out with the name of the class and the name of the method so it's less confusing and there it's more useful especially if you use the words and use the Kansas City clearly the order in which they're called tha about at a secret every rinse act has the file config slash secrets that young yellow where you can store your secrets meaning in your API keys or any and other uh very whether you wanna uh define ones for your environment and you're you're saying so or maybe your e-mail address that you wanna use so there is this secrets yellow 5 and maybe when I'm developing I want to send all my e-mails from a specific in address and also in passing but now when I'm in production the so how do you share 1 of this variable among different environments for instance I want to set my e-mail from to that specific address development and maybe reuse in cats and 5 1 0 you can already do that you just have to use this Nelson that's the ampersand and then remember like but how how mean yellow syntax they just have to remember that you have to define the and then say development it's using the default and 5 . 1 is just a little simpler if you have a section with the main shared it means that everything that is in that section is only available to any time so just makes you called a somewhat shorter and more readable this is just 1 of the changes to the cigarettes but there is another 1 that which is even more important and that is the addition of encrypted secrets so as a said before in this sequence are young law you can store your your secrets but you probably know 1 a story your real production secrets inner plaintext 5 you don't would that you're a paper account information all your um a k key production because otherwise everybody who has access just at the source code can be able to access your paper on an e-mail and everything so you know what I put them in plain text right there as a matter of fact if you look inside this secrets enamel there's a disclaimer and the common that says do not keep production sequence in the repository instead we is from the environment so it is right so this is and a good and the vise but sometimes you need to access your you're a production circuits uh you know you need to install in new serveral maybe share them with a coworker so how do you balance the use of having the secrets available but not having plain text for everybody this is a new feature of radius 5 . 1 it's encrypted
circuits the way in which it works is that the type of where's secret set up and this is going to generate 2 new files coughing secrets yellow not key engulfing sickle cell and of C which stands for a quick non-encrypted phi is where the secrets are but you just try to reduce fire you not going to be able to read them cryptid In order to all the news 5 you to diagram secrets and it and these is that we use the key so the other fire to Albany in your editor then you can add it saved and as soon as you close the editor or the saved concretely once again so in short if you when I read them and added them you need both fights but if you just have been incorrect the fires then it's OK you can put that in your repository because people are not going to be able to the quit that so the solution is you can put your own paper fires in the repository and we concluded get out and share but don't but the key otherwise this is that itself can be kinda yourself share with your co-workers made with their passive manager and then on a server and then you can have at the best of both worlds you can have a great the keys so maybe when you create a new machine that have to mothers sat 100 them and where was you just need the key but then improved itself In this works for you it's right there for free and rest 5 . 1 if you wanna keep on using uh the other approach of just sitting there was server and you can see that but that still talking about real times read as as in a lot of great features J. query is not uh required dependency of reasoning meaning if you don't need it it's Sunday this doesn't mean that we don't like J. query Elijah for about if it you know it's 1 less library needed so let me take a step back why was Jake Wherry there in the 1st place the main reason was that what is called uh UGS and unobtrusive JavaScript
and it's for features like this this is an still scaffold so you have your list of posts and for each was to have this link 1 of them is destroy so it's a link to destroy 1 of your posts what happens if you click on the link is a administered this with a similar this is not the default 4 names in a browser makes just work so it's the JavaScript that it's intercepting a call and showing another and also there's something as normally links cannot do post where the need to your server that just get so how does this work it's because there's this uh UGS that it's looking at the actual words of learning the data confirmed that America and its changing things that so all this came from there Jake where you JS library which is just John's script that has of these features it looks for this action words any changes is also data and is able with and data remote and 9 should think about it you can write the same JavaScript in Bonilla JavaScript without Jake way and that's exactly what happened uh a student from there were Summer of Code unless here for Reyes has done this has rewritten the Jake where you JS library without Jake way it's now called the race UGS it's inside action you say if you want the exact same features all you have to do is just requiring suggests you the need to log jams through Jan fire in the middle of uh as was footprint event it's exactly the same meaning but but then I think a minute now get closer to their features it probably have heard of a movie that way here in the 1st place and I think this is a the original title of this be I was on young supporting your apps using the bash Nash yeah auction I have been needed that because since this the our this is changed so now it's by default you then you need to the best that so whenever you're doing rails New we this 5 . 1 even have yet support not many things step back what is your if your front and developers you probably have heard of it uh it's a package manager fought for assets and our JavaScript libraries think of it as Bandler and John 5 there for regions why you need to bundle a bunch of JavaScript libraries young is 1 of the possible solutions and this is really where the the rest in the need to reinvent the wheel and create a new 1 yard has been accepted in the last year as an 1 of the good options in achieved through is 5 1 0 so these solve the problem of how can you import a lot of jobs could libraries in your Of course you could already do that before you can just copy and paste them in your vendor asset that for the but if it's like 1 or 2 you can manage that would have canceled them and maybe you need to do they have dependencies you need to upgrade them it becomes complicated so that's where what happens with young but let me show you I you would use yard with 5 . 0 and then initially what changes in 5 . 1 the in 5 1 0 you need to install yard and then you do we are in it which sets up the folder then you added you start adding your libraries for example so these libraries are installed in a folder called uh not node models so then you wanna ignore this for the we have to do it at no so you have to add this folder to the acid pipeline and finally you can just require libraries so from 5 1 0 to 5 . 1 this happens there is less set up there is more than conventional configuration so they're going to be solid not models that folders with getting your it's already in Europe pipeline so it just basis for and this is leveraging the power of yeah you can do much more but this is just introducing into the risk where they think it's going the great change now you might wanna use on if you are including for instance thereby JavaScript libraries but what if you are writing jobs with what if your act has a lot of JavaScript may view using various that then you're writing a single page act and you have it all in 1 so the you might head start having questions like in which forwarded do I put my files of renal Hawkins years 6 but is it positively precompiled or things like that so for this there's not a feature in the race 5 1 1 they can help you and that is and the fact that you can now leverage went back web back so and what this means is that there are different ways to structure JavaScript's that's a single page after and different levels that you can use and now we base 5 . 1 you have once again a sort of a convention that all the integration have some some pretty good defaults if you do with this new act dash the sweat back a lot of fires for their suddenly created for you is going to be an actor slash jobs before the war you're expected to have your and your JavaScript in packs the day is not a lot of configuration it is written for you income things less went back and its separated by environment development and production there some libraries there they're ready for you probably like label or you know coffee SATs Pfizer relieve your and then there are some that have been filed packed that servo about kwacha and what book so in is is there for you in the past if you had to use a web up with whereas you have to in solid and then decide that I have to do some configuration and stuff not so there you so once you've been started the way in which you use it locally you can't I went back that server which is 1 of those you commands that come with and this is gonna watch your folder in your app JavaScript and as a time even if it's it's it's an idea 6 is gonna watch about order and then making available for you so you can and developed and have those a JavaScript available in your app the way in which include those in your is with this new helper JavaScript pack tag we specify which I Q 1 another in the CuOsub slash its you have special act I and there are many many other features for instance you can interpolate will be I you can use you know about have procedures vilification the GS that year b is really a lot they cannot cover but all of this is followed by a new and john called web Packer and it's open source it's available and you have this is actually packet so fiercely to go there and look at what's happening there also this uh for instance works better way you and when deployed it on her local our difficult precomputation and the last thing I will mention is that when you do with this new Bastoche swept park you can specify as an option that react the you or angular which is about installing called Europe had more libraries for you so if you need to use typescript to so therefore you are wanna talk about action back
last uh if you go and none of my slides the have mores let's about actual Miller and active job that never be able to touch here but the then just a collection of the 1st feature actually makes the to an action but in red guys uh cadaver integration we rails also known as system test if you in this room yesterday you saw amazing thought by adding you should gather who created this be our and she spent 40 minutes on on this picture and just try to summarize in 2 minutes but that you should probably go and re-watch her thoughts on the 2 so in summary the system that's I'm still making an example discovered Othello scuffle an example of system is when a good today page slash cos I actual 1 ensure that in the browser in the head there H 1 the text says exactly post like you wanna test exactly the final result and about not just the test so how do you write this sort of test In races 5 1 0 you have to a you know make a decision which library use you know which version of the solid as an example you can decide to to you Jen 5 even add capybara and so many more diverse than before you run your test you have to require as libraries then you have to write a lot of configuration this is just a very small example like you gonna say that have vise of driven by scenario you're used crawl you might specify air resolution and then after you do all these because when the test but but not the test itself is not so the complicated it has visited 2 lines you visit slash policy and then you assert that inside each 1 the text is what you expect so it's really about making everything else will always be focused writing the that's so in 5 when 1 forget about the set up but I have to do is write tests you Tassin going inherit from a class called application system test case which in a set up on that for you you can also use the rod helpers make post underscore your In event I write your system does with recessed system so much more convenient and also it has been a great new features like S. screenshots they're taken a few tests fail no clean the database and 1 more thing is that the old type of a functional control over the past and of the generated anymore when you have a new 5 1 1 . this that test the other ones a stable of the writing for backwards compatibility tha n I n we talk about the last uh feature and in actual fact which is against my theory 1 and this is 1 example of a PI that it it's a single PI but it's like 5 features in a single and In short it's adding 2 new methods that you can use in your country rods with these methods are very powerful they're called and direct and resolved and just gonna go through 2 examples that show a video but once again going check it could cause they can do much more the 1st so I'm a steeler a scaffold this is a all stage and then imagine that you know the post you have comments so each comment is not leave on its own page like comments slash 1 in inside the posting my imaginary when a link to 1 of his comments had you write that called it it's not it's hard to radical uh in 5 1 0 for instance you can say link to common number 2 post path because the pages upon stage the the most fattening say anchor content to because there is a again linking the or stage at a specific place in but I believe that all this logic should be allowed to the rats not interview when you do well they you just wanna say made into some embedded cont and then the rabbits are you know it's very specific of the rats to to rout such as they are it's a link to a comment but the comment is actually you all incentive posted a certain and so this new matter that to do that let's define one's in riots this um so style of the rods and then your views can just the news linked to so person so it's very powerful especially this might sound like kind of simple example but you have 1 if you have more polymorphic and resources this can help a lot the the other new method and solves several problems and like problems is if you have a form that said that post to a singular resource for instance if you have a form that lets users update their profile or create a profile a user has wonderful finance many so you may want to a form that submits to slash 4 5 Singular now if you try to do this just by during form for at profile in radians until with 5 1 0 you would see an error it's a undefined the meta-profile Europe because by the fall on the rods are operating and the use a resource scenery neurons fire there is a work-around of for the not this has actually been an issue in there you have it in their ears and get have since 2011 people have been asking why is like these can't we just make it field the water just what so in 5 1 0 the work around was willing to form for at profile you have to specify the Europe you're saying yes it's a full to work single profile but I have to explicitly say this is the Europe and if you have a form to update you have to do it became a phone to destroy i have to do with into the multiple times in 5 . 1 you can add this resolved profile which is the name of the class as a string and profile you just I was the name is this there was basically saying the rods for a single profile it's basically just gonna work and you do that once any delay in your hearts which is probably where you should end we that have 1 minute have so I'm just gonna uh here about uh feel free to go and look at more features there and those of his free to go and look at the change log files inside the library is and then it was 5 . 1 ships as possible of the a guide to upgrade your apps from 5 1 0 2 5 1 1 and I just wanna thank other people have contributed to rest and other people here were gonna maybe contributing to else and therefore they have regular licenses have adopted the search