From a unique waterfall in the airport to the vibrant street food scene in Chinatown, Singapore offers a blend of tradition and innovation like no other. And now, with Singapore Rewards, you can experience Singapore's hidden gems for free! Discover Jewell Changi Airport or join the hidden gem walking tours, all for free! Find out more at SingaporeRewards.VisitSingapore.com What are you waiting for? A better way to holiday awaits you.
AMY_KNIGHT: Hey, hey from Nashville.
STEVE_EDWARDS: The always confrontational AJ O'Neill, and informational, I must say.
AJ: Yo, yo, yo, coming into life. I'm so excited that Amy joined again. Woo-hoo!
STEVE_EDWARDS: Been a while. And today, our panelist, actually he's more of our guest, shall we say, Dan Shapir.
DAN_SHAPPIR: Hi everybody from Tel Aviv, where it's finally decided to be winter almost the end of the year, I guess it's time.
STEVE_EDWARDS: Getting all the way down to 55 degrees Fahrenheit. For those of us who are waking up to 30s, that seems very warm, but it's all relative, I suppose.
DAN_SHAPPIR: Yeah, yeah. At least it's raining, and there's a bit of thunder storm outside and something. So that's our definition of winter.
STEVE_EDWARDS: I see, I see.
Tired of explaining your absurdly high big tech cloud bills to your boss? Let me tell you about this cloud infrastructure company that's the talk of the tech world. The name is Volter, that's VULTR. They pack high performance cloud compute at a price that AWS and the other big clouds can't compete with. So reap the benefits of advanced networking features, managed Kubernetes, developer friendly API in 20 global locations, offering elastically scalable computing power. Over a million users have deployed on Volter in 60 seconds or less across 12 pre-selected operating systems with their own ISO. With pricing starting as low as $2.50 per month for Volter Cloud Compute, they offer plans for developers and businesses of all sizes. You can try Volter for free today by visiting Volter.com slash Jabber, and you'll receive a $100 credit. That's V-U-L-T-R.com slash Jabber.
STEVE_EDWARDS: Okay, so today is our continuation of a previous episode. Episode number 512 was Virtual Dom in the Rackway part one. This is going to be part two, considering one plus one equals two, and that whole thing. So Dan, start us down the road. Where are we going next on this topic?
STEVE_EDWARDS: So yeah, maybe this might be getting off the beaten path, but I know, you know, Vue uses, at least in Vue 3 they use proxies, but they're still using a virtual DOM. And then you have something that comes along like Svelte that doesn't use a DOM at all because, you know, performance issues it handles seeing it at compile time and so on. So are you very familiar with Svelte and how that works, and maybe as a comparison between that and virtual DOM and React?
DAN_SHAPPIR: So, yeah, I actually brought that up. So first of all, I am familiar with Svelte, but I would certainly not consider myself to be a Svelte expert. I've created some small-scale toy projects. I haven't actually implemented a real production system using Svelte, and until I do, I wouldn't actually consider myself to be a Svelte expert.
STEVE_EDWARDS: I don't know, looking at the video, you look pretty Svelte to me, but maybe that's something different.
DAN_SHAPPIR: Yeah, I think the core. Yeah, thank you. Thank you. The core difference here is the fact that Svelte does use mutations to update the DOM. So where React tries to avoid mutations, you have, as I said, these pure functions that have state in UI out. That's not the way in which Svelte works. Svelte does use mutations, but it encapsulates these mutations inside of its components. So only a component can mutate its own UI. And then you don't get that problem that I previously mentioned where, because the actual browser DOM is global, so that any code can access any part of the DOM. Well, these days we also have web components as part of the browser DOM itself, so you can overcome this with Shadow DOM, but effectively most developers don't quite use that or don't use that at all. So Svelte really avoids this problem by encapsulating the mutations inside of its components, and then because it does use mutations, it doesn't actually need the virtual DOM. And in fact, Rich Harris, the creator and the main author of Svelte, has called the virtual DOM pure overhead. So obviously, we know his opinion about it. But for sure, if you don't use this approach of treating the UI or UI transformations via this functional approach, then apparently you really don't need the virtual DOM. Anyway, getting back to where we were. So one more important thing that I think needs to be said about React's approach and use of the virtual DOM and the fact that it does use this functional approach or method for constructing the UI is that this is also the foundation for its own component model. So we talked about, you know, the Svelte component model or we touched on it a little bit, but the way that React implements components, at least these days,is essentially just using functions. So if you've got this root function that's supposed to generate the VDOM for the entire page, inside of it, it can actually call sub-functions to generate different parts of that UI and then combine those as branches under a common root. And in this way, you kind of deconstruct the virtual DOM into parts, each part being handled
by a different function. And each such function effectively is a React component. So a React component is just this, again, a pure function that, or you'll see later on, some cases where it's not exactly pure thanks to things like books. But again, let's stick to the ideal model for now. So it's a sort of pure function that takes a portion of the application state.
and then returns a portion of the UI, and those portions are then combined to create the complete virtual DOM for the entire UI. And especially, you know, obviously as you reuse functions, you reuse them as components, so the same function can be used with the different state input in different parts of the user interface. For example, let's say, You have a blog post that you generate using React, and you have a component that generates a paragraph. So each paragraph, the input would be different. The input would be the content of that particular paragraph. But the function that generates the VDOM from that input would be the same function. So that's how React does reuse and componentization. So, yeah. And the JSX which we also spoke about in the previous episode, makes this component model very easy to use and work with because when you specify a DOM node using JSX, let's say open bracket, widget, close bracket, it effectively simply becomes a function called, to a function called widget. And that, the output of that function gets swapped into the VDOM at that point where in the JSX as it were. Hopefully that's clear enough. I'm waving my hands all over the place here. So really what this means is that in JSX there are really two types of nodes. There are nodes which are simple, which are placeholders for simple VDOM elements such let's say as a div or an input and these are just true would be then just directly into the matching real DOM element. And there are nodes which are just placeholders for invoking functions. And then the output of these functions, that gets injected into the VDOM. And when all the functions have been called so that the tree only contains simple VDOM elements, that's when React can actually reconcile it and use it to update the real DOM. And I really hope that this is clear. And you're waving your head.
AJ: Well, it's as clear as it can be without code examples, right? Cause there's only so much you can explain with the audio.
AJ: But yeah,
STEVE_EDWARDS: Yeah, that actually made sense. Moving or not? I wondered how that worked.
AJ: I also have a two-year-old that I'm dealing with right now. Yes, I'm just trying to mentally track with everything you're saying. So that precludes any questions coming out of my mouth because my brain is working too hard.
DAN_SHAPPIR: I don't know if that's a good thing or a bad thing.
AJ: You're just overwhelming with intelligence. Let's just look at it that way.
DAN_SHAPPIR: By the way, the fact that the VDOM can be rendered not just into the browser DOM, but into other targets as well. Like I said, HTML strings was leveraged in order to target other form factors as it works. So that's kind of what enables React Native. Instead of reconciling the VDOM into the browser DOM, they created a native quote unquote DOM, and then they use the VDOM to reconcile that. So this separation that the VDOM creates between the representation of the UI and the actual UI is a really powerful one. Another example that was given in the past is the idea that you could build your own, let's say, DOM over, let's say, WebGL and Canvas, and use that instead of the browser DOM to actually render the UI. You would still be using the exact same mechanism of the virtual DOM just with different nodes.
STEVE_EDWARDS: In other words, if I'm understanding you correctly, is this your packaging the same data in different formats depending on where it's going? depending on what's going to be using it on the, on, on the end. Is that correct?
STEVE_EDWARDS: Well, okay. Think of a different, a different wrapper than the same objects in a different wrapper, HTML strings versus.
STEVE_EDWARDS: What about offhand? Just kidding. I always check both places.
STEVE_EDWARDS: But so, so you're saying that whichever framework is receiving the data then manipulates it to whatever the purpose is native versus a browser?
DAN_SHAPPIR: Exactly. It's the separation of concerns between the creation of the VDOM of the UI as VDOM and the actual application of that VDOM into the actual UI.
STEVE_EDWARDS: Got it.
AJ: So it's funny you mentioned that because I use that all the time and people ask me all the time, what's the underscore for? So I think a lot of people really don't get that it is, hey, don't touch this. Cause I explain that to people all the time.
DAN_SHAPPIR: Well, at least now. I know that you don't like the object oriented approach anyway, and try to avoid this as much as you can. But if you decide to use a...
AJ: Whoa, whoa, whoa. Let's, let's draw a distinction between object oriented and thisness and class classes. I don't like classes.
DAN_SHAPPIR: You're absolutely correct. But yeah, you're absolutely correct.
STEVE_EDWARDS: So is it safe to say then that you have no class?
AJ: Sorry, man. That's the obvious joke. It wasn't funny because it's the obvious joke. I mean,
STEVE_EDWARDS: I had to go there.
DAN_SHAPPIR: anyway, if you do elect to ever use classes in your code which I highly doubt, but suppose that you do. These days, instead of using underscore, you can use hash, and then these fields are truly private and cannot be accessed from the outside. So yeah.
AJ: So did that happen? Sorry? When did that happen?
DAN_SHAPPIR: I don't remember the exact ES standard version that it happened on, but it's supported in all browsers. So you can use a class with this called private fields. You just prefix the field name with a hash. Just do empty and private field and you find the documentation about it.
AJ: That's interesting syntax sugar for a closure.
DAN_SHAPPIR: Yeah, effectively it exactly is. They use the, there are even reasons why they use the pound sign, specifically because it's not a legal character as part of a-
DAN_SHAPPIR: Yeah, exactly.
Hey folks, this is Charles Maxwood 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 topendevs, why I changed it from devchat.tv to topendevs. 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 topendevs because I want to give you the resources that are gonna help you to build the career that you want right? So whether you want to 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 want to give you the resources that are going to help you do that. We're going to have career and leadership resources in there and we're going to be giving you content on a regular basis to help you level up and max out your career. So go check it out at 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.
AMY_KNIGHT: I'm quiet, but I'm tracking.
STEVE_EDWARDS: Yeah, me too, sorry. I couldn't find the unmute button there for a minute, Dan, but we're tracking.
DAN_SHAPPIR: Okay, cool. So what React, what they did initially in that class-based approach is they introduced this method called setState on the component. And when you invoked said state, you were telling React explicitly that, hey, this component wants to update its state in a certain way. Please do that and then invoke the render method for that component, not for the entire tree, for that component, get that data and just reconcile that part. So when they introduced the concept of component level state, the React designers also introduced the concept of partial rendering, not rendering the entire UI, but only a subset of it rooted at components whose private state has changed. So they enabled the concept of partial rendering. Now this really introduced a lot of complexity into the model because if previously, like in the simplest model, it's your function that just builds the VDOM and calls your sub, your own sub-functions directly, now React needs to wrap everything because it needs to be able to invoke some of these sub-functions directly. So in fact, we've now transitioned to a model where you don't invoke your sub-functions directly, you ask React to invoke them for you, and React is kind of a middleman between all your different layers of components within the generation of the VDOM. And this, but this again enables React to invoke a certain sub-function directly without having to rely on your code to do it. So now instead of just your code building the VDOM and then handing it over to React, it's a combination of your code with React generating the VDOM and then handing it over to, and then also React handing that VDOM update to itself.
STEVE_EDWARDS: So what does that do for overhead and performance? Anything, or is it negligible?
DAN_SHAPPIR: Well, ideally it can actually reduce overhead because now we have the ability to just generate parts of the VDOM rather than the entire VDOM. If you recall from, again, from the previous episode, I said that even though generating VDOM is cheap compared to generating actual DOM, there's still effort involved. First of all, even the VDOM is not free. And second, there are all the computations in your own code. You're generating, you're looking at your code looks at the state and decides what UI to generate from it, that requires computational effort. And sometimes that computational effort isn't cheap. So generating the entire VDOM for the entire page on every little change in state can still be too expensive even with VDOM. Now that React has the ability to decide to invoke just certain parts of that VDOM generation tree, it can, you know, you're generating just subsets of the VDOM, not the entire VDOM, then it's cheaper for, because it's less VDOM to generate, it's less of your code to run, and also less of a reconciliation effort for React.
STEVE_EDWARDS: So in other words, that performance enhancement sort of overshadows any additional code that React has to run to keep track of everything? Well... From a component level?
AJ: So wait, is your argument that it is or isn't a framework?
DAN_SHAPPIR: I consider React to be a framework like.
AJ: Okay, I agree with that because it's very, it's not something that you use as a tool, it's something that you build with inside of that. That would be the layer of encapsulation is what would do it for me. So a framework is something where you write your code inside of the framework and the framework handles it like you're saying versus a library is something where you during your own thing and you're pulling it in and then using it as needed.
DAN_SHAPPIR: Exactly. So as I mentioned, initially this was implemented using classes and using this mechanism called setState, but then people, the designers of React decided to come up with this new invention called books and deprecate classes, and now this local state is managed using books. We've got the simplest one, which is useState, all the hooks begin with the word use. So we've got the simplest one called useState, but we also have more sophisticated ones like useReducer, for example. But the purpose is still the same, and that is to encapsulate local state within a component. Now, given that now a component is with hooks, components become functions again. So instead of having to implement components that don't need their own state as functions, but using classes for components that do need their own state. And then, you know, when you change your architecture and something suddenly needs to have state or doesn't need to have state anymore, you kind of need to re-implement your component. Now, thanks to Hooks, it's all functions, just whether or not those functions use Hooks which makes transitioning between these two modes of operation much easier. The cost, of course, was that in order to achieve that, the React developers needed to invent this entire whole new concept, which developers really weren't familiar with before. But it seems that they've been able to sell a lot of the developers on it. So, you know, apparently they've succeeded. But the concept of hooks is that even though it seems to be implemented as a pure function, and in fact it is a function, it's not really pure anymore. It has side effects, kind of like a function that has its closure, and it can keep value between invocations in that closure, and then a specific invocation is not pure. It's just a sequence of invocations from day one that's aggregated as you might call it. The total aggregate is kind of pure because if you always provide the same parameters in the exact same order, you would get the exact same results. It's just that instead of you keeping your private values in your closure, React keeps them for you using hooks. Is that clear?
STEVE_EDWARDS: Yeah, I think so. I've always had the, I guess I haven't since I've actually haven't used React just the concept of hooks are defined in React as compared to hooks, how I would normally think of hooks. But no, that makes somewhat sense.
DAN_SHAPPIR: Yeah, the term hooks that the React people chose turned out to be kind of a double-edged sword, because the term hooks was used by other, you know, framework systems, whatever, for a totally different purpose. There was a similarity, and I can explain it now, explain in a minute why they use the term hooks but it does create a lot of confusion for people that are coming from, you know, different backgrounds. So the reason that they call it hook is that you're hooking into the React itself. So as I said, when the, when React introduced that implemented, that component, that ability for components to have their own state, which required React to kind of sit in between the invocation of React components, it means that React can keep track of where it is in the VDOM generation. So it has context about where it is. And consequently, it knows that now I'm invoking this component in order to generate this part of the VDOM. I can save data for that inside of my own data structures and I can give you access to my internal data structures using hooks so that you can put your own stuff in there. So effectively, you're hooking into React. That's why it's called hooks.
STEVE_EDWARDS: Right. OK. That makes sense. I mean, that's fairly close to what I would normally consider a hook, you know, or some process is running. Hey, anybody want to jump in here and do something? Great. Come right on in.
AJ: But that doesn't make, that's not possible. That would require transcoding because that value changes when you call set. And so if that value changes,
DAN_SHAPPIR: it does. And that's a key point of understanding about react that we probably don't have time for today and will probably require another episode, which is discussing the react life cycle when things change, because when you use the center, you don't actually change the current value. You change the value for the next time.
AJ: Hold on. Wait a second. So, so all of those functions that represent components are torn down and then rebuilt back up again with a new component. So nothing that's in a closure in any of them would actually persist across.
DAN_SHAPPIR: I think you're overthinking it.
DAN_SHAPPIR: Yeah. So you're correct. You're correct. Yeah. When you put it like that, now I understand what you mean. And the answer is yes.
AJ: Yeah. I just, yeah. I mean, I'm generally in disagreement with appropriating technical terms to mean something that is antithetical to what the term has historically meant. So I realized that occasionally we have to do that with nuance differences, but yeah.
DAN_SHAPPIR: Yeah. So let's say, and I'm going to do a really bad thing and literally just read out code. Let's say we have something like a call that like the canonical use state example, which is cost, const open square brackets, count, comma, set count, close square bracket equals use state of zero. That's kind of the canonical example. So the first-
AJ: And right off the bat, we're appropriating const to mean variable because these are variables, not constants, but let's go on.
DAN_SHAPPIR: No, they are constant. Count is, uh, is, is contains the value zero. And because it's, it's constant, it can't be changed because if you'd use net, you could change counts the variable because it's just a variable containing the value zero.
AJ: Okay. So I would know I'm sold a literal number can be a const. Okay, if you put it all caps so it's clear it's actually intended to be a constant, but it's not. Because every single time it runs, it's intended to be different, which means it's not a constant. It is a variable.
DAN_SHAPPIR: It's, well, you know, again...
AJ: This is the difference between mutable and constant. It is not, it is immutable. So if you did immute, if you wanted to say, immute equals, which still wouldn't be true, because then, for example, anyway, this is... I'll let that one go.
AJ: Uh, I won't, I won't bother, but it's, it, if you want to call it in mute, that's still a lie, but that's closer to the truth. Calling it cons just is.
AMY_KNIGHT: You're not the only one who I've had this conversation with. Well, no,
AJ: tons of tons of people have. And who was it? Ryan Florence actually made a little snarky comment about this during one of his talks. I don't remember which one it was, but yeah, lots, lots of people. And I run into people at meetups and they're like, yeah, I just quit using let and cause because it's too confusing. And the rules aren't consistent. It's just C-sharp developers trying to bring in something that they want into the language, being on the standards.
DAN_SHAPPIR: I hear, I kind of disagree. My approach these days is I const all things and with few exceptions, if something cannot be const, usually it means that my code needs to be refactored.
AJ: Hopefully that refactoring doesn't include introducing ternary operators.
DAN_SHAPPIR: No, usually. Well. That's the bad approach. My approach is usually to create another function. And have the return value for that function being assigned into that cost. But again, we are totally straying off the React and discussions.
AJ: Let me say one more thing though. Just to finish out my thought here. If you're saying the refactoring is to create another function, then you should have just stuck with var. Because when var when you're doing something where VAR doesn't behave in a sane way, or, or you're doing something where you're coercing VAR to be unintuitive, that is letting you know, oh, this should be in another function, my stuff's getting too long and complicated. So I, I just.
DAN_SHAPPIR: Yeah. But VAR doesn't protect you. Uh, my, my, my attitude with developers, including myself, is that we do bad and stupid things and the programming language should protect us from it. You know, you kind of brought up that talk, React to the Future, uh, with, uh, and, and which he, which is a really, like you said, is a patent switch when he actually is trying to sell us on, on Reason. Uh, and languages like Reason, their default attitude is that everything is const or immutable, whatever you decide to call it. And you, if you need something to be immutable, you need to be very explicit about it and, and, you know, and immediately it smells.
AJ: And, and well, this is how Rust is. And I think it works really well in Rust.
AJ: I bet it sure. It's just, it's the appropriation that bothers me. If we wanted to call it whatever it is, which I don't know what you would call something where the only thing that it does for you is make sure that you don't reuse the name as another declaration. Cause let already does that. So I don't even know. But again, down the rabbit hole, I just think that whole thing is stupid. And, and that's that. And I don't see any upshot to it. I only see people, I only see people get confused because they don't understand what they're doing in the first place. And then you're throwing bad terminology on top of it, making, uh, you know, pouring salt in the wound, except salt in the wound would actually help the wound heal if I'm not mistaken, and this is not the case.
DAN_SHAPPIR: What I can say is that you and Kyle Simpson seem to be in agreement. So, you know, like. You know, and I look, and I, so you know, you're agreeing with really smart people here. So aside from yourself being smart, you know, you will too. Anyway, it is what it is.
DAN_SHAPPIR: Okay, you're kind of conflating the constants of the identifier versus the immutability of the object that it's referring to. Pulse basically just says that your identifier cannot change. It cannot, for example, reference a different object. But the
AJ: Oh C-sharp. Hmm go figure No, that's fair, that's fair. No, that's fair, but yeah,
STEVE_EDWARDS: okay so with all that exciting talk about Constance, I'm going to wrap this up since we're a little over time. Uh, it sounds like Dan, you've got enough material. Maybe we'll do an episode three down the road.
DAN_SHAPPIR: Maybe, although we'll be getting really into the weeds of, uh, of, uh, books. And I don't, and I need to consider whether or not that's something that can be done in a podcast. We'll see. I'll think about it.
STEVE_EDWARDS: Alrighty. Well, with that, we will wrap up our topic for the day and move on to picks.
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. 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 wanna go. So once again, that's topendevs.com slash coaching.
STEVE_EDWARDS: So let's start with Amy today. Amy, do you got any picks for us?
AMY_KNIGHT: Shoot, come back to me, sorry. Okay.
STEVE_EDWARDS: Let's start with AJ. AJ always has pics. What do you got for us today, AJ?
AJ: So I am holding in my hand right now the original iPhone. At least I think it's the iPhone. I don't think this is even a 3G iPhone. I think this is the original iPhone.
STEVE_EDWARDS: Like the very first one or one of the very first ones?
AJ: Well, it's not the one that Steve Jobs demoed on stage.
STEVE_EDWARDS: Oh, okay, okay. Just wanted to clarify that.
AJ: Yeah, thank you for clarifying that. I don't want...I don't want our listeners to think that I have Steve Jobs iPhone. Right.
DAN_SHAPPIR: If you had that, I would ask you to send me an NFT for it.
AJ: Oh gosh. Yeah. I'll make it a const. I'll const NFT that on the quote unquote decentralized blockchain for you where the three people in the oligarchy running the system can vet all the transactions.
STEVE_EDWARDS: Easy now. Easy.
DAN_SHAPPIR: I do have to interject that if you remember that episode on Silicon Valley, where they, where they asked how bad something is and he asked, is it Zoom bad? And then they say it's the ultimate, the ultimate this was that it's an Apple Maps bad. Because if you If you recall, they had this thing where they use where they had bugs in the maps themselves, not the maps.
AJ: Yeah, yeah, yeah.
DAN_SHAPPIR: And they actually sent some people into the desert to die because the maps were inaccurate.
AJ: So there's actually inaccuracies in maps on purpose so that this is probably not that case, but so that when map companies copy each other, they have litigation, they can claim, well, we know that you copied our database somehow because you have these fictional places that cannot exist. No, the, the maps app was, was bad in the terms of being able to, to reliably get to destinations that hadn't already existed for five years, but it was really good in terms of if I'm in a car and I want to get somewhere and I don't actually want to peruse the maps app as this wonderful experience of exploring reviews of places near me. If I just want to see, okay, I'm on this road, I'm headed in this direction, and I want to get to the nearest McDonald's that is along the route, it drops pins along your route and you can tap it. And then you just hit, there's only three taps, which I think is two taps or yeah, one tap too many, which is you tap.
DAN_SHAPPIR: I have to agree that with current maps sometimes when I'm driving and I say, Hey, I need it. I don't want to change where I'm going, but I do need to find a gas station or something, and it can be a lot more complicated than you would expect. And then it should.
AJ: Well, yeah, it lists, it lists everything by distance, but that distance could be in front of you or behind you or beside you. Whereas on the, the iPhone maps app from the original iPhone, it would drop pins. And then you tap a pin and it would give you a car icon. And if you tap the car icon, it would give you the route. It would actually show you the route. So if you did not start navigation within two taps, you can get the information that you need in a way that is functional and workable. And then if you tap the start icon, then it would actually start giving you the directions step by step. But if you didn't tap the start icon, and it was a small enough distance. You could see every turn that you needed to take. So it is exactly what a maps app should be first. But, but here's the thing with the caveat that for people who drive, which the people that design these apps, typically speaking, they don't drive. They get an Uber or they take a bus or, you know, they don't, maybe they put it into their Tesla and have the Tesla drive.
DAN_SHAPPIR: You know, again, taking this, uh, attention to be I'm always amused that all the social networks that we totally rely upon in our day, in our modern day-to-day lives, were designed by people that had the worst social experiences growing up.
STEVE_EDWARDS: Well, AJ, I can give you a little better application of that other than what you're talking about. For our, at least for our fire department, we have apps on our phone that, you know, will indicate when we have a call and need to go somewhere, and it can hook into an apps map on your maps app, excuse me, on your phone. And so I was doing some playing arounds in our app, it's called Active 911. And the most recent updates let you choose which app to use. But I did some comparisons between Google Maps and Apple Maps on an iPhone, just in terms of the data that was available for a specific place, our mobile home park, whatever. And I found that the Apple Maps were more complete and actually had better data at least in my experience, than the Google Maps. I actually started using those instead. So there's that aspect as well.
AJ: That's interesting. I typically use Waze nowadays when I want, when I need the best possible information, I'll end up using Waze cause it'll actually redirect you if there's a traffic jam.
STEVE_EDWARDS: Right. Yeah. Doesn't necessarily get you there. Some of those redirections aren't,
AJ: yeah, they're okay. It doesn't necessarily get you there faster, but it. It evens out the traffic. So it does get you there faster from the perspective that people who stay the main course and people who go the ways way will arrive there at the same time, but they'll both arrive faster because ways is redirecting people through alternate routes so that, and you can see who else is a ways user, because when you start going through cutting through a neighborhood to get back on the main road, you know, like nobody knew that you could cut through that neighborhood to get to that main road. So they've got to be using Waze as well.
DAN_SHAPPIR: Yeah. But I'm sure the neighbors love it. Yeah, that's exactly the thing. A lot of neighborhoods got really upset because all of a sudden they were getting a lot of traffic going through all these side streets in these quiet neighborhoods because Waze was redirecting them, you know, there. And I just wanted to mention by the way that Waze is an Israeli company that got bought by Google and as far as I recall, the development still is.
STEVE_EDWARDS: Right on. All right, Amy, you ready?
AMY_KNIGHT: Yep, I am. Okay. So I'm going to give a programming pick and then a non-programming pick programming one now that I'm doing a lot more DevOps. I'm working with a lot more developers and it scares me when we're screen sharing and they're manipulating Kubernetes clusters and they don't always know the cluster they're on. It's absolutely terrifying.
AJ: I've heard about that. You can run the command in one terminal, be operating on one cluster and then go run the command in the other terminal and your bash or your shell is going to show you the previous one that you were just on because it hasn't updated yet.
AMY_KNIGHT: Well, it would depend probably depend on what you're using, but I'm talking about specifically using kubectl. And that does persist, at least with what I'm using, I use iTurn2. But it's terrifying that sometimes, and it's because, you know, as a developer, you're not necessarily focused on this stuff, but so I have a tool to help you. And that is, so most people are probably familiar with just setting up like their, a get prompt, so you can tell what branch you're on. I'll drop a link to a tool that I use. That's super simple to set up so that I can see my cube context in my dash prompt. So it's right there screaming in your face what cluster you're working on. So you're not accidentally running anything in prod that you meant to run in depth. And then the other thing I'm going to pick, and so people that are more close to me know, like, I don't know, as of September, October have been completely nerding out and falling in love with investing and financial literacy and all this stuff. So as we're getting close to the new year, I'm going to encourage people, if it sounds interesting, to just up their financial literacy. I think people in my generation desperately need to learn about this stuff. It's not really taught in schools. It's not always the most, I find it exciting. Not everyone finds it exciting, but there's various reasons for this. But at least in the United States, the inflation rate was at 8.6%. As of two Fridays ago, that's the highest in 40 years. So if your money is just sitting in a savings account, it's now worth 8.6% less than it was last year. And that's in large part because of COVID relief that was needed and stuff like that. So it's just really important to understand that, understand the tax implications of how much you can, maxing out your 401k, maxing out your Roth IRA is very different than just the company match. So I'm just gonna encourage people to learn all about that stuff. And that's it for me.
DAN_SHAPPIR: Hey Amy, I should really put you in touch with my wife. She's studying up to be a certified investment advisor, based in Israel.
DAN_SHAPPIR: So I should definitely get you two together if you're really interested in that and she's really into it right now.
AMY_KNIGHT: Yeah, I'd love to hear the perspective of other countries. I know we have a lot of international people listening to this. And it's my understanding that just because COVID was a worldwide thing that the inflation rate's pretty high across the world.
DAN_SHAPPIR: Actually, it's still really low in Israel.
AMY_KNIGHT: That's good.
DAN_SHAPPIR: In Israel specifically, as I recall, it's less than 2%.
AMY_KNIGHT: That's good.
DAN_SHAPPIR: And the other thing is that it's all global markets now in India. So, you know, when you invest...
AMY_KNIGHT: Well, yes and no. I mean, I'm specifically... I have various different investments and only certain investments that I have are international, but I specifically my brokerage account, I only have that invested in US stocks.
DAN_SHAPPIR: Yeah, but a lot of people from other countries invest in US stocks as well.
AMY_KNIGHT: Correct. Yes. So yeah, I just, and if people have questions, feel free to reach out to me on Twitter or Instagram or anything like that. Like I'm not a financial advisor. I could be telling you wrong things, but definitely.
STEVE_EDWARDS: But you just play one on TV.
AMY_KNIGHT: I'm definitely very passionate about educating people on this stuff because I'm learning a lot that I wish I would have learned much sooner in life, but better late than never.
STEVE_EDWARDS: All right Dan and what do you have for us?
DAN_SHAPPIR: Okay. I have two picks today. The first has to do with the fact that this week I started working at a new place, the company is called Next Insurance. So yes, I now work at an insurance company. I kid that I'm an insurance agent. Oh, but seriously, I'm, I mostly do the same stuff that I kind of did before, except that my role is now expanded in the past. I dealt only with. Mostly with performance on the front end. And in my new role, I'll be dealing with performance on front end and back end as well. So for example, I'm brushing up on my Kotlin because that's the programming language that we use on the back end. And maybe I should talk to Chuck about starting a podcast about that. And I have to say that it's such an exciting experience for me, it's kind of scary when you're starting at a new place, especially after working for a long time at the previous place. I worked at Wix for seven and a half years, but it's also really exciting. It's about meeting new people and finding new challenges and the ability to impact in new places, especially given that Next is a much younger company than Wix is, even though it's a unicorn. And by the way, AJ, another thing about Israel is that Israel, I think, has the largest concentration of unicorns outside of Silicon Valley. I think in Israel, there's something like 50 unicorns, something like that. And by unicorn, I mean a company that has not yet gone public and is worth more than a billion dollars, you know, based on investments. And Next Insurance is exactly such a company. And just to finish up that telling you a little bit about that company, what it does is sell insurance online to small businesses. So if you're a small business and you need insurance and you don't want to have to deal with the insurance agents, you just want to go to some websites where you can get your policy and also later if need be make claims, then the next just might be the solution for you. So that would be my first pick. And my second pick is this really funny story. We kind of mentioned NFTs during the episode. So there's actually two related stories about that. So somebody is selling NFTs of these drawings of monkeys. I don't recall how many monkeys there were, but each one was selling for around $300,000. I have to say that they're nice looking monkeys. It's a nice cartoon. But anyway, somebody was planning to sell his for something like, to sell his, and instead of typing in $300,000 he accidentally typed in $3,000 and before he could retract that it was immediately bought and You know because of the way that the blockchain works once it's done. It's done So wait,
AJ: what did he pay for?
DAN_SHAPPIR: So he wanted to sell one of those monkeys and monkey NFTs Oh the going price was three hundred thousand dollars and he accidentally sold it for three thousand dollars
DAN_SHAPPIR: and again, it was immediately bought and once it's, you know, and it's, you know, one with, with blockchain, once it's done, it's done. There's no backseat. So yeah. So that's one funny story about NFTs. The other funny story was about the same monkeys, which is how they related that this person, Molly White, I actually saw this on Twitter. It seems like she has an interesting account of Twitter as well. She started this website kind of giving news about Web3 and kind of mocking it mostly and showing how nuts it is. And she's actually using a part of the picture of one of those monkeys in the banner on her website. So this guy actually sent her a message where he said, hello Molly, hope you're doing fine. I believe you're using my app, my ape, on your website without my permission. Can you please prove you own this ape, as I believe there is only one looking like this and it is mine. This is really funny because it means that this guy really doesn't get what NFTs mean, if he thinks that NFTs and DRMs are the same thing.
AJ: Yeah, I mean, it's, uh…
DAN_SHAPPIR: The fact that you own the NFT to the ape does not preclude anybody else from using that ape picture any way they see fit maybe from selling another NFT to the same age.
STEVE_EDWARDS: Sounds like everybody's really monkeying around with those things.
STEVE_EDWARDS: All right, so is that your last pick Dan?
DAN_SHAPPIR: Yes, that's it for me.
STEVE_EDWARDS: Okay, so my picks, a couple of interesting blog posts. One is any developer worth their salt will tell you that when they run into problems, something you don't know how to do or how to remember a function or something like that, you usually start searching for it, you usually start Googling it. I know, I have heard Some well-known developers say that they feel weird live coding on something like Twitch because users are going to see how much they just actually Google. So I found this blog post on Hacker News from a developer who documented in a blog post everything they Googled in a week as a professional software engineer. The developer's name is Sophie Koonin, K-O-O-N-I-N. LocalGHOST.dev is the name of the website. I'll put the link in there. But it's just really interesting. It just lists with the day-by-day breakout, all the things that they Googled during the day, that she Googled during the day. One of the funnier ones was she was Googling something on Chores, C-O-R-S. And while she was doing that, she started Googling on the Chores, which was an Irish band. They had some popular stuff back in early 2000s. I still have some of their music, actually. I made a meme that combines programming Chores with the Chores band. Pretty funny. Second, non-technical post is has to do with lightning. And it's a blog post from Quantum Magazine that talks about how they got some really cool detailed footage of what triggers lightning. It's one of those things that we know what it does and don't always have the fine details of how it gets started. And it's a whole article about how this big telescope array was used. It's LOFAR, low frequency array thousands of small radio telescopes and how they document and attract what causes lightning to be initiated within a cloud and then eventually be released. So really sort of fascinating article. I particularly love that kind of stuff just because it shows the amazing design that there is in nature. And then finally, what everybody's been waiting for is my dad jokes of the week. I can feel the anticipation building. Just do two of them today. So my first one and I'll get to use some voice stuff in here. What did Yoda say the first time that he saw himself in 4K on TV? HDMI. Thank you. Thank you. And then the second joke.
AJ: I'm unmuting so I can I can chuckle or snortle as the case may be. Right.
STEVE_EDWARDS: Well, you missed your chance to chuckle there.
AJ: I did. I did. That's that's why I'm gearing up this time.
STEVE_EDWARDS: OK, this one might not be as good. But December 19th, which was two days ago as a recording of this, was oatmeal muffin day. And so two muffins are in an oven. One muffin turns to the other and says, wow, it's really hot in here. The other muffin screams, oh my gosh, a talking muffin. Thank you. Thank you. So those are my picks for the week. And with that, we will wrap up this episode. Oh, I'm sorry.
DAN_SHAPPIR: Somebody tweeted that if he could go back in time and tell himself, you know, his younger self one thing, it would probably be how to build a tiny ship.
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.com to learn more.