IntelliJ IDEA based IDEs Tips & Tricks by Hadi Hariri

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
good hello just a Hello is fine only to clap just a Hello that's good you're gonna have to excuse me I've caught a little bit of a cold in your very very cold country so if I have to take a tissue out once in a while please apologies I've tried to learn how to type and blow my nose at the same time but it's just not very well working very well anyway welcome to this JetBrains night my name is Hadi and I work on the developer advocacy team and I'm gonna show you a few tips and tricks in IntelliJ I'll try and come up with some new ones because I know that I've given this a few times but we'll see how it goes if I if I don't have any new tips or tricks well actually I don't have any tricks I've got some tips but if every tip that I show you know I promise you I've got some new jokes as well okay so the first thing I wanted to show you is something that a lot of people don't actually use which is our tool box how many of you know this raise your hands if you know the tool box yeah so this is our tool box over here and essentially what this allows you to do is install all of our applications all of our IDs uninstall them update them have multiple versions everything and then you can log into your JetBrains account and then through the JetBrains account then you can access all of your licenses etc so you don't need to worry about putting in your license every time and the cool thing is and in the case of things like IntelliJ for instance I can go to the settings and here I can set the maximum heap size which is something you often set when you say that IntelliJ has run out of memory right in that department IntelliJ is trying to complete compete with slack to see which one consumes more memory um so you can set the settings over here okay so that's the that's this is kind of like the preferred way to now update your your application okay now the next thing I want to show you very quickly which is probably the most important thing of this entire presentation so if I create a new file let's go ahead and create a new file let me go to live live not live live or a placeholder okay it doesn't want to have anything let's go down here and let's create a new column file something okay so if I write for instance main and then if args size equals zero right and you see that little thing over there right over here so that's actually - yeah it's like the Oh this is this is the ol moment this is like the only ol moment you will see in this entire presentation well that and this this is even oh wait this is even nicer watch whoa and then we have F equals X comma Y X plus y did you see that okay so oh and this and this is this is this just gets better and better watch this I put a third one oh that is just beautiful so that is font ligatures right so if you go to the console you enable font ligatures and then you install a font such as fira code and then you get those nice beautiful looking fonts right the other beautiful thing that I'm gonna show you I won't show you now I'll show you later okay so I'm gonna go away Cortland is like constantly releasing new versions okay so the other thing that I want to show you're all how many of you have actually used IntelliJ okay more than a year more than five years more than 15 years there are people that have used it more than 15 years so you all know the keyboard shortcuts you know the very quick keyboard shortcuts that like you know extract functional parameter which is command oh and you can see at the bottom it shows the the keyboard shortcut that I'm pressing so commando will go to the class extract functional problems that goes to the actual users camelcase completion to go to that so those are typical ones that you know shift command e which takes you to a file so you know like rename we're taking me to a file you can actually put dashes and say for example streams and that will take me to the folder streams right you use the dashes and then shift command I'll command o which let's say I do get ID that will show me all of the gate IDs now if you're writing Java code you probably have I don't know 20,000 get IDs in your in your project so if I want to go to a specific get ID I could navigate to the class obviously I could do for instance order and then here bring up the structure window and then in the structure window navigate and say for example get ID and notice how the completion also works there the search but that's a little bit slow so what I could do is just hit order and then get ID and then what that does is does the camel case sorry that does a filtering based on the namespace and then class name the type and then the ID so that allows me to go quickly to a specific type okay so those are very common ones that are available and have been for for some time and then of course you know if you go to a specific type here I can press command B for instance to go to the actual implementation and navigate back and forth right and all of those as you know are available with the search everywhere which a lot of people seem to not know that double shift is search everywhere and if you actually open up IntelliJ the first time in your life there's a big thing in the middle that says Sarge everywhere double-shift and yet people seem to miss it but the double shift also allows me to do many things like if I say extract functional you see that it allows me to tab across all of the different segments but it also gives me history that I can navigate back and forth with the left cursor through all the things that I've seen and if I want to install a setting or I want to you know go to plugins for instance I can bring up the settings window and go to plugins from here and then find the plug-in but you can also do that with search everywhere you can just write plugins find anything in the plugins or put the hash key and then write plugins and that will bring up all of your projects and then from there you can switch them on or off okay now one other thing that you can do is set settings so for instance if I say editor I can set specific settings from here as well including navigation bar so I can show the navigation bar or hide it and we'll see what we can do with that so these are a lot of shortcuts that you have to remember all the time if you don't want to remember the shortcuts just press shift command a and that will basically invoke the action dialog box and from here you can do anything so refactor this will bring me the refactor shortcut and we have this thing called test restful web services how many of you have used this you know and I'll show you this later on but the good thing about this like this one doesn't have a keyboard shortcut and I don't want to assign a keyboard shortcut to it but if I write rest for instance you see that I go through a restore and I have to navigate down to find test restful and sometimes instead of using keyboard shortcuts you can use abbreviations so if you go to key map and over here we look for test rest so we have it where do we have it here see that I've I can say add abbreviation TR right when I add that then now when I do shift command a and write TR that will immediately bring up the actual action so you can assign abbreviations using these things now the project window is over here that's very simple one keyboard shortcut that I wanted to show you is command e takes you to the recent files right and I could navigate back and forth and a lot of the navigation that you should be doing is with recent files not with tabs switch off tabs they're horrible and you can press shift command e to go to recent edited files much the same way and this of course toggles if you're using two files it will always toggle back and forth but sometimes what you want to do is when you're navigating through here you want to find your entry in the project window so you can activate the auto scroll from source in the settings but the problem with that is that every time I change it will automatically jump right and it's a little bit horrible because I don't want that behavior so what I usually do is there's an actual action which doesn't have a keyboard sort shortcut and it's selecting project view right and I remove that and I actually add the keyboard shortcut ctrl alt L which is not assigned and then this essentially allows me when I navigate to press ctrl alt L and immediately find what I'm looking for in the project Explorer okay and the navigation bar as I say you switch off hide it if you ever want to invoke it just use the keyboard shortcut and this is useful because it's contextual so if I mean Gerrans folder here I can press command N and what that will do is allow me to create a new file directly in that location right okay I'm talking about editing let's edit some code but let's first write some Java so let's create a Java class what's the first class that you create after you learn HelloWorld in Java so the first time you write Java code its HelloWorld the second time what is it a factory because in Java we love our factories right so bufferedreader that's completion bufferedreader equals new bufferedreader now notice when i do completion i get everything right which kind of sucks control shift space gives me smart completion which means it will only give me what's available in that context neuf our reader something new okay by the way these things over here they're parameter hints right and you can actually switch them on and switch them off right so if we go to settings parameter hints yeah okay I'll show you later okay back to editing postfix completion by right bufferedreader not now that's postfix completion it allows me to do completion afterwards hippy completion so for instance I say here string name data all of the different data so if I start to write data here string that will give me nothing so I can invoke hippy completion and that will toggle through all of the different completions that I have starting with D now the cool thing about that is that that also works inside strings so if I type a string and then that allows me to toggle through the entire string as well okay when I want to select code and when I want to shrink and expand code I can do extend selection shrink selection which is very simple to get by instead of having to use the cursor keys and then if I want to move code around if I want to select an empty line I go on the empty to Curtis position in the cursor and then I move the lines up and down right don't cut copy and paste because that sometimes leads to errors as we all know and then of course you have multiple carrots which allows you to basically set carrots everywhere you want select code paste code do anything you want okay and that's not something that you should be using for refactoring and talking about completion which we are there's also the complete statement so notice here that I've got data 1 and instead of going to the end and pressing semicolon I can be anywhere I want and hit control shift control enter and that gives me complete statement right the good thing about that is that I can do that anyway so it was a nice thing empty and that gives me complete statement directly there right now Jason you all work with Jason right yes or no good people be alive I'm the one with the cold here so you write Jason like this and every time you type the quote it doesn't work because you have to escape the quote character and constantly mess around with everything that you're typing this has been in IntelliJ for years inject language reference JSON right that now makes this JSON second fragment and now I can hit alt enter and say edit JSON fragment okay and now I can just write some JSON [Applause] but you can thank me if you like the cool thing about this of course is that this is now JSON so this means that anything I type here will show me that it's invalid JSON right now the problem with it well the problem with this the thing with this is that this is for your settings so if you share if you check this code into github or wherever and someone else checks it out they're not gonna see this unless you check in your configuration settings which is your workspace etc but you can persist this by hitting out enter and it should actually sometimes dies on me but you can essentially say language JSON that should actually be a intention so now this is essentially persisted so it knows that the string underneath is JSON and this of course works with many things because when you notice when I did inject language reference I have a whole bunch of things including regular expressions so this notice that this is now actually a string right it's all green alt-enter inject language reference regular expression this now becomes a regular expression right notice the color highlighting and then I can hit alt enter and say check regular expression okay so this is for example a credit card visa card that has to start with four and if I put a five in here or six it will automatically say that that is not a regular expression okay and then if I again create a regular expression here I also say inject language regular expression and now I get completion right so I get completion of the groups that I am defining in my regular expression write a few more things with strings multi-line strings you all know how to create a multi-line and actually let me I gotta hide something from you because it's what I want to show you now is how fast IntelliJ boots up and that that is the other thing I wanted to show you the nyan cat right that's a plug in and it's really really cool once you once you install it you just don't want to get rid of it also I want to show you that errors you see these errors they're nice as well fantastic arrows so you all know how to create multi-line strings right it's very very simple it's like child's play how do you do the opposite I ask this the other day and someone said to me you press ctrl-z well yes but I mean when you do a million other things shift ctrl J allows you to join strings okay which is much easier than doing something like this okay so shift ctrl J allows you to join them now I showed you multiple I showed you multiple cursors and I said to you don't do any refactoring with multiple cursors and the reason is a lot of people when they come to IntelliJ or to any of our tools they start to do refactoring using multiple cursors and that's a little bit painful because you shouldn't be doing that right there's so many different refactorings built into IntelliJ that it's just you know would require a whole two hours to just go through the refactorings but what I suggest always is that when you are somewhere press the ctrl T menu to get the refactor this and see which ones are actually working and this is something we can improve on because for instance on on our resharper tools which is now we also have a dotnet ID which is writer this is context-sensitive so based on where you are and what you select it's contextual unfortunately in IntelliJ is still is not but it would be very nice if it were so we have things like extract functional parameter right so if I come to extract functional parameter I can select this and go to refactor and say functional parameter right so if you're using Java 8 this allows you to essentially take a function and extract it as take a parameter and extract it as a function which is very useful you know in as in not only allowing you to not have to do this refactoring manually obviously anywhere where this function is called it's going to update it but it's also useful in that it shows you a little bit about the language right especially if you're new to the language you don't know how to do things properly in it it allows you to do it you can go to type migrations for instance right on the type migrations here and I can say for instance on this ArrayList right refactor this and do type migration and convert this to a string string string array right so this does the type migration for me and I don't have to do this manually right and anywhere it's reference it does it for me replace inheritance right I take this replace inheritance and I can say replace refactor replace inheritance with delegation and it does the delegation for me composition these are all things that I find over and over again that people are just doing manually as opposed to just letting the IDE do it and again this isn't about the three lines of code we've changed here this is about all of the places where this code is being referenced and instantiated and things change okay now the next area is some things around analysis and you all know this little red green yellow line that we have box that we have in the corner which is all of the different inspections that we have and we have something like 30,000 I don't know two twenty two thousand three thousand inspections already an intelligent and these are all configurable each and every one of them and I'll show you how to configure them in a moment but for instance if I go to a single line lambda this inspections also allow me the analysis is not only about the inspections that we get but other things so for instance here I can say show me the expression the type of the expression and it allows me to select from everything on that single line of lambda what exactly do I want to know the type for so is it I random less than two and it says to me that that's all and X if it's this a little bit more selection it tells me that it's a type Java stream right and so on and so forth it says to me that that's void for instance so it allows me to if I select a code on lambda it will tell me the exact expression for that code and if not it allows me to select anything in that lambda to figure out what the type is another interesting analysis is the data flow right so if I go to the data flow here and I'm on the ID and I can say data flow from here or go to analyze analyze data flow to here it shows me everywhere that is reaching this right so if we go this do this across the entire project it's gonna show me everywhere that is actually setting this value right which is really useful again when you're crossing some legacy code base for instance and you try there's no tests and you want to for instance do some refactoring it sauce it's awesome to know where this data is being set from for instance right apart from the find usages obviously the find usages gives you information but it's important to also know where this data is being said much the same way you can see data analysis from here right which is saying where this data is being read so in this case you know you can see that it's a public getter and setter but obviously you can apply this to any type of method to any type of property etc another thing duplicate classes now we love our duplicates right well copying pasting is the most effective form of programming and I just set that publicly so analyze write locate duplicates entire cross-project and here you can select the different languages that you want to locate duplicates for and whether you want to anonymize local variables fields etc it means I don't care about the method names I just want to anything that's potentially duplicate runs it across the entire project shows me all of the places where there are potential duplicated code and if you're using something like team City for instance you can run this same analysis on the server and then same analysis then can even be used to fail a build right if I have too much duplicated code fail my bill for me okay now all of these different inspections some of them are shown here right so for instance I come to four here and I say replace with four each this is an inspection that says you know well there's a nicer way to do this construct and you can replace with a four each in other cases it could say that you know here for instance this safe delete duplicate because it's not used all of these obviously are configurable and a lot of people when they come to the idea they're like oh I hate this because it's like campaigning about absolutely everything that I am doing right you can configure all of this so if I come to inspections you see that I have all of my inspections over here and based on the language I can configure each one and I can say whether I want to switch on whether I want to switch off and the severity level that I want error warning weak warning severe problem and you can even edit your own severity and error obviously means error to IntelliJ it does not mean that the Java compiler is going to spit out an error for you and again this these inspections in fact whether you're using teamcity or not can also be run on the server side so with teamcity it's built in if not there is a way for you to run inspections using the command line in IntelliJ so you can actually load up a project run the inspections and see if they are violating some code or not one thing that we added recently is because we add new inspections in every release of IntelliJ or nearly every release one thing we added is a way for you to figure out which ones are new and if you are 2000 17.3 which the version of IntelliJ it will filter down for you the inspections that are new in this specific version right now the problem was the problem there is no problem but there is no problem at all these inspections are built-in into intelligent if you want to create your own inspections what you have to do is write a plug-in ok when you write a plug-in and then you can obviously add another feature to it which is a quick fix so for instance this is the intention the quick fix that says convert the variable concat to string builder right and this is all done by a plug-in now writing plug-ins isn't something that everyone wants to do or everyone should do so what happens if i for instance want to make sure that certain patterns or certain code smells are not written in my code base how could I solve that problem for that we have this structural search or search structurally right and this is essentially an advanced search templates how many of you have ever used this absolutely no one it's been around for like a decade so here I'm gonna write some code right so I write code catch exception e and then we'll do system out e get message okay now what's wrong with that code anybody shout will say it's absolutely beautiful code there's nothing wrong with it except that I use two spaces instead of four spaces or even dare and say I use tabs not spaces nothing nothing wrong with that code so what am i doing I'm catching a general exception and all I'm doing is printing that out to the screen for that I might as well not do anything and second of all I shouldn't really catch the top-level inspection my code now what I can do with this is search for this kind of code in my code base and this code here is essentially a placeholder so if I click on edit variables what this gives me is the constraints of this variable so I can say here I want this to be code there could be from 1 to infinite or 1 to 0 to 1 lines of code in my case I want it to be 1 to infinite or unlimited I can say that it needs to match a regular expression I can say that it needs to be of a specific type in my case all I'm saying is that this can be any code from one line to a million lines hit OK hit find and it will search across my project and find everywhere where I have this code right and then I can go and say this code is wrong you shouldn't be writing this code which is ok it's nice but the problem with this is that this is opt-in thing this is me having to search for this code across my project I would like more for developers that are working in my code to be able to see that this code that they've just written isn't the best code so what could I do well what I could do is come to inspections search structural and say enable structural search then add a search template in this case I'm adding this template bad exception handling okay and I'll set the severity to warning hit OK as soon as I do that my code base now highlights code like this and if I hover over it you see that it says bad exception handling now that's just one sample you could essentially create any kind of template there right but that's ok if I hit alt Enza what does it say it says inspections structural search options hmm let's go ahead and see what we can do with this so instead of adding this I'm gonna remove this let me first move it and instead I'm gonna say add replace template and I'm gonna say get rid of all our horrible code and don't catch top-level exceptions just if you're doing that you might as well just write out the code hit OK bad exception handling right now hit OK I still get the warning if I hover over I get the light bulb but now I get a intention okay so we're just defining a template for search and the replace I've essentially enhanced intelligence inspections with my custom code smell and optionally a way to replace that code smell quickly without enter and of course I don't need to do this manually I can come and say replace if we undo that say replace structurally and I can write code here and say find and now we'll find all of the places where my code is there and I can say you can't see it because the button is not visible because of the resolution of the screen there you go replace selected okay so that's also replace selected and most of these inspections they're kind of now following the default convention that we have which is some are on some are off you can customize them you can export them to your own profile you can associate them with the exact project etc and if there's some that are off by default you can always run them you just say run inspection by name and then here you can bring up any kind of inspection for example questionable name which says find any badly named variables such as fubar eye cetera and here you can see all of these different ones and run inspections manually okay now let's look at some debugging things so the NI debugging you're all aware of now this has been on for some time when I debug I get this wonderful inline debugging and if I know how to write code so let's debug this and if I know how to write code so let's debug this right so I get all of the nice inline debugging okay you see that I get all of this notice though however that in the debugger I'm getting in ninety bugging and now what we're doing is trying to make it faster the debugger so essentially until you don't want to actually evaluate a variable that you hit on it it can by default not render the data of that but you can also do custom rendering right so here I get all of the information from my debug session but I can also do custom rendering so let's say for instance I go to customer but here and [Music] what am I looking for okay let's go to customer ninety party right so here I have for instance let's create a new customer create a new Java file run this and then we'll do PS VM and customer customer equals new customer right so now customer get last name or set first-name equals something and set last name equals something else set a breakpoint debug so I get the watches here on the customer and I've got the first name in the last name what you can also do is add class level watches so I can say new class level watches get first name plus some string get last name and then this essentially exists for me at the class level right and it's only there at the class level so I can add new watches that are part of that specific object and customize the class level there so this is a simpler way than adding what we are known as the renderers right so you can create renderers in in IntelliJ over here Java type renderer so for a specific type you can actually have the debugger render it in a specific way but these would be global and what you can do is add class level ones so that they're only available in the context of that class by the way there is a right button click here and there is a more here that pretty one pretty much nobody ever clicks on but this is quite useful because it allows you to do silent debugging or stop only conditioning on a specific breakpoints or lock to output without having to step through single line lambdas okay now here what I can do is actually let's go to another project which I have so here I have a project and I'm going to debug it now this is a whole bunch of wonderful functional code right they told us use streams and we use streams and they said concatenate one function after another and we did and then we end up with 300 dots and function calls and then in about five years we don't know what we've actually written and we can't even debug this here on what I'm doing is I've got a stream of words and then I'm saying okay distinct and then I've got a map and then I've got a filter and then I've got to know this thing and then I've got a collectors joining right and at some point when you're debugging this you're like I need to have a mental map of exactly what is going on in each stage what you can actually do is use this Java stream debugger so if you click this it comes up with a nice little box that shows you all of your input and then when you do distinct it shows you all of your output notice other lines are not all let me make that smaller see how the lines are navigating and then when you do a map it shows you everything that it's mapped and then the filter what gets filtered distinct what is distinct and then finally the collect and that is extremely useful when you're trying to understand some code and see exactly what's going on okay if you are I'll give you a heads up and a little warning that if you are using this and you're playing with Java 9 JDK 9 currently there's this minor little bug which we're working on fixing so the two are incompatible so if your project is using Java 9 this won't work but soon it will be fixed then we also added a plugin which is the JVM debug memory viewer right and what this allows me to do is essentially this is one other thing right it's so easy to install and uninstall a plug-in but then every time you do you have to reboot IntelliJ which doesn't work great when you're doing presentations right but they promised me for the year 2037 they'll fix that so if I go to memory view let's go to the other project so here I have the memory view and if I do pug this set a breakpoint for example here by the way notice this key promoter this is a new version of it the new version is called key promoter X it's kind of like iPhone X it's the best-ever key promoter we have ever made except I don't think we made it and it's very good because it's every time you press the keyboard if every time you use a mouse it tells you stop using the mouse use this keyboard shortcut instead right so you see that it I don't know how to use IntelliJ properly so it constantly pops up and makes me look stupid so JVM memory view j vm memory debugger so as I step through why is it not showing me that's weird okay so we have this thing which shows memory and the count of the objects and every time you look and sometimes it works sometimes it doesn't but hey that's why I'm running eaps you see that that's called an EAP that's my get out of jail card every time something doesn't work I'll just say I'm using an EAP and you don't know if it's that it really doesn't work or I just don't know how to work with it but we'll just pretend that it doesn't work right with databases I hope that if you are using databases for storing information which essentially means that you're using databases anything other than MongoDB because you want your data to actually be saved we have support for databases so you have all of this you know queries and all of that so if I say for instance query completion much the same way that we saw with the inject language reference you can do inject language reference here as well so I've on uninjected here and you see that this is a string if I do inject language reference and put the dialogue which is light sequel light this then gives me all of the benefits of intellisense completion and analysis so I could say now employee dot address etc right and then I can also say alt-enter run query in console with the actual address etc okay so you get all of the benefits of databases and if you're using data group which is one of our tools so data group is essentially all of the functionality for databases of IntelliJ in its own in its own product there's also source control you know the good thing that we have here is again we try and focus you on what you're doing so a lot of times when you're checking in source control there is an issue with a DIF or what you want to do an edit don't ever cancel don't ever you know come here and say oh I've got to fix this so I cancel and cancel this because you can actually do all of the editing in line so I can come here and delete this and then do the check-in directly there okay so all of those editing is online if you're using something like it you have this wonderful option here which is a men commit which means that the last commit that I did commit it again with a fix and not create a new commits like we always do and then you could do like all all of the wonderful things like cherry-picking and and and the things that you can basically do or from the IDE there's also the ability to do an undo commit one of the things that I showed you was it then I said I mentioned is the test restful web service right so the test restful web service if you're familiar with postman in Chrome is essentially the same thing right it's a little tool that allows you to reach HTTP endpoints so if you're doing any kind of server-side development you can essentially add headers over here with different values so in for instance I can say except and then here say application JSON right and these can be added and then you can just do a request get back the results problem with this is that you constantly have to write it and use a UI now we have the ability to do that all in a file so you can create a file with the extension dot HTTP and then you get all the completion here so except write application JSON with completion and then I can just come here and run this and that gives me the request the response headers at the bottom I can then click on the log and get information about all of the different requests that I've made and all of that is available and to finalize you know I'm not terminal and all of the other built-in tools are kind of easy but there are a bunch of tools or functionality that don't come shipping out-of-the-box some of the favorite ones are in terms of plugins if you're using idea vim if you're using if you like vim there's idea of in which essentially gives you the benefits of code editing with the editing features of them inside IntelliJ IDEA there's another one that I like a lot which is called metrics reloaded which I actually have that installed metrics reloaded is by one of our colleagues bars and it's got a whole bunch of information about your codebase in terms of class coupling afferent coupling efferent coupling cyclomatic complexity a whole bunch of statistics and graphs that it can generate and also how many of you use a Kotlin the language Kotlin ok so today you'll see Cortland and you will 100% guarantee fall in love with it and when you leave today you'll all be using Kotlin but if you're can't use Cortland you know that we have in IntelliJ the ability to fold code right that's a simple code folding so there's an actual plug-in which is called plugins and it's advanced Java folding now the idea here is for me to restart one more time but apart from that it is essentially taking the code folding to the extreme now it looks nice but it is also kind of scary because when you look at your code now it doesn't look like Java anymore well it might look like Java 10 or Kotlin but it certainly doesn't look like the Java you wrote right so let's go and see some class over here for instance let's say single lambda expressions or say memory view so you see I have vowel now right that's actually Java code but it's doing code folding so it's saying that this is a read all variable which in Kotlin is right and scholars represented as a vowel and if I click on it it converts it to what it was right cars plus equals Toyota plus equals doesn't exist in the Java we know so that's actually a cars dot right if less than percent so it's essentially folding your code and of course you can configure as much as you want in the code folding right but as I said it's nice but then again sometimes it if you push it to the extreme your code looks radically different inside the IDE as it does on paper right so yep anyway those are the tips and tricks hopefully you've learned something new if you haven't I'm sorry and I'll run away from straight and next up is team where tools and I'm gonna introduce my colleague Michael Vinc who will slowly very very slowly walk up the stage and speed up get up thank you [Applause]
Info
Channel: JetBrainsTV
Views: 8,041
Rating: 4.9407406 out of 5
Keywords: jetbrains_night_seoul_2017
Id: o-T40MRwzdA
Channel Id: undefined
Length: 50min 59sec (3059 seconds)
Published: Wed Dec 27 2017
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.