 Like how do people see are we live? Oh, yeah, we're live so Greetings, welcome to Boku on air. I'm Jory. Hi Hi, Jory. Hi, Ben. We're not we're totally not sitting side by side Okay, so maybe we are um That's okay. It's cuz we like each other. You don't want to go. Oh look. I'm watching the video of us right now You're watching okay Good, that's great. So it's working. Can they hear us wait on this sheet? Yeah Good, that's great. Okay. Yeah, it works. Okay. All right. So um for for those of you who are into a book who on air situation What we do is basically we have a conversation with you guys in IRC and if possible live So what you need to do is follow along on the YouTube link that Isaac Durazo just posted in IRC And click that link you should be seeing us Live with maybe a few seconds delay But we've confirmed that it is broadcasting And then of course post questions to us either on the Google plus page or in IRC and we'll just uh You know take it from there. So Ben, hi big news this week, huh? Yeah Little thing happened with grunt something. I uh I was forced to release finally release version 0.4 of grunt Everyone in the office said that I just had no choice anymore and I had to go and do that. So So yay grunt 04 is released website and all So that's uh That's super cool where I've been working on it since well o3 Was announced at the end of march last year And then I pretty much started right away into well I mean the whole idea with o3 Was it was like let's get something out there for people to try out it was I'd Just reached the point where it was good enough to share Uh, and then but it wasn't done and it's still not done. It was uh, you know, I just continued immediately on to more development and uh Yes, it took a while to get where I am right now. I mean Some people were thinking that 04 was going to come out very quickly. I actually thought a number of times that it was going to come out prematurely, but the thing is Uh, I we tried a lot of different things And a lot of we threw away a lot of stuff And so what what we ended up releasing for 04 was like Really the culmination of a ton of trial and error if you if you used the beta While we were like developing it you would see it break from bill to bill because we kept trying tons of different things out But 04 is like We feel really really good about it Well, I mean you guys put in a lot of hard work and um, you know, I think the whole office. Yeah We've teased you a little bit about come on then win, but you know, I think everything comes into time and you know I think another Thing that came up was just the issue of using some of these tools before their In production before like, you know where you're you're necessarily ready for that so well, it was it was cool though because like so You know a lot of people are using grunt now and we're using grunt before so grunt 0.3. I mean it got downloaded quite a lot a lot of people were using even though I mean this is beta software like we feel really good about it. We test a lot of it a lot of the stuff Um, that's internal to it. We can't we haven't tested everything but a lot of it's tested And we're really striving to test there like all the things in there. Um We got a lot of people using it which gave us a lot of really really good feedback. I mean it wasn't perfect But that's how we make it better. Um, we're calling it a beta because more like To set people's expectations that it's not final and that we're going to keep adjusting it until we really really like it But that being said we use it a lot and tested a lot and You know on windows and os 10 and lenex and stuff like that to make sure that it's just reliable It's like as reliable as we can get it for a beta. It's just not Fine that being said whatever we have is in npm And you'll be able to I mean if you still wanted to use grunt 0.3.1 You could install that and use it. I mean knock yourself out Uh So, you know and when we release another version in the future grunt 0.5 You'll be able to continue to use grunt 0.4 as long as you want With whatever plugins happen to be compatible with it. So you definitely have a lot of options We don't like throw away the old version. It's just the new version has so much cool stuff that we've added in That you want to migrate and like You know, I think on that note it'd be interesting to hear. I know we did have tyler Callan wrote a blog post for booku.com About some of those changes and stuff But I'd be cool to hear you talk about some of the new apis and stuff that Yeah, um, let's uh, so Let me think about this for a sec. I've I've uh My brain has been in a lot of different places over the last few months And i'm trying to think of like and some of the stuff we added in very recently Some of the stuff we added in a long time ago Um, so for example, one of the things we really wanted to do with 0.4 Was make it so that people who are writing. Um, we wanted to make it easier for people who are writing grunt plugins um We realized that a lot of the plugins Tended to do some of the same things like there was there it was very easy to say like, okay, I want to Minify this file to this file or I want to take a bunch of files and concatenate them to this output file But there was no really elegant way For people to say okay. I want to compile All the folders in this directory To like the same named files in another directory with a different extension For example, if you're compiling coffee script to javascript or compiling less to css Or markdown files to html or whatever there was no really elegant way to specify that And so what would happen is that every different plugin author would have to write their own version of how you would specify that in options So we took all of that out of the plugin author's hands and we built it into grunt and as a standard you can actually Define these kind of one-to-one file mappings or Pretty much anything you'd want that we've been able to think of that you'd want to do with files You can specify in a consistent way across all Tasks all plugins. They don't have to care about that anymore grunt just gives them the files already processed So we'd started doing that before but we like went all the way with it this time We actually have we're going to break it out in a separate library And make it available to anyone to use for that kind of stuff. So that's that's that was a really big change another one was We have a standard way across tasks of specifying options and files. So You know you have inside of your task. You've got your target And then inside of that you have an options object that was have options and inside of the task The task author can specify defaults and then you can override them at the task level and then at the target level So we've that's like we've standardized that we've taken all the built-in tasks We've pulled them out of grunt and now they're all separately maintained plugins Some people have complained about that Because they want to just install grunt and then have all these things for them conveniently built in But the thing is like a The stuff that's built into grunt was stuff that I needed for me personally and most other people need other stuff on top of that So you're going to be installing plugins anyways for most of the things that you're going to do But in addition to that like we were running into problems Where um If we wanted to update jshint to have the latest version of jshint Well because the jshint task was built into grunt We'd actually have to release a whole new version of grunt just to update the jshint internally Now because jshint is a separate plugin. We just update the plugin release a new plugin grunt has nothing to do with that We only have to release grunt really release a new version when we're like fixing bugs in grunt itself Which is uh, that's that's really awesome And we've actually gotten a ton more contributions on those core tasks because they're broken out of separate things Which has been awesome like uglify was completely rewritten to support uglify 2 the source maps and all that kind of stuff too Um, and and then you guys also on the site speaking of the plugins Have been sort of maintaining somewhat of a plugin like repository and and stuff too And there's some officially supported plugins that you and and the team are working on. Yeah. Um, so tyler callan. He's like He's in charge of maintaining all of the contrib Uh, uh repositories if I if I'll screen share my chrome right now. I'll show you guys Um, let's see if this will work Whoa It's gruntjs.com if I go to the plugins page by the way isaac dorasso Here at boku and vlad filipov Have worked to make a really awesome website with all kinds of cool stuff on it So that's gruntjs.com and we actually are replicating all the content from our wiki over there with some believe it or not custom grunt tasks So the gruntjs.com website is just another repo in grunt You can it's kind of a mess because we were just really rushing to get it done But you could actually see how it's built with crazy grunt tasks and stuff, but um We're not proud of that code. It's it was just like let's get it done So we'll have to clean it up later But if you click on plugins there and go to this list it's actually uh pulled in by a plugin site generator That was I think it was contributed by cinder soros who's also working on yeoman and uh does a lot And bowler and some other cool stuff. Uh, he wrote I think it was him He wrote the code that like pulls all this stuff down from the npm repository. So grunt is an npm module um, what that means is there's a Node js is how you run javascript like in your command line or on the server and npm is their package manager That's how you install node modules and grunt Requires node and is an npm module. So you'd install it with npm like npm install grunt, etc And uh, all the plugins are actually installed via npm as well And so what we we do is actually query all query npm for everything that's published with a keyword of grunt plugin And that gives a list and we've got a lot of stuff and honestly a lot of these things are like modified eight months ago I mean, this is this is pretty ancient. So we're not really expecting that to work But there's a lot that are much more recent you can sort by uh by the date and stuff But the ones that go to the top by default are the contriplugins and those are the ones we officially maintain And there's like 20 of them or something. We have we have a ton for doing documentation minification compiling css Unit testing we have a bunch of unit testing we minify css html, etc Compiling less as you know, it's funny as a as a little side project. I've just been working on something um In the last couple days like okay, so I've been working on grunt for a long time And we've been using grunt internally to test grunt And to test grunt plugins and I've I've released a jQuery plugin the other day that uses grunt internally um And so uh, I haven't really actually used grunt to build any kind of website I've just been using it to like do little javascript very javascript head Yeah, Tyler, he's been well he he actually builds websites, right? Like I spend all of my time writing javascript tools and so the other day I was like, you know, I've had this project I want to do for a whole long time. I've wanted to take Uh, that's not it. I've wanted to take my website and uh, we do it instead of being in the horrible Well, I don't like it movable type cms, which is all pearl and php crazy stuff I want to migrate that out to just markdown files and have a static site I mean, they're so easy to build and so like I actually sat down and uh Let's say I have to actually shoot this separately, right? Um screen share Go back to this guy This is a repo in my github So, uh, let's see. I was over here And I've got uh I I just sat down and I created a grunt file I exported all the content from my website, uh, like if I take a look in, uh 10 V8 export you can see there's like A ton of posts here. Uh, there's like 177 of them, you know, like my articles everything And so I went through I started writing some grunt tasks to say, okay, all this stuff that's exported in this format programmatically go and modify to clean it up take all the markdown files and then like build them to a site and uh, like I'm in the process of testing and breaking things right now But it actually goes through all my markdown and debugging some stuff. It builds the whole site out into this using less internally and if I say like, uh I'd have to find a link to it. I could actually open that thing up and see like some A rough version of what I'm actually doing with the site right now Uh, let's see that's not it Then I have to take out take a look and find it But I'm like debugging my own site using grunt to build it dynamically And 177 pages builds it like A second or something. It's super fast. Um, I know it is just really fast. So it's like about that Um, so it's actually using it. Yay So, um, we have a couple of questions in, um, What is the channel about one about contributing to grunt, which I think that yeah uh, and the other let's see Hcab net tech I feel like I'm a star around Um about windows I'm gonna take a take a crack. Um, how can people help with grunt? Well, we have a grunt IRC channel. So it's uh So, let's see hold on a second. I think I actually have this somewhere on uh, website Say documentation We get going on there We've got some contributing like a contributing guide down here Where we talk about if you want to contribute code Uh, you can actually uh, there's a handful of grunt projects the website the grunt itself All the grunt plugins Uh, and this the grunt in it it used to be a task now It's a standalone tool for doing project scaffolding if you want to contribute to those there's actually a whole guide Um for doing that We actually have an IRC channel which let's see. I'm in the process We're in the process of updating all this stuff, but it's just pound grunt So if you're already in uh IRC just go to the pound grunt channel We don't have forums or a mailing list right now because We none of us have the time or inclination to run it, but if someone wanted to run a forum Or moderate like a stack overflow. There's there's a bunch of things posted with tags with grunt j s Um or forums we or mailing list. We would definitely Be more than happy to allow someone to help us out in that way We're we're kind of stretched a little thin so we don't have a ton of time to be able to manage those things We use IRC and the issues tracker On all the grunt repositories a lot. So we've got that going that's that's one way that people can contribute. Um The best thing to do would be to to actually take a look at plugins that you think Could use extra functionality or whatever or or have existing issues and try to Close them work with us We we monitor the the issues all the time work with us to help write code and tests unit test someone Just uh just today. I think someone contributed a whole ton of unit tests for like the one of the template Uh plugins that we have which was Super helpful I don't remember Which one it was Wait a bit contribute jst Let's see go here go to the bugs tracker for that particular thing closed I mean you can see we've got 17 closed issues. We've got five Open like there's there's a lot of activity. This is just in one if I was to go to like the entire I think I think I have a way to see all of the issues that are open and all of these things There's a lot and then I think the other thing that's helpful for you guys too It's just to to learn more about how developers are using grunt because you know like The more sort of like feedback you get how people are using the tool That's that's helpful too. So yeah It's it's funny. We've got we've got some really good feedback. We get some Not good you feedback from people who aren't really paying attention to what we've been doing But it gives us an opportunity to like help Uh revise our documentation if nothing else. I mean if you have trouble finding something And uh let it let us know because well not only help you figure out how to do it, but You can help us fix our documentation by telling us how to make it better Never underestimate the importance of that. Yeah, we're going to separate out the documentation a separate repository So people can file pull requests against the tools to make it easy for updates. Oh, awesome There's a couple questions I see about windows. Oh, yeah, well grunt works, uh in windows fine. So, um We've designed windows We've designed grunt to work in windows it everything internally all of its dependencies are pure java script Um and grunt will like you can install load in windows. You'll get npm and you can install grunt there as well I tested it just yesterday In a vm just to kind of mess around. I don't use windows. None of us use windows But we do test it in windows and we have a lot of windows users So it definitely works in windows the only things that you have to be careful of windows are things like line endings Like windows has a different line ending than mac or unix And so if you were to download grunt depending on how you have your git set to like clone it The some of the unit tests could fail because you might have line ending differences but other than that like Once you're using in a project, you shouldn't have any problems. We've got a lot of windows users Uh now someone asked about visual visual studio People have written grunt plugins like uh like for sublime and things like that You can actually use grunt internally when it works on the command line If you didn't want it to work on the command line, you can use it programmatically as a library although We're working on a new version starting Starting now pretty much where I already started working on a new version It'll make it much easier to use grunt as a library. It kind of works now Some as we like it to be so You know it's it's pros and OS 10 and linux for them and they have no problem using it people have used it in power shell in windows And also in like a git bash In windows, so it it does work in her awesome Um, and again if you guys have questions as you're watching feel free to pop those either on the google class page Or in irc we're wondering or not Pretty Someone's asking you grunt o4 is their way to automatically download dependent task modules So can you can you explain more? what what you mean by that because The one thing that grunt doesn't do is any kind of dependency management There's no way to say like inside of a task Make sure this other task runs first Now tasks can say hey if this other task hasn't run. Sorry this task will fail We just don't want to get into dependency management and and if you're talking about installing tasks Well, if it's in a plugin And your plugin has requires like certain features Like you know, you've got the uglify plugin for example or this grunt can trip jst Let's take a look at this one if we look at the code for this Um And say like in its package jason, we've actually got is my screen still shared Yeah, oh, oh infinity again. Okay, totally And so many was saying too like we could make that bigger a little bit that's hard. They're on 480p on youtube So it's hard to oh my god. Okay. Well, you can see in the package jason files that big enough That there are dependencies like in a in a plugin's dependencies or your project's dependencies Um If you're dealing with a plugin you'd use the dependencies This says whenever someone actually just uses the plugin these things will get installed So load ash would get installed and this other thing that a bunch of our plugins Actually share get installed if you're actually developing or you have a project or something dev dependencies Is where you put your stuff So if in your project in your website and whatever you'd specify grunt at whatever version you want And all the plugins at whatever versions you want for all those things And pure dependency is a new thing that npm has that allows us to specify In a grunt plugin what versions of grunt that it's compatible with Which is great that if you try to install a grunt o4 plugin with grunt o3 npm will complain about that for you So Yeah, so it package jason with npm will help you Manage your dependencies. So I see another question Regarding the split in a global grunt cli and local to project grunt any reason you didn't just include Dot slash node modules slash dot bin in your path. Okay, so To preface this let me explain that Before we used to say hey everyone install grunt globally In npm that would put it in your system path and that would allow you to just type grunt to run it from anywhere Which was great until we realized actually very shortly thereafter That it's probably not a good idea for you to install grunt globally because what if you know I was saying we release a new version of grunt back with the way we used to do it If we updated jas hint and so you'd have grunt installed globally And you have one project using that and then you create another project and you wanted to use the latest grunt So you'd update your global grunt to be the latest version you specify You know you use that in your project And then when you go back to the other project to use it it's you it's expecting the older version of grunt But you've got the latest one installed globally and maybe the jas hint built in task can change since then and all of a sudden Things are breaking. We actually ran into this a few times So we realized that because you can only have one version installed globally at a time you can't Then all of your projects have to be on the same version all the time, which is not practical So we realized that just like what npm Officially recommends they say you should install all of your stuff locally to your project and that way It's like your version is locked in when you go to a new project It just uses that version the one that's installed locally, etc so grunt gets installed locally to your project now Same with all the plugins So if like this project uses grunt 0.40 and grunt can trip jas hint 0 1 1 But another project uses grunt 0 3 17 and a different version of jas hinder the one that's built in Each one will have their own dev dependencies and you will never run into any conflicts And so the problem is is like when you install grunt Locally, then you don't get grunt in your path. You can't just go to the command line and type grunt And so we created a separate tool called grunt cli and all that does is if you're in a project folder It finds the local grunt And runs it That's all it does and so i'll just show an example of this just so you can see and i'll make my terminal super big although there's a limit to how big I can make it because Okay, so if I actually i'll go over to grunt folder itself of a few grunt plugins here, okay, so So Someone said like oh, why don't you add a at some of your path that would just load the locally installed grunt and From where it is locally and that's a people recommend that the problem is is uh If you're in a sub directory like let's just say the grunt binary was installed in like dot slash Node module slash bin slash grunt So if i'm in the root directory of my folder, I could actually do this and it would work just fine But what if I was in a sub directory if I was in like CD test I was in there now in order to to run that the same relative command would be uh dot dot Slash node module slash bin slash grunt So it'd be that and so if I wanted to handle all the Possibilities of all the sub directors I might want to be and I'd have to prepend a lot of things to my path to make sure That the correct the the binary would work Um, and so instead of that we made this grunt thing that goes in your path everywhere That no matter where you run a phone if I type grunt it's going to work if I go into a sub folder, you know, uh Let's see fixtures Expand I run grunt from here It's going to work if you wanted that kind of functionality with prepending that path Dot slash node module slash dot bin to your path you'd actually need to specify Like dot slash node modules and dot dot slash node modules and dot dot slash dot dot slash and it would be ridiculous And so I haven't seen anyone else do this approach what we're doing with grunt cli But we love it. I mean it's awesome because it it's it just allows that to be smart We don't have to muck around with our path. It works on windows and os 10 and linux. It's just I don't know and all the cli does if you look at the source code. It's very simple It just finds uses nodes on require system to find the local grunt and just runs that grunt from the from the root directory Someone's also asking about grant in it and uh, you know, I think You've been working with the yeoman team too on that Do you have a problem with grunt? Yeah, well, so first of all grunt in it if I go in one new folder here And so I've already got grunt dash in it installed globally. I did an npm install dash g grunt in it. Uh, and so if I uh make the sample Thing Okay, and I type grunt dash knit and I'll choose. Uh, I've actually got a number of plugins grunt in it templates installed um Which you can see on my grunt init folder Okay, I've got common j s Points these are there's sim links point to where I developed them so that I don't have to worry about you could just clone them directly into this Folder that all the readings show exactly what to do. But so like the jQuery one. I'll make a jQuery plugin Right, so I'll do inside of my folder glint init uh jQuery And it's going to ask me some questions. It's going to give me some text. It will look much better if you're, uh I don't know normal size It's kind of meant to work with ad columns So I'm just not going to answer these questions. I'll use the defaults And what it's going to do Is it's going to generate some files and then it's going to say initialize from template You should now install project dependencies with npm install after that you can run grunt if I run grunt right now It's going to say I can't find the local grunt That's because when I look in this project folder I haven't run npm install. There's no node modules, right? So when I run npm install Here's a little tip if you use dash dash silent You get way less crap on the screen. So npm install dash dash silent Yeah, yeah, I don't really recommend that because I want people to see the errors If they happen, but so it's it's installing everything. It's downloading phantom j s which the jQuery plugin template uses Um, and so you can see that it's installed grunt all the plugins and if we look In the node modules folder, we can see that all those guys are installed there now when I run grunt It's going to do everything it needed to do now if I were to edit The grunt file I'll do it in nano right now just because uh, I don't want to have to switch to a different screen And go down here and I like it's not so excited just comment out one of these like I'll comment out concat And when I run grunt, it's going to say warning task concat not found And so if if you uh That's that would that's what would happen if you don't specify you've got the local npm module not found that would uh I mean possibly if I were to try to like just in here their foo equals require foo which doesn't exist and then uh Glunt So cannot find module foo, uh, you know, if you don't have it specified inside of your package json Let's see The package json we can see that depth dependencies here are specified If you're if your foo thing isn't specified as a depth dependency when you do npm Assault won't be downloaded and you'll get an error about npm modules not being able to be found so Uh, you have to tell npm what to install in the package json file and this is all like we wrote a whole Getting started guide for grunt which talks about all of these things as well So Hopefully hopefully that helps answer those questions about npm and it and uh, yeah yeoman those guys are working on new version Yeoman used to be kind of a lightweight wrapper around glunt and its Old init task with some fancy ascii art that looked like a butler attached to it And uh, we've been talking the grunt team and yeoman team been talking about how we can make it Make things more intrapable operable moving forward and uh, so what we've done is uh Yeoman is no longer wrapping grunts. It's a whole separate thing You don't run yeoman to like run your tasks in your project. You just use grunt. So you use yeoman I think they have a tool called yo now. I haven't actually had time to look at it They're just releasing their latest beta out there You use the yo tool and give it like the name of a template or generator that they're calling them to build out Your project structure and then once that's done that will build on a package json in the grunt file for you And then you would do an npm install just like grunting it grunting it builds all that stuff out for you Then you do an npm install then you use grunt And so if a yeoman generator Uses npm and grunt then it'll create a package json file and a grunt file for you and you run npm install If it doesn't Then you will Use something else whatever that particular generator records Um, it seems like a good time to kind of start talking a little bit more about though the future of grunt Point about yeoman and how this would have like Changing some things up and obviously at o4 grunt's not and you not finished. So like what's next? You've already had a pretty big release, but you know, it's not too early to Kind of give us a hint about what's coming for the future. Yeah, what's next we've actually This has been kind of spearheaded by tyler a little bit. We've been Working on trying to create a more standard Specification that's not grunt specific Called a node task and the idea is that There's a Right now we've got grunt. We've got all these contra plugins that we need to maintain And so like let's just say you use jshint On the command line you can npm install dash g jshint and you can use jshint to uh To to linch your files and then you can jshint also has a little uh a lib that you could Programmatically use it like this is what grunt does is programmatically uses the jshint lib to lend files You know in javascript to run it so the thing is like jshint maintains the lib But like we maintain the grunt task and they maintain the cli it used to actually be a separate project Uh, it's there's it there's a lot of different people maintaining a lot of different things. And so using jshint for example um we want to We want to not be the people maintaining The thing that is effectively the grunt plugin. We want to just maintain grunt And also we want to allow other tools than grunt to be able to use these uh plugins And so we don't the grunt grunt plugins. They're too heavily tied into grunt what we've been working on is creating a standard for uh, basically like interoperability between these common things where like you say If your jshint task was something you passed it a list of files and some options Then it would just do what it needed to do with those. Um, and then if your uh Coffee script compilation task is you pass it a list of files But instead of just a list of source files to do it You pass it a list of like objects where each object had a source and a destination property And so it would know hey compile this source to this destination Then compile this source to this destination go through the list and you can specify options there and we find most of time it's really like a list of files And some options sometimes there is no list of files Sometimes it's a list of just source files. Sometimes it's source and destination But either way we found a lot of similarities in these common things And so if we can come up with a standard specification for how people can actually pass in the list of files and the options and then uh come up with a standard specification for how um, these tasks Can communicate with the thing that's running them like admitting events in a standard way like grunt might take those events That are admitted and use them to log output for example And then throwing exceptions and doing stuff like that and uh, we want to implement it with promises And we've just been talking about like just a general specification that and then then The jshint guys could actually maintain their the jshint Node tags if they wanted to and then anybody grunt anyone else could just use them We don't have to maintain it and it's a standard way like I mean There's a lot of standards in node that we use but there isn't like a standard for defining how All of these things communicate with each other like grunt as a task runner. How does grunt actually Use jshint or every single thing is implemented differently. So we have to code a lot of stuff around it And that's why grunt plugins exist. So that's a really big thing. We're talking about we want to make grunt simpler If people can uh create instead of grunt plugins create node tasks Then they're not tied to grunt. They can work with anything which means when we update to a new version of grunt People don't have to rewrite their task Uh, a lot of people building plugins Had pretty much everyone building a plugin for grunt o3 had to update it for o4 And the next version of grunt the next major version Uh, so I say major but it's really the minor but we're pretty 1.0. So 0.5 or something like that There will be another update. Um, that being said if we do it right this time Uh, the way we want to do it, uh now like I say this time hindsight is 2020 If we do that right then You won't ever have to update it again after that. So we're really pushing to create this, uh, node task spec. It's I think it's uh, we have I think under github it might be actually under node task and we're still really just flashing it out right now So if I say github.com slash node task, so this is the or This is the or we don't really have anything super fancy going on right now But and we we're definitely we've Tyler literally just started throwing some ideas together. We've got a lot of talking to you because uh, I've been calling over a lot of things in my mind as I've been working on grunt. Um, so That's that's a really huge thing that we want to do We want to make it easier for people to create these and then you could use them with whatever you want Or just call them programmatically It'll be much easier to test them because you're just calling it passing in arbitrary options Like instead of having to rely on the grunt system to do your testing Like there's so many things like we've learned it's it's funny because nobody had done this in a javascript space Before us and now other people are starting to and we've we've learned a lot So we're trying to work with those people to to figure out how we Do all that make it awesome. By the way, the ll command is an alias that I have set up in my terminal To do an ls-al. It's a long long directory lesson with colors I see that keep seeing the questions coming. Yeah. Yeah, that's awesome. Yeah, I keep the questions coming and people will probably Stick around another 15 minutes or so as long as people are curious about what's going on That's so trippy. You see this. I can just I can just share my desktop like why Why wasn't I just sharing my desktop the whole time? Yeah That's so cool So you start by you know Using grunt and creating a grunt file for your project and getting to understand that so the getting started guide on the grunt website is going to get Uh Get you a long way there because we talk about installing the cli If you're working with an existing project right here if you're doing a new project, there's a handful of steps and we explain all Um after that there's a configuring tasks guide, which is the next thing on the list Which is like if you want to actually specify files in a million different ways you can run has you covered Um, and we've even got a sample grunt file. This is something I need to go through I mean we've literally like we needed to release on monday We're still going through the documentation cleaning stuff up So like a sample grunt file will kind of give you a little bit more information about how grunt files are structured Now we've got a guide that we're fleshing out still about creating tasks Uh, we've updated it as much as we can for 0.4, but I think we need to take another pass It gives you a lot of general ideas for creating tasks and some options Um some examples and stuff like that Once you've created a task you're probably creating in your grunt file After that you can actually go um Into like you could break them out in a separate file and use the Use the load tasks uh command in the api docs and take a look uh grunt There's like grunt load tasks and load mpm tasks. So load tasks is an alias For grunt task load tasks and it just tells you it this loads all task files from the specified directory And so you could break stuff out of your grunt file and put it in js files in a tasks directory You've called whatever you want and then just Call this method and it will load them in as if they were plugins Uh, if they're plugins, they actually need to have a specific directory structure and be formatted a certain way Uh, and then you would load them with load npm tasks and you'd install them with npm Now the easiest way to create plugins we we've actually I'll go back to the documentation The creating plugins guide needs to be updated. This is uh, this is kind of old So because uh This documentation is is is a little out of date. So if you look there's a grunt init Grunt plugin template. You just have to install it first. I need to add that into the guide Um, when you install the grunt plugin template, you can create a new plugin. Like I'll go back over here Um, let's see this rm dash rf all this stuff Okay, so uh grunt init Grunt plugin now I've already have the latest grunt plugin thing installed because I wrote it I need to do that for testing do this. It's going to ask a bunch of questions about your your grunt plugin Please don't name your grunt plugin grunt can trip something because those are reserved from our from internal things Um, but anyways, you do that. No, you just do an npm install Oh, I didn't do silence. So you're going to see a lot of stuff um And run grunt Here and it'll actually test the plugin now. There's a very simple sample plugin and all it does is like concatenating some stuff but the whole idea is uh We can see that all right. I've got a whole lot of extra stuff. Um We can see that we've got like our task directory The file in the task directory Uh sample thing would be exactly what you would specify in a task directory in your project So that you could run it with a load tasks Instead of load npm tasks, but sample thing is just the task file I mean you can you'd go in and edit it the sample thing is based off of the name of the folder It's in but if you create a grunt plugin uses the grunt plugin template Um, it would just create the whole structure for you. You've edited to actually make it make sense and then you would You know Commit all that stuff to github and publish it to npm and it would show up the next time Our plugin listing is refreshed from the uh on the website. That's awesome. That's amazingly simple It's very very so I mean the hard part is you writing the code and your unit tests and stuff like that But we've built it out to be really simple in the future um We're planning on getting the uh getting it all ported over to yeoman our our goal is once yeoman is is stable And uh, we get some time to really look at it. Um, we're going to port all of our grunt Init things over to yeoman and deprecate grunt in it. It'll it'll still exist You'll still be able to use it and if someone actually wants to take old take it over and maintain it. That's great but uh You know we're we're trying to put more of our effort into The task stuff and less of our effort into the scaffolding stuff and yeoman They're really working on the scaffolding stuff So it just kind of makes sense for uh for us to get these things ported over there But it's not ready yet and so we needed to launch on monday and so grunting it totally works for them Yeah, and especially if you're creating a new grunt plugin or jQuery plugin also because I do a lot of those There are really great grunting templates for those Well, this seems like a good time to to plug on that. Um, you'll be talking with um, paul irish and jade of thorton at south by southwest about this very thing. Um, yeoman our grunt And that wonderful relationship between the the three The shall we call it the unholy trinity of javascript? Yeah, I uh, I'm not yeah, I know those guys and I've talked to them and I'm not sure like Uh, what exactly we're going to do, but I know we're going to be demoing some of our tools. I'll be demoing grunt there I have no idea where I don't know if you guys have worked at the south by southwest site But if you go to it, there's like literally an excel spreadsheet of things to do every single day. It's like insane Well, I just popped a link into uh into iris if you're interested and um, you know, you're going to be an awesome for the festival and you want to um, see those guys talk about this subject some more and see demos of yeoman and bower and Grunt and you should totally I'll check that out but Well, I think we've been yapping for for a while then I could keep going forever You guys all have to like, you know, do other things Supposedly That's what they do work day for for some people. Yeah, I guess it's not not everybody gets to just hang out on the internet and chat like us Yeah, yeah, like we do this all the time like, you know, whatever um, so anyways like if you guys want to get involved uh with grunt development or plugins or want to be involved in node task or anything Come to the grunt channel in irc. So irc.freenode.net pound grunt is the channel the official grunt channel um, we have a bot there that that every time there's an issue posted or a commit Sometimes it gets a little busy, but we actually see it in the channel. So we know what's going on A lot of people helping out And there it's not just me. So don't like private message me like There are like, I don't even touch the contrip plugins. Honestly other than to give my feedback Those are maintained by tyler and uh, his group uh, cal robinson, cindersoras, jared overton We've got A lot a lot of people helping out Yeah, the the the the the grunt helper guys all the all the people that seriously make it possible for me to not go completely insane Like it's I did that you you do on a boku level that those guys do on a grunt level Um, so check out the website if you notice any issues in the documentation There certainly are some we we're working on the docs file file a pull request or an issue or something like that And we'll fix the docs like uh, so just contribute however you can The only thing I ask is that just please be nice Because uh, because mean people suck. Yeah, because mean people suck So just be friendly and constructive and uh, we'll we'll be well together. I think yeah, totally and um, also as a matter of course you can always hang out with us in I receive because you know, just we're encouraging people to talk with us here today But we're there all the time. So anytime you have a question Together on one screen. Yeah, look it. I'm over here now. Hi everyone. See how that happened. I know it's like That was technology. We're we're actually different Over here. Yeah, we're we're in totally different Countries right now Uh, so thanks again for joining us. Um, we do boku on here every, you know, three or four weeks or so And some things it's a lot of fun. Hope you enjoyed it. Um, and we will uh See you next time. Thanks Ben. Thank you. Jory. Yay. Bye. Bye