AJ_O’NEILL: Yo, yo, yo, I'm coming at you live from secret undisclosed location and my mountain fortress.
STEVE_EDWARDS: And Dan Shapir coming from Tel Aviv, Israel. How you doing, Dan?
DAN_SHAPPIR: I'm doing well. Springtime here, and aside from some minor allergies, it's pretty nice weather. So enjoying myself. AJ, new house, but still a purplish pink wall.
AJ_O’NEILL: So I am confused. Do people actually think that my wall is purple? Yes. That was a joke.
DAN_SHAPPIR: No, it looks purple to me.
AJ_O’NEILL: No, it's the white.
STEVE_EDWARDS: Same to me.
AJ_O’NEILL: Have you never watched YouTube before in your life? It's a light.
DAN_SHAPPIR: Ah, okay. I just go by what my eyes tell me. It doesn't really matter if it's the color on the wall or the color reflecting from the wall, you know? It is what it is.
STEVE_EDWARDS: There you go. It's purple, at least to me it is.
AJ_O’NEILL: It's a light. It's just, it's a light.
STEVE_EDWARDS: Well, I asked you if you painted and you said yes, so I...
AJ_O’NEILL: Well, I thought we were going along with the joke. Oh, oh. I thought I was just playing along with it with the joke, because everybody on, everybody that has a YouTube channel has accent lights, you know?
STEVE_EDWARDS: Everybody does? Yeah, everybody.
AJ_O’NEILL: Everybody. Pick up any random YouTube channel. Okay, not Joe Venezuela. Because I have one of his videos often and he doesn't have accent lights, but you know. Just open up youtube.com, look at the thumbnails and you're going to see the lots of accent lights and all the videos.
DAN_SHAPPIR: So that's kind of like a prerequisite. You're saying?
AJ_O’NEILL: Yeah, yeah, more or less. It's one of the first things you get is I think, I don't know, mic, first mic, then camera then lights.
Hey folks, this is Charles Max Wood from Top End Devs. And lately I've been working on actually building out Top End Devs. If you're interested, you can go to topendevs.com slash podcast and you can actually hear a little bit more about my story about why I'm doing what I'm doing with Top End Devs, why I changed it from devchat.tv to Top End Devs. But what I really want to get into is that I have decided that I'm going to build the platform that I always wished I had with devchat.tv and I renamed it to Top End Devs because I want to give you the resources that are gonna help you to build the career that you want. Right? So whether you wanna be an influencer in tech, whether you want to go and just max out your salary and then go live a lifestyle with your family, your friends, or just traveling the world or whatever, I wanna give you the resources that are gonna help you do that. We're gonna have career and leadership resources in there and we're gonna be giving you content on a regular basis to help you level up and max out your career. So go check it out topendevs.com. If you sign up before my birthday, that's December 14th. If you sign up before my birthday, you can get 50% off the lifetime of your subscription. Once again, that's topendevs.com.
STEVE_EDWARDS: So one of the things we talked about before we started recording was proxies. So Dan, first let's start out by giving us an update on or a description on what a proxy is.
AJ_O’NEILL: Only to test it out or to work around basically a breaking API change You had to do something nasty so that between the two versions, people could still use the API the same, even though that something different needed to happen.
DAN_SHAPPIR: By the way,
AJ_O’NEILL: I've seen it abused. I don't really know that there's a use case for well-designed code to use it.
STEVE_EDWARDS: Well, I mean, it's something that I use frequently in PHP, for instance, Laravel, you know, for instance, where you've got a class, you know, and so you've got your class members and you use a getter to set it and or a getter to retrieve the value and a setter to set the value.
AJ_O’NEILL: But why would you do that if there weren't side effects? Why would you just set the value or get the value?
STEVE_EDWARDS: Because I like side effects. They're fun to have. They make things more interesting.
DAN_SHAPPIR: So the most,
STEVE_EDWARDS: well, I can think in some cases coming from PHP, let's say you don't want to, you don't want to buy a class value to be changed publicly. You only want it to be used internally, right? So within the class, you need to change it for whatever reason, but you don't want anybody who understands each and object to be able to change it randomly, because that could have side effects. So in that case, then yeah, it makes sense to have some sort of function that sets it, but is restricted to only within the class.
AJ_O’NEILL: Is that real, though? Or is that just academic? Because all that I mean, I remember meeting in college, they talk about, you don't want unauthorized code to access the blah, blah, blah. I don't know about you, but I don't send my code around the office and ask people to make random changes.
DAN_SHAPPIR: Yeah, so building on what Steve said, so you can use getters and setters as a means of access control. So for example, if you want a property that's read-only, you can do it by just giving it a getter and not associating a setter with it. And then you can read that property using the getter, but you can't modify it. You can even do the inverse and also only have a setter. So you can have a write only property, although that's kind of rare. I've hardly seen that used.
AJ_O’NEILL: But it would be like a credit card.
STEVE_EDWARDS: Yeah. And that's where I don't, I don't know why that would be beneficial to to do it that way in any language except for the case of, oops, I made a mistake. I locked the API. Ugh. How do I handle this? Maybe I can shim it this way.
AJ_O’NEILL: Well, I think that's still surprising from the perspective that it that's not the way most programming languages work. But yeah, I get it that if you're in if you're in that ecosystem and you would know that. But I still if you want to set age, just have a set age. It's not a big deal.
STEVE_EDWARDS: So technically, if I'm understanding you correctly, if you let's say you have an array of five items, whatever they are, objects, strings, numbers, whatever, and you want to trim it down, right? Okay, I want to make this array. I only need three. So are you? Am I understanding correctly that you could use this length setting to get rid of the last two and say, okay, now my array is three and it's only going to give me the first three?
DAN_SHAPPIR: Exactly. Although I would personally recommend that you use splice or slice or whatever,
DAN_SHAPPIR: Then rather than modifying the array in place, it might be, you know, if you're really looking to, to do some micro optimizations because you've determined that some certain code is super hot.then maybe, but otherwise just don't go there.
STEVE_EDWARDS: Well, like you said, just because you can doesn't mean you should. I was just sort of fleshing out what you can do with an array like that. So conversely then, let's say you wanted to, you could just add some blank spaces on the array then and say, okay, going from fives, now my blank is seven, so I've got two empty items in the array. I would imagine that can throw some errors somewhere down the line though, if you don't fill it, couldn't it?
AJ_O’NEILL: It depends on what method you're using. This is one of the differences between four and for each for each. If correct me if I'm wrong for each skips elements in sparse arrays, whereas four does not. So with a
STEVE_EDWARDS: four in like a four in or four of, or something like that.
DAN_SHAPPIR: Yeah. Four in and four, four in and four only goes, yeah, the whole concept of sparse arrays, which we also discussed in the previous episode. Yeah, with sparse arrays, if you leave blank spaces within the array, then 4 in or 4 off will skip over them because they don't exist. Whereas with a regular 4, you're just going by the index. So you're just going relative to the length. So it won't skip. It just goes through all the numbers. You're incrementing the index by one, regardless of whether that element exists or not.
AJ_O’NEILL: And I think it may be different whether you push undefined or whether you because there's two undefined. There's undefined and there's not defined.
STEVE_EDWARDS: Oh boy. That's fun.
AJ_O’NEILL: I have done some testing with using new array and giving it a number versus doing array.from versus doing array dot length. I've played around a little bit with trying to micro optimize some things, just goofing around, uh, playing basically code golf or, or one of those leak code type challenges to see, well, can you get this benchmark to perform faster if you do this type of thing? And basically what I have found has been that If it's something that would be unexpected to a human, how it will be optimized will basically be at random. You can make a change that can make your code twice as fast or twice as slow, and then change something else, and then the same code that you had made twice as fast or twice as slow by changing from doing a dot push to doing a dot length and then indexing in, that same code that was faster can actually become slower because you added different code somewhere else. So I don't understand all of what's going on under the hood, but I would never suggest that someone look at a micro benchmark on something like that. And even in your own application, if it's something janky like that, where it's not part of the spec and it's not something that is intuitive, if it happens to make it faster in one benchmark, it might make it slow in another.
STEVE_EDWARDS: Yeah, that's something you would do with like object assign. Meaning when you're talking about copy the values.
DAN_SHAPPIR: Yeah, or these days you can also copy by using the spread operator when creating a new object later on. But yeah, object assign is a good example. If you might say, this or for example you might have some global that you're creating for some reason and you know you don't want and once created you don't want anybody to modify I don't know let's say some sort of let's say a session ID or whatever that's what that yeah that once specified cannot change throughout the lifetime of that session then you might put it in some sort of a global object and then freeze it so that nobody changes it by accident and
STEVE_EDWARDS: so when you're freezing stuff do you want hopefully you don't run into the problem of getting water in your computer. Cause out too much.
STEVE_EDWARDS: I'm having visions of Arnold Schwarzenegger and Batman right now. Yeah, so freeze puns.
Hey folks, I'm here with JD from Raygon. JD, we were talking just a second ago about empathy, and it seems like a common concept within the programming community. And yet, when we're building features for customers, a lot of times we call it done when it passes CI, deploys and doesn't give us errors that really doesn't seem very empathetic when it comes to our customers because we're not looking at what they're doing. Do you have thoughts on this? Yeah, absolutely. I mean, at the end of the day, until, until your code actually hits the customer, um, you don't really know if it's any good. Uh, you know, everybody uses things in so many different, weird, wonderful ways. You can only really debug in production. Um, yeah, I've been there. It's done. It's not done. Oh crap. It's not done. I gotta go fix it. Now it's done. Yeah, absolutely. When we see things like error reports flowing into Ragon, a lot of the time it's things where you just kind of go, oh, that was a configuration that as a developer I didn't think could exist, but actually here's an example. And so it's connecting that code to customer and your development team through to real users and their experiences, which to your point builds real empathy and the best software teams care a lot about how their customers are experiencing their software. Right. It's kind of the feedback from the app, but it's also kind of this meta feedback. As we do better, we tend to get less of this negative input back from our customer, which really does reflect empathy. Yeah, absolutely. And I also think to your point earlier about CI CD pipelines, like we've done an amazing amount of work as an industry to automate getting to prod really fast. But if you really want to go super fast, you need to close that loop with real-time feedback from prod back to the dev team. And that allows them to do things like fail forward and just do. You know, really leverage that investment in CI, CD and, and it can turn into a real superpower. Yep. Absolutely. So I'm going to encourage you folks. Yeah. Set up your CI CD, but then go sign up for Reagan. They'll actually give you a free trial and you can get it at raygun.com.
DAN_SHAPPIR: Well, it basically it behaves, you might say that it behaves differently if you're in strict mode or not in strict mode, I think.
DAN_SHAPPIR: Basically a reminder that when you're inside an ES module, you're strict by default. In fact, since you're not, you can't disable strict, then you're basically just strict. For those of you who don't know, string, and again, this is something that-
DAN_SHAPPIR: But they do something called-
AJ_O’NEILL: Did something wrong, you should have an error there.
AJ_O’NEILL: You can.You'd have to put it in parentheses so it gets evaluated as the number of dots.
DAN_SHAPPIR: No, you can do... I noticed that I said dot dot. Like not just the one dot, two dots. Try it out.
AJ_O’NEILL: Oh, so you're taking advantage of one of those parse error things where...
DAN_SHAPPIR: Oh, not error. It's specified in the language.
AJ_O’NEILL: Well, but it's like semicolon insertion, right? You can do these little tricks that will cause the parser to goof up and then the parser will backtrack and then it'll try again. So if you do a dot dot, which would make literally no sense it's some sort of hack that will cause it to evaluate it with parentheses.
AJ_O’NEILL: So it's kind of, I see some of these as more, they seem like they're a retrofit for not having good tooling, right? Because instead of, instead of relying on your tooling to look at your JS doc and say, oh, this is a read only property. If anywhere in the code you're trying to change it, I'm going to put a little linter warning, Hey, you mark this as read only, but now you're trying to write to it. We have these things that are executing at runtime when they're basically doing what would, what wouldn't should be compile time and linter checks at runtime. Because if you access a property with freeze that's been frozen, that's a bug in the code. You wrote bad code. That's not, that's not, you're using a feature of the language. That's that somewhere there's a bug and you don't know where it is, and so now you freeze it, you can get a stack trace to find out where that bug is.
DAN_SHAPPIR: Well, no, that's not correct. I mean Chrome isn't...
AJ_O’NEILL: I think the reason that Freeze originally came about was for exactly the case that I said, oh, this is theoretical, this isn't real, which is that you have untrusted code running with your regular code. Well, if you have ads on your site or you have, you know, these widgets or these plugins that actually aren't part of your application, it is possible that they can traverse objects that are part of your application and then go find something and modify them or steal a key or something like that. So in the web, I have to go eat my own words because in the web, it actually is possible to have cases where you don't expect code to be exposed to a third party, but it actually, it can be if it's in a browser.
STEVE_EDWARDS: Hey guys, before we get too much farther down the rabbit hole here, let's, uh, I'm going to kick us in the pants and move us on to your next topic. Again, are we getting close to proxies or you got other stuff to cover first?
DAN_SHAPPIR: Proxy is the one that's, that's the next one.
STEVE_EDWARDS: Alrighty. Let's do it. Okay. Cool. So like, by the way, I wanted to say that. In regards to the seal and all that stuff that gets my seal of approval. I was waiting to throw that in. Anyway. Anyway, so let's get cereal.
STEVE_EDWARDS: You know, I'm looking through the MDN docs on proxy, and I guess I always like to sort of put this, trying to understand the concept is to put it in a way that uses something that I'm already familiar with. So listening to your description and reading the documentation, the way I sort of see it in this, you know, they say all analogies fail at some point. So this might fail, as I see it almost like either like a middleware or something like a cloudflare worker, right? So you're handler gets the target before it gets to wherever you're going to use it. And you can tweak it. And, uh, well, actually, I think you said that the target itself doesn't change, but you can munch it, do whatever you want and then pass it on. Right. So like a cloud for worker, for instance, is, you know, something you is deployed out on an edge, uh, in a CDN, right? So you're getting something coming in and before it gets to your core code and database, you want to change something or maybe bounce it off if it has a certain property. And like a middleware in Laravel or even Nuxt is, you know, something's coming from your back in your front end and you want to intercept it and maybe bounce, you know, since, sorry, this isn't, you can't do this because you're not validated or logged in or you want to change something or tweak something. Does that sound like a correct analogy for a proxy?
DAN_SHAPPIR: Exactly. And it's a property name feature because it exactly is a proxy you're getting a proxy object that through that proxy you get at or to the original object. You're not supposed to access the object directly. So you gave an example of a cloudflare worker as a proxy between the browser and the actual server. And then the proxy can block certain operations or modify certain operations before they get through. The original server itself is not modified and you know not necessarily even aware that it has a proxy in front of it.
AJ_O’NEILL: Now, is this actually different from just using defined property? Because what I'm seeing here, well, I guess it's different in that defined property only works on properties that are defined, whereas proxy can work on things that aren't defined. So you can make those really nasty things like Rails has where find by username or ID gets parsed into the properties username and ID, and then it knows the parameters or username and ID or something like that.
STEVE_EDWARDS: Yeah. I'm talking about practical uses of this in my world, Vue, this is how Vue 3 operates. So in Vue 2, which is what's called the options API, which had to do with how the single file component code is set up, we use getters and setters. Somewhere we've talked about that before, I think, right? But with Vue 3, they went to proxies and went away from getters and setters and are using proxies. Now, from a Vue developer's standpoint, the proxies alone don't change how you write your code. It does to a certain extent how you define your single file components with what's called the Composition API. But it's using proxies behind the scenes to manage the reactivity and handle the reactivity of your code.
AJ_O’NEILL: So wasn't there another name for something really, really similar to proxies before proxies?
DAN_SHAPPIR:I don't know.
AJ_O’NEILL: Okay. I'm trying to remember.
STEVE_EDWARDS: Are you thinking observables?
STEVE_EDWARDS: I think it was, isn't RxJS sort of the dominant way to do observables?
DAN_SHAPPIR: It is, but it's not part of the language. Now there's a-
STEVE_EDWARDS: Right. It's an external tool, library, or you have to implement.
AJ_O’NEILL: No, I think I've got it. And again, I hope that most people never use them. But I do believe that because of the other flaws in the way that primarily the tooling works, it sounds like they can be useful and discreet. I'm a little bit, I like the idea of two-way data binding, which is essentially, I'm guessing, that's what Vue 3 is using it for, right?
STEVE_EDWARDS: Right, yeah, data binding, monitoring the changing, the reactivity so that when something changes underneath and it changes your data, where you want it to be changed.
AJ_O’NEILL: I think that the general concept of hooks as implemented in React Hooks meaning specifically the idea, not that you're hiding away where the thisness is, I think that's bad, but that you're explicitly developing the dependency chain of what things depend on what other things so that you can easily detect cycles and have obviously correct code. I think that that is good. And that's the one thing about using observables indiscriminately, I think is, well, we'll see how it works out if view three has good patterns that help you not get into those situations. But well,
STEVE_EDWARDS: Alrighty. So with that, we are going to end our geek talk for the day and move to Pics.
Hi, this is Charles Maxwood from Top End Devs. And lately I've been coaching some people on starting some podcasts and in some cases, just taking their career to the next level. You know, whether you're beginner going to intermediate and intermediate going to advanced, whether you're trying to get noticed in the community or go freelance. I've been helping these folks figure out how to get in front of people, how to build relationships and how to build their careers and max out and just go to the next level. So if you're interested in talking to me and having me help you go to the next level, go to topendevs.com slash coaching. I will give you a one hour free session where we can figure out what you're trying to do, where you're trying to go and figure out what the next steps are. And then from there we can figure out. how to get you to the place you want to go. So once again, that's topendevs.com slash coaching.
STEVE_EDWARDS: So for the uninitiated picture, the things we get to talk about that aren't necessarily tech related, but could be tech related depending on the whims of the day. So first today we will go with AJ. What do you got for us, AJ?
AJ_O’NEILL: I don't know, but basically not, not much, but let's see what I can pull out of my hat here.
STEVE_EDWARDS: I have faith.
AJ_O’NEILL: Now. Okay. Now that I have a home, of course. As a proud believer in the constitution of the forefathers of this country, I fly the American flag and there is a company called Valley Forge, which sometimes you can get their stuff on Amazon, but they seem to be the best flag company in terms of creating durable flags. And not only do they have flags for America, but they also do flags for the other nations maybe a bi-cultural family. You could fly two flags and get them from Valley Forge, the flag that represents other countries. Anyway, so we got that. And then, I don't know, it seems, the books, movies, games. Ah, you know what, I could pick Frog Chess. Frog Chess is a really fun game. If you...If you wanted to try it before you buy it, you could probably look up the rules online, but it's, it's simple, like checkers in terms of the movements. All you can do is jump another frog. You can jump exactly one frog. So there's, there's, there's basically two rules. The board is a grid that is, um, I forget what size it is exactly, but let's say it's, uh, maybe seven by seven or six by six or something like that. And then there's the border all the way around it. All of the board gets filled up with frogs. You take turns placing your frogs, so say blue and red or whatever. And then the first person that goes, the rule is that you have to jump over exactly one frog. And if you land on the outermost squares of the grid, then the frog that you used is now out of out of play, it dies as well. So any frog that you jump over, you have to jump to an empty square dies as well as your frog, or any frog that lands outside of the main grid, because there's the main grid and then there's one extra layer on the outside so that you have room for the initial moves. And the objective is simply to be the last player to jump a frog. So it's not about how many frogs you have left. Your last play could be to jump over your own frog, one of your own frogs into the swamp area, the area outside of the grid and lose both of your frogs. And your opponent could have three frogs on the board, but in a place where it's not possible for them to jump one of their own frogs or one of your frogs. And in that case, you win. So it's not about having frogs left over, it's about being the last frog to jump. And it's the Binary Coco is the company that's invented the game, and they have this nice colorful board that you can get. And I got one of the earlier revisions of the game, and now it comes in a little bit of a nicer box, and they have a little bit better colors and whatnot. But I'll put the link in there. And it's something, you know, you could play it with checkers. You could set up a chess board with checkers, and you could play this game to try it out. But, you know, kids love the little or frog characters and that sort of thing.
DAN_SHAPPIR: I have to say that in terms of the gameplay that you're describing, it sounds really similar to some really ancient games. It sounds like a game that I read somewhere that ancient Egyptians played, like 4,000 years ago, something like that. This concept of being the last one to jump over some other piece or something like that.
STEVE_EDWARDS: Well, you know, what it reminds me of is that little triangle game with the pegs, you know, where you start out and you've got...one hole and the ideas that you only have one piece left. I think I've done that once in my lifetime too, and I didn't write down my pattern. But anyway, that's what it reminds me of.
AJ_O’NEILL: I think the best I've ever gotten on that is two. I may have gotten one once, but that's a tough one when I go to Cracker Barrel.
STEVE_EDWARDS: Right, exactly. That's where I thought last. Yeah.
AJ_O’NEILL: One last thing. So Binary Coco, the funny thing about them is that they actually were doing video games first when I met them. And they do have a few video games, but they actually have. I think they've had more success with physical games than video games. Straight for is another one of their games that I like. It's kind of like tic tac toe. But again, in the same way that frog chess is like checkers, it has this elevated cerebral, solid cerebralality to it that makes it feel more strategic like chess. Straight for kind of takes the the tic-tac-toe approach and raises it up by another dimension where it's still very simple to learn and play but very difficult to master. It looks like they've got a whole bunch of new physical games that I had not heard of. I'll have to check out one that I know that they've been working on for a long time was cubes with different triangles on it and that affects how they can move and how they can turn and whatnot. But again, all of their all of the games of theirs that I've played, except for maybe the card games, Wet Blanket and Slamarama, I think they're a little bit more just fun, silly, like other ones you would have experienced the what's the one about the exploding kittens or something like that. But they're they're tabletop games that I've played that have a border or moving pieces all seem to be in this realm of very, very simple concepts, easy to learn, very difficult to master and get great at.
STEVE_EDWARDS: All righty, well thank you for those picks that you pulled out of thin air. You did a good job with that, AJ. I just know they're always buried deep in your brain. You just gotta find them. Dan, you got any picks for us?
DAN_SHAPPIR: Yes, so my first pick is that for the first time in a long time, like over two and a half years, I'll be speaking at an international conference overseas. During this whole COVID thing, I've hardly done any conferences, and what conferences I did do were either virtual or local here in Israel. There was one actual physical conference that was here that I participated in, but that was the extent of it. So I'm really happy that things are opening up, and I'll be flying to Budapest in the beginning of June. The conference is JSConf EU will be taking place in Budapest in Hungary. And I'll be talking about surprise, surprise web performance. And that would certainly be a lot of fun because, uh, my wife will also be joining me and we'll actually be taking advantage of, of that to do a bit of touring in Europe right after the conference. So we'll be rent, taking a rented car and just, you know, driving through some European countries and it should be awesome. And I'm again, really, really happy about being able to take a vacation like that after such a long time. So that would be my first pick. My second pick, the stock market seems to be actually going up today. But overall, it's something like down 15% this month of the time of this recording. And I know and I'm seeing on Twitter, for example, that a lot of people are kind of freaking out. Because the last time we had any sort of a crisis in the stock market, especially associated with tech, was like way back in 2008 and before that, 2000, 2001. So a lot of people are just not used to this situation of tech stocks continuously going down instead of going up. And it seems like the end of the world for some. And you know, I've been there doing the previous quote unquote crashes. And I can tell you it comes and then it goes. And tech is here to stay. So it might be the job market might be more challenging for a bit. It might be more difficult to find great salary, but do you know, a year or two, three down the line things should be back to normal, at least I hope, unless we get into some sort of nuclear war over Ukraine or something like that, in which case it really will be the end of the world. And again, that brings me to my final pick, which is the thing that I pick on every episode these days, which is the war in Ukraine, which just keeps on dragging on and on. And it's so terrible and so horrible. And I just wish that it will end already. But unfortunately, I'm not seeing it ending anytime soon. So those would be my picks for today.
STEVE_EDWARDS: Excellent. Excellent indeed. Well, maybe not excellent. Good. Just kidding, Dan. So now to the high point of the show, the dad jokes of the week. I can already see AJ cringing. So these ones might really tick you off, but wait and reserve judgment until you hear them. So what do a tick and the Eiffel Tower have in common? Anybody?
DAN_SHAPPIR: I don't know. What do a tick and the Eiffel Tower have in common?
STEVE_EDWARDS: They are both parasites. Bum, bum. Okay. So what do you call a depressed tick who lives in Rome?
DAN_SHAPPIR: I don't know.
STEVE_EDWARDS: He is a hopeless Roman tick. Romantic, romantic.
AJ_O’NEILL: No, you didn't have to do it. You didn't.
STEVE_EDWARDS: Oh, OK. Just let it go? OK, got it.
AJ_O’NEILL: That one was good. That one was good.
STEVE_EDWARDS: OK. OK. And then finally, what do you call a tick on the moon?
DAN_SHAPPIR: A lunar tick. Yes.
STEVE_EDWARDS: Thank you. It's lunar tick. But yeah, that's very, very good. That one seems to be easy. Other people have gotten that one too. So that was great. And then last night, my neighbor knocked on my door at 2.30 AM middle of the night, he's knocking on my door at 2 30 a.m. But lucky for him, I was still awake playing my drums.
DAN_SHAPPIR: Uh, yeah.
AJ_O’NEILL: Ah, that was good.
DAN_SHAPPIR: Kind of rude though. His behavior, I would say,
AJ_O’NEILL: We're the radicals. Yeah. For the square pegs in the round holes.
STEVE_EDWARDS: Okay, that's it. Talk to you later.
Bandwidth for this segment is provided by Cashfly, the world's fastest CDN. Deliver your content fast with Cashfly. Visit c-a-c-h-e-f-l-y dot com to learn more.