Speaker 1: Hello, everybody, Welcome to another exciting episode of JavaScript jabb Er.
Speaker 1: I am Steve Edwards, the host with the face for
Speaker 1: radio and the voice for being of mine. But I'm
Speaker 1: your host today, whether you like it or not. Anyway
Speaker 1: with me today, I have on our panel mister Dan Shapier.
Speaker 2: How you doing Dan?
Speaker 3: As well as can be expected given that I live
Speaker 3: in Tel Aviv.
Speaker 1: Yes, I would say it's rather explosive times, there isn't it.
Speaker 3: Yeah, you can tell Aviv if you want, if you
Speaker 3: want to joke about it.
Speaker 2: Yet is it so? Yeah?
Speaker 3: If you put in this way, there's greater than zero
Speaker 3: possibility that doing the recording today, I'll need to jump
Speaker 3: off and run to the bomb shelter.
Speaker 2: Bomb shelter.
Speaker 1: Yes, yes, if you've been watching the news, you should
Speaker 1: know what's going on in Tel Aviv. We'll leave it
Speaker 1: at that.
Speaker 2: With me.
Speaker 1: With us, we have our very special guests, mister Dmitri Metropolis.
Speaker 2: How are you doing, Dmitri?
Speaker 4: Great? Great, happy to be thank you.
Speaker 1: And yes, we were asking him ahead of time that
Speaker 1: as Metropolis has in the same city where Superman lives,
Speaker 1: so you know, it's a it's.
Speaker 4: An old Greek name, so it's probably in the old days,
Speaker 4: was pronounced a little different. You know. Ancient Greek was
Speaker 4: a tonal language actually, so it had pitches like Chinese. Yes, right,
Speaker 4: very different from how it sounds today.
Speaker 2: Yeah, that's true.
Speaker 1: I've spent some time in China, and I have friends
Speaker 1: that have lived there for a long time and speak
Speaker 1: China Chinese, and the tones make a huge difference in
Speaker 1: what you say. You can say one word with two
Speaker 1: different tones and they mean two different things. And if
Speaker 1: you get lazy, you can say something that you really
Speaker 1: didn't want to say.
Speaker 3: It literally means city, doesn't it.
Speaker 4: Yeah. And by the way, which city, people, I think?
Speaker 3: Oh, okay, And by the way, which city do you
Speaker 3: actually live in?
Speaker 4: I live in here in Michigan. I live like a
Speaker 4: bit north of Detroit, the Mitten State. Yeah. People make
Speaker 4: fun of us because you can, you know, you can
Speaker 4: say where you're from by holding up your hand, right.
Speaker 4: But you know, hey, whatever, are.
Speaker 2: You one of those up people? Are you down on the.
Speaker 4: No, I'm not there. They're called us. Yeah, I'm not aperuh,
Speaker 4: but uh, you know it's beautiful up there, so I
Speaker 4: won't hate on him.
Speaker 1: There's a I still have this really old humor song
Speaker 1: on my computer from a group called the Upers, and
Speaker 1: it's about the second week of deer Camp.
Speaker 2: Uh. They were like a little comedy group back in
Speaker 2: the day.
Speaker 4: Sounds about right.
Speaker 2: It's a very old song.
Speaker 1: It's a second week of deer Camp and all the
Speaker 1: guys are here anyway, So moving on to our topic, usure, Uh,
Speaker 1: we're going to talk about Dimitris.
Speaker 3: Oh, I would like to introduce the topic. If you
Speaker 3: don't know, I was first of all, I have to
Speaker 3: mention that it was when it just when it was announced.
Speaker 3: It was obviously my pick on the very next podcast
Speaker 3: and I and I basically called shot a shotgun on it,
Speaker 3: so with y else could pick it because for me, it's
Speaker 3: a totally insane, wacky and out of this world project.
Speaker 3: It's simultaneously amazing and I think also educational. The fact
Speaker 3: that it's that it was actually created and the amount
Speaker 3: of effort that you put into it, based on the
Speaker 3: video that being released about it is more or less insane,
Speaker 3: and we will obviously learn more about it. So without
Speaker 3: further ado, what did you do?
Speaker 4: I think I had a thought, and the thought never
Speaker 4: I could never let the thought go. I think that's
Speaker 4: ultimately the answer to the question of what I did,
Speaker 4: and the thought was, yeah, but there's no way you
Speaker 4: could run doom and typescripts type system. You know, that
Speaker 4: was the thought. I think that I have opinions that
Speaker 4: informed that thought, and one of the core ones is
Speaker 4: my feelings about what it means for a system to
Speaker 4: be turning complete. So a couple of years ago, someone
Speaker 4: posted an issue It's still the Open on the Typescript
Speaker 4: repo saying, hey, I was just playing around and I
Speaker 4: noticed I think the type system is turing complete. And
Speaker 4: it got a lot of press and it was very
Speaker 4: you know, we all had a laugh, you know, everybody
Speaker 4: typescript nerds had to laugh about it. But since that time,
Speaker 4: I think people would say, I'd hear here and there
Speaker 4: if someone say, oh, well, but if it's turning complete,
Speaker 4: then of course it could you know, X Y Z thing,
Speaker 4: and I just think that's baloney. I just it's totally
Speaker 4: I just fundamentally cannot get on board with that kind
Speaker 4: of thinking because Turing completeness, well we could.
Speaker 2: Incomplete, yeah, touring complete.
Speaker 4: So there's this guy, Alan Turing, and he made quite
Speaker 4: a lot of contributions to society, but one of them
Speaker 4: was he described a system that we now call a
Speaker 4: Turing machine. And Turing machines can be used to represent
Speaker 4: arbitrary calculations and you know, perform arbitrary CPU work, and
Speaker 4: Touring machines are extremely are well known for being extraordinarily simple. Actually,
Speaker 4: you can do it in binary. You can do it
Speaker 4: with like a ticker tape. You can think of this
Speaker 4: little bug kind of dancing through a ticker tape, you know,
Speaker 4: looking at the one zero or one bit in front
Speaker 4: of it and making a decision about where to go
Speaker 4: and what to do next.
Speaker 3: Basically, it's if I remember correctly, it's a theoretical machine. Yes,
Speaker 3: that is the simplest mechanism that can perform any computation.
Speaker 4: Right, So, if you can show that a system is
Speaker 4: Turing complete, there's a chain of mathematical proofs that demonstrate
Speaker 4: that you could build your way up to creating an
Speaker 4: extraordinarily complex system like any In fact, any computer could
Speaker 4: be built from the bones of a Turing complete machine theoretically,
Speaker 4: and the theoretically part is where I totally fall off
Speaker 4: from the bandwagon, because to me, it's not interesting. So
Speaker 4: if I told you, hey, you know, Dan, I have
Speaker 4: this machine in my basement and it can compute you know,
Speaker 4: one plus one, except that it will take one hundred
Speaker 4: million billion years and all the atoms in the observable universe.
Speaker 4: Isn't it cool?
Speaker 3: Now?
Speaker 4: Tell me Dan, how cool do you.
Speaker 3: Think that is? How? That's how, that's how we're supposed
Speaker 3: to prove string theory. I believe they need to build
Speaker 3: a Liege hedron collider the size of the universe or
Speaker 3: something along these lines in order to prove right.
Speaker 4: So like, I just don't find that super interesting. And
Speaker 4: so what happened was, you know, I have a YouTube
Speaker 4: channel that I participate in called Michigan Type Script and
Speaker 4: I help out with making videos there, and I got
Speaker 4: the thought one day, you know, would be a cool
Speaker 4: project is to show what the blocker is. Why, to
Speaker 4: demonstrate my the thing that I just laid out, which
Speaker 4: is that being turn complete is not enough. You need
Speaker 4: a lot more into in order to do anything of
Speaker 4: any like real significance. And I, you know, thought this
Speaker 4: would take one or two weeks maybe of like putting
Speaker 4: around with the type system. You know, I have to
Speaker 4: mention like I had done a video series on advanced
Speaker 4: typescript type stuff. So there's these things called the Type
Speaker 4: Challenges made by Anthony Fou really great stuff, but they're
Speaker 4: they're very hard, and like the last one is making
Speaker 4: a Jason parser purely in Typescript type system. So some
Speaker 4: people are not aware that you can do arbitrary kind
Speaker 4: of kind of computations. It's called type level programming these days,
Speaker 4: and there is a lot that you can accomplish with
Speaker 4: very small building blocks, almost like what a turning machine
Speaker 4: gives you. And so I just thought I would work
Speaker 4: on findings.
Speaker 3: Stop you for a second, please, I'm thinking that we
Speaker 3: are potentially losing some of our listeners and the distinction
Speaker 3: between running things in Typescript versus running things in the
Speaker 3: Typescript type system, because it seems like, essentially it seems
Speaker 3: like it should be the same thing, but it totally isn't.
Speaker 3: So maybe you can make this distinction clearer before we proceed.
Speaker 4: I love it, Thank you for stopping me. Yeah, it's
Speaker 4: a very important distinction. So Typescript's whole point is to
Speaker 4: add types to JavaScript. So JavaScript is an existing language,
Speaker 4: but it doesn't have a type system in the sense
Speaker 4: that you can't say here's a variable, and this variable
Speaker 4: is a number and it can only be a number,
Speaker 4: so if you try to assign a strength to it,
Speaker 4: we're going to have an error. That's something that typescript
Speaker 4: gives you, but JavaScript is lacking, and that's the whole
Speaker 4: point of typescript in the kind of the most essential sense.
Speaker 4: Over the years, as typescript has evolved, there are more
Speaker 4: and more things that typescript has enabled you to do
Speaker 4: with the type system. So originally it was very simple
Speaker 4: types like I just said, like number and string. But
Speaker 4: eventually they started being able to do things with what
Speaker 4: we call literal types. So what if instead of saying
Speaker 4: I have this variable and it's a number, you can
Speaker 4: only assign numbers to it. If I say I have
Speaker 4: this variable, you can only assign these specific numbers to it.
Speaker 4: You can only assign one, two, three, and four to
Speaker 4: this variable. And if you try to assign five, even
Speaker 4: though it's a number, we're going to give you a
Speaker 4: type error. So there are literal types, and you can
Speaker 4: do this with strings too, So you can say I
Speaker 4: have this variable. The only types that are allowed to
Speaker 4: assign to this variable are red, green, and blue. These
Speaker 4: you know R E D G R E E N
Speaker 4: D L U E those are the available string options
Speaker 4: that you can assign to this type. Well, there's another
Speaker 4: thing that they added that goes even further, which is.
Speaker 3: That and again I'll stop you for a second just
Speaker 3: to clarify why this might be useful, because and I
Speaker 3: think your example with colors is excellent because, for example,
Speaker 3: if I'm implementing a type or a variable that's supposed
Speaker 3: to have contained a color that, for example, use in CSS,
Speaker 3: and I don't want to allow any arbitrary string to
Speaker 3: be assigned to it. I want the static type checking
Speaker 3: to validate that at run time. Well, actually at build time,
Speaker 3: I'm validating that I can only assign but the specific
Speaker 3: string values to it, and if I try to assign
Speaker 3: a general string to it, I will get a development
Speaker 3: time or buil time type error.
Speaker 4: Exactly. Yeah, what if you put it you just have
Speaker 4: a typo. You know. Typescript is really amazing because it
Speaker 4: can keep these kinds of errors, this whole class of
Speaker 4: errors out of the program.
Speaker 3: I write red instead of bread or something along it.
Speaker 4: Right, exactly, yeah, perfect. So the second thing that they
Speaker 4: added is something called generics. Generics exists in lots of languages,
Speaker 4: but generics is a way to operate on types. So
Speaker 4: it's kind of like a function. You say, I'm gonna
Speaker 4: take as a parameter some other function, Like we were
Speaker 4: saying red, green, and blue. Okay, So I'm going to
Speaker 4: take some other type and you can add to it,
Speaker 4: or you can change it, or you can inspect it
Speaker 4: and see what it does and do something different. So
Speaker 4: you can say, oh, if it's red, I'm going to
Speaker 4: return the number one. If it's green, I'm going to
Speaker 4: return five, and if it's blue, I'm going to return
Speaker 4: one thousand. You can do stuff like that.
Speaker 2: Is it an oversimplification to say? It's almost like a class.
Speaker 1: Override and object oriented programming where you can take something
Speaker 1: and extend it.
Speaker 3: Yeah, but it's done it it's build time or dev
Speaker 3: time rather than at run time. You're specifying the type.
Speaker 3: The arguments to the type are themselves types.
Speaker 4: So it's kind of like a It's kind of like
Speaker 4: its own programming language tucked away inside of JavaScript. It's
Speaker 4: like you have JavaScript, and then you have this other
Speaker 4: language on top that allows you to kind of speak
Speaker 4: in these other terms, and it's often in reference to
Speaker 4: what the JavaScript is doing. I mean, that's the intention.
Speaker 3: I'd like you can have another example. I'd likely to
Speaker 3: try to give another example that might clarify why something
Speaker 3: like this might be useful. Let's say I'm implementing calculator,
Speaker 3: a hand calculator, and I want to do it in
Speaker 3: a type form, and I want to represent an expression.
Speaker 3: For example, I want to represent the addition operator. So
Speaker 3: the addition operator has something on the left, the addition operator,
Speaker 3: and then something on the right, and I can say
Speaker 3: that an expression is a generic type that has a
Speaker 3: number on the left and an expression on the right.
Speaker 3: So it's so it's am I am? I kind of
Speaker 3: getting the point across, Steve.
Speaker 2: Yeah, I think so.
Speaker 1: I mean, being the visual person that I am, probably
Speaker 1: be easier to see some code examples.
Speaker 2: But yeah, I think I give you.
Speaker 4: For you sure, Yeah, so you can you can provide
Speaker 4: you can create functions that are kind of within the
Speaker 4: type system only, and you can create types that you know,
Speaker 4: that are just artifacts of the type system that don't
Speaker 4: exist at run time. So JavaScript is really weird because
Speaker 4: you know, we kind of attached a type system to
Speaker 4: it later. I mean, this also kind of happened in Python,
Speaker 4: but it's a part of Python, whereas in JavaScript, you know,
Speaker 4: there is no part of JavaScript that includes a type system.
Speaker 4: It's collect purely typescript and the type Script team there's
Speaker 4: no spec for it either, right, it's just something that
Speaker 4: they kind of developed and designed and they have documentation,
Speaker 4: I guess. But the JavaScript language itself is standardized and
Speaker 4: has a specification that's completely abstracted from the engines themselves,
Speaker 4: like V eight that run the JavaScript code.
Speaker 2: That's that's the EKMAS.
Speaker 3: Yeah exactly, Yeah, EKMASCRIPT.
Speaker 4: That's an European Computer Manufacturers Association. Yeah.
Speaker 3: By the way, an anecdote, that's the origin of the acronym.
Speaker 3: But EKMA is no longer an acronym. They've turned it
Speaker 3: into the name. Oh really, yes, so it's literally trade.
Speaker 3: It's trademark as EKMA, the word EKMA.
Speaker 4: That's interesting. I had no idea. Well I'll put that
Speaker 4: in my bag of bar trip. Yeah. Yeah, useful knowledge exactly.
Speaker 4: It's cool to it's kind of fun to know this
Speaker 4: kind of stuff though. So what happens is similar to
Speaker 4: how we were talking about a turing machine. As you
Speaker 4: start to have bigger and bigger building blocks that you construct,
Speaker 4: you can start to do harder and harder things. And
Speaker 4: my thesis was on this project. You know that may
Speaker 4: be true, but there's going to come a point when
Speaker 4: you hit some kind of immovable object. There's going to
Speaker 4: be some unstoppable blocking point where you can't continue pushing
Speaker 4: because you hit some memory constraint, or you hit some
Speaker 4: CPU time constraint, or you hit some issue that is
Speaker 4: just not solvable with the tools that we have today. Like,
Speaker 4: maybe someday someone could do it, but I was sure
Speaker 4: that it would not. It would never be possible in
Speaker 4: today's Typescript to be able to do something like run
Speaker 4: doom and we can talk, we can get into like
Speaker 4: what does it even really mean to say that you
Speaker 4: ran doom? And I can explain that, But that was
Speaker 4: basically the idea of the project.
Speaker 3: But again moving slightly back to the type system itself
Speaker 3: in order to say that the type system might be
Speaker 3: touring complete. And by the way, typescript is not the
Speaker 3: only one. I encountered a similar situation with generics and
Speaker 3: C plus plus back in the day.
Speaker 4: Yeah, C plus pus templates are also.
Speaker 3: Yeah, exactly. So basically the fact, once you have generics
Speaker 3: and the generics are flexible enough, you become touring complete
Speaker 3: because you get effectively loops and conditionals, which is basically
Speaker 3: what you really need in order to kind of be
Speaker 3: touring complete.
Speaker 4: Interesting side note on that, I learned that actually the
Speaker 4: definition of a Turing machine does not include the ability
Speaker 4: to loop it. Uh, it's it's so like CE so
Speaker 4: c C has a formatting syntax, right, there's like the
Speaker 4: C print F formatting. Yeah, it's also considered Turing complete,
Speaker 4: but you need to invoke it over and over again
Speaker 4: in a loop outside so.
Speaker 3: You can write infinitely long programs.
Speaker 4: So it's not included in the which actually, to me
Speaker 4: really adds fuel to my fire because like, I really
Speaker 4: have the position and I still do after completing this project,
Speaker 4: that calling something Turing machete complete is not really that interesting.
Speaker 4: I don't find it that interesting. I think. Actually, I'll
Speaker 4: tell you a funny thing about Doom. Actually, independent of
Speaker 4: my project, I learned when I released this that the
Speaker 4: Doom game, not like the engine, but like inside the
Speaker 4: game with your character and the gun and like things
Speaker 4: that you can do in the game is known to
Speaker 4: be Turing complete. Because you know, I was I was
Speaker 4: listening to watching people argue about this in comments, and
Speaker 4: you know, one person was saying, well, actually the measure
Speaker 4: should be Doom complete. If the system can run Doom,
Speaker 4: then that's like the bar of what is mathematically interesting.
Speaker 4: And someone said, well, you could make a computer that
Speaker 4: only can run Doom and can't do anything else, and
Speaker 4: then like, that's not very interesting. You made an ask
Speaker 4: basically for just Doom. And then they came back the
Speaker 4: you know, the first person came back to say, oh,
Speaker 4: you must not be aware that the Doom game itself
Speaker 4: is turning complete, and so then you have the full
Speaker 4: circle completing the loop that actually and so this is
Speaker 4: my my champion thing I'd like to champion to the
Speaker 4: world is that actually, Doom complete is the more interesting
Speaker 4: mathematical proof.
Speaker 3: By the way, I'm reminded that somebody implemented the CPU
Speaker 3: inside my Minecraft.
Speaker 4: Yes, yeah, exactly. Yeah, so it's a similar sort of
Speaker 4: project to something like that. Yeah.
Speaker 3: So, going back to what we were saying in the
Speaker 3: context of the quote unquote Doom complete, the type system
Speaker 3: itself provides the building blocks for implementing additionals and loops, right,
Speaker 3: I mean, conditionals would basically be let's say a generic
Speaker 3: type that accepts two types and then in a condition
Speaker 3: and based on evaluates that condition at build time and
Speaker 3: basically would return either the first type or the second
Speaker 3: type based on the condition.
Speaker 4: Right exactly. Yeah, that's that's basically the kind of core
Speaker 4: building blocks that you have, you have and then from there.
Speaker 4: So what's funny is there's no loops in the type system,
Speaker 4: but there is recursion, so anytime you want to do
Speaker 4: right right, So but I'm saying there's no there's no
Speaker 4: construct like in JavaScript you can make you can make
Speaker 4: a wild loop, but there's no construct of anything like that.
Speaker 4: But you can achieve it by making by making conditionals
Speaker 4: that have recursion inside of them. They have to have
Speaker 4: conditionals because of course if you don't have a condition
Speaker 4: then it could loop forever. But anyway, this is the
Speaker 4: construct that you end up using. And so actually all
Speaker 4: of the machine state and all the looping and all
Speaker 4: that stuff happens with recursion purely.
Speaker 3: Well, you know, when I first saw it, I was
Speaker 3: I laughed because again I encountered similar not nothing to
Speaker 3: this extent, but similar, let's call it similar kind of
Speaker 3: projects in concept, not in scope, back in the temp
Speaker 3: C plus plus template days. And basically it's because if
Speaker 3: you think about it, type system with generics is effectively
Speaker 3: a flavor of lisp.
Speaker 4: Yeah, I tell people that that it's it's it's very
Speaker 4: much like a lispy sort of thing where you also
Speaker 4: don't have statements all you all you have is expressions.
Speaker 4: So you have a you have a sense in which
Speaker 4: you can create statements by having an expression that you
Speaker 4: know is returned from something else. And there are some
Speaker 4: workarounds that I came up with but didn't end up
Speaker 4: actually needing to use to kind of fake statements using
Speaker 4: generic parameters. But yeah, in the end, it's it's a
Speaker 4: very straightforward system. If you just think of it like lisp,
Speaker 4: it kind of maps to that fairly, fairly directly.
Speaker 3: So basically, when you write a program, let's put doom
Speaker 3: aside for a minute. Let's say I'm writing a much
Speaker 3: simpler quote unquote program in the typescript type system, right,
Speaker 3: I run the program by executing by executing TSC.
Speaker 4: Right, Yeah, so you run the type checker. So you know,
Speaker 4: the thing that we talked about in the beginning that
Speaker 4: keeps you from mistyping red or green or blue. That
Speaker 4: system is the thing that is actually running your you know, program,
Speaker 4: if you want to think of it that way, And
Speaker 4: the program is a type, so actually all of Doom
Speaker 4: had to be converted in a sense into a single
Speaker 4: individual typescript type.
Speaker 3: So that begs the question again before delving into Doom itself. Yep,
Speaker 3: how do you input or output anything?
Speaker 4: So ASKI, art is the way that you output? So
Speaker 4: you basically because I said that you have a you
Speaker 4: know you have strings, I found a way to display
Speaker 4: a kind of two dimensional string, so you have new
Speaker 4: lines and it's actually new lines are collapsed by the editor.
Speaker 4: But essentially what happens is there's a type and you
Speaker 4: hover your mouse over it, and what appears in the
Speaker 4: hover that's supposed to be the you know, the place
Speaker 4: where it is, the place where it tells you what
Speaker 4: the type of that variable is. What appears is a
Speaker 4: frame of Doom. That's the end kind of result of
Speaker 4: the whole thing. As for inputs, the inputs are like
Speaker 4: pre encoded, but you can send them in as parameters.
Speaker 4: So it's kind of similar to any kind of other
Speaker 4: programming where you know you you would have there's no
Speaker 4: keyboard inputs and there's no time dimension. So if you
Speaker 4: have keyboard inputs you would use is like a list
Speaker 4: of keyboard commands, very similar to how like a tool
Speaker 4: assisted speed runner works. So you would just say on
Speaker 4: this frame, do this, on that frame, do that, and
Speaker 4: it would take those on a frame by frame basis
Speaker 4: and execute those keystrokes. So I actually also did a
Speaker 4: version of pong that is a simplified version of the
Speaker 4: whole system, just to demonstrate how that works.
Speaker 3: Basically, you've got let's say, the output is is the
Speaker 3: display and the current state, and the input for the
Speaker 3: next frame would be the current state and whatever keys
Speaker 3: were pressed. Yes, and I air quoted keys exactly.
Speaker 4: Yeah, you got it. It's a it's a it's a
Speaker 4: functional Uh, it's just like pure functional recursion state machine. Yeah.
Speaker 3: So that church. You know what I'm referring to with church? No,
Speaker 3: well he lambda?
Speaker 4: Oh oh the person, okay, yeah, the church?
Speaker 3: The person?
Speaker 4: Well, what is it? It's what's the theorem? Is it
Speaker 4: the church? Something hypothesis? I don't know.
Speaker 3: Oh, I forget, I need to check on Wikipedia or something.
Speaker 4: I'm not so I have to say with like one
Speaker 4: fun part of this project for me is I don't
Speaker 4: have any I think ignorance played a very key role
Speaker 4: in the completion of this project because I didn't know.
Speaker 4: I mean, I didn't know anything about any of this stuff.
Speaker 4: I had never written C code before, you know, doom
Speaker 4: is written in C. I had never touched huge portions
Speaker 4: of the things that I learned in this project. I've
Speaker 4: had some really fantastic jobs over my career, and I've
Speaker 4: really enjoyed the things that I've learned. But I learned
Speaker 4: more and on this one project than I did in
Speaker 4: the prior ten years of working professionally. Quite hard, I
Speaker 4: might add, you know, like you can get out a
Speaker 4: lot out of a personal project like this that you know,
Speaker 4: my job was to figure out how it all works,
Speaker 4: and I had to There's no stone that I could
Speaker 4: leave unturned.
Speaker 3: So basically, you're saying you had this crazy idea, you
Speaker 3: thought that it must be impossible, and you essentially set
Speaker 3: out to prove that it's impossible. Yes, and that every
Speaker 3: time you ran into what appeared to be a brick
Speaker 3: wall and kind of thought about saying, hey, I proved
Speaker 3: it almost impossible. You said, you had the thought of, actually,
Speaker 3: I can overcome this challenge, right.
Speaker 4: Yeah, exactly. Yeah, I mean, it's funny. There was someone
Speaker 4: on Reddit when that when the video was posted announcing
Speaker 4: the project, and we're kind of talking about burnout, and
Speaker 4: they said, yeah, I mean, it's kind of weird that you,
Speaker 4: you know, I was a little burned out before starting
Speaker 4: this project, and this was a kind of way to
Speaker 4: rekindle the love of, you know, the software craft and programming.
Speaker 4: And they said, it's kind of weird that you solved
Speaker 4: your burnout by working eighteen hours a day, because I
Speaker 4: worked very hard. But my answer to that is, I
Speaker 4: think I think burnout happens when you work on something
Speaker 4: and you don't get out what you perceive to be
Speaker 4: a result. Actually, I've known people who get burned out
Speaker 4: that are not working hard, and that itself can be
Speaker 4: like something that burns you out. It's when you don't
Speaker 4: perceive there to be something coming out of your efforts.
Speaker 4: And this project was the absolute opposite of anything like that.
Speaker 4: It constantly happened to me that I would think, no way,
Speaker 4: is there any chance that I'm possibly going to be
Speaker 4: able to solve that problem? And then some hours would
Speaker 4: pass and I'd go, well, you know what, if I
Speaker 4: could solve these other three things that are kind of
Speaker 4: sub problems of that larger problem, then I probably could
Speaker 4: hack my way through it. But I'm not going to
Speaker 4: be able to solve those three things, and so I
Speaker 4: would go down the path of trying each one of
Speaker 4: those things, and for each one of those things, in
Speaker 4: many cases, I'd go there's no way. Right over it
Speaker 4: always happen all over again, I'd say there's no way.
Speaker 4: And then so but that experience of thinking there's no
Speaker 4: way I could do it, there's no way I could
Speaker 4: make this happen, and then making it happen a day
Speaker 4: or a week later, over an over again, on thousands
Speaker 4: of little problems, that was very invigorating for me, and
Speaker 4: it was very motivating for me.
Speaker 3: And you kind of hinted at that, But how long
Speaker 3: did this take you?
Speaker 4: I have such a hard time answering this question. So, like,
Speaker 4: in total, from the moment I started trying to the
Speaker 4: moment I announced the video was a year and a half.
Speaker 4: Over a decent portion of that time I was unemployed,
Speaker 4: like let's say three months or four months, and I
Speaker 4: worked very very hard on it, Like I was absolutely
Speaker 4: at my desk typing for at least eighteen hours a day,
Speaker 4: Like I mean there were some twenty four hour stretches
Speaker 4: where I literally did not stand up from my desk
Speaker 4: for one whole day night cycle.
Speaker 3: If I may ask something personal and feel free to answer,
Speaker 3: are you single?
Speaker 4: Yes, I'm not single. I have a wife and two kids,
Speaker 4: two young kids.
Speaker 2: I think very understanding.
Speaker 4: Yeah, I think like Actually some people ask on a
Speaker 4: to follow your lead on the personal note there some
Speaker 4: people ask like, well, like, why do a thing like
Speaker 4: this personally?
Speaker 3: For me?
Speaker 4: One of the reasons is I worked so hard on
Speaker 4: this project. I really really pushed myself as hard as
Speaker 4: I have ever pushed myself on anything for so long,
Speaker 4: you know, And I did actually after that three months,
Speaker 4: I did do some contracting and I eventually got a
Speaker 4: job working full time, and I, you know, fit this
Speaker 4: in and I have squiggle comp as well. I started
Speaker 4: a conference during the same time. So there's a lot
Speaker 4: going on with Josh. Yeah, Josh Gobert, Yes, exactly.
Speaker 3: Well, I guess on this on this podcast as well.
Speaker 3: And by the way, I recently just met him at
Speaker 3: the conference in Romania.
Speaker 4: So yeah, awesome, Oh yeah, yeah right yeah, And I.
Speaker 3: Have a siren and I will have to drop off.
Speaker 3: I will rejoin you hopefully in about fifteen minutes. I
Speaker 3: have put problems with that then to all listeners.
Speaker 4: So what happened is I, you know, I put this
Speaker 4: project together and it took a year of so much
Speaker 4: hard work. And I always say, like, imagine being so.
Speaker 4: My wife is not technical, she's not an engineer, and
Speaker 4: I just kept telling her this is such a big deal,
Speaker 4: this would be really cool if someone could do it.
Speaker 4: And she supported me throughout that entire process, and there
Speaker 4: was never a moment when she doubted me or said
Speaker 4: are you sure this is really worth all this effort?
Speaker 4: You know, she would ask how it's going a lot
Speaker 4: and I could never really give a good answer because
Speaker 4: I thought it was always a day away from being over.
Speaker 4: But for me, it did wonders for my marriage in
Speaker 4: a lot of ways. Like imagine the trust that's built
Speaker 4: over a project like that, and you know, you come
Speaker 4: out the other side successful and find out that you know,
Speaker 4: you look back and see that your partner was supporting
Speaker 4: you and picking up slack the whole way while you were,
Speaker 4: you know, in your dungeon, you know, coding for twenty
Speaker 4: four hours straight without being you know, there are many
Speaker 4: nights where she would set a cold plate on the
Speaker 4: table next to me because I missed dinner, and then
Speaker 4: she would come back, and you know, these these moments
Speaker 4: are temporary. I spent quite a lot of time with
Speaker 4: the kids and the family, you know, But from me,
Speaker 4: it's very hot and cold, and when it's hot, it's
Speaker 4: burning hot, and when it's cold it's ice cold. There
Speaker 4: were also days where I didn't touch it. But it's
Speaker 4: hard to answer how long I spent because you know,
Speaker 4: I remember times where I had to drive an hour
Speaker 4: from place to place to get something or do something,
Speaker 4: and I don't even remember the drive because the whole
Speaker 4: time I was just thinking about like some algorithmic challenge
Speaker 4: or some process that I had to work through with
Speaker 4: this problem. And it's a you know, it's tough to
Speaker 4: it's tough to put it into numbers. Yeah, that's it.
Speaker 1: Sounds like you're pretty bipolar about it, huh. I mean
Speaker 1: very hot, I don't.
Speaker 4: Know, very cold. Yeah I suppose. Yeah, Well, I mean like,
Speaker 4: I don't know. I don't think I have a diagnosis
Speaker 4: or something like that. But it's just I don't find
Speaker 4: it difficult to focus for long periods. I've always been
Speaker 4: that way. It's it's but I also don't find it
Speaker 4: hard to you know, it just depends on what mode
Speaker 4: I'm in, but I find it very easy to switch
Speaker 4: into a mode where it's like hyper focused, And I
Speaker 4: find it also easy to switch into a mode where
Speaker 4: I'm doing ten different things at once and like none
Speaker 4: of them really get the attention primary attention. Yeah, that'd
Speaker 4: be the way I would put it.
Speaker 3: Yeah, So.
Speaker 1: I'm so other than you know, wanting to achieve fames
Speaker 1: so that you could be on this podcast. You know,
Speaker 1: I think of the the quote you know Edmund Hillary,
Speaker 1: why did you climb out evers?
Speaker 2: Because it was there? You know?
Speaker 1: So does this Uh I'm trying to think how to
Speaker 1: ask the question. So now that you've done this, is
Speaker 1: this yeah give you skills?
Speaker 2: You think that uh?
Speaker 1: Serve you? You know in job hunt or job? Is it
Speaker 1: just more for personal satisfaction? Like, Hey, I did something
Speaker 1: that I thought was impossible. Right, you know, what's the
Speaker 1: what's the worldwide fame that is?
Speaker 4: I'll tell you. I'll tell you the truth, the truth.
Speaker 4: It's hard to explain this without making myself sound like
Speaker 4: a like total psycho. But the reality is the way
Speaker 4: that I built is if I had completed this project
Speaker 4: and closed my laptop and never spoke of it again
Speaker 4: to anybody and like maybe my four or five closest
Speaker 4: friends know that I'm working on it, but then like
Speaker 4: the world never heard, I would probably have been like
Speaker 4: ninety five percent as satisfied as if like what I
Speaker 4: did end up doing, which is like announcing it and
Speaker 4: open sourcing it and getting a lot. It's brought me
Speaker 4: a lot of recognition, which I'm very happy to have.
Speaker 4: But I didn't do it for those reasons. I did
Speaker 4: it because I think I was born with the how
Speaker 4: hard could it be? Jane, You know, it's kind of
Speaker 4: like what you said with the mount everst quote, just
Speaker 4: I thought it was. I also the ignorance played a
Speaker 4: huge role because I frequently thought I was just on
Speaker 4: the very cusp of hitting the problem that I thought
Speaker 4: would end the project. Because all I wanted was to
Speaker 4: end the project. It wasn't. I didn't want this to work.
Speaker 4: I never believed It's funny. I have lots of recordings
Speaker 4: of me working on this because I knew I might
Speaker 4: make a video, and there's a recording of me the
Speaker 4: moment that it The project succeeded the frame of Doom rendered,
Speaker 4: which took twelve days of running the type checker in
Speaker 4: like one hundred and seventy seven terabytes of typescript types
Speaker 4: and it's like a whole thing. But it's interesting that
Speaker 4: like it's kind of hard to pick out what Like
Speaker 4: if I showed somebody the video, it's just like four
Speaker 4: minutes of me staring at the screen in silence, just
Speaker 4: like like in disbelief. I mean, it's I could not
Speaker 4: believe that it worked, because I never believed that it
Speaker 4: would work ever until I couldn't deny it anymore because
Speaker 4: it was already done. And so it's one of those
Speaker 4: things where if I had known better what I was
Speaker 4: getting into, I would never have started. And yeah, I mean,
Speaker 4: I just I think anybody. And I have friends who are,
Speaker 4: like I think, are much better engineers than I am,
Speaker 4: that are much more experienced in some sense than I
Speaker 4: am with these kinds of systems level programming tasks, and
Speaker 4: many of them told me like, why are you doing this?
Speaker 4: This is this is not gonna work. How could this work?
Speaker 4: And I'd be like, yeah, I believe that it won't
Speaker 4: work as well, I'm right there with you. I also
Speaker 4: don't think that it's gonna work. However, you know, h
Speaker 4: turns out it did.
Speaker 1: Yeah, Yeah, it's funny. I'm looking at I'm thinking of
Speaker 1: Dan's questions. So I'm looking at the are programming thread
Speaker 1: on Reddit with the video, Like, first question is what
Speaker 1: kind of daily occupation of regular financial backs fort do
Speaker 1: you need to have the guts to invest six months
Speaker 1: into a joke?
Speaker 4: It is a joke, yeah, I mean, I think, like,
Speaker 4: what's funny about the way that this works out is
Speaker 4: I said the little, you know, personal tidbit about my marriage.
Speaker 4: But actually, from like a career standpoint, what I learned
Speaker 4: and this project will I mean, it's I am so
Speaker 4: much more capable now than I was before because there
Speaker 4: I mean, I had never written C. Now I've written
Speaker 4: tons of C. I mean, for me anyway, I've written many, many, many,
Speaker 4: tens of thousands of lines of C and worked with
Speaker 4: C and refacted C code bases in LVM. I had
Speaker 4: never I didn't really know what LVM was, but now
Speaker 4: I know quite a lot about the internals of LVM
Speaker 4: and how it all works. Also, web assembly, we didn't
Speaker 4: touch on it yet, but the way I actually physically
Speaker 4: achieved this goal was by building a web assembly runtime
Speaker 4: purely in tech script types, compiling doom to web assembly
Speaker 4: and then running that in my run time. And so
Speaker 4: I built because I built a full web assembly runtime
Speaker 4: from scratch, Like there's like one hundred and sixty instructions
Speaker 4: that I implemented. And when I say from scratch, you know,
Speaker 4: I have to remind you, like there's no addition in
Speaker 4: the type system, so even addition was not available to me.
Speaker 4: I had to build addition off of abstractions of like
Speaker 4: adding and removing characters to binary strings that have like,
Speaker 4: you know, thirty two ones or zeros stacked next to
Speaker 4: each other in a string. So I had to create
Speaker 4: all kinds of abstractions and constructs I didn't know. I mean,
Speaker 4: it's like down the list, I didn't know anything about
Speaker 4: you know, two's complement binary numbers. And I built a
Speaker 4: garbage collector is in the runtime. I didn't know anything
Speaker 4: like how garbage collectors work and how that stuff works.
Speaker 4: So all these things are so directly applicable, and it's
Speaker 4: kind of funny. Before or I announced the project, that
Speaker 4: kept happening that like basically every other day at work,
Speaker 4: something would happen that I would be able to contribute
Speaker 4: to my like what my team is building or what
Speaker 4: somebody else on the company is building. That was a
Speaker 4: skill that I picked up working on this project. I mean,
Speaker 4: it's just it's so directly works out that way, and
Speaker 4: so in the end, I think I got a lot
Speaker 4: out of it from that perspective. If that makes any sense.
Speaker 2: Oh no, it makes perfect sense.
Speaker 4: You know.
Speaker 1: One of the things that I don't know if you
Speaker 1: how often you listen to us, But one of the
Speaker 1: things I talk about is the kind of person that
Speaker 1: I am is very similar to you, and that I
Speaker 1: like to know the internal details of how something works.
Speaker 1: You know, what's the little pieces that make it work.
Speaker 1: Because once you understand the smaller pieces, then that helps
Speaker 1: you understand the bigger picture and maybe even troubleshoot better.
Speaker 4: You know.
Speaker 1: I started out my tech career back in the You're
Speaker 1: doing you know a long time ago, right two years
Speaker 1: after Doom came out. Let's put it that way. And
Speaker 1: I remember Doom being is Duke Nukem. Is that you
Speaker 1: see the character and Doom or is that.
Speaker 4: It's a different game. But actually the guy in Doom,
Speaker 4: his name is Doom guy.
Speaker 1: Okay, they all start with d you know, they run together.
Speaker 1: I've never been at a gamer myself anyway, I've always been
Speaker 1: the kind of person who likes to know the the
Speaker 1: intricate details of how something works, and from my job
Speaker 1: it was sort of necessary. The classic example I always
Speaker 1: give is as a Spanish speaker, I was somebody who
Speaker 1: learned language really easily. But there's two different ways you
Speaker 1: can learn. I think that you can learn a spoken
Speaker 1: language more so than like a programming language, where there's
Speaker 1: you know, the conversational people that you know. You take
Speaker 1: a conversational Spanish class and learn how to speak phrases
Speaker 1: and and stuff, and you know how to say what
Speaker 1: you're saying, but you don't really have to understand the
Speaker 1: building blocks. Whereas the way I learned it was learning
Speaker 1: the building blocks, you know, verbs, verb, conjugation, which is
Speaker 1: sort of the crux of any language, right, nouns and
Speaker 1: all the different well all the different verb tenses and
Speaker 1: and that kind of stuff, so I understand it. So
Speaker 1: then once I have the building blocks, then I can
Speaker 1: piece things together and make a more complete whole. I'm
Speaker 1: waxing eloquent here, but I just started. So I just
Speaker 1: started a new job this week in a new company,
Speaker 1: and going through the interview process, which is long in itself,
Speaker 1: one of the questions I got was basically, how I'm
Speaker 1: trying to remember how it was phrased, but how do
Speaker 1: you troubleish you? What's your how do you troublesh you?
Speaker 1: How do you figure something out? What your tools? And
Speaker 1: my answer was the best way to be able to
Speaker 1: do that is to know the system right. If you
Speaker 1: know your system, you can spot when something's wrong, as
Speaker 1: compared to trying to figure out, well.
Speaker 2: This must be this year, this must be there.
Speaker 1: If you know how it's supposed to work, then you
Speaker 1: can identify when something doesn't work. I can remember my
Speaker 1: first career out of college was in a bank. I
Speaker 1: worked as a in the operation side of a branch
Speaker 1: and I did a lot of training and teller training
Speaker 1: and stuff in the day, and I can remember hearing
Speaker 1: a story of this. This was probably more before my time,
Speaker 1: but to me it makes perfect sense that the way
Speaker 1: they used to train tellers was you just give them
Speaker 1: cash and have them count cash, sit there and count
Speaker 1: for a long time, and then you start throwing in counterfeits.
Speaker 1: And because you know the original so well, then you
Speaker 1: can easily spot a counterfeit something's wrong.
Speaker 2: All let's get you back to your point. You know,
Speaker 2: you're talking about knowing.
Speaker 1: Web assembly and low level c stuff in garbage collection
Speaker 1: and binary and strings and stuff like that, that if
Speaker 1: you know all those little pieces, all the details, then
Speaker 1: you can easily one, you can easily build something. In
Speaker 1: two you can spot when something's going wrong. That's got
Speaker 1: to be an amazing WELLLGE sad to have to be
Speaker 1: able to know all that low level stuff and then
Speaker 1: piece it all together.
Speaker 3: Welcome and I'm back. Yeah did you miss me?
Speaker 4: Yes we did.
Speaker 2: Oh you were gone? Oh okay, anyway.
Speaker 3: Happy happy to report that apparently nobody was hurting this
Speaker 3: barrage all right. Yeah, so well, anyway, I.
Speaker 1: Was saying eloquent about knowing the details of a system
Speaker 1: based on what he learned from this project.
Speaker 4: So I think it's actually a perfect segue. Is something
Speaker 4: that I hope people take away from this project is
Speaker 4: it's such a complex system that there's no way I
Speaker 4: could have kept it all in my head. And I
Speaker 4: knew that from the very first commit. From the very beginning,
Speaker 4: I knew if there's if I ever really get far down,
Speaker 4: if like if I hope I find an early stopping point,
Speaker 4: but if I find a mid stopping like I never
Speaker 4: thought I would get to the end, so that was
Speaker 4: like never on the table. But I thought, even if
Speaker 4: I get to a midway stopping point, I we need
Speaker 4: to have an extremely extensive test suite. And so the
Speaker 4: way that I set it up is basically I run
Speaker 4: the same set of inputs against all these programs that test.
Speaker 4: Because I told you there's like one hundred and sixteen
Speaker 4: instructions that I had to create in the web assembly
Speaker 4: run time. So the system is set up to test
Speaker 4: the same inputs in that runtime six different ways. And
Speaker 4: so the I'll say them very fast. The first way
Speaker 4: is just you know, let's say the numbers are one
Speaker 4: and two and the operation we're doing is addition. So
Speaker 4: we run one plus two in JavaScript, so okay, that's fine.
Speaker 4: We run one plus two as strings as binary strings
Speaker 4: in JavaScript, that's fine. We do it again in typescript
Speaker 4: types purely, so we have a typescript you know, a
Speaker 4: routine that can do binary arithmetic, but it doesn't know
Speaker 4: anything about web assembly. It's just very low level. We
Speaker 4: do it again with decimal numbers in JavaScript, which actually
Speaker 4: under the hood converts to binary. That's four. Number five
Speaker 4: is where it starts to get really interest. I take
Speaker 4: those numbers one and two and I wrote, I hand
Speaker 4: wrote a web assembly program that like is like four
Speaker 4: lines long and basically just does that one instruction, takes
Speaker 4: those two parameters and does that one instruction in the
Speaker 4: simplest way possible. And then number six is the where
Speaker 4: the rubber meets the road. I run that same set
Speaker 4: of inputs in my web assembly run time, which itself
Speaker 4: is pretty simple, right, but it's taking that web assembly
Speaker 4: artifact that I also ran through the JavaScript web assembly
Speaker 4: run time that's built that chips with Node, and you
Speaker 4: know JavaScript is built into the JavaScript system. And this
Speaker 4: was the method by which I discovered all kinds of
Speaker 4: things that I had bad assumptions about that I I mean,
Speaker 4: you say assumption, but it's like unknown unknowns. You know,
Speaker 4: things I didn't know that I didn't understand, and you know,
Speaker 4: some of them got pretty far. Like you know, you
Speaker 4: may have heard of like little endian and big Endian.
Speaker 4: I had heard those words before, but I didn't really
Speaker 4: understand what they mean. And I accidentally. You know, you
Speaker 4: have a fifty to fifty chance of implementing a system
Speaker 4: one way or the other if you're packing bytes into
Speaker 4: memor object, and I accidentally implemented the whole system Big
Speaker 4: Indian without knowing it, And it was actually my test
Speaker 4: suite that uncovered this for me. Once it works out
Speaker 4: that if you, you know, you pack all the bites
Speaker 4: in reverse and you read them all out in reverse,
Speaker 4: you can get away. You know, webasitmbly is Little Indian
Speaker 4: by spec it has to be Little Indian. But it
Speaker 4: was only once it was very far along. Actually it
Speaker 4: was only once I started working with memory instructions that
Speaker 4: operate on a portion of a of a byte, so
Speaker 4: I'm sorry, a portion of a word, so like just
Speaker 4: the first four bites or the last four bites. Then
Speaker 4: I started to get really weird results and I couldn't
Speaker 4: figure it out, and so I fixed it. And then
Speaker 4: later I was like, wait a second, is this what
Speaker 4: Indian this is? And I google it and it's like, oh,
Speaker 4: that's ending. So now I'll always know for the rest
Speaker 4: of my life.
Speaker 3: So now if you google it, do you know where
Speaker 3: the terms come from?
Speaker 4: Yeah, it's like, what's on? What part is it? Does
Speaker 4: it go?
Speaker 3: Where the name Big Indian and Little Indian? Do you
Speaker 3: know where the origin of the name?
Speaker 4: No, it is. I thought it was just like end, like,
Speaker 4: what's what's the significant bit?
Speaker 3: So it's from it's from Gulliver's travels when when he
Speaker 3: visits the land of Lilliput. They have there there there
Speaker 3: are actually two countries there and they have a war
Speaker 3: and the catalysts for the war, you know, speaking of wars,
Speaker 3: the catalyst for their war is when you have a
Speaker 3: soft boiled egg, which side do you break the egg on,
Speaker 3: the Big Indian part of the egg or the little
Speaker 3: Indian part of the egg. And that's that's that's the
Speaker 3: that's the source of the war. And Gulliver obviously brings
Speaker 3: about peace and whatnot, but that's where the terms big
Speaker 3: Indian and little Indian.
Speaker 4: You guys really got my number. I love this kind
Speaker 4: of trivia stuff, so that's really awesome. Thank you for sharing.
Speaker 3: I'm mister, you know, especially as related to history and
Speaker 3: programming stuff, so I probably have missed it. You were
Speaker 3: talking about the fact that you implemented web assembly in
Speaker 3: the type system, so you effectively did not run doom
Speaker 3: is doom. You compiled doom into web assembly and then
Speaker 3: ran the web assembly in your type system run time.
Speaker 4: Yes, it was the first thing I tried. You know,
Speaker 4: actually a friend of mine said, hey, who's very smart
Speaker 4: in these things? He said, you could probably do a
Speaker 4: Klang compiler target target And I was like, Okay, I
Speaker 4: don't know what clang is, I don't know what it compiles,
Speaker 4: and I don't know what a target is. But I
Speaker 4: started looking into that, and I, you know, eventually, actually
Speaker 4: it's what the funny thing is is, later I learned
Speaker 4: quite deeply what Clang is, and I worked a lot
Speaker 4: with Clang and different C compilation tools. But yeah, in
Speaker 4: the end, I tried web assembly and it never stopped working.
Speaker 4: So some people ask me like how why did how
Speaker 4: What was your process for selecting web assembly, And it's
Speaker 4: like it was the first thing I tried. I had
Speaker 4: never worked with web assembly before. I had no contacts
Speaker 4: or exposure to it whatsoever. This was this was the beginning. Yeah,
Speaker 4: to me, playing always just a loud sound.
Speaker 3: Well, yeah, it's a c Lang compilation. Basically, it's the
Speaker 3: output of LVM or something, right.
Speaker 4: Yeah, it's a C compiler based on LVM. It's part
Speaker 4: of the LVM project and yeah, it's it's very closely
Speaker 4: tied to that.
Speaker 3: So essentially, anything that can be compiled down to web
Speaker 3: assembly can actually be run theoretically at least on your system. Yep,
Speaker 3: super cool.
Speaker 4: Yeah, I mean it's funny. Like I showed this to
Speaker 4: a few people before it was public, and you know,
Speaker 4: there were about two people who had the reaction that,
Speaker 4: like Dimitri, you're like vastly under selling what this is.
Speaker 4: By talking about like focusing on Doom, you're ignoring the
Speaker 4: fact that you built a full web like any I
Speaker 4: can run Pong, I can run Tetris, I can run Pokemon,
Speaker 4: I can run anything, you know, not just games, but
Speaker 4: you can do any kind of arbitrary web assembly computations
Speaker 4: with your system. And yeah, that might be true, but
Speaker 4: you know, Doom makes a better headline.
Speaker 3: Now. Again, I apologize if this is something that you
Speaker 3: spoke about while I was otherwise engaged. I understand that
Speaker 3: you actually had to modify the typescript compiler a little bit.
Speaker 4: Yeah, so it was always very important to me. Like,
Speaker 4: so I'm a typescript nerd. I mean, I'd love not
Speaker 4: to be. Some days, I actually prefer rust quite a lot,
Speaker 4: which some people find surprising. Typescript is definitely not my
Speaker 4: favorite language to write in. It's just the thing that
Speaker 4: I've written the most in and have the most familiarity with.
Speaker 4: But you know, in the end, I tried pretty hard
Speaker 4: to create something that you know, doesn't know anything about
Speaker 4: Doom and doesn't know anything really about Typescript internals. And
Speaker 4: there are limits in the Typescript type system that try
Speaker 4: to keep you from doing things like this. So they
Speaker 4: are like we talked about recursion, Okay, so Typescript has
Speaker 4: a recursion limit. It's arbitrary. It's completely arbitrary. It's one
Speaker 4: hundred recursions. If you make a type that recurses one
Speaker 4: hundred times, it will Typescript will stop and report an error.
Speaker 4: And that's just a thing that they built into Typescript
Speaker 4: to prevent runaway you know, complexity that you like, accidentally
Speaker 4: do some kind of matrix multiplication of you know, wide types,
Speaker 4: and you get this like really crazy thing that takes
Speaker 4: so many you know, could take years to compute or
Speaker 4: whatever you like. That's it's just a it's just a
Speaker 4: safety check. It's a safety guard. Well, when I was
Speaker 4: developing this, I really needed to remove those safety rails
Speaker 4: because I needed to experiment with things that you know,
Speaker 4: I would later be able to break up into smaller
Speaker 4: pieces I knew, but like when you're in the weeds
Speaker 4: kind of trying to shoot around ideas about how to
Speaker 4: work on something, it's kind of nice sometimes to like
Speaker 4: let it be dangerous. And so I modified I patched.
Speaker 4: It's just like ten lines of patches. It's not anything major,
Speaker 4: but there are these like you'd think, like, Okay, if
Speaker 4: the recursion limit is one hundred, does that mean there's
Speaker 4: a place in the code base that says, like, you know, recursions,
Speaker 4: number of recursions equals equals one zero zero, And yeah,
Speaker 4: there is. So I just went to those places. I
Speaker 4: found those limits whenever I hit them, and I just
Speaker 4: changed them to like infinity, so that.
Speaker 3: I would probably also the number of types that can
Speaker 3: exist in the system.
Speaker 4: Right, Yeah, there's a there's a type instantiation limit. There's
Speaker 4: there's a couple limits. And so these limits are kind
Speaker 4: of core to the Typescript system, but they're totally arbitrary,
Speaker 4: and it actually does work without Like the final thing
Speaker 4: that I created will render the frame of Doom with
Speaker 4: vanilla Typescript with no limits removed. But it was just
Speaker 4: very useful while I was working to be able to
Speaker 4: kind of like soft remove those limits.
Speaker 3: So you know, so how long does it actually take
Speaker 3: to render one frame of Doom on your computer?
Speaker 4: Yeah, so it took took twelve and a half days
Speaker 4: to get to render the first frame, and it was
Speaker 4: very important to me. Actually, I did a little squarely
Speaker 4: business inside of the Doom code to make sure that
Speaker 4: the first frame is inside of a game level, because
Speaker 4: the real first frame of Doom is actually just a
Speaker 4: static asset. It's a there's like an image that ships
Speaker 4: with the file, that ships with the I don't want to.
Speaker 4: We can get into Doom like how Doom works internally
Speaker 4: if you'd like, But anyway, it's not actually that hard,
Speaker 4: Like it's just it's just a picture that was put
Speaker 4: into the codebase. But I don't want to do that.
Speaker 4: I want to I want to boot the whole game.
Speaker 4: I want to boot the enemy system. I want to
Speaker 4: boot the game. Map rendering it does like some kind
Speaker 4: of it's not ray tracing. What is it called ray casting?
Speaker 4: It does ray casting to to kind of like figure
Speaker 4: out all the pixels of all the obstructions and all
Speaker 4: the geometry of the level. And you know, there's like
Speaker 4: a system for your weapon and your health.
Speaker 3: And your side is in the side. I need to
Speaker 3: mention that way back when in the day, I in
Speaker 3: the nineties, I actually worked at the company, at the
Speaker 3: gaming company, and I literally implemented, uh this the doom
Speaker 3: ray casting algorithm. The game that we developed. It was
Speaker 3: kind of like a multi user doom game. So I
Speaker 3: basically found uh uh pseudo code description of the algorithm.
Speaker 3: I figured it out, I implemented it in c It
Speaker 3: was too slow, so I actually then compiled some of
Speaker 3: it into assembly language and hand optimized the assembly language
Speaker 3: that came out. So this this was obviously from my
Speaker 3: pre JavaScript days, so I'm kind of familiar with some
Speaker 3: of the stuff you're talking about, even though it was
Speaker 3: a long time ago. So you picked a random frame
Speaker 3: inside uh, play the inside of the level, and then
Speaker 3: just rendered the first frame, right.
Speaker 4: Yeah, you can actually change the game asset to force
Speaker 4: you into a level and immediately.
Speaker 3: So that's why I've it ran for twelve days? How
Speaker 3: did you know that it wasn't just stuck?
Speaker 4: So funny story. The run that succeeded was about the
Speaker 4: eighteenth or twentieth run. I stopped counting after eleven, so
Speaker 4: I mean it took it took almost a whole year
Speaker 4: to get to the point of like being able to
Speaker 4: even try to run the because the game is very large, right,
Speaker 4: It's like kilobytes of are actually megabytes rather of JavaScript.
Speaker 4: I'm sorry, I have typescript types in one file. It's
Speaker 4: not like these systems are not made to handle megabytes
Speaker 4: of a single type being megabytes long. And so it
Speaker 4: took a long time to get to that point. I mean,
Speaker 4: when you build a system this way, you kind of
Speaker 4: can't run it until you've implemented all of the instructions, right,
Speaker 4: you like, even if there's one and if you have
Speaker 4: one hundred and fifteen out of one hundred and sixteen
Speaker 4: instructions like it, you will What happens when you get
Speaker 4: to that instruction you haven't implemented yet is the system
Speaker 4: will crash. And so it took a long time to
Speaker 4: get to that point. But once I got to that point,
Speaker 4: it did infinite loop multiple times.
Speaker 3: There.
Speaker 4: I kept track of the runs, and I was monitoring
Speaker 4: their you know, their their their progress, like how many
Speaker 4: instructions they had gotten along through, and I could I
Speaker 4: implemented a system that would kind of dump the what
Speaker 4: it was working on to disk temporarily, so that I
Speaker 4: could take a peek at what it was working on
Speaker 4: and see like how it was going. So it was
Speaker 4: a long process of getting to that, and I didn't
Speaker 4: really think, you know, you know, speaking of family stuff,
Speaker 4: it's funny how how life happens. But actually the final
Speaker 4: successful run was was spun off on the night of
Speaker 4: Halloween twenty twenty four, and I was running out the
Speaker 4: door and I thought, you know, I'll just I'll start
Speaker 4: another run because the previous one had failed earlier that
Speaker 4: day and we were going to go trick or treating
Speaker 4: with my kids around my neighborhood. I thought, you know,
Speaker 4: I'll just I'll just go push play. I'll come back
Speaker 4: to it as probably gonna feel like I had long
Speaker 4: given up on it, the idea that it would just
Speaker 4: work by that point, and of course that was the
Speaker 4: run that you know, eventually succeeded twelve days later.
Speaker 3: What can you describe your reaction?
Speaker 4: Yeah, yeah, so I was I was saying, oh, you're gone,
Speaker 4: but it's fun to talk about. I genuinely, in my
Speaker 4: heart of hearts, never believed this would be possible. I never,
Speaker 4: at any moment believed it until the very last millisecond
Speaker 4: when I couldn't deny it anymore. I mean, so I
Speaker 4: was recording the screen, and I recorded myself working on
Speaker 4: this throughout the project, and that was part of what
Speaker 4: was in the video. And there's more that I'm planning
Speaker 4: to release on this. But it's funny to watch back
Speaker 4: the video because it would have been nice if I
Speaker 4: had some kind of like big reaction, but it's just
Speaker 4: I was just stunned. I was just like immobilized, and
Speaker 4: it's like four minutes of silence. Yeah, it's just like
Speaker 4: total like total disbelief and shock. And actually you can
Speaker 4: see my eyes kind of darting around the screen trying
Speaker 4: to find a place where like it didn't render a
Speaker 4: column in the level or something, you know, some geometry.
Speaker 4: I just never I never believed it would be possible.
Speaker 4: I just never believed it until well, I couldn't deny
Speaker 4: it anymore and it was done. So yeah, it's funny,
Speaker 4: Like I don't know, I'm gonna, like I said, make
Speaker 4: a video about the why of this project, like why
Speaker 4: did I get trying to do this? And I have
Speaker 4: to find a way to like make it more palatable
Speaker 4: to show that reaction because my reaction is basically just
Speaker 4: me just being like, you know, just breathing.
Speaker 3: Happy, and then what did you do the next day?
Speaker 4: I mean, I think I did what I would have
Speaker 4: done if I had been on the other side of this. So, like,
Speaker 4: one of the things I told to my wife is
Speaker 4: like listen, because she would ask me, like what, like,
Speaker 4: explain to me why this. She had never heard of
Speaker 4: doom and stuff, so she doesn't know the history of
Speaker 4: people trying to run things into the way. No, she's
Speaker 4: not an engineer at all. So I would try to
Speaker 4: explain this, and I would say, Okay, look, here's what
Speaker 4: it boils down to. If I was on the other
Speaker 4: side of this and somebody released this project, I would
Speaker 4: my eyes would glaze over. I would have to take
Speaker 4: the rest of the day off work. My eyes would
Speaker 4: glaze over. I would I would walk outside and stare
Speaker 4: at the sun and probably go blind, Like I would
Speaker 4: question everything about the universe if this, like it would
Speaker 4: really rock my world. If this is possible, it just
Speaker 4: can't be possible. So like all trying to do a
Speaker 4: show why it can't be possible, which means I could
Speaker 4: be done at any moment. I could be done today,
Speaker 4: I could be done tomorrow, not sure, but I knew
Speaker 4: that if I was on the other side of this,
Speaker 4: I would just be like totally, totally shaken. And despite that,
Speaker 4: I was in the driver's seat all along because I
Speaker 4: had this attitude of this couldn't possibly work. Yeah, that
Speaker 4: ended up. That ended up happening. I didn't stare into
Speaker 4: the sun and go blind, but all the rest of
Speaker 4: it did that. I just kind of walked around, you know,
Speaker 4: like fuzzy, Like my body felt fuzzy for hours afterwards.
Speaker 4: I just could not believe that it was like finally
Speaker 4: in front of me. I spent a long time believing
Speaker 4: it wouldn't be possible. Funny, it's such a stupid thing,
Speaker 4: but you know, here we are.
Speaker 3: That's well, you know the things in't like. By the way,
Speaker 3: have you actually tried to run it on the new
Speaker 3: GO compiled type compiler?
Speaker 4: No, and I will never So one of the things
Speaker 4: that is interesting, I also promised my wife I would
Speaker 4: never open the project up again. But actually I don't
Speaker 4: need to do that because I it sounds funny to say,
Speaker 4: but I have like absolutely no interest in continuing this,
Speaker 4: Like I didn't have interest in doing it in the
Speaker 4: first place. I just got kind of nerd stiped into it,
Speaker 4: so to speak.
Speaker 3: It's just that instead of twelve days, it should take
Speaker 3: a day and a half.
Speaker 4: Yeah, and some people some people said like, oh, but
Speaker 4: you know, like what about the second frame? You know,
Speaker 4: that was one of the common complaints on the announcement videos,
Speaker 4: like but you didn't show any gameplay, And it's like, look,
Speaker 4: if I had rendered a hundred frame, someone could say
Speaker 4: what about one hundred and first frame? Like, on a
Speaker 4: mathematical level, it is literally equally as an interesting to
Speaker 4: say that I rendered one frame as a did render
Speaker 4: one hundred, like or a thousand or whatever the first level, Like,
Speaker 4: I don't care about that part. There was the whole
Speaker 4: purpose of this project was trying to kind of like
Speaker 4: trick the typescript type system into doing this like very
Speaker 4: difficult task.
Speaker 3: And II the point was never to actually play Doom
Speaker 3: at the frame rate of one every twelve days.
Speaker 4: Yeah, I say in the video like I didn't do
Speaker 4: this because I have no better way to play Doom.
Speaker 4: You know, there's lots of ways I couldn't played Doom
Speaker 4: if that was my goal. This was like a kind
Speaker 4: of mathematical pursuit, you know, academic pursuit.
Speaker 3: Yeah, it'll be interesting. I'm sure somebody will pick up
Speaker 3: the conflict or the mental or something.
Speaker 4: And it's open source, so if you know, if somebody
Speaker 4: listening is one of those people that would like to
Speaker 4: kind of I don't know what the next level of
Speaker 4: this would even be, because to me, like Doom is
Speaker 4: kind of like the finish line. Some people have asked me, like,
Speaker 4: why did you go from nothing like this ever having
Speaker 4: been done before all the way to Doom with no
Speaker 4: stops in between, And you know, it comes back to
Speaker 4: this recurring thing. It's just because I thought it wouldn't
Speaker 4: be possible. So if that's your mindset, there's no reason
Speaker 4: to play around with like Pong or Tetris or Pokemon
Speaker 4: building up to it, Like, just go straight to doom,
Speaker 4: to the hardest thing and show why that can't be done.
Speaker 3: And then and also the fact that you implemented web assembly, right,
Speaker 3: is the fact that you could run now run anything
Speaker 3: on it that, like we said that can compare the
Speaker 3: web assembly. So Doom is just one example. It could
Speaker 3: be anything else.
Speaker 4: Yeah, And in fact I did actually maybe I'm fibbing
Speaker 4: a little bit, I did actually implement one other program first,
Speaker 4: and it was Conway's Game of Life. So you know
Speaker 4: Conway's game of life is this thing called a cellular
Speaker 4: autonoma autumata for anybody listening, And it's just kind of
Speaker 4: like a it's kind of like imagine a piece of
Speaker 4: grid paper and you make a game out of like
Speaker 4: rules about which you know, grids are filled in on
Speaker 4: the paper. And I wrote that and see, so that
Speaker 4: was the first C program I had ever written. And
Speaker 4: that completed in January twenty twenty three. So from January
Speaker 4: all the way until November was how long it took.
Speaker 4: Like it was a pretty full functioning system at that
Speaker 4: point for the instructions that Conways needed. And again I
Speaker 4: wrote it in see not in straight web assembly. So
Speaker 4: there's actually quite quite a lot of instructions. There's like,
Speaker 4: let's say eighty instructions or something like that that Conways needed.
Speaker 4: But it took a lot more to get Doom running
Speaker 4: than just that.
Speaker 3: There's quite a lot the last you know, the thing
Speaker 3: about software projects, well, I guess projects in general is
Speaker 3: that that eighty twenty rule, the last twenty percent takes
Speaker 3: eighty percent of the time and effort.
Speaker 4: Yeap basic definitely was the case here.
Speaker 3: Super cool, and then you basically just put it aside
Speaker 3: and continued with your with your life.
Speaker 4: Yeah, I haven't touched it, not one bit since the
Speaker 4: day of the announcement. Anyway, I had to like rework
Speaker 4: the read me. It's funny. I committed a lot. So
Speaker 4: if you read the commit history, it looks like I'm
Speaker 4: totally like out of my mind, which maybe you could
Speaker 4: argue that I was while I was working on it.
Speaker 4: But it's a lot of like capital letters and exclamation
Speaker 4: points and a decent amount of swearing. And actually there's
Speaker 4: I have a sort of self deprecation. I find self
Speaker 4: deprecation very motivating for whatever reason, and so like in
Speaker 4: the codebase, it's like there's a little there's a lot
Speaker 4: of like you, dummy, what are you doing? Type of
Speaker 4: comments and things. But you know, whatever the case, maybe
Speaker 4: it was a solo project and you know, you don't
Speaker 4: have to follow all the rules you do at a
Speaker 4: project at work.
Speaker 3: But yeah, no, what came out when it came out.
Speaker 3: You spoke with some typescript or web personalities I recall
Speaker 3: from your videos in particulars in particular your conversation with Anders. Yeah,
Speaker 3: so can you tell us a little bit about that.
Speaker 4: Yeah, that was that was a really awesome moment. So
Speaker 4: because of the channel and work that we've done on
Speaker 4: Michigan Typescript prior, I had an opportunity to do some
Speaker 4: videos there. I think probably four or something five members
Speaker 4: of the team have been on the Michigan Typeescript channel
Speaker 4: for various you know, it's always very nerdy things about
Speaker 4: interviews about typescript or trying to solve particular type challenges
Speaker 4: and stuff like that, and so I had been asking
Speaker 4: them about you know, hey, you know, it'd be really
Speaker 4: cool because when I showed it to people privately, people said, hey,
Speaker 4: I wonder what Anders, the creator of typescript, thinks about this,
Speaker 4: And I would say, you're not going to be the
Speaker 4: only person wondering that. I'm going to try. And so
Speaker 4: I tried and tried and tried, and eventually they said,
Speaker 4: all right, all right, we'll throw you a bone. And
Speaker 4: you know, Anders, I'm very gracious that he took the
Speaker 4: time to meet with me and I had a chance
Speaker 4: to show him the project and kind of give him
Speaker 4: a demo of it. Yeah.
Speaker 3: Yeah, I'm literally an an Anders fanboy.
Speaker 4: Most of us are.
Speaker 3: Yeah, well, in my case, it goes even further back
Speaker 3: because he's not only the guy that created the typescript,
Speaker 3: he's also the guy that created c Shark and Turbo Pascal. Yeah,
Speaker 3: and that of thing.
Speaker 2: Actually that brings memory.
Speaker 4: I can't believe that I forgot to say this to
Speaker 4: him when I met with him, but I was just
Speaker 4: so nervous in starstruck. But Turbo Pascal is actually the
Speaker 4: language that the original Tetris was first implemented in.
Speaker 3: Turbo Pascal is the programming language that made me a programmer.
Speaker 3: I literally ran Tuba Pascal. For our listeners who don't know,
Speaker 3: Pascal is a programming language originally created by Nicholas Worth
Speaker 3: for teaching computers. It's a typed programming language based on
Speaker 3: the Alghol family of programming languages. But my point was
Speaker 3: that up to that point I was writing writing ugly
Speaker 3: basic stuff, and then this thing comes along with an
Speaker 3: integrated IDE and a super fast type safe and a
Speaker 3: compiler for type safe programming language. So I literally almost
Speaker 3: overnight went from being a hobbyist to an actual programmer.
Speaker 3: It's really thanks to Andrews and tuber Pascal. You know
Speaker 3: what's funny, but the amazing system.
Speaker 1: When I was in college. So I graduated college in
Speaker 1: ninety one and I took a basic class. I want
Speaker 1: to say eighty nine to ninety. I think remember programming
Speaker 1: in basic, and then I took Turbo Pascal my senior year.
Speaker 1: Barely passed by the skin of my teeth. I mean,
Speaker 1: I barely passed, and I can remember, and this makes
Speaker 1: me laugh today.
Speaker 2: I can remember having problems.
Speaker 1: Getting my head around things like a raise, you know,
Speaker 1: and we had we had to come up with this
Speaker 1: card game for a final project, and I barely did
Speaker 1: the minimum.
Speaker 2: Didn't even do that. And there's just one girl.
Speaker 1: In the class who aced it, and she had gambling
Speaker 1: and you could place bets on things. It just totally
Speaker 1: blew away. And then, you know, I got into PHP
Speaker 1: later and lived in a raise for.
Speaker 2: A long time.
Speaker 1: But but oh man, Turbo Pascal brings back, so either
Speaker 1: nightmares at the same time.
Speaker 3: Yeah. So he did pscal, did Delphi, the Delphi programming language,
Speaker 3: then he did then he created C sharp and now typescript.
Speaker 3: He's he's one of my death heroes.
Speaker 4: Interesting, it was all right, it was a big moment. Yeah.
Speaker 1: So we're sort of running out of time here, So
Speaker 1: before we wrap up and move to picks. Is anything
Speaker 1: else we didn't cover that you wanted to cover, Dmitri.
Speaker 4: I think we got it. I just hope people that
Speaker 4: hear about this project understand a few basic things that
Speaker 4: made this successful, contrary to most ways that we like
Speaker 4: to think about, you know, building complex systems. If I
Speaker 4: had sat down to make a plan, this would never
Speaker 4: have been possible. I just put one foot in front
Speaker 4: of the other every day, and I kept notes about
Speaker 4: what I needed to do next as I went. But
Speaker 4: I never at any point had a big, grand plan
Speaker 4: about how to do this, and it was probably not
Speaker 4: even possible in my case because I would never have
Speaker 4: been able to know what things I would hit.
Speaker 1: So in other words, it was more of an agile
Speaker 1: methodology than waterfall.
Speaker 4: I don't know. Those are both trigger words for me,
Speaker 4: so I can't I can't comment, but but I think
Speaker 4: that sometimes people struggle with motivation to try, and I
Speaker 4: think that trying is all you need to do. In
Speaker 4: a lot of cases, I didn't have a I never
Speaker 4: got down on myself about failing because the definition of
Speaker 4: failure was built into the thesis I was trying to fail.
Speaker 4: I was trying to fail. I was trying to make
Speaker 4: it not work and just trying to find why it
Speaker 4: can't work. And I think that I learned from this
Speaker 4: and I hope people can get from it that you know,
Speaker 4: I said earlier in the call that ninety five percent
Speaker 4: I would have been ninety five percent is happy if
Speaker 4: I never told anyone about it. The five percent is
Speaker 4: I really do get a lot of enjoyment out of people,
Speaker 4: you know, have reached out to me privately and online
Speaker 4: and stuff saying like I, because of this project, was
Speaker 4: inspired to pick up some old project that I had
Speaker 4: given up on and I'm going to give it another shot.
Speaker 4: And I hope people take that away. And that's like
Speaker 4: really the main message I want to leave people's minds.
Speaker 3: Having One more important thing that you said that I
Speaker 3: wanted to call out because I think it was very insightful,
Speaker 3: is about taking big problems and breaking them down into
Speaker 3: smaller problems and doing this project process recursively. And I
Speaker 3: think this ability of breaking down difficult problems into smaller,
Speaker 3: more manageable problems and then composing the solutions back in
Speaker 3: order to solve the original big problem is what makes
Speaker 3: an engineer an engineer. Really, Yeah, this ability to me,
Speaker 3: is at the core of what we do, and it
Speaker 3: was really insightful for you to bring that up and
Speaker 3: really important.
Speaker 4: I think I couldn't agree more. Yeah, I love it.
Speaker 2: Alrighty.
Speaker 1: So with that we will move on the picks. Picks
Speaker 1: are part of the show where we get to talk
Speaker 1: about anything we want to talk about, whether it's tech
Speaker 1: or non tech related. So dan' le you go first today.
Speaker 1: What do you have for us besides sirens going off
Speaker 1: in the background.
Speaker 3: Well, my pick will actually be in this vein. So
Speaker 3: without going into you know, the details of what this
Speaker 3: war is about and whatnot, we are living in a
Speaker 3: situation where in Israel we are we are having large
Speaker 3: missiles being fired at us, and by large I mean
Speaker 3: something like one thousand pounds warhead full of explosives. As
Speaker 3: you can imagine, that can cause a lot of damage.
Speaker 3: And what makes a huge difference is the fact that
Speaker 3: we've got the system in place for intercepting and shooting
Speaker 3: down missiles. It's not a fool proof system. Such systems
Speaker 3: cannot be fool proof by definition, but it's very effective.
Speaker 3: It's something like it has an activity of something like
Speaker 3: ninety percent, which is like huge in these types of scenario.
Speaker 3: If you think about the fact that around thirty people
Speaker 3: have been killed in Israel census things started, think of
Speaker 3: you know, they make it ten times bigger or even more,
Speaker 3: that would be yeah, you know, devastating. The reason that
Speaker 3: I'm picking this is that I'm proud to say that
Speaker 3: in my background, I was actually involved with the creation
Speaker 3: of these systems way back when when I actually served
Speaker 3: in the IDF, I served for several years as an
Speaker 3: officer in the Israeli Air Force and where I primarily
Speaker 3: served was at the Air Force Ts Range, where I
Speaker 3: was intimately involved with the development the development of the
Speaker 3: aero system, which is that part of the multi layered
Speaker 3: missile defense system that actually is intended to intercept and
Speaker 3: destroy the ballistic missiles.
Speaker 2: Most that Iron Dome.
Speaker 3: No, so most people are familiar with Iron Dome because
Speaker 3: it got a lot of press and it's got a
Speaker 3: cool name. But iron Dome, like I said, it's a
Speaker 3: multi layered system. Iron Dome is actually for the lowest layer,
Speaker 3: so it's against mostly against rockets. So when Hamas was
Speaker 3: firing rockets at Israeli cities, those who were intercepted by
Speaker 3: the Iron Dome. But then you've got, you've got additional layers,
Speaker 3: You've got David Sling, and finally you've got the arrow.
Speaker 3: And the arrow is the one that's supposed to intercept
Speaker 3: ballistic missiles. Ballistic missiles, in case you don't know, literally
Speaker 3: fly out into outer space before falling back down to Earth.
Speaker 3: And the arrow is actually able to intercept those missiles
Speaker 3: in space. It's pretty nuts when you think about it.
Speaker 3: So right now Israel is using Arrow three. I'm old,
Speaker 3: so I was actually involved in the development of Arrow one.
Speaker 3: But you know, things grow, you know, evolve from one
Speaker 3: to the next. So I'm proud to say that I
Speaker 3: had mice all part in the development of that system.
Speaker 3: Hopefully this war will end soon and we won't need
Speaker 3: those anymore, and at least in the immediate future. Until that, doo,
Speaker 3: I'm happy to have them and to have them protecting us.
Speaker 3: And I guess that, oh yeah, my personal part was
Speaker 3: relatively small that so that would be one pick. The
Speaker 3: other is not a pick. It's more of an announcement.
Speaker 3: In the last episode that recorded, I told that there's
Speaker 3: a conference in Israel. Actually it's a dual conference. It's
Speaker 3: React next and No TLV. They are kind of back
Speaker 3: to back conferences. React Next is Israel's largest front end conference,
Speaker 3: and No TLV is obviously about node. Josh was actually
Speaker 3: supposed to come and keynote the No TLV conference. Obviously
Speaker 3: he can't do this at this time. I was actually
Speaker 3: supposed to keynote React Next. You know, for obvious reasons,
Speaker 3: these conferences have been postponed. So now they've been rescheduled
Speaker 3: from the end of this month to mid December. Hopefully
Speaker 3: by that time all this stuff would be behind us
Speaker 3: and we can have conferences like normal human beings. And
Speaker 3: that would be my announcements and picks for today.
Speaker 1: I guess alrighty, I will go next and go to
Speaker 1: what I prefer to think of as high point of
Speaker 1: our podcast, which is the dad jokes of the week.
Speaker 1: The other day I went into the library and I
Speaker 1: told the library and hey, I'm looking for a book
Speaker 1: about turtles. And he said hardback, and I said, yes,
Speaker 1: with small heads, all right, okay. Questions, So humans can
Speaker 1: catch diseases from monkeys and bats, but why not anteaters
Speaker 1: because they're filled with antibodies, right, okay?
Speaker 2: And then and.
Speaker 1: Then one day I made a call and I said, hey,
Speaker 1: is this the Gambling Addicts hotline, and the operator said, yeah,
Speaker 1: how can I help you? I said, the dealer had
Speaker 1: a ten against my sixteen? Should I hit or stand.
Speaker 2: Right? I was asking for help on gambling anyway, Yeah,
Speaker 2: I get it, d met You looked a little confused.
Speaker 4: I don't think I still I think I still don't
Speaker 4: get it.
Speaker 1: But well, you know, gambling at and you called to
Speaker 1: get help to avoid gambling, but I was calling for
Speaker 1: help on a.
Speaker 3: I can't tell a funny story about the fact that
Speaker 3: you know some and this is a true story. So
Speaker 3: the company that I used to work, we would go
Speaker 3: out to eat lunch at some restaurant and we would
Speaker 3: go there pretty regularly, so we got into kind of
Speaker 3: friendly terms with the owner and he would come and
Speaker 3: say it with us when we arrived and he and
Speaker 3: he liked gambling. He would literally, you know, when he
Speaker 3: could go to some casino to play. And he told
Speaker 3: us about how stupid some of the other gamblers are.
Speaker 3: That he was at the roulette table and it came
Speaker 3: up black like four times in a row, and one
Speaker 3: of the other people put on black. The bet on
Speaker 3: black again, he said, what's the chance of having coming black?
Speaker 3: Five times in a row, and we and we didn't
Speaker 3: want to and we didn't want to correct him because
Speaker 3: we didn't want to get poisoned the next time we
Speaker 3: came to eat.
Speaker 2: Yeah, all right, Gimet, you your turn.
Speaker 4: I'm going to give it up to ts morph. For
Speaker 4: those of you who haven't seen it, it's a project
Speaker 4: that allows you to do conversions on the kind of AST.
Speaker 4: You can describe changes and refactors to a project based
Speaker 4: on its AST and it it's a pretty cool project.
Speaker 4: And I don't know, I just I like. It is
Speaker 4: the first thing that came to mind. So I thought
Speaker 4: it'd be authentic if I just tell you what is
Speaker 4: on my mind that I like. Let's see, is that
Speaker 4: the pickway? Is there two things I'm supposed to pick?
Speaker 3: You can pick whatever you want. I expected you to
Speaker 3: pick a squiggle cony.
Speaker 4: Oh yeah, okay, okay, great, you read my mind. Also,
Speaker 4: so we've talked about Josh Josh okay, yeah, so okay
Speaker 4: before the call, I was saying at squiggle comp, so
Speaker 4: I run a conference with Josh Goldberg. We're co founders
Speaker 4: of squiggle comp. And the name is such because it's
Speaker 4: a dev tools conference. So there's lots of people that
Speaker 4: are making dev tooling and that's their kind of bread
Speaker 4: and butter, even internally at a company, but externally library
Speaker 4: authors and stuff like that, and Google COMP is a
Speaker 4: place for those people to get together and ruminate in
Speaker 4: the things that they learned building these tools. It's a
Speaker 4: cross language conference, so it's not a type trip conference only.
Speaker 4: We have representation from RUST. Last year we had ZIG.
Speaker 4: This year we're having Glean as well, up and coming
Speaker 4: language C plus plus C Sharp is also represented GO.
Speaker 4: There's two talks focusing on Go this year. So it's
Speaker 4: a really cool opportunity to get experience and exposure to
Speaker 4: what other communities and other languages are doing. And yeah,
Speaker 4: we're very passionate about it. Of course you have to
Speaker 4: be to run a conference. But I didn't even realize that.
Speaker 4: I didn't know that we were even being video recorded today.
Speaker 4: Last year at the conference, somebody spilled some coffee on
Speaker 4: a bunch of Squiggle COF twenty twenty four shirts and
Speaker 4: so we couldn't sell them. And so now I have
Speaker 4: like five Squiggle comp shirts, which means that when I
Speaker 4: reach into my drawer to pull out our shirt in
Speaker 4: the morning, there's a abnormally high chance that I'll pull
Speaker 4: out a Squiggle Comp shirt which is very comfortable, so
Speaker 4: it works out.
Speaker 3: A little bird just mentioned, A little bird called Nick
Speaker 3: called Josh just mentioned on our chat that you have
Speaker 3: a great dad joke about Richard Nixon.
Speaker 4: I don't have a great dag joke about Richard Nixon.
Speaker 3: Astant.
Speaker 4: I don't know, I don't know. Sorry, I'm sorry to
Speaker 4: disappoint you, Josh. I may I may, I may know.
Speaker 4: Have forgotten. I'm not very I'm not very funny. Maybe
Speaker 4: I can own that.
Speaker 3: Oh well, By the way, I highly recommend people watch
Speaker 3: the videos that you created. Where can people find them?
Speaker 4: Well, sorry, I just one last thing I forgot to mention.
Speaker 4: So Squiggle Comp this year is in Boston on September
Speaker 4: seventeenth and eighteenth. It's a really cool venue. It's in
Speaker 4: the New England Aquarium and there's a big Imax screen
Speaker 4: so it's like super comfortable and where it's a two
Speaker 4: day conference this year. We just this week announced all
Speaker 4: of the speakers and all their talk their talk topics,
Speaker 4: so you can go read the list to just go
Speaker 4: to squigglecof dot com. C s q U I G
Speaker 4: G L E c O n F and you'll find
Speaker 4: all the information there, so please take a look. Also,
Speaker 4: in kind of parallel to that, yes, I run the
Speaker 4: kind a video aspect of Michigan type Script, but there's
Speaker 4: lots of other people involved with Michigan type script. Is
Speaker 4: this other project from my home state. Here in Michigan.
Speaker 4: We have a meetup that meets once a month. Actually,
Speaker 4: we were meeting in two weeks from yesterday, and we're
Speaker 4: going to be uh definitely represented. We have a few
Speaker 4: people coming out to Squiggle Comf as well from Michigan.
Speaker 4: So it's a it's a good time. I enjoy this
Speaker 4: kind of stuff. Labors of love, you.
Speaker 3: Know, So I have as a homage to Josh, he
Speaker 3: basically wrote out the joke.
Speaker 4: Okay, all right, let's hear it.
Speaker 3: So, so it turns out that Richard Nixon worked at
Speaker 3: the restaurant. Apparently he mostly worked front of house. They
Speaker 3: offered him a space in the back of the house
Speaker 3: like working food prep and culinary work, but he declined,
Speaker 3: saying I'm not a cook.
Speaker 4: That's a joke.
Speaker 2: That was a long road for that one, but we'll
Speaker 2: give it to.
Speaker 3: It's not me, it's Josh, all right, right, all.
Speaker 1: Right, so that awesome dad joke. We will end this
Speaker 1: episode of JavaScript Jabber. Thank you Dimitri for coming on,
Speaker 1: thank you Dan for joining us, Sirens.
Speaker 2: And all, and
Speaker 1: We will talk to you next time on JavaScript Jabber