 Do I need the mic? OK, so this is a new thing we're trying out in our meetups. We prepared some interesting get-to-date exercises, probably things that you don't use very often, but you come across them in your life as a programmer and it can help you with certain things. So what I want you all to do is, if you have a laptop, bring it out. If you don't have a laptop, you might be able to carry it up with GitHub.com on your phone, or you might not. Let's see if you can. We have made exercises such that there are multiple correct ways of solving that, so if you can come up with some really cool hacks to do that, that would be awesome. So, any JavaScript developers in the room? OK, not bad. Anybody heard of this library called underscore.jx? OK, it's just a small utility library with a lot of functions for operating mostly on collections, so like map, reduce, all that stuff. So we're going to be looking at that library, clone it, or if you want to use GitHub, you don't have to clone it, but then I expect some really cool answers that we'll do. I can see Sebastian. I want to try it again. So I can show you the library, what it looks like. Basically, the source contains a lot of files related to building and stuff, and this is the main one, underscore.js, and it's just published as underscore.js, and it's a JavaScript file which has all the various functions that underscore is capable of, like iterative underscore.h. So everything, it's a flat structure, everything is just in one file. It's not built up of multiple modules, so the questions will be related to doing something with this file. Cloning done? No. You didn't do anything. I forked it. OK. Let's see where you go with that. OK, so underscore has one utility function called underscore.groupby. It's used to take in a collection and some parameters, and then you group them together based on whatever function you pass in. So we don't care about that. What we care about is when was underscore.groupby first introduced in the underscore.js source. And by the way, we have stickers to give out. We have auto caps and other things from GitHub. So you have about, let's say, five minutes. Five minutes. And yeah, let's see how fast. Who's the first person to come up with the answer? Which revision was underscore.groupby introduced? Possibilities are not currently searchable. You can find an answer on GitHub.js. It is possible to actually find this using GitHub? It's just difficult. It depends. If you really know GitHub well and you don't know the tool really well, then you can. Let's see. Sebastian, we're expecting some greatness. V6, what is 11? What is the commit ID? 84G7A. Let me verify that. Found it? Is it the same as what Sebastian said? What did you think? F8A478. I thought you need a date. All revisions are on revisions. Okay, date? Oops, okay. I can't date. Okay, try to find the revision. And then we will ask Sebastian and give a demo of your solutions. Anyone else? Except for CJ. Organizers not allowed to tell the answers. Anyone using the git command line to find the answer? You don't have the command line. Okay, if you're using the command line, look into git log. Okay, CJ also has another tip. You can probably also use git blame to find the answer. Sebastian, since you're ready with your answer, why don't you share how did she write the answer? What I'll do is I'll open git up here. Okay, so... Yeah, here's the desktop side obviously. Mobile sites haven't come really too much. Okay. So I searched this repository on top for group 5. Okay. I forgot how to type. Hang on. Okay. So in the code, yeah, I went for the tests. So... Can you search for tests? Yeah, I think it's the first or the second one. It might be the first one, actually. I've tried it yet, that's what happened. Okay. So I figured it would change less frequently. And then on top there, do blame. Okay, to... In this? If I do blame, yeah. It would tell me each line, when it was committed, and I searched for group 5, and a couple of... So this is January 20th, though, unlikely, and I went down a couple more. Okay. I just searched for group 5, so you can see I'll get a lot of visible cluster of them. That's pretty much where I made a change where the group 5 was done. And I also added group 5. Okay. I figured that's the most likely. Okay. You can have some after-catch for yourself. Awesome. You can... Do you want an hour? Yeah. Choose. All right. Okay. Cool. Yeah, that works. So you can use GitHub to find out stuff like this. Do you want to share your... Oh, yeah. Just in the command line. Okay. Wait, I have the command line somewhere. It... No. No. It... No. Then attach that graph. That... Graph? Yeah. And then just... Apply that? Yeah. Okay. And then just go to the bottom. Go to the bottom. Okay. So... Right. Yeah. Okay. Yeah. And the same one. Nice. Can you tell us a bit more about what does this graph option do? Initially, I wanted to use the graph that is coming from the back... Mm-hmm. ...to do a tiny graph. Mm-hmm. But I realized that only you can do one line. Okay. So I could go in and let you all achieve your own graph. So we really searched for it. Okay. Got some fast googling, by the way. Okay. You can have some stickers for yourself. Thanks. Any other answers? Any alternative solutions? Steve Jenner? Yeah. Sure. That's L. Sorry? That's L. That's not L. Wait. Oh my God. What is it? It's... What was it? Seriously. Well, what did you tell me to do? You crashed the computer back. I think the keyboard might be good at new technology. No, I pressed the power button by mistake. What's the matter? Okay. We will be back in three... No, but I have to figure out how to do this one. Come on. So is there a way to trace the history of a particular line through a file? That's more professionalism. Yeah. I have to figure out how to do this as possible. So get... You're saying get along that arrow. That's your base arrow. Upper base arrow. Okay. Yeah. Okay. Let's break it. Smash. Group file. Like that? Yes. And then... Okay. It's really hard to type when you would like one. Okay. Because it's not far enough. Okay. That's... That's all the text is on the chart. So what does dash L do? It's tracing the original line. Yeah. That was... We read the first commit. It might be something that... See there? Dash capital S. Dash capital S. Get along that capital S. So how is this dash capital S different from graph? Can you show the metaphor? Yeah. Get help along. Can you explain it to us? So graph searches the... Get commit this message. From dash as such the patch itself. So... There are times where you want to look at different messages. Sometimes you want to look at the code patches itself. That's where the differential is. Can you do a dash as with dash p? So that you can show the patch. Okay. Can you scroll? Yeah. Okay. So this is showing the patch. And... Because this particular commit has both the group bar in the commit method. Message as well as the code itself. The last commit will show up. So dash as will actually look through the file and the stuff that you changed. Yeah. And graph will just look at the message. Yeah. Okay. Can I? You can have some octocats to know if you need them. Okay. Pretty cool. Okay. So now we have... That was the first exercise. The second one may or may not be a little easier. So what happens to me a lot is that I'm looking through a library and I think I found a bug and then I find out that they fixed the bug. Now I want to know that do I have this fix in the version of the library that I'm using? Or is it in a newer version? When did they actually publish this fix to the world? For example in underscore there was a bug and then you can see the status is closed. So they fixed it. And if you look on github they fixed it in this commit. So it says it fixes 1189 which is the idea of the issue there. So they fixed this but the commit message itself doesn't tell me which release of underscore this happened in. So your job is to find out which version of underscore.js you know like one, two, three whatever this fix was introduced in. And you can try to use github for this or the command line whatever you feel. If you want the shyity of the commit it's 1, 4, C3, F9. You want to see what are the various releases of underscore. You can see that here. So if you go to the project home page then under releases you have the various releases that they've made. And as a hint you can also see that you can find those releases as tags in their repository. May or may not help you. They have a lot of releases from 0.1.0 to 1.8.3. What was this? This. And did you use the command line or get help? Okay. Do you want to share your solution? Let me open the command line. You didn't see that? Okay. You? Yes. Okay. Are you sure? Okay. So what does this tell us? So how do you know it's 1, 5, 2, and not 1, 8, 1? It's 1, 4. Okay. Yeah, that works. Pretty cool. Yes. Sebastian, the github way of doing. I sort of do what I'll have to do to commit. Okay. So when you go to like... So if I click on my latest commit there to B30, B40, B5, I get my click here. Okay. It puts the hash there so I put that partial hash in there and it sort of works. This guy? Yeah. Okay. And then? Good. That was awesome. So it tells me 1, 5, 2. Very clever. Do you want a different optocat? Yes. Okay, cool. That's it for these two exercises. I have a bonus exercise later but we'll do that after the talk. So now we have CJ for a talk about githconfig.