It's 4.30, so we're gonna get started. So hi, this is practical debugging. If you're here for some other thing, then I'm sorry. But you're gonna learn how to debug. So debugging in Ruby, it's fun, it's a fun thing. This is what happens, you get a stack trace.  I ask my coworkers and this is the best response that I got. Usually curse audibly frightening my coworkers. That was the best I got. And then there was silence in the Slack channel for like a solid two days. And then someone asked about, I don't know, something else completely different. And I think this is actually a kind of a good reason for this talk. People don't know how to debug in Ruby. They pull in tools, they pull in all kinds of dependencies, they pull in all kinds of things that they usually don't need. You get what you need when you download Ruby. So standard practice when you have a question about what to do, what do you do? You remain calm and you ask what would Stack Overflow do? This is Stack Overflow Driven Development or hashtag wwsod. And Stack Overflow says to do two things. It says to use pry and it says to use by bug. Stack Overflow really likes to suggest using these tools. They suggest it all the time. Use pry, use pry, use pry. I especially like this one that says use IRB. And then the first comment is, pry is more efficient than IRB. Just because, I guess, I don't know. More of the story, at the end of the day, people want bug free code. They don't care how it got that way. You could use, I don't care, it doesn't matter. And you don't get style points into bugging. This one is actually really hard for me. I live and die by my winter. I don't know if you guys are like that. Not a lot of people tend to be, but I just love clean, efficient syntax. I really don't care if it's functioning correctly. I want it to look good. Just want it to look good.  It doesn't matter. Just delete the code. It's gonna go away anyway. And so you can do all kinds of crazy stuff. And so you have to get over yourself. You have to get over the fact that the code's going away, you can do whatever you want. My point in giving this talk, my whole thing, is that the Ruby Standard Library has every tool you need to debug effectively. You have pride. You can use pride. I don't care if you use pride. Feel free. It's wonderful. On the other side of that, there are tools that are available to you that are criminally underused. And so I'm gonna walk you through a couple of those. The point of this talk is not to give you every single possible tool to solve every single possible problem. The point of this talk is to give you a diving board, is to show you the places where you can start your journey through debugging these processes. And to walk you through a couple of the tools that I use pretty standard pretty often to solve these problems. So, first question you have to ask yourself. Oh, I'm sorry, backing up. I needed an example application just to debug over the course of this talk. So I wrote a little mind-sweeper. Is everyone familiar with mind-sweeper? Yes? No? Maybe? Okay, I'm gonna show it to you. Live demo time. So, here's mind-sweeper. It's in Ruby. Can everyone see that? Kind of, maybe. And you click, right? And then you can tell them where the minds are.  It says you lose. And then, you can do the same thing. I allowed you to specify the width and the height and the number of minds. So this only has one, so you should be fine. And then. Thank you. Thanks for coming. Yeah? Okay. Let's try that again. We click. And then it says you win. There we go. Much better. Okay. What are the odds, right? What are the odds? You could never tell. No way to tell. So, this talk goes pretty quickly. It has a lot of code examples. And I'm gonna run through them pretty quickly. Don't panic. All of the examples are up on the GitHub repo that I will give you the link afterward so you pay attention now. And you can go back and review all of them and it gives you tons and tons of links and tons and tons of references. So, don't start scrambling, but I am gonna go through these examples pretty quickly. So, first question you ask, what kind of problem are you solving? I'm gonna define three kinds of problems that we're gonna work through. The first is going to be an interface problem. Second is gonna be a state problem. Third is gonna be a flow problem. So, interface problems. First kind of problems. Interface problems occur when you don't understand the dependent structure of methods or constants. Methods have structure. They have a return value that is a type. They have, or sometimes multiple types. They have parameters. They have the order of those parameters. They have the types of those parameters. All things like that. Constants have methods defined on them. They have an ancestry. They have descendants. They have all kinds of things. So, interface problems occur when you don't understand the dependent structure of methods or constants. You have to know these things in your code and you're making certain assumptions every time you call a function or reference a constant for that matter. Interface problems answer questions like why is this thing nil? This is the most common thing that I find. Undefined method, blah, blah, blah for nil. So, we're gonna walk through that. Why can't I call the method that I want? What are the constants I can reference? What can this object see and do? And oh god, oh god, what is this gem even doing? And in true millennial fashion, I can't even. So, first question, why is this thing nil? So, we're in the mind supercode. We get this no implicit conversion from nil to integer right here. So, let's go into this code a little bit. The error is on this line. And it says no implicit conversion from nil into integer. So, neighbor is nil, because it's trying to course that into an integer that it can reference inside of the array. And so, we say, okay, neighbor is nil. So, neighbor is an element of neighbors. Why is neighbors have nil in it? We go to this neighbor's four. Neighbor's four is defined here. Neighbor's four calls index four, and index four is defined here. And pretty quickly, you can see the problem. It's that giant return nil if statement. And, you know, while this is a little bit contrived, the neighbor's four method assumed that integers were being returned. The index four method does not have that signature. Now, in Ruby, we get def. In other languages, you might have option int, or optional int, or maybe int, or whatever int. In this case, you get def. That is what you get.  The onus is on you to take care of this type signature. And it's implicit. It's not there.   In most cases, this is wonderful. This is quick. This is very, very fast. This gets you to market. And then later down the road, like a year, you get a honey badger because you didn't take care of the whole type signature. So in this case, the fix is actually pretty easy. We had dot compact there. It gets rid of all the nils. And everything's great. So basically, if everything is ever nil, just add a compact, you're fine. Total lie. Moving right along, why can't I call the method that I want? Let's see if we get this error. And we get this, and this is our clue, rescue and method missing. You might also get undefined method. Either one. This tells you, okay, we're trying to call something that doesn't exist. So let's go to the first one of the stack trace that we control. We go to the board. We get this build status label method. This is where our error is coming from. We have that adder reader there, and we're like, hey, we should be able to call this thing because it exists. Right, so what are we gonna do? So we're gonna add some debugging method, some debugging code. We go in here, and we're gonna call the methods method. It's gonna give you an array of symbols that's gonna tell you everything you can possibly call. We're gonna print that out with P. P is a great method. It's respectively this, but instead this, right? It puts inspect, but instead it's, okay, you got it. We're gonna exit immediately. You wanna keep the feedback with as quick as possible, right? You don't want your application to just keep running. Just get the information you need immediately. And finally, we're gonna grep through the methods and try to find the method that we need, and we're just gonna output that all to the terminal. So running that code, we get this. The first array is the array where we were looking for the thing, and the second array is all the methods. Obviously, we didn't write all these methods, so clearly the scope inside of that block has changed. We go back to our code, we get derivative already debugging information, and we can find out that in fact, self has changed in this block. That kinda makes sense. We could have been clued in by the fact that text and grid are not methods that we've actually defined. We take this lexical scope inside of Ruby has referenced the local variables when the block was defined. So we take that text, mine's, mine's left, and column span width, we move them out into local variables, and everybody's happy. Now, this example thing to remember, we use the methods method, right? Found everything we need, real quick, good debugging. Excellent, moving on. What are the constants I can reference? This one is kinda fun because people tend to forget that constant lookup is not the same as ancestry inside of Ruby, it's, they're different things. So let's look at this example. Let's say we refactored our cells to have different hierarchy, and we decided, okay, we're gonna have these cell mine and the cell neighbor and the cell empty, and they're all gonna take care of their own needs and whatever. In this case, we think this is great, and we go and we run the code and we say, uh-oh, uninitialized constant, mine's super-based. We go back into our code, and the tool that we're gonna reach for this time is module.nesting. Module.nesting is a method that's going to tell you exactly what namespaces you have access to within this current lexical scope. So if you run this code, we're gonna get mine sweeper, and that's all we're gonna get. We go back into this code. What this is saying is that we only have reference to the top-level constants, which you can always reference, and the constants directly defined underneath the module namespace. So in this case, you go to that first definition, class, cell, mine descends from base. Base is not mine sweeper base. Base is mine sweeper cell base. So we do a little bit of refactoring. We move these guys on in, move that up, run it again, and you get mine sweeper, cell, and mine sweeper. So you can see from this code how you can now access the base class and the other definitions. Everything's good. So what can this object see and do? This one's fun. So there's all kinds of introspection tools that are relatively available to you. This is just something that's, a couple lines of code to tell you every single constant that's defined in a project. We do a couple things. So we can print out the name of the constant. We can look at the constants, dot constants is a method that's defined on constants, on modules, for that matter. We can iterate through them and we can call const get to get something by a symbol. It'll give us an object. We can then iterate through that recursively and get all of our information and we run it on our project. It's pretty boring. It tells you three constants, but you can do things like run it on active record and get every single active record constant there is. Probably not immediately apparent what the value of this is, but being able to iterate through constants very quickly is very, very useful, especially when you're dealing with reloading, like hot reloading with Rails and something hasn't been loaded, think STI where you wanna iterate over the descendant classes and not all of them have been loaded. This is very, very useful for that kind of debugging. We can also find out everything that we can call on an object. We can list its instance methods. This right here, this instance methods function is gonna give us an array of symbols that represent those methods. And we can use, we don't even have to load up code. We can do this on the command line. That dash i is gonna add the lib directory to our auto load path or to the load path for Ruby. Dash r is gonna require it. Dash e is gonna evaluate it. And we get all of this goodness. We can do the same thing for instance methods that are just defined on this class and not inherited. Same thing for private instance methods and the same thing for private instance methods that are just defined on this class. All this information is available to you from the command line. It's like 40 characters worth of typing. Try to get that with other languages. It's not the easiest. This is quick introspection. And this is some of the fastest feedback loop you're gonna get. Finally, we get to my favorite. Oh God, oh God, what is this gem even doing? Let's say we get this error message ambiguous option column. Nevermind the fact that you probably can spell, but we're gonna go with this example for a minute. Let's go to, so what we could do, we could go to the code from our side. We can also go to the code from the vendor gem side. So we're gonna do that. So first line we control, we go in and we find out, okay, this is actually calling, if you remember from the lexical scope example earlier, the tkliblgrid method. So we go into our command line and we say, all right, let's get that tkmethod grid and then let's get the source location. Source location method, instance method, that will give you back a method object. The method object then has metadata on it that you can get, right? Source location is going to tell you, okay, this is the exact file on your system where this function is defined. And this is the exact line inside of that file so you can go quickly and find it. We find, okay, let's, this is defined here, this is calling out to the tkgrid method. So let's go and get that and repeat the process. Only difference here is that it's not an instance method, it's a class method, so we use the method method instead of the instance method method. Are you tired of hearing me say method yet? And we can repeat the same process. We can go into the code and we see, okay, this is what it's actually doing, right? Try to do this with a jar, enjoy yourself. This is, we know that the error comes from this line and we know that params is being passed into this so let's just go ahead and print out params. And hopefully at this point, it's now become evident that column is misspelled and you can go into your code and fix the bug. Yeah, at the end of the day, when you're done messing with all of your vendor gems, you don't want to leave them in that state, bundle exec gem pristine will restore that to the state that when you downloaded the gem originally. You can also do dash dash all and that will just clean your whole gem file. So lessons learned from interface problems. Account forever return type. You don't have a compiler, you don't have something telling you, okay, this can return these kinds of types and you need to go one by one and take care of them. There are no sealed traits here, right? Account for constant and method lookup. You need to make sure that you know what lexical scope you're in. You need to make sure that you know what you can reference. On the other side of that, take advantage of constant and method introspection. You have these tools at your fingertips. You can use these very quickly and when you don't use them, you're giving up one of the greatest assets that you have for having chosen Ruby as your language of choice. And finally, take advantage of the fact that gems aren't bytecode, right? They're not compiled. You can do anything you want to them. You can go and delete files and see what happens. If nothing else, you can use them as an educational opportunity just to go in and see what kind of problems they were solving and to see how they solved those problems. And you know, I mean, this is one of the best ways to learn Ruby. You have all those files already downloaded to your system. They are right there. It's great. So use them. State problems. So, state problems. State problems occur when the assumptions you made about the current state of the program are incorrect. That might seem overly generically broad, but what I'm basically saying here is that the internal state of every object in your system that's living and breathing inside of your memory as it's been allocated, what assumptions are you making at each point in code that may not be correct? They answer questions like, how does this value change at this point? What has been initialized at this point? And how many objects are allocated in this method or within this lexical scope? So, first one, how does this value change at this point? If we go into this code and we say, okay, button.text is changing. And let's say it's changing to something that we don't like. It's changing to some, I don't know, foobar or something that we don't know why. We can go in and figure out exactly what's happening very, very quickly. And we're gonna add some introspection code here to figure out exactly how. So, we're gonna use the instance variables method. That goes and lists an array of symbols, again, defining every single instance method that's been initialized on this object. We can then map over that and use instance variable get to get the value. We can then create a hash out of that and put it out to the command line. And finally, we can get the current state of the text and the new state of the text and get all that information. When we run it, we get a hash with the keys being the instance bars, the values being the actual value of those, and the state being outputted. Well, this may seem relatively trivial just to get this information. That was like six lines of code to tell you exactly the state of your object. And it was painless to put in, right? I used two methods that I had to know about. Instance variables and instance variable get. That kind of information is relatively easy to remember. You don't need to think about some kind of introspection API with multiple objects and try to use some kind of compiler macro to try to get your information available to you. This is very, very quick. What has been initialized at this point? Similar to the last one, let's say we get undefined method count for nail class. We go into our code and we see, all right, cells is nil, why is cells nil? It could be nil for two reasons. One, we forgot to initialize it or it wasn't yet initialized at this point. Two, it was already initialized and it got mutated somehow and now it's nil. Either way, it doesn't really matter. For state problems, we're just interested in finding out exactly the current state of this code. So we go in and we can use binding.irb. It might look similar to binding.pri. It's very similar. It's like the same thing, except it doesn't have the LS or the CD or all the stuff that makes you treat objects like file systems that are kind of funny. This is brand new in Ruby 2.4. If you're not using Ruby 2.4, you should use Ruby 2.4. So first off, let's talk about binding. Binding is inside of the current lexical scope of any kind of block inside of Ruby. It's gonna tell you the table of local variables and the call stack as well as a couple other utilities I'm not gonna mention. IRB, right, is what happens when you're getting the repl for Ruby. So when you require IRB, IRB adds an IRB method to the binding class which will then drop you in.  You can introspect on the instance variables. You can determine that in fact cells is nil. Now we're gonna go and complete this whole debugging example in a minute, but suffice to say at this point, you can use binding IRB to get all of that information very quickly. How many objects are allocated at this point? So I wasn't gonna include this example just because it's such a minimal touch on GC but I'm gonna do it anyway just because it's good to know that you have these tools available to you. I by no means claim to be a GC expert. There are so many people more qualified to speak about this but I'm going to just kind of give you the beginner's guide to what you need to know. So let's say we have this code and status.txt is getting updated and we've determined through massive amounts of profiling on our part that this method is slow. We don't know why it's slow and so we're gonna do a little bit of profiling on our own for just this specific method. So we're gonna create a board. Now, before I add the rest of the code to this slide, remember what I said earlier that you don't get style points in debugging? This is going to be egregiously bad code that you should never use, okay? So we're gonna create a board and I don't wanna deal with the TK status, the TK label so I'm just gonna create this struct and instance eval that in there. Then I'm gonna create some cells and oh the cells need TK buttons so I'm gonna create some buttons. You see where this is going.  But it's okay, we're gonna delete it all. We're gonna find out exactly what's going on so let's add some code.  This is gonna tell you what it's thinking about, what it's measuring, what it has done and everything.  The total allocated objects key within that hash is going to tell us exactly what we've, how many objects have been allocated and finally if we look at this code we're gonna run update status 10,000 times and see what happens. If we run this code we get 70,001. So thinking back we ran this thing 10,000 times so seven objects are being allocated per method call. We go back into our code and this is the block because we were controlling for that inside of the code. This is the two lines that get executed. So you can do a couple things here and I'm gonna put this little caveat out here. Normally this kind of like intense GC optimization, memory optimization is not useful. You have bigger fish to fry, right? If your page is taking three seconds to load this is not going to help. That being said it's a good example and let's say this is like the most critical path. Like you have to know how many mines are left at all times like just 10 million clients connecting and they have to know. I guess you can do this. So we can say okay we don't need to select and then count we can just count and we don't need to do string concatenation we can do string interpolation, we fix that. We run it again we get 50,001 we deleted two objects. That's a very minimal GC example it's just to show you that right GC you have that kind of introspection available to you at any given time. Lessons learned from state problems. Take advantage of Ruby's quick feedback loops and flexibility. I was able to instance eval status and that button in there and they were just structs and it didn't matter because it's not checking the API it's not checking what you conform to. It's not checking that you have some kind of marker interface or protocol saying okay these objects can be substituted for these other objects. And your ability to see into your program state at any point is one of your strongest tools in debugging, right? You can go into your code and run this at any point you can put it into your code anywhere inside of your whole application you can get this information quickly. So, flow problems. Our last class of problem. These are the most serious ones. These are the ones that you hit in production. These are the ones that Honey Badger sends you an email at 3 a.m. Flow problems occur when you don't know how the Ruby interpreter got to or left the location and code and it's associated state. It's a bit of a mouthful but what is that basically saying? When you have your application code and you say okay at this line specifically I have an error and I have no idea what's going on. You need to know how it got there, where it's going, the objects inside of that state where they came from, where they're going. So it answers questions like, how did the interpreter get here? Where did the interpreter go from here? Where does this object get here? Where is this object being mutated and finally where does this instance variable get set? Right, these are all temporal problems. These are having to do with over the course of a longer period of time. So they're necessarily a little bit harder. How did the interpreter get here? Fortunately, this one's pretty easy to solve. If you look at this code and we say okay, it says we win but maybe we got the logic wrong and it says we win after the first click. We can find out how to do that really quickly. We can say okay, puts caller. Caller is a method from Kernel. It's gonna tell you the stack trace up to this point. We go and we run this code and it gives us all this. It tells us the whole back trace. That's great, that's pretty good but it's kind of frustrating because now we have all this code that we don't wanna look at anymore because we still have all of the external gems. Let's get that out of there. Real quick back trace cleaner without pulling in a third-party gem, regex. This is a new regex. It creates a regex from the current working direct or from the directory in which this file is defined. And we can grep through caller like that. Pretty effective back trace cleaner. We go and re-run it and we get that. Those are just the lines in our code that executed to get to this point, right? It created, mind super start was called that called board.start, that created cells, the cells called toggle mine, that called update and everything broke. That's our back trace. Where does the interpreter go from here? This is where we start to pull out the hammers. This section is a little bit harder so we have to pull out the bigger tools. So this is our very start and say, okay, from the very beginning we want to know everything. We don't know anything about this code base. We just want to see where it goes. TracePoint's our friend. TracePoint is a module that will walk you, it's a window into what the interpreter is seeing. Right, it's actually technically a wrapper around the set trace func, I believe, from kernel, which is a little more functional. So this is like an object-oriented way of looking at that. So that's TracePoint. The new call is gonna say, okay, every single time a Ruby function is called execute this block and give us this TP object. That TP object has certain metadata on it, like path and line number.  We can walk through line by line as this thing is going. Again, we want to clean that up just a little bit. So let's go and add an if statement that says basically the same thing as we did last time. We go and we run that code again and it says exactly the lines of code that we've defined that it's gonna walk through. This is quick information to get and it's just going to show you exactly every single line that you control that you can change that has executed already. How did this object get here? Another hammer we're gonna bust out. Let's say we have this args of, I'm sorry, args of a button. And that's an instance variable that we're gonna set and that's coming in. We have no idea where it came from. Let's bust out object space. So object space is a window into the Ruby heap. It's a window into what's been allocated. And actually it also allows you to access when these things get de-allocated. Couple things you can do with this and what we're gonna do real quickly. That little section in the bottom right has to be required. That's the only reason I put it at the bottom. You have to require that first to make sure the object space knows to start tracing allocations because obviously you don't wanna trace that in production. But in this case we can call allocations source file and allocations source line and we can put that information out and we can find exactly the line in code where this object was created. We go and we run that and we get board.rb949. We go and we find out, okay, this is exactly where it's allocated. You can go anywhere in code, find out where all those objects came from and now on the other side of that. Where is this object being mutated? We have an object in code. We know exactly where it came from. We can now find the entire lifecycle. Where is the subject being mutated? And the easiest way is actually surprisingly simple. So, undefined method click for nil class. Let's go in and say, okay, we have these cells. We know they were initialized correctly and one of them is nil. Why are they nil? So we go here and clearly something is mutating this cell's array. Something is mutating it over the course of it going from its birth to where we are trying to access it. Cells.freeze. Cells.freeze is gonna say, okay, anytime this array would be modified, throw an error. And immediately we run that instead of getting undefined method click for nil class, which is several lines deep, we get can't modify frozen array. Board.rbline32, we go and we see, okay, somebody was reading that bang methods are more performant. They got really excited and they said, okay, we're always gonna use bang methods. That's bad. And it can be refactored to be this. Cells no longer gets modified and everybody's happy. Finally, last example. Now this last example is the trickiest one, so stick with me. When does this instance variable get set? Undefined method count for nil class. We go into our code. This was the previous example we said we were gonna finish, right? This is where we left the code. Now the problem here is that cells should be set, but it's not. So let's make it set.  By the way, that's just a good assumption to make in general.  They were assuming that cells was initialized. So let's go in, okay, we've run it and it says zero minds left, but the program runs. This is good. It means that we can keep working. We go back into our code and we say, okay. Now we need to find the line of code in this file where this instance variable would have been set so that we can change build status label to be after that. So let's bust out our old print trace point. This is getting complicated. But it's not as bad as it looks. First of all, this is going to give us this block, this TP object at every single time the interpreter hits a new line in code and it's gonna enable it. Then it's gonna say for if some condition that we'll go through, put out the path that you're at and the line number minus one. The reason we're saying line number minus one is because we're gonna try to create an if statement that says okay, if cells changed, then the previous line must have changed it. First part of the if statement. Are we within the same file? This might not be relevant, but for us it's easy because it's an instance variable and assuming you are not setting instance variables on objects from other classes, don't ever do that. We can assume it's in within this file. Next, TP.binding.eval self.class equals equals self.class.  So, binding.eval, right? When you're within the trace point block, when you have the TP object, you have access to the binding at that point in code. You can access all the variables that that binding could have seen. And you can just call eval on it. Remember how you don't call eval in production? Please don't call eval in production. You can do that in debugging. You don't get cell points debugging. It's gonna go away anyway. So, the point of this line is because earlier, remember we had that lexical scope issue where we were inside of that block? That's still inside this file. So we need to make sure we're still evaluating within that code, within this class. And finally, this is the money one. We're gonna create a local variable that we're gonna have access to within this block. And we're gonna say TP.binding.eval, the instance variable cells, not equal the cells. That is to say, if this instance variable changed, then we wanna know about it. And we wanna immediately exit, and that's gonna give us the information. So we run it, and that's what we get. We get the line of code, and we get the file in which that instance variable changed. It tells us one line. If we go back to this code, this is nine lines of code. Nine lines of code to attach to the Ruby interpreter, walk it through every single line that it evaluates, and evaluate an instance variable and tell you exactly when these things changed.  This is the line we wanna change, and we do that, and everything's fixed. So lessons learned from flow problems. For large projects, it requires effort to follow the flow. This is just a thing. With larger projects, it's gonna be harder to walk through the stack trace. You're gonna have thousands and thousands of lines, so you need to be very, very careful about how you clean it and how you walk it through. On the other side, for new projects, stack traces are easy to generate and follow. My point in saying this is, it's going to be easy at the offset. And we know this from Rails. We have generators. We have quick and easy 15 minute blog tutorials. It will get you up to speed very, very quickly. It only becomes hard down the road. So, all that is to say, we're taking some trade offs when we use Ruby and we're debugging Ruby. We're trading compiler niceties for introspection. Compilers will tell you when you haven't taken account for every single type that's gonna be returned from a function. On the other side of that, Ruby is going to give you the ability to introspect on any point in code, every single variable, every single constant, every single state of anything that's going on. And that information is available to you very quickly. If you don't use that as a tool and you're debugging, then you're giving up one of the best advantages of using Ruby. We're trading out-of-the-box speed for flexibility. If we had taken the out-of-the-box speed, then we would not have been able to take that status struct and stick it in for a TK label. We wouldn't have been able to trade those things out because the compiler will yell at you. It will say, no, I need to ensure that everything is correct before I run. And finally, we're trading maintenance costs for startup costs. This is for flow problems. This is for when you're trading off the fact that it's going to be very easy to get to market, to ship this to production, and down the road, it's gonna be a little bit harder to maintain. In other words, these are interface problems for the compiler versus the introspection, for out-of-the-box speed versus flexibility, the state problems and maintenance costs for startup costs, these are flow. So the next time someone comes up to you and says, Ruby's dead. Don't use Ruby. You can say, actually, I'm gonna go ship my app to production and I sleep fine and enjoy your type safety. Good night. Anyway, thank you.


Hello everyone, my name's Ed Parsons. I'm afraid I'm only going to be presenting to you virtually I would have loved to have been at the conference, but unfortunately Some travel issues I had on the morning of my presentation prevented me from doing so but I'll try to present to you now what I would have said and Hopefully you'll find it useful. I contact details are at the end. Do feel free to get in touch via Email or via social media and I'm happy to continue the conversation So what I wanted to talk about is a change that I think is happening in our industry where we are moving from A time perhaps where we regarded ourselves as as artisans as Developers of a code as a craft to a time where the world has Fundamentally changed and much of that has been driven by the emergence of artificial intelligence, but not not totally Let me start off by just describing who I am and making use of actually artificial intelligence to do so This is the response that barge gave me so our chat GPT equivalent of Answering the question who is Ed Parsons? And I think this is largely content that has appeared probably from from Wikipedia and other content on the web To tell me that I am a geospatial technologist, which actually is true I am the Google Maps guy in many ways. That's the easiest way of thinking about it I'm really interested in how we make sure that Google Maps is is current up to date It represents the the world as accurately as we possibly can and also things like making sure that that little blue dot that appears On the map to represent your location is done accurately as possible so I come at open source really from a data point of view data is is Almost 80% of what we do in terms of a building Google Maps So you may have seen this idea is this this statement that the data is the new code particularly in the context of of of AI and I think we can draw a comparison to that Perhaps less than a helpful statement made earlier that that data was new oil I don't think any of us really thought that the data was a Commodity in the same way that oil is but I think Looking at data in the context of how we develop software and how we develop new services Actually is really important and data is a new code I think encapsulates this idea that actually many of the new products and services are very much dependent on large volumes of data to make them work but our focus is not just on on AI and On I suppose machine learning to use a perhaps more correct term for what we're actually talking about most of the time There was actually a confluence of forces that are impacting on the open source community That have emerged around the same time, but I think we need to look at them Together because they they bounce off each other. They have impacts on the same idea at the same time So what are these these forces that are that are emerging at the same time? The first obviously is this one of around a machine learning a machine learning training How do we manage how do we control access to data sets? Which are going to be used to to create new foundation models for example How do we understand and accept the concerns that many content providers have that well They they didn't realize when they were publishing data online that their data was going to be used In this fashion in a way that you know Could be seen that they are being replaced by a machine doing their particular activity You can understand this from authors and and perhaps the creative types But actually you know your code that you may have uploaded to repository is used to train software development tools That will help individuals write code based on the code that you have written Now you can understand why people might be resilient to this not wanting that to happen But the flip side of that switching off large sections of the web to prevent people using this could have many negative Consequences we don't want to balkanize the web any more than it already is Certainly don't want to switch off sections of the web to prevent people from using it for one purpose as opposed to another The web is going to be you know The enormous value that it has been largely because of of open access to it And the other element here that is about the sort of diversity of the ecosystem around machine learning and foundation model development is that we have to recognize that the barrier to entry is actually quite high and We don't want the situation where it is only the large system provided as the large platform vendors That can build foundation with us that have the access to data and the computational resource to develop models We need to work hard to create an egg I ecosystem that is diverse that allows individuals or smaller communities to access to participate To take the technology in directions that are that are different that are perhaps counter to what some of the large Organizations are doing how we do that I think is still an open question and it's not one that is going to be necessarily straight forward to solve But particularly I think that there is a value in focusing on that data access Point and making sure that everyone gets access to the same data to train their models At least that's something that we probably can control where the parameters that goes into the Particular models and how they are developed Perhaps will always be a bit less transparent And we we need to be really careful about the language that we're using here when we talk about an open ML model What do we actually mean? Now the second Changing in focus. I think the second second force that we need to worry about is a focus on regulatory on regulatory insights and Regulatory access to software development is a reflection of the modern world that we live in the modern world is very much driven By software systems you think about you know the many activities you do During your day-to-day lives many of them are controlled by software systems that are by their very nature complex and complicated or multifaceted and have very long and complicated Mechanisms behind them Unsurprisingly a policy makers and regulators want to understand how this works and wants to be able to regulate that A bit more than they have done in the past because we've seen where you know Harm has come to individuals to organizations where software systems have failed In Europe, particularly, I think this has come to the fore with the emergence of the cyber security resilient act And in many ways this has introduced this idea of accountability for code creation You know the old software development License common Term of you know, no warranty is is no longer Accessible I guess it's no longer acceptable to policy makers But you no longer acceptable to individuals who may be impacted or by a software that doesn't work or ends up with providing Decisions that are difficult to understand or not transparent Software development working in technology is my day job. My real passion though is actually in aviation I am an aviation if he's an ab geek and I want to draw a parallel Between the software industry and the aviation industry in the early days of the aviation industry These are the Wright brothers everyone was an artisan. These guys ran a Bicycle shop they built bicycles and from their experience moved from building bicycles to building aircraft the right flyer in 1903 now it's In many ways, you know, they were perceived as as artisans. They were craftsman. They knew their trade They built what they did and to be honest, there wasn't a huge warranty with their air product initially They killed many of their customers because this was an emerging field and everyone knew the risk that it was associated with the early days of flight, but very rapidly That had to change people had to become as Manufacturers of aircraft much more responsible for what they did processes had to be implemented that controlled Managed the construction of aircraft. I am working with a team at this point in time who are building a a spitfire and and this is a Photo of the workshop very much like any other workshop you could see with individual components of a spitfire that are hand-built by rolling Aircraft grade aluminium But you can see there are little yellow labels inside the plastic bags that contain the various components And they document the construction of that particular component by the person that built it and by the supervisor the chapter So, you know, I guess drawing the analogy in the old days, but you used to be able to develop software Anonymously that came with no warranty That's no longer going to be relevant in the age of things like the CRA We will have to have that similar level of documentation With what we do there's a fundamental infrastructure by which we build Software is changing in the same way that the infrastructure that build aircraft is changing Likewise the modern industry as you'd expect is is is highly regulated Quality and responsibility will become and like they are in the aviation industry pillars of how we operate And this is where that overlap with the open-source community. I think operate works at the same time How do we make sure that? This increase the requirement for documentation It means that we can carry on without the Software industry being buried under requirements to develop lots more Technology lots more process to allow us to develop software We're going to need to create some sort of a compromise to allow us to do that But but I'm sure we will be able to to move forward part of that I guess Comes with the recognition that you know, there is a new landscape here We need to recognize the fact that we will need to work much more closely with legislators And in the past we can see examples where that hasn't necessarily work Well, it hasn't been a good communication between trained technologists software developers and legislators Key example of this is the equal regulation. You may Be aware that there is a button in your car in Europe Particularly because the legislation requires it that you compress and you will be put in touch automatically with the emergency services and the The car will share information with those emergency services about your location and so on The legislation was very prescriptive when it was written and it required the cars to Communicate using a 3g cellular network as you'll be aware perhaps those 3d networks are being currently switched off But yet you can buy a brand-new car today and it will have a 3g based equal system Even though that system is not likely to operate when you take the car out And that's an example of poor legislation where the communication broke down between the technologists and the legislators The idea was was absolutely right But it was it was poorly crafted what we want to make sure is that doesn't happen in the future And to do that we need to be in the room where it happens We need to be active Participants in these communications and I think to be honest around CRA perhaps we allowed the Discussion to Billy become a bit too confrontational And I think to keep the open source ecosystem healthy. We need to be active participants often that means meeting in rooms like this one with no windows and Going through perhaps some quite dry discussion, but I think we need to be active participants What is Google's role here? Well, we remain committed to open source we remain Wanting to be stewards of the open source ethos. You know, we have had some challenges in terms of How we're able to do this over the past year But we'll we'll keep on moving forward or keep committing to things like summer of code But we need your help as well We need you to be active participants in these discussions There is going to be a requirement to talk much more probably with legislators as that focus looks on AI and and and software from a perspective of Control in some ways, but we need to be part of that debate. So we need you to be participants Participate in whatever communities you feel comfortable with and I think the the interesting part of this debate over the last Year or so is that there's been quite a diversity of discussion. There are many different groups talking about this There is a lot of political visibility of this and it's important for us to To be active participants with the rationale with the idea behind it that we want to keep a diverse ecosystem where as much of Access to this is is is open as is possible So look up and keep up with the software and foundations as they emerge in this space Be active participants in the mailing list reach out to the academics who are looking at this And yes, Google does have some interest in this space look at things like ML Commons where we're trying to develop And a common approach for training data sets for machine learning But increasingly I think you know the the message I want to communicate is let's move forward together You know, we are a big player here. We have some Abilities that perhaps individuals smaller contributors don't have in terms of talking to legislators But but we want to understand the broad view of the ecosystem in this space Well, we don't want the the the process to become too bureaucratic to Driven only by by the large vendors. We want an ecosystem that is healthy moving forward So do keep in touch do be vocal in your views But do sorry no constructive fashion as I said I think a key change in our industry is that we are going to end up talking to Allegiance way to two policy makers much more than we have done in the past Whether that's done as individuals that's going to be really difficult So perhaps work with the foundations with the organizations that you feel best represent you Moving forward and and we will be as as active in participating in that process as we possibly can be So once again, thank you for your attention. I'm sorry. I couldn't make the conference in Bilbao Although I did get to the airport. So the aviation enthusiast of me tick that box, but it wasn't really the same So, thank you very much for listening. I look forward to hearing any Comments any questions you might have get back to me via my email or via social media And once again, thanks for your attention


What's going on everyone Sam here with late in sports cards rip in 10 box Tuesdays 10 box prism treasures basketball makes a number 152 random team style There's a look again at your random results as always you can find those on the website under the results tab as well as the link in chat Good luck here everybody ten perfect. Let's start with do our prism drafts first here One prism draft hobby, so we'll start with prism draft hobby Again any guy who has no NBA affiliation will be random to everybody at the end There's multiples. It'll just be an order of how we pull them basically Life a little easier Draft hobby first. Good luck. Silver Terry Eason rookie blue.  I think he was ever anywhere. There's just in NCAA international So I'll be a random call at the end of Mike Akaru to 75 blue ice Anthony Edwards nice one there Bill Russell blue dice Daniels Dwayne Wade Bari Walker shade on sharp silver Tatum blue ice David McCormack Sensational signatures. I think he's somewhere Yeah, see oh Minnesota Minnesota summer league, so I don't go to the Timberwolves Just have any five Jeremy Sohan Jaa Hyper Gravia base Mar patch Baldwin Silver Kendall Brown Silverado Lucas Williamson for Loyola, Chicago Lucas Williamson Ontario Clippers, so that'll be going to the Clippers It's the same one. Yep That'll go Clippers Lucas Williamson, Scotty Barnes, Hyper, Lonzo, Snakeskin, Rated Prospect, Hallel Ware, Silver Jadon Ivey Harry and Jabari Smith Oomanga Steph Curry Calling to the Warriors on the manga Congrats on that. That is fantastic Steph Curry manga. Don't think we pulled a Steph manga yet. That's sweet Colin Gillespie, I think he's Denver. I'm like 99% sure he's Denver. Yep Denver Nuggets Denver Nuggets for Colin Gillespie Scotty Pippin Jr. What's the score of the Hawks game? Benedict Matheran Terry Eason. What's the score Patrick and Orlando Robinson. Let's do prism draft choice now He is Denver the Nuggets 106 119 Yeah, we're watching the the Knicks calves. Oh, final. Oh, well No, not shocking that they lost both in Boston. I will say that Shade on sharp DeMar DeRozan and David Robinson Silver Lonzo and silver at Johnny Davis rookie Got 24 of 88 PJ Hall for Clemson PJ Hall Don't think he is anywhere Yep, still at Clemson. So it'll be a random as well So the way it'll work is well when we're doing the random The first team will get the Akaru and the second will get the PJ Hall. So that'll be a random Got nice green scope Nicola Jovic two of eight for the heat and Red scope Kennedy Chandler to 88 Let's do origins each to hybrid now Origins each to pull Snake eyes or something How do you have to do another parlay? Power saver mode Phone auto out of this Like one or two autos a case generally Like Wesley Wiggins. There's Jalen Green to 115 catapults. Zach would be Big bang look at dodge it on the case hit. There you go mabs. Let's go Congrats Dallas Jeff M Big bang Luca.  All right, that'll be the end of Origins age suits do elite Next a very solid mixer so far for sure the box NT at the end of this which is gonna be fun. That is gonna be a Rich Hamilton nice, but a pistons nice rip there Richard Hamilton Yukon legend rip Hamilton very nice pals be sweet.  You just got jingled in that last pack Orange Deandre Hunter There's Jaden Hardy rookie the maps our phone is deer and Fox Spellbound ant-man base Orange James Harden power formulas face up Lake Wesley on the orange nevermind Orange rookie upside down bleep buddy healed 97 of 99 for the Pacers. There is a So Kyle Guy Shade on sharp class of 22 auto nice one there on the yearbook going to the Blazers So Kyle Guy and buddy healed used to both be on the Kings at the same time Someone made this little drawing of like there's like a little cartoon characters of them like standing Like one on one end and one on the other and one of them was One of them was like I'm not your guy, buddy Your buddy guy Orange Julius Randall and we're all the comments were like I could just look at this all day Full throttle Steph rookie Jeremy Sohan Buddy Riga power formulas lamellable orange star status KD Bet you are a basketball player was not after my eighth grade year. I was no longer a basketball My turn my 13th birthday I was no longer a talented at baseball. I read basketball or baseball Let's do I guess so that's what that's people have been saying RJ Barry Murray first steps Jane and Ivy to 149 pistons Nice one there got to 49 second-year auto Josh Christopher on the master strokes for the Rockets Josh Christopher and J-dub rookie expression Jersey card For the Thunder nice one there Jalen Williams got a Lake Wesson My shoes My shoes Jimmy Butler like Wesley and tie-tie Washington. No, I was not good. I mean I was okay. I Wasn't bad. I was I was a role player, dude. I knew my role like I Did what you asked me to do 22 23. You just go around set the screen for everybody pretty much I'm her this one time my sixth grade year. I'll never forget this There's this kid that just pissed me off on the other team. He's just super annoying and like It was like 10 seconds left in the game and like there was like They were up by like 20 and this kid was I guess he was pissed off because he fouled me really hard and Like off the ball like I passed it and he like grabbed me and like and he got called on off the ball foul And then he started like celebrating so I got I'm not messing with that So we ran like a play where I was good to go set a screen and I hit him in like the throat I hit him as hard as I could in the throat like we were coming around so I boom like that sent him right to the ground I was like, yep, that's what you that's what you get. Yeah Yep, very happy with that Ray Jean Rondo Jabari Smith rookie Jabari Walker on card rookie auto for the Blazers Because it's like it's one thing if you commit a foul when you're down really late in the game It's another thing to celebrate committing a foul It's like really dude like when you kick someone's stomach, right? Exactly. There's Lou d'Orte 275 rather stop Right exactly J. Nivee lottery ticket. Hey, Dave. It's variation. Nice one there. Yeah, it's some sort of numbered auto coming up here Jalen Duran It's gonna be a Paul Pierce 46 of 49 there he goes Celtics really cool the truth Boston is gonna be where they at Minsoo K there you go Minsoo nice one there, buddy Nice Paul Pierce base and base to 190 Superstars ant-man Actually cool in the football mixers today. We have prison team all from last year and we have Chronicles hobby Oh, I was gonna say I know that's like one of your favorites We pull a 101 luminance update. I'll be 21 22 Contenders optic. Good luck everybody. This is a red Herbert Jones. I don't think red Herbert Jones rookie Pick-and-roll Anthony Davis and LeBron not numbered for the Lakers red ice all-star impression Zach Levine Silver Jalen Brunson and auto Isaiah Thomas nice Zeke to 99 for the Pistons very cool The Jerry contenders part of the bad boys probably the head of the bad boys Hey, him and Jordan hated each other Hated to this day still hate each other 21 22 prison. Yeah throwback autos are sweet I love when we pull some throwbacks Pierce on card. Let me get a the next box. We get a Isaiah Thomas That is red waves a beer Tillman hyper draws in Petrovic Pressing peace Dude apparently the you know the game NBA Jam, right? Yeah silver Jimmy Butler blue ice Kyle Anderson, so you want one of them, right? But there's like apparently there's like this theory that it's haunted It's from Wagner. Yeah, because there's been multiple developers and multiple people that so Jocelyn Petrovic She was like pretty super star like Hampton Porter like pretty good player in the like 80s 90s and died in a car accident like super young while I was still playing And he was in the game. He was in NBA Jam Herbert Jones Kendrick Nunn wasn't like every NBA superstar Yeah, no, I know but he was he was in it basically and Again, I don't know if I'm getting all the details of the story a hundred percent correct But I saw like a tick tock on it and there's been like multiple people that say like the game will just turn itself on and like the Announcer will just say draws in Petrovic over and over and over and over again. Yeah, it's really weird silver Isaiah Jackson rookie for the Pacers orange wave Isaiah Todd to 60 rookie for the Wizards As they would just put their camera in front of their council and just like I think so I think there's videos of it, but I don't know again. I just saw a tick tock I didn't really I just watched a two-minute tick tock on it. I was like, oh, it's pretty interesting pretty weird, but Red wave Kemble Walker purple ice the 149 tomorrow to Rosen for the Bulls Luca Sondra is a Cade rookie. There's a Dwayne Wade Pulsar won per box Blue Carmelo Anthony to 199 Garuba Moses moody Silver Derrick Brooks Hyper Robin Lopez Trace over Hyper at Darius Garland on Pokeshepski got another game at ten, which is good Red Drew Holliday to 299 KD Avion and treats me grady. There's our first thought of good Red to 299 Robert Williams the outs clipper sons. Never mind not even close To 299 for the seas Brandon Boston jr. Rookie Otto sensational signatures nice one there LF Shreve Goober Cam Thomas rookie silver Chris Middleton Silver James Wiseman frismatic ball George fireworks Scotty Barnes rookie on the back. All right last pack. Good. We do have our beautiful Silver Devontae Graham silver Davion Mitchell and we've got a Kessler Edwards rookie Otto for the Nets It's one there Brooklyn as a Jackson and draws in at Petrovich All right 22 23 prism hobby now, and then we'll finish with 21 22 NT Dave Kandavius called will hope hyper Russ Benedict Matt right Ty's Jones Caleb Houston. It's like a big gold out of this red Jalen Brunson to 299 for the Knicks Hispanic Ant-Man hyper Nicola Yolkich going to the Nuggets Marjano Bochamp silver fearless kawaii Richardson shade on sharp Ingram Silver fireworks, Yannis a silver Vince Williams jr. Rookie for the Gris Jaden Hardy Rookie and Down Terry Bulls got an auto in here red Tyrese Martin Rookie for the Hawks to 299. We've got Musa Diabat say Rookie sensational or rookie signatures for the Clippers. I just won their LA Rook Lopez hyper Chet Oaks main Jang AI luck a lottery Johnny Davis is a hyper magic Lakers base Evan Wobbly is three or four He's four there's Garland silver bones Tyrese Martin and Redway Kenyon Martin jr. For the Rocks Prismatic and be silver Derris Basley Christie Nemhardt and Liddell on the back All rookies Blue to 199 Jalen Green second year for the Rockets nice one there Houston we've got Jalen Johnson as well on the second year for the Hawks Signatures nice one there at Lanza Pulsar Isaac Cora Tray Jones, Ochai Bahi and Kendall Brown Peyton Watson Rookie for the Nuggets Modric Nobly Lou Dort on the hyper as well J. Nivea Rookie nice one there Zion Robinson. There's a purple jaw to 99 very cool 59 of 99 for the grids niggas look at your fireworks silver Drew Holliday Jabari Smith Rookie Wilts and a tie tie for Rockets Rooks in there and last pack of prison That ourselves a blue ice of Cody Barton to 125 for the points Yonah's fireworks silver Denny of Dia Garnett Jalen how ya Duran For the pistons all right That'll do it for prism. We're on to 2122 and key. Good luck guys. Let's do it Called a hundred 102 and 60 this season. I mean if everybody like plays to their full potential and everybody stays healthy They're a good team. Like I wouldn't shock me But again, it's staying healthy for their uh What's it called for the Rangers is what's gonna make or break them Barley Anthony Towns five of 75 For the T Wolves got printing play for the Hawks treyum From Flawless 2021 Flawless. Nice one Hawks Treyum Bochi Bochi is the man. I love Bruce Bochi. He's a stud Jalen Brown that is 98 of 99 On the materials for the Celtics game used Nice one here 7 of 25 is going to be the fro Jersey Treasures Cavaliers This next one is going to be a random. That's actually pretty cool Uh, this is going to be 14 of 25 autographs dual That is going to be uh, John Wall and Kyrie Irving So that'll be a random between the Rockets and the Nets nice one there Rockets is Sea Chan and Nets Shakila B That's pretty sick, dude I like it. I like it a lot. We're gonna have rookie patch auto nba 75th anniversary Miles McBride Uh, that'll be going to the Knicks Miles McBride nice one there at New York NYK god Rudy Gobert uh 68 of 99 For the jazz Yes, this is NT right here He is the God, why can't I think of it? Uh, Nick's uh material treasures 65 nine on Nicola Busevich We've got a pretty cool one here That is going to be lasting legacies 12 of 25 Terry Cummins for the supersonic. So that'll be going to the thunder Should be game worn right there. Yep game used Game used and it finishes off. We got going to the Knicks nine of ten Raymond Felton This one there in New York. All right empty empty got a couple of randoms to do I'm gonna start off with our college cards. Yeah, we've got Mike, uh, Akaru and PJ Hall and then we've got the random between the Rockets and the Nets for the John Wall and um What's it called the John Wall and Kyrie? All right, we'll start with the college cards again guys gonna roll the dice whatever team is on top After five times we'll get the Mike Akaru. Whatever team is second. We'll get PJ Hall So good luck here guys five times one two three four and five uh Pacers getting Akaru And the Knicks are getting uh PJ Hall We'll go over here. We're gonna roll the dice on the John Wall and Kyrie Irving duel Again four times whatever teams on top we'll get it one two three and four go into the Rockets Rockets getting the Kyrie and John Wall duel Let's do a quick recap guys We've got Trey Young, Rudy Gobert, Nicola Busevich, Jared Allen, Jalen Brown, Jalen Williams, Raymond Felton, Terry Cummings Miles McBride, a Jalen Johnson, Musa Diabate, Castle Redwards, Brandon Boston, Jr. Isaiah Thomas, Paul Pierce Jabari Walker, Josh Christopher There's also a Shadon Sharp Rip Hamilton, Colin Gillespie, Lucas Williamson, David McCormack We had the Big Bang of Luca Doncic For the Mavs and then a Steph Curry manga The Warriors gotta do it for the break guys. Thanks again for the fill next up. We've got football


Okay, we're back, we're live on a Friday afternoon, relaxing ourselves here at ThinkTech and talking to our old friend, Kartake Mishra, who lives in Varanasi, India, which is the northern part of India along the Ganges River. You've all seen pictures of it and he joins us from time to time to talk about things that happen in Varanasi and in the northern part of India and in India and in the world. He's very worldly. He's a student at one of the universities in Varanasi. Welcome back to the show, Kartake. Thank you. It's nice to have you with us. I want to tell you a story before we go too far. You know, here in ThinkTech, we use Adobe products. You know, Adobe and our editing software is Adobe Software. Well, you know, some of the support centers for Adobe are in India and they feature Indian support agents. I'm not sure where in India. So if you call Adobe and you want technical support, they will connect you with people in the support center in India. Well, the people in Adobe have been watching you and me. And the last time I called them, they had a whole bunch of people in the support center wanting to get on the phone and say hi because they thought that ThinkTech has a great connection with India and with a fellow named Kartake Mishra. So you are famous Kartake. They know you in Adobe, a global corporation. How about that? I don't know. The thing is, Adobe is in cinema. So Adobe is in cinema and Adobe is in soundtrack or something is in theater. We use that in movies. Adobe is to you. They may be watching us now, you know. Anyway, I wanted to cover a few things with you just to take your temperature, take India's temperature and things that are going on. And India certainly is an active global player. And Mr. Modi is very active indeed these days. And one of the things that you mentioned to me when we spoke before was that he had had a visit with Premier Macron from France, President Macron from France. And that took place, what, in Varanasi. How about that? Can you talk about it? It was one of the most brilliant visits we have in the last two years. In 2015, Prime Minister of Japan, Suniru Abe, came with Prime Minister Modi to Varanasi and then Macron is coming to Varanasi. Or I should say he came to Varanasi and he stayed here for a day, I think. And it was like celebrations throughout the cities when he was visiting the city, cut out posters, welcome chants everywhere, people holding a plaque for France and India, welcoming Prime Minister Modi and President Macron. So what do people think of President Macron? I mean, after all, there was a big fight about, shall France go to the left or go to the right? Shall they become repressive with regard to the migrants in Europe? Or shall they be more liberal with Macron? What do people in Varanasi, what do people in India, what do you think about Macron? I think Macron is liberal and I personally believe that the liberal policies of Minister Macron is quite good for India and for European Union also. And he said that India should choose France as the new doorstep for the European Union. And France is the ninth largest foreign investor in India in terms of money. And India is the 30th largest investor in France. So, Mr. Macron was hoping more investments in France and to increase that number from 30 to 1st of second, I think, in terms of investment from India to France. So, you know, what is, is Mr. Modi is creating these international relationships, isn't he? He's very open, he's outward. He's talking with everyone, even Trump, I suppose. He's talking with China, he's talking with Xi Jinping and I want to discuss that with you. And he's talking with Europe. How do you see this? How does the average Indian see this as Mr. Modi's initiative to connect with the world? India is becoming a diplomatic power right now, isn't it? Yes, it is. And I think it is the success of Prime Minister Modi that in foreign front or in foreign policy, he is very successful and quite admired by the people of India. But every nation he visits is a huge progress in India, media house is talking about it. And foreign relations are something that is very interesting from the point of view of India, I think. And he visited US also, he visited France also in 2015, and he visited many nations. So, in foreign front, he's quite active and quite successful in India and people admire him a lot. Yeah. Well, you know, Europe has changed, of course. And India is interested in that because it affects India directly or indirectly. And Europe has problems now with the migrants, it has problems with sort of a turning right. We saw how hard Angela Merkel had to work in order to retain her majority in the German parliament. And we see, you know, changes in Europe that are a little bit troublesome. And I just wonder what you and what Indian people in general think of the trouble in Europe. Does this give you concern? It's a bit of a concern, migrant crisis in Europe. It was quite famous in India why people were moving away from Iraq's period to Europe. And I know that. And Ailam Kurdi's photo was quite famous in India. The boy dying on the beach, a dead body on the beach. We saw that crisis, migrant crisis. And it's quite clear that people want to help somehow or the other way. India is far away from Middle East, I should say. So they moved to Europe, but there is a lot of sympathy for Syrian people from India and Iraqi people from India. Sure. They're fighting more by looking for this. Yeah. Well, I mean, right now you're having a bit of a contention with Pakistan over the internet. I don't know if you've noticed that. I saw that when I looked up Google News on India, and Pakistan has built a wall around the, about the internet, which I take it is not a good thing. And I wonder what, you know, what the average Indian thinks about the relationship of India and Pakistan, especially a view of the fact that Pakistan has been blamed with it being a harbor for terrorist activities. It's quite clear that India does not have a very good relationship with Pakistan. We went on with three conventional walks in 48, in 1955, in 1971, and one major conflict in 1999. So we have three or four walks to Pakistan. So it can tell you a lot how much relations which we are having with Pakistan. And proxy walks are supported by Pakistan and Kashmir. We know that the Bay Harbor terrorist or cross-border terrorism. And it is affecting Afghanistan also. Pakistan's terrorism is not just against India. It's just against all the people who are neighboring Pakistan and China somehow supports Pakistan. When you have said that Pakistan is harboring terrorism and Pakistan should do more, China says that Pakistan has sacrificed a lot. The US should praise Pakistan. But the fact is Pakistan is not doing a lot against terrorism. Now that's really too bad because it's in a position geographically to do a lot against terrorism given Central Asia. But you mentioned China and I do want to have a discussion with you about China because people say in this country that it's not only that Xi Jinping wants to be president for life, but that this affects world opinion. It affects world opinion about the emergence of dictators, especially in a country that's a democratic country like India. And if I were in India, I would expect that people in India would not like to hear about dictatorships because you work so hard to preserve your democracy, to express your democracy, one of the great democracies in the world. So when he elects himself president for life and emerges as a strongman and a dictator reducing human rights, reducing civil rights all over the country in so many ways on a daily basis, that would give the average Indian some concern, does it? Yes, it is. Because in India there is no qualification like that. You can't say president of Prime Minister for life if you are democratically elected by the people of India, no problem. But if you declare that you want to stay in power for life, that's a very big problem, I think. And it's quite, I would say, communist in nature again, that China believes or tries to say that this is the area of influence of China. China is building so much projects to help the nation. But I believe that China is trying to capture nations in depth by providing them alone at 7% or 8% by providing belt and road initiative, which we do not support in India. It strikes me you're in an interesting spot. Because just as a matter of your national character, you're not inclined to support a dictator. And certainly Xi Jinping is emerging as just that. At the same time, you have an interest in maintaining good relations with China. It's a very powerful country just near your border. And it's involved in the One Belt, One Road initiative going from China to Europe. So you're there. You're there geographically. You're in the middle of things. So you have a kind of dilemma because you want to remain democratic, but you also want to succeed in your own geographical area. And then, of course, we have Mr. Trump, who is unpredictable. And so where do you fit? Where does that fit in terms of India's relationship with the U.S. as opposed to its relationship with China? I'm not saying you have to make a choice, but I'm saying that India must figure out a way diplomatically to handle the challenges on both ends of that. I have a two-part answer for that. One thing, China is one of the largest trading partners with India. Around 80 billion U.S. dollars we trade. And for the U.S., I would say, U.S. and India are having quite different relationships with, I would say, with China. If we take three nations, U.S. and India, I think U.S. and India can cooperate together because of democracy. They think similar. They are promoters of liberty. And China is a bit of a dictator in this region. Trying to say that that's South China Sea. It's area of influence. And all the areas which in China is working is actually quite a bit problem. In Djibouti, China is making a military base. In Maldives, China said to India that India should not interfere in Maldives crisis. There was an emergency or a problem in Maldives regarding the current ruling government. And India is not interfering in that. But China says that India is not at any cost to interfere in Maldives. And it also says that it does not want any other clash point with India in this particular region. So what I get is China is very aggressive and it's one belt, one road. It's not just economic. It's not just transportation. It's not just outreach. It includes military strategies and tactics and advances and getting advantages. It's military outreach in many ways. And that includes on your borders. It should give you great concern to see that happen. It should give you great concern to see what's happening in the South China Seas. So how does India deal with that? How does India maintain a relationship where it doesn't feel that China is ready for an incursion on its borders? India and China both know the fact that they can't live without each other. China can't replace India and India can't replace China. So it is a kind of relation which we have sweet points sometimes in climate, sometimes in issues which we can cooperate with China and on which Trump is having a different opinion. Say for example, by the various climate events and trade and he moved away from that trade treaty. And that's all the things in which India and China are having similar thoughts. But when it comes to the idea of influence, China and India are quite different. India focuses on software influence through diplomatic means, through social or cultural means. China focuses on economic, much more aggressive in a tradeful manner to influence the country's culture, or I would say in simple terms, of a nation. Well let's take a short break and we'll take one minute off if you don't mind, Carnegie, we do that. And we'll come back in one minute. When we come back, I want to ask you about how the North Korea-South Korea issue affects your thinking and the thinking of the average Indian person over, what do you call it, security in Asia-Pacific. We'll be right back with Carnegie Mishra in Varanasi, India. Aloha, I'm Kili Akina and I'm here every other week on Mondays at 2 o'clock p.m. on Think Tech Hawaii's Hawaii Together. In Hawaii Together we talk with some of the most fascinating people in the islands about working together. Working together for a better economy, government and society. So I invite you into our conversation every other Monday at 2 p.m. on Think Tech Hawaii Broadcast Network. Join us for Hawaii Together. I'm Kili Akina. Aloha. Hi, I'm Pete McGinnis-Mark and every Monday at 1 o'clock I'm the host of Think Tech Hawaii's Research in Munna. And at that program we bring to you a whole range of new scientific results from the university, ranging from everything from exploring the solar system to looking at the earth from space, going underwater, talking about earthquakes and volcanoes, and other things which have a direct relevance not only to Hawaii but also to our economy. So please try and join me 1 o'clock on a Monday afternoon to Think Tech Hawaii's Research in Munna and see you then. Okay, we're back with Carnegie Mishra in Varanasi, India. And we're talking about how Indian people feel, how he feels about the things that have taken place in the world, you know, respecting the fact that India is a global nation more and more all the time. So one of the things that's happened here in Hawaii, if I didn't mention it to you before, Carnegie, is that we had a false alarm and the local government, by mistake sent a message to everybody in the state of Hawaii telling him that there were ICBM missiles en route to Hawaii and that everyone should take cover. And they said this was not a drill. It was just a mistake but not a drill. So what happened is everybody took cover and worried and got all excited about it. And it got resolved although there's a political controversy about it now. Bottom line is people in Hawaii are afraid. And I guess some of the people on the west coast are afraid. And it shows you that we live in a time when nuclear attack is possible and considered by some leaders. So here we also have an unprecedented meeting between Donald Trump and Kim Jong-un to take place between April and May. Nobody's sure that it will take place or that it will be successful. But I wonder how closely you're following all this. I wonder how closely the average Indian person is following all this. I wonder what Mr. Modi has said to the public. I wonder how people in India feel about the problem with North Korea. Can you talk about it? I can talk about it. First of all last time I said that issues would be resolved between North Korea and America. I was hopeful and this was happening and this will happen. I think President Trump will meet with Kim Jong-un. And again I would say in India North Korea and India do have diplomatic ties and they are only limited to aid medicine and food providing necessities which North Korea requires. And we are having diplomatic ties with North Korea just due to the fact that Pakistan and China also have ties with North Korea. And that's the sole reason in North Korea as a diplomatic partner. And I believe that diplomatic channels are always successful for handling the issues between the nations. And in India we know that, Mr. Modi knows that trade would be restricted to the necessities to the medicines and food facilities which is required by North Korea, nothing else would be provided to them. And people are thinking that this meeting between America and North Korea would ease down the tension between these two nations and recently I knew that in South Korea both the nations North Korea and South Korea played under the United flag as the United Korea. So these are all things that I think are hopeful and we should be hopeful that things will ease down between the nations of all these strategic reasons. Yeah, well that's good. I didn't realize that you had. So you as an Indian citizen assuming you had the time and money would you be interested in flying North Korea and taking a walk around being a tourist there? Diplomatic relations with North Korea if things ease down, if things and tariffs are removed, if North Korea stops doing nuclear tests and missile tests and there is a possibility that Indian tourists may go to North Korea, there is a possibility we can't ignore that. Yeah, interesting. I mean I know some Americans who have been to North Korea multiple times and are sympathetic with the North Korean people though not with the government and I really wonder if this is a controversy that is exaggerated in some ways by the personal comments that have been made by President Trump and Kim Jong-un and I want to turn attention if I may to how the Indian people and how Premier Modi feel about President Trump these days. I asked you that before and I recall that your answer was not altogether negative that you felt that he had a certain value to offer and that being a strong leader was beneficial at least in the minds of some Indians. Has anything happened that would change? For example, he has interposed tariffs, serious tariffs on steel I want to say it's 25% on steel and 10% on aluminum entering the United States there's quite a controversy about whether those are appropriate tariffs and whether tariffs like that are appropriate these days. Some of our allies in Europe have spoken out against it. I don't know whether India is affected by it. I don't know how much steel you're importing or exporting to the United States or aluminum for that matter. But I wonder what people's reaction is toward tariffs to trade that way. We've had several moves by this administration to limit trade agreements to drop out of various regional trade agreements and I wonder how India feels about trade and about the United States and about Trump these days. Okay. I think Trump wants to start a trade war with nations and that's fruitful for the United States I believe that. Tariff implementation can cause a serious trade issues with different allies of the United States itself and Trump is focusing on India that India is not reducing tariffs on American products in India. But the situation is not like that even if we reduce the tariffs on India on American products they are still enough for a common Indian to purchase. If you want to reduce the tariff it would be less and that's quite a lot of amount of money in India. But I believe that trade issues should be with all the leaders at a forum that how issues of trade can be solved by the different leaders at a common point having a common tariff throughout the nation which will be acceptable by each and every member nation. We have G20, G8 that's not fully functional it should be much more inclusive at least 40 to 50 nations should be included in that and each nation should work. We have a world trade organization but people generally do not listen to that would be you I know that. That's another issue but I think trade issues can be solved. Well yeah and one other thing I want to ask you about is not unrelated is the question of immigration in the United States you know we've had foreign policy. Myself I just came back from a trip to Australia and in Australia in the last few years they have opened their immigration wide wide open and they have a very diverse population now and it's only happened in relatively recent years they have people from all over the world certainly from Asia all over Asia Southeast Asia India, Bangladesh Sri Lanka, Pakistan for that matter it's quite amazing what kind of a diverse population Australia has achieved in only a few years. But in the United States we seem to be shutting it down we're still interested in building that wall you don't see it in the paper all the time but the Trump administration is chasing immigrants all around and trying to deport them on a regular basis in large numbers and he has not yet backed off or otherwise found a resolution for the gamer issue about those those kids who were who came to the United States with their parents were illegal but very young and have lived here all their lives and now they're at risk of being sent away to countries they have never known and I wonder and let me add one other thing is that there are a lot of Indians in this country and they do well they're in school, they're in business they are constructive members of the society they're as American as anybody else and their success story and the other hand there is a white supremacy in this country and this white supremacy works against that and there have been racist attacks including one as I recall a fatal attack somewhere in the south which led an Indian doctor who was practicing in a hospital in the south to pick up sticks to leave the country with his wife and family although he was a successful doctor and take off because he didn't feel the United States was a friendly nation to him anymore so I wonder how Indians feel about this turn of events over the past year and you know whether it changes the perception of the average Indian about the United States okay I think that a lot of Indians are working in the United States everyone is working so it can be a very big concerning issue if the United States restricts the immigration but one thing which President Trump is doing is that he is working against illegal immigrants who have criminal records I think and that's the corrective action for the people of the United States so I can say that but from the point of view of an Indian in which I think Indians would be concerned due to the jobs we are doing in the United States and people are traveling to the United States for some of the other reasons and I think that illegal immigrants having criminal records should be dragged and action should be taken but when we are talking about people who are coming through direct route through legal routes to the United States should be taken in jobs different areas in which they are working and should be taken but whenever such kind of thing regarding Trump's policy come in Indian newspaper that Trump is taking measures against immigrants so there is a lot of concern about Indians what will happen to them so the kind of tension is there but we know that legal people who are traveling from the United States to the United States would not be harmed you do realize that to the extent that this administration says that it is that immigrants are largely criminals drug traffickers and other unattractive members of society that a lot of people disagree with his statements in that regard and there is a question as to whether his statements in that regard are true and really what most people feel most people I know feel is that he is excluding races and cultures and reducing diversity as fast as he can which of course is not a good thing for the economics or for the principles on which this country was founded does the average Indian recognize that I think Trump is racist to an extent we recognize that fact that some of his other policies are targeting towards the racist people and I think that last time when the Oscars were held all these people black Americans were wearing black dress and a kind of protest was there in Oscars and he commented on that also and so we know that a bit racist touches there to Donald Trump and we know that racism is having a very deep group history in the United States I know about it people of India may not because history of the United States is not that much taught in India I know that history that all the history of the United States how the United States were found natives first when Europe came they take actions against the native people of the United States then again African people were brought to the United States but there is a very long history of racism so we can't blame President Trump for whatever happening in the United States right now it has some historical and cultural reasons due to which he takes such actions I mentioned before Carnegie that every time I talk to you you seem to be more sophisticated and you look better in our connection sometimes we have interruptions in our connection but mostly these shows are better and better and I wonder if you have any thoughts about how participating in a show like this on think tech here in Hawaii in the United States has affected your way of thinking your way of looking at things your way of reading the newspaper have you had any personal experience involving that I think boost of confidence I would say shows like this on international arena I would say it is an international show I would say people of Hawaii are listening to me through radio through YouTube it is quite boosting and I know that I can get the point of view of an average American I think regarding what is happening in the US so it is quite interesting for me and quite interesting for people of Hawaii also I am glad we met Carnegie I look forward to doing this with you again in a few weeks and to finding out more about the dynamic between our two countries and more about India because I really want to know and a lot of people want to know and I also want to make sure that Adobe Systems is listening to us too okay thank you Carnegie Mishra and very nasty India thank you so much aloha


Got in combat. Got rogue out? Nice. Fidro, Fidro, mage. Yes, yes. MCS me, MCS me, get him bald. I stop, I stop, I stop. Yeah, yeah, yeah. I got the mind on, got the mind on for Shallon hard. He blocked it, he blocked it, dodged the sheep, good. Gage me, gage me, gage me. Can't. Okay, I can stop, I can stop me. Okay, okay, perfect, perfect. Yeah, it's Rheon to me and he can full blind me. Miss blind, blind me, miss blind me for Shallon. Okay. Nice, nice, nice, nice. I can blind no full. They go, they go me, they go me. We're on the mage and blind on rogue. Okay. Yeah, yeah, yeah, sure. You can click out, click out. Yeah, yeah, doing it, doing it. Nice, dude.


It's almost heading to a 0-0 really, they see not much in the game going towards injury time and we look so certain almost to snatch what would have been a as well as a deserved share of the spoils. Yeah, it's obviously makes it even harder to take and it's one bit of play throughout the whole game and it's been nothing, that's why it's hard to take because they've had one chance I think and scored one goal but it's a great bit of play for them. We've looked solid all game and not looked like getting in and then maybe that's why they're at the top of the table and when they're at the top we've got that bit of class and I think once we get that first win that'll be a little start doing that it's just a case of getting that first win and getting that three points and then after that it'll be a lot easier. I'm sure the lads will go to bed tonight but the game's still wearing in the head starting that disappointing frustration around. When you reflect on it can we take a lot of confidence, a lot of belief out of tonight's performance? Yeah, well I am. I'm taking confidence from it. I've felt like we've done as well as we could done against you know top side, not like they're a place you know the batter love teams and but we've matched, we've held our own and we've done well and we've stopped them for 98 minutes and you know we've not created much but we've worked hard and that's all we can take from it and you know as a game grew we got better at it and then but the gaffer has a style play the way he wants to play and it's clear now and we know everyone knows what they're doing, everyone knows their jobs and you know it's gonna help us now we've got a structure to play and so hopefully as I get three points a Monday.


It's almost here. What's up, money geeks? Mr. V here. Welcome to another video, guys. So in today's video, we are going to talk about Chica Symbol NIO NIO. So again, I've covered NIO here on the channel. I told you guys about what this company is about. The reason why I want us to really kind of take a deeper dive again into NIO is because NIO day is coming up. It's tomorrow for those of us that are in the United States. NIO day is less than 18 hours from happening. I don't know why they put NIO day on the weekend. I'm pretty sure just in case if things don't go as planned, their stock doesn't take a massive bidding. That's just my speculation, but I would love to have them do this during the weekday where you can actually trade the stock real time when their actual NIO day is happening. But that's just my take. So I'm going to jump in. I'm going to tell you what I think about NIO day, what to expect and kind of price projection, moving forward. But before we get started guys, we are new to the channel. We talk about how to end money, how to save money, how to invest and build wealth. So if that's something that interests you, go ahead and hit that subscribe button and any notification bell so you don't miss out on new content. So for those of you that don't quite know what NIO day is, this is a day where NIO actually goes out like Tesla do their battery day. NIO actually release new products and give us a direction where the company is going or the future of the company. So that is what NIO day does. It was supposed to be last year in December, but because of COVID, it got pushed to January of 2021 and specifically January 9th of 2021, which is tomorrow again guys. So key things I want you to be aware of for NIO day, what NIO is going to do is they're going to unveil their new sedan which is going to compete with Tesla. So I mean, think about it. They have had SUVs and now they're getting into the sedan space. And so a lot of people are speculating that this is directly to attack Tesla Model Y in China.  So that's something that I want to bring to you guys's attention. But not only are they unveiling this new sedan, they are also bringing in a lot of other things. So their battery is also getting kind of like a touch up. So if we go to NIO power, so NIO power is actually doing a ramp up wave. They are also improving their battery, so making it even better and then improving their swap stations. So for those of you that don't quite know, NIO has this thing called battery as a service where you can actually buy a NIO car and pay less but don't own the battery in the car. And then you can just subscribe, which is an excellent business model. You can subscribe and then they have all these battery swap station across the country or across town where you can pull up at any battery swap station and get a new battery for a monthly fee, which I think is a brilliant model. And so they are going to kind of show an improved version of their battery swap model. And as you can see here in this picture, this is like you just drive in and in under three minutes, they can completely swap your battery and give you a new one so you can go about your business. So I think that is a brilliant business move. So look forward to that battery as a service. I think NIO is the first one to do it. So they are leading that space. A lot of the things that NIO is working on, in my opinion, this company is holistic. They are not just selling your car. They want to sell you a lifestyle. That is what NIO is building in. If you can see, so they have a fan base, people that believe in the company. And I mean, from start to finish, they're a roadside assistant, all the other services. So they have lifetime services that you can actually sign up for once you buy a NIO car or a NIO SUV. And they are going to take everything, take care of everything that you need. If we look at what they call their worry free service package, just look at all the services here. Free repairs, free maintenance, free courtesy car, free cellular data boost, free insurance.  So this is a lifestyle. Once you get the car, it impacts all that aspect of your life. So that's something that I'm super excited about. But NIO also plan on actually building even like a cheaper version of their cars because they actually signed a contract with CATL to actually get a cheaper version of the batteries. The batteries are gonna last longer, but a little bit cheaper. So they want to use this and put it in their car so that they can provide their customers even more of a cheaper car. So again, NIO is onto something in my personal opinion. Again, this is the battery swap station you can see here. It's designed, this thing comes like a box.  I mean, like this company is innovative in my opinion. And so what does this mean for you and me as investors, right? That probably the question that everyone's asking right now. Where do we go from here? My personal projection here with NIO. So as of when we were doing this video, NIO was actually trading at about $58 and some change. So if everything goes as planned and they actually hit the ball out of the park per se in terms of the delivery for NIO Day, I anticipate that on Monday morning, this thing is gonna open over $60 and even go as far as testing $70. From a long-term perspective, it's, to me, I see it at 100 and 110 price point for NIO because of just the way they are growing and how they are really making their customers feel comfortable in expanding their businesses. Not just sticking with like, hey, we just sell cars. Nope, they sell cars, they sell a lifestyle which is more than just selling cars. So that's what I think. So one of the two ways that we can actually attack NIO here, the fact that this is happening over the weekend, if you want to speculate and buy and hold so that you think Monday morning, the price is gonna go up, that would be a risky speculation in my opinion because if you see what Tesla did in the past where if you went into Tesla, Tesla came out, numbers were good, everything was good, but yet the price of the stock still took a beating. And so I don't know if that would be a smart move. For people that already have NIO, you don't have to worry about anything. Just, I mean, you just let it right. For people that are looking to get in or if you're looking to swing NIO, you can wait, if you trade using Weibo, you can buy NIO at 3 a.m. in the morning, central time so you can figure it out if you're Eastern or Pacific times or you can figure out the times, but 3 a.m. my time, that's when the market opens and you can catch NIO then. At that point you see if it's gonna be going up or going down that you can decide to get into the stock. So that's the way I'm gonna play, but basically for this particular video, I just wanna let you guys know that NIO is having a NIO day tomorrow and they are unveiling a ton of things which I call catalyst. New sedan, that's huge. New batteries, that's huge. They're talking about, you know, their battery as a service expansion, that's huge, new contracts to actually expand the battery as a service to other parts of China which I think that's good. So I'm still bullish on NIO and I'm gonna be looking forward to these things spiking Monday morning after, you know, a NIO day tomorrow. So I'll keep an eye on it and just for you to understand, keep an eye, read about what happens tomorrow because if NIO gets some really good feedback from everybody from the analysts, if they say NIO knocked it out of the ball pack and they expect NIO to jump to over 70 on Monday morning but if we just hype for nothing and then expect NIO to either stay there or even pull back before squeezing back up. So that'll be my take. Again, guys, if you're new to the channel, we talk about how to end money, how to save money, how to invest and build wealth. So that's something that interests you. Go ahead and hit that subscribe button and your notification bell too. You don't miss out on new content. Also, if you're looking to get started with investing guys, we mostly have their promotion. Now if you sign up and deposit 100 dollars, you'll get four free stocks. Links in the description below. And as always, do your homework. Always do your due diligence.