And welcome to the show, it's me, John Park, and it's time for JP's product pick of the week. You have arrived just in time. Me too, we're all here now. And thanks everyone for stopping by, for jumping in over on the YouTube chat, as well as our Discord chat. It is great to see you. Now the first thing I'll say is, if you wanna go and check out this week's product pick, you can watch the live stream inside of this webpage right here, point your camera at that, or just type in this URL. This show appears inside of the product page, so you can keep watching right from in there. And you can get an enormous discount, 50% off on this week's product pick. I am assured that we have a whole lot of them in stock, I know we had some stock issues for a couple of the product picks recently, but this one I think we're in the clear, unless you people buy thousands of them, I think we're gonna be good. So, before I go any further, what I'm gonna do is have Lady Aida talk to us from the past, the not too distant past, about this week's product pick from her new, new, new segment. Take it away, Lady Aida. This is a mini Pi TFT. So this is a very adorable little screen. We got this screen in, we made a breakout, and then- Look at the quality of this. Do you have some Photoshopped? It is beautiful. It's for real. So I have the live version as well, but you can see there's two ways to use it. Either you can use it, it's tiny. You can either use it with Python directly, which does not require kernel drivers. This is what I'm doing here, and I'm just using Pillow, which is a library. That looks unreal. It does look unreal, but it's real. It can actually play little videos on it, but it's quite small. This is a 240 by 135, which is good enough to have good resolution, great color, of course it's full color display. In this case I'm not using all the colors, but you can still see its color compared to an OLED. There's two buttons on the side that you can use to change UI or do signaling, whatever, because it just turned out that I had to make it this wide to get all the pins, and then we had enough space exactly for two buttons. It works on any Raspberry Pi you like. You can either install the kernel module if you want, which it does update your kernel to the latest. That's the trade-off. Or you can, if you just need basic drawing on to it with Python, use the Pillow library, and that's definitely the easiest way, and it'll work on any single board computer that has SPI and Python support, so that's handy. And then a bonus on the bottom, it even has a little four-pin quick connector. Of course I didn't bring any quick sensors, but if you have a STEMI QT, your quick sensor, you can see there there's a spot to plug them in. So it's really easy if you want to connect a sensor or an output or LEDs or whatever, and you want to use that I-Squared-C port because you've kind of used up these pins. Maybe you don't want to use a stacking header. This makes it really easy to connect external I-Squared-C devices, which is quite popular with people, especially since we have Blinka and all of our libraries for Silicon-Python. Since it displays video, could you have the camera go to it? Yes, we did a demo where we have the Raspberry Pi camera and the machine learning output go to this little display. That's using that, I think that was with the kernel module, but you could use it, again, if you can get anything into Python, you can just play it on the screen. Yes, indeed, that is it. So let me jump to my down camera here and grab one for myself so we can do a little bit of a demo. There it is, done, done, done. It's a little music there, don't I? So let's talk about this. This is the product pick of the week. It is the MiniPi TFT. It is a SPI, SPI, bus-based display. It has a couple of buttons for GPIO and it's got that little STEMA QT connector on the bottom so you can plug in something like this GPS. Let's say you want to add GPS to a Pi project. It's just as simple as plugging into there and then using Blinka, the circuit Python for single board computers with it. Let's see, what are the stats on this? This is a 240 by 135 pixel display. You can also use it in different orientations. There's commands inside of the drivers to be able to do that. And what I thought I would do is a little bit of a demo here. Let's take a look. I've got a Raspberry Pi here. This one happens to be a Pi 3B version 1.2, so a couple year old one, but you can use this with pretty much any of the Raspberry Pis, including Pi zeros. What I'll do is you'll see this has header pins to plug into the first 12 pins. So we still have some available for connecting other GPIO to for your project depending on what you're doing. And I'll just power this up. I have a little bit of code running on here that I'll show you in a second that is gonna run on startup, if everything works, crossing fingers, it's gonna run on startup. And what it'll do is display some important information while the Pi is running. And it just refreshes every couple of seconds with things like the time, your SSID, your IP address of the device itself, the host name, and even my ping I've got here for the wide area network. So this is really cool because one of the things that I often run into with Raspberry Pis that I'm using is I have no idea what IP address they're on if I'm gonna SSH into them. I don't have them plugged into a monitor. And so I just wanna SSH onto them and do something with them. This, it's actually, I have a wacky network that is gonna cause it to kind of go in and out which is annoying. But this one is working, you can see here that address there 192.1681.30 is the address and there's the host name that'll allow me to log into this and I don't have to go and check on my router to see what devices are connected. I can just look right there and find out which is super convenient. This code is pretty straightforward. In fact, before I go there, let's take a look at the product page for that. This is it right here. If I refresh this, we should see a big 50% off right there, $7.48 right now, maximum of 10 that you can buy. And when you scroll down in here, you will get to, whoa, my browser's going wacky on me. You'll get to some links to projects as well as the main guides, this primary guide here. If we click over to that, I have that in another tab. There it is, mounted on a Pi Zero which is a really nice little fit. And this will take you through things like the pinouts for it as well as how to install it either in kernel mode which means you can use it as a prompt.  Or you can do what I did in this case which is the Python setup. And I'm actually running a variation on the stats example here. So if you take a look at the stats example, that'll take you through pretty much what I'm running on here just with some different choices as far as what information I'm displaying. We also have a couple of cool projects in the learn system. There's a Pi hole which is a little ad blocker that you can add to your network and this will give you info on the screen there. As well as here's one that Melissa did and this is in kernel mode, I think. Oh no, it's actually, this one's not kernel mode. This is actually using pill or pillow, the graphics library in Python to do an animated GIF player which is a lot of fun, tiny little GIF player. If you take a look at my code here, what I've got going on is, find that window. Very familiar if you used to circuit Python but this is running on the Raspberry Pi itself. This is Blinka or sort of variant on circuit Python for single board computers. And you can see there I'm importing some libraries including the pill, PIL, this is the image library and the display driver for this RGB display. It's the ST7789. Then I'm setting up some of the pins for things like backlight for these buttons here for the SPI for the display. And then what I'm running on there, you can see is I've got an image that's gonna support having a background. You could do BMP images if you wanted to on here. I'm just, or shapes, I'm just using text in this case but I am bringing in a font. You can see here I've got this true type font using deja vu song, TTF. And then for the main routine of the program, what I do is I set some choices for the color of each of these lines of text, a little bit of string formatting and a command. So you can see the first one there is hostname-i which gives me the IP address. And then I'm using this little cut. This is an old school Unix command that our good friend Todd bought was filling me in on which is a way to kind of grab either tab delimited or other delimited information from, if you try just running hostname in a Linux prompt you'll see you get a lot of information and this cut command is able to go and grab a particular chunk, in this case delimited with a space and then it's grabbing kind of the first chunk that we get, I think. And then I'm asking for the hostname itself which is why it says Raspberry Pi, I haven't renamed this one. I didn't even change the password. Then I'm grabbing my SSID using a similar sort of command here, the IW-config-wlan-zero so the wireless LAN SSID shows up and then again using grep and the cut to grab just the name there so this where it says IaldsNet. And then I was changing this around a bit. Okay, I had LAN ping on here. I decided that wasn't so important. I do have the WAN, the wide area network ping so it tells me what my connection is looking like which is pretty good right now. And then I'm also displaying the time. So the bottom one here, you can see it only updates. I mean internally it's getting the correct time but my display is only updating every couple of seconds because I'm doing a few pings to check the wide area network ping and then I have a little bit of a delay at the bottom. To actually draw to the display we've just got a couple of things going on. One, I draw a rectangle which just blanks the screen. It just, I'm using black in this case so it just covers over the last time that we drew to it and then I am drawing each of these lines from this command section, getting a string for the data, formatting it and then displaying it with this draw text command at a particular X, Y position. X is always constant, Y just adds for each line so that they don't overlap. And then we display the image with whatever rotation that we have in there and then I do a little bit of a sleep there. So you can see if you're used to doing display types of things in Python or in circuit Python it's very straightforward to use this cute little adorable little screen and I think it's perfect for things like a little informational display. I probably wouldn't want to use it as my main monitor. That could be a little tricky but it's really nice for adding just a little bit of information and like I said, since we can use that STEM at QT port that information could be in this case a GPS tracker some sensor for CO2 for example anything you wanna grab a nice little I squared C device plug that in there and then add that Blink library it's gonna be really straightforward to add that to your project. And so let's see any thoughts or questions in the chat let me know. Rich Sad says they enjoy the ST7789 TFTs they have. Yeah, I think we've got these on a feather and maybe another breakout. It's a really gorgeous display. That's, you know, you saw PT and Lamar talking about this. My focus isn't great there but you can see it's really nice and clear. Even look at that. It's an IPS display. So you get real great readability from angles side angles up and down. It's really nice and legible. Has a little backlight in there and it's very easy to see. So let's see. Oh yeah, if you check out the Discord chat there's a nice picture of one that Todd has on a little pi zero and a cute little case there like that right angle USB. That's nice too. Over in YouTube land Sam Whitty says, okay, time to buy. Hey, great. Yeah, we do have lots and lots of these available. So knock wood, we won't run out. I think that that's unlikely to happen. What else? Yeah, inside of pi zero case would be lovely.  I've used these types of displays before on Raspberry Pi's for MIDI projects. There's a fairly typical thing to do to bridge together MIDI devices using a Raspberry Pi and it's great to be able to see info show up on there. What else? Cyberdeck ones with this mini TFT could be cool. Yeah, for sure. If you're plugging into the Raspberry Pi 400, we have that little add on that gives you a 45 degree angle sort of bus board to plug into. All right, great. Okay, well thanks everyone for stopping by in the chat. Don't forget to head on over to, oh gosh, I've lost Chrome. Where'd you go, Chrome? There you are. Head on over there, yeah, right there. To this page, it's product 4393 and that is available just during the show. You don't need a coupon code or anything, but if you go and put in your cart and check out during the show, you'll get the 50% off. I think we still have them in stock.  Don't do that to your Raspberry Pi, that's a bad idea. But I forgot to bring an extra one in here so I need to pull that off of the Pi there. And let's improvise a way to hang that because I forgot to make a little clip for it. The nice thing, and this does have one mounting hole that'll fit the mounting on the Raspberry Pi, but the nice thing is that I can always get out of jail free with one of our Stem-a-QT cables. So that is it, that is the product pick of the week. It is the mini Raspberry Pi TFT. And that's gonna do it for another JP's product pick of the week. Thank you everyone for stopping by. And we've got a whole bunch of other shows coming up tomorrow including 3D Hangouts, Ask an Engineer, Show and Tell, which I believe is being hosted by Noah and Pedro this week. We should have, let's see, I've got my workshop show on Thursday. It's gonna be a deep dive. I'm not sure if it's Friday with FOMI Guy. I think Scott is out officially now for pre-Paternity leave. And let's see. Grover says, be sure to run the exit bump music for a while. They give us time to close the shopping carts. How about a 15 minute mini concert? All right, I like that idea. I think that'll do it. Thank you everyone for stopping by. See you next time.


Hello, and welcome back after the short break. So in the next couple of minutes, we are going to see David Beasley, who is a very well-known speaker. He's been giving great, great talks and keynotes at several conferences, also at EuroPython in Edinburgh. He's also the author of several books, and he has been using Python for a long, long time, 25 years, it says here. We're going to hear about a bike riding story from him today. I wonder what that is going to be about. It's definitely going to be amazing, and I'm really looking forward to it. Hi, David. How are you today? Good. How are you doing? Excellent. Can you hear me OK? Hear me OK here? OK, good. Yes, yes. And thank you very much for getting up so early. David is in the US time zone, so it's 5 AM for him now, which was quite early. And but he said that it's not a problem. He's usually out bike riding at this time. Yeah, I'm usually out bike riding right now, so yeah. You're looking at my very fancy basement office here. All right. It's north of Chicago here, so. Very nice. So I won't take more of your time, so I would suggest that we put up the slides, and then I will move off stage and be back again for the Q&A afterwards. Thank you. OK, well, I'm very excited to give this talk, actually. So thanks for coming to this. So one of the things I do in my spare time, besides biking, is I play in a concert band. I play trombone. And one of the things in band is sometimes you play in piece and music known as a tone poem. And usually what this is, is it's a piece of music that is inspired by something maybe non-musical, like maybe a painting or something.  OK, so this talk, in some sense, is that I'm going to be using the language of Python to describe something that's, well, really not Python. You'll see. So that's kind of the spirit of it. And then the other thing with biking, there is a certain danger of going biking at about 5 AM. So about a year and a half ago, I hit a deer in the face while riding my road bike and ended up breaking my wrist and two fingers in opposite hands. But that's not the deer, by the way. The deer, as far as I know, is uninjured. This is the picture you see there is probably from a coyote. Not far from where I actually hit a deer, actually. This is the same bike path. But there is a certain problem with having an accident like that, which is it makes life very difficult for somebody that likes live typing and live coding and things like that. You know, it's like, this is definitely going to put a damper on things. And so that's the not typing part of the talk. I'm actually not. It's not about the typing module. I'm sorry about that. So having this accident, I kind of spent some time looking at some different things, learning about some new stuff. And the talk is kind of inspired by that. So one of the things I was thinking about with the accident is I'm really glad I didn't hit a deer with antlers. And I'm really glad I didn't hit a deer with antlers guarded by another deer with antlers. This would have been a really bad situation. But this idea of pairs is actually something that comes up a lot in programming, where we think of pairs of numbers for math operations. ALU on a CPU takes pairs of inputs. Everybody's favorite data structure, the Python dictionary. You've got keys and values. It's pairs, right? So left and right, first and second. Pairs are sort of fundamental. And actually a lot of computing. We use these all the time. And one kind of interesting exercise you can do is restrict yourself to only programming with pairs. This is a new style guide. You're not actually allowed to use Python lists or dictionaries or sets or anything like that. The only thing you can use are pairs. And you can challenge yourself to make data structures. So what a list might look like is something like this. It's consistent of pairs. And then you have a lot of fun writing algorithms on this, like computing the length. Or maybe you want to practice recursion. Or maybe you really like reversing linked lists because you have a goal of getting a job playing foosball somewhere. So there's all sorts of things that you can do with this. But frankly, that's not really that interesting. I mean, well, it's kind of interesting. But nobody really cares about implementing linked lists or reversing linked lists. So a different line of thought that you might have is all of the different ways that you might implement a pair. I don't know, do you use a tuple? Do you use a list? Maybe a dictionary? A class? A class with slots? Maybe you like data class. Oh, data class is definitely. Or named tuples or a classic named tuple or a third party package or some crazy Lambda function thing. There's going to be a quiz on this code later, by the way. But you might go through that. And again, it's like, OK, we could have a battle about the best way to implement a pair, whether a data class or a tuple or something like that. But honestly, nobody really cares about that. And here's why. So imagine if some object, this is a pair of numbers. What do we actually care about here? Do we care about the internals? Or do we care about something else? And what we really care about is whether we can split it apart again. Kind of the essential property of a pair is that you can split it. First element, second element. I'm going to use F and S for first and second here. So that is sort of the property we care about. And as long as we have that, we sort of don't care how the thing is implemented, right? I mean, you could have a pair that uses tuples or you could have a pair that uses dictionaries. And it's fine. And this is something that we're all familiar with in Python. I mean, this is duck typing kind of stuff. It's interfaces. As long as something has the interface, you don't really care what it is. So we're all familiar with that. But there's a different line of thinking on this. So here's kind of a flipped question. I mean, we know that something is a pair based on whether it has the interface, right? But do pairs know that they're pairs? Kind of a weird question. So here's scenario. Let's say you have a pair. Let's say you have a class that you definitely know implements a pair. But then you have some other class, plu or something. I don't know what plu is. But you can create a plu object, 1, 2. And you can ask a question, is that a pair or not? And I would hope that the answer is I have no idea. I mean, plu is something we don't know what that is. It's not inheriting from pair. It's just some random thing. So we really don't know. But suppose that there was some function unknown to us. We don't know anything about the internals to this. So this has been provided from somewhere that takes a plu and produces a pair. So there's some way to go from plu to pair. Does that make plu into a pair? Does that make it a pair? And again, the answer is not really sure. I mean, without knowing any details about A, I wouldn't be able to say for certain. I mean, maybe this is some other thing that's producing a pair. So I honestly don't know. And it does kind of raise this question of what would the requirements be. I mean, if plu were a pair, I would have to retain this ability to kind of split it apart, right? I mean, I would have to be able to get to the one and the two. And I just don't know whether I can do that. I know that if I know that with this A, I can convert it. I can produce this pair-like object, right? I mean, it can produce a pair type of some kind. And I can split that. But I just have no guarantee what it's going to do, right? I mean, maybe I do that and I get some different values out of it. And then it's like, I don't know what that is. But if I were to be able to do this, like, let's say it actually worked, create a plu, I adapt it, and then I get one and two. I might be able to argue that actually plu is a pair and it doesn't even know that it's a pair, OK? So maybe it's like, yeah, I can use that as a pair because I can adapt it, basically. I can convert it to P. And then I could use F and S. And then everywhere I wanted to, I could use plu as a pair. So it's kind of a strange line of thinking, but it sort of leads to this rule that if something can be adapted into a duck, then it's a duck. And you can start playing games like this. You can start thinking it's like, oh, I can adapt things. And so there's all sorts of ways. You can convert tuple to dictionary. And dictionaries to tuples and classes to dictionaries and classes to tuples. And we do this all the time in programming. It's like adaption, adaptive pattern and stuff like that. It's how to make a small program into a huge program. That kind of stuff. And eventually, you'll sort of tire of this game of adapting. But then you might start to ask deeper questions, OK? This is a more interesting question. Is there a perfect implementation of a pair? This is how one starts to get into big arguments at work, right? The bike shedding argument. What is the perfect implementation? And so suppose that aliens came down from space and they presented a pair, like a pip install pair. So we have aliens presenting a pair to us. And there's a claim on it, a pair perfect for humans. Bold claim. We're going to be very skeptical of this. And ask questions like, what do you mean perfect for humans? Like, what do you mean perfection? What are you talking about? And the idea, that actually leads to kind of an interesting thought experiment, actually. What would it mean to have a perfect implementation of something? Not to say that it's perfect. I mean, the aliens would just say, look at it, it's perfect. And it's like, well, that's not going to fly, OK? So how would you prove this? Well, one of the ways that you might investigate that is you might make a claim that any kind of inferior pair could be upgraded into the perfect one. You could adapt it. Like, you could basically say, yeah, OK, you're using tuples. But we were going to do this more perfect thing. And so you could take all of the kind of lesser pairs and adapt it. But then somebody is going to ask, well, couldn't you go the other way? Like, couldn't the perfect pair be downgraded into a lesser perfect one in some way? And then we're going to have this argument again about which is the perfect pair. And so clearly, this is never, ever going to be allowed. I mean, if this perfect pair is perfect, it is ever, never going to be able to be downgraded. Now, I have no idea how this is going to be implemented. I mean, I'm not even sure Raymond Heddinger knows how to implement something like this. But the gist of it is that this perfect pair would only be adapted into itself. That's the only thing it would ever allow. It's like the perfect narcissistic pair. In fact, the arrow is even orange. OK, so there's sort of this limit of perfection. It's like, OK, that's kind of a weird concept. You've got this perfect thing that only adapts to itself. But what if you know nothing at all? OK, so here's, so let's say aliens come down. They present this thing to you. And they just tell you documentation. Just look at it. OK, we don't know what it is. OK, you're presented with this object. Alien object, you don't know what it is. Can you make any claim about it? And I don't know, just looking at it, maybe you can do things like wave your hand at it or stare at it or something like that. Maybe in the process of waving your hand at it, two things pop out of it. And then you can ask this question. It's like, OK, is that a pair? Maybe. It was one thing and now two things, right? I don't know, split apart. And that line of thinking, again, kind of takes you back to what is the essential thing that is going on with pairs here? Is it the thing? Or is it the arrows? The arrows, in some sense, are giving it shape, right? It's the arrows are sort of defining the deck that it's splitting apart. And so instead of talking about pairs, I actually want to talk about arrows for a second. So let's say you have an arrow. What is this even talking about? What are we even talking about with an arrow? Is this like an input to a function? Is it an output of a function? Is this a value of some kind? Or is it a type? And of course, you know that it's a type because you saw the title of the talk. It said types, right? So at some point, I was going to talk about types. So let's explore this a little bit. So imagine an arrow is something coming out of somewhere and it has a type attached to it. And as programmers, we're familiar with concepts of types. We have int and bool and float and string and so forth. And being sort of a systems programmer myself, I'm thinking a lot about hardware. It's like, oh, this is 32-bit or this is 64-bit int. And I got to encode this and think about little endian and all this stuff. So there's this concept of types. But this is not really the interesting thing with types. Int is not interesting. I mean, what's interesting is when the types start to pair up and we're now we're back at the beginning, a pair and a pair of pairs, okay? Things like what is going on if you start messing around with types? Like pairs of types, combinations of types and so forth. And so I'm going to kind of go through a few little thought experiments concerning combinations of types and pairing of types. So imagine you have a pair of types, pair A, B. Is that the same as pair B, A? Like if I just switch the types around and I think most rational programmers actually would look at that and say, no, no, that's not gonna, no, like an int and a float is not the same as a float in an int.  And so you look at that and then say, no, not really the same, but I could come along and say, well, you know, I can write a function that just swaps the elements. It's really easy to do that. I could just swap the elements and then I can go back to my rule that I had earlier. It's like if it can be adapted into a duck, then it's a duck. So you can look at that and sort of say, well, you know, I could go between the two and I'm not gonna lose any information. And maybe I'm, you know, I'll use like my force of status or something and say, well, you know, actually those actually are the same type. Okay, well, maybe not quite the same type, but they're an equivalent type. I can go back and forth between the two. So that sort of introduces this new line of thinking, which is basically if I have something that can go back and forth between a duck, I don't know, if I could convert a duck to a goat and then I could take a goat and convert it back into a duck, then I could say, well, the goat is basically equivalent to a duck. Okay, so this is kind of a new rule. I mean, one way to think about the rule is it's kind of an extension of what you do in Python already. Like, you know, is this the same object and equals the same value. And maybe there's some new operator, I don't know, this squiggle thing here where I claim that two things basically have the same quote structure. Now I've put structure in quotes because it's kind of a loose idea. Basically means I could convert one to the other and back and get back to where I started. As an example of this, here's kind of an example. It's the tuple AB equivalent to the string containing the tuple AB. As Python programmers are gonna look at that and say, no, that's crazy, but I could claim that those are actually the same because wrapper takes me one way and eval takes me the other way and there's no information loss. Actually, the only thing that would be lost here would probably be my job if I started claiming such madness at work, right? Okay, so, but under the system of rules that we're working with right now, those are the same. And you can kind of extend this into other thought processes here. Like, what if I had a pair with a nested pair inside? Pair A paired with pair B, like pair B, C like that. Can I just move the pairing? Can I just shift it over? Is that the same as pair, pair A, B, C, like that? Are those equivalent to each other? And the answer is yes, they are equivalent to each other, although the code is a little painful to read in the way that I've done this. Basically, you can shuffle things around and those two things are equivalent because there's no loss of information. Like, I can convert from one to the other and I can go back the other way. Here's kind of a trickier one. What if I had a pair and I had none on it? Pair of none type, what is that? None is kind of weird in Python, right? I mean, none is actually this thing that exists but there's only one value of it, none. So it's a singleton. And so, I could certainly ask a question, is there some way to simplify this thing? Like, is there something equivalent to a pair of A with none and it turns out the answer's A. Why is it A? Well, I could just get rid of the none. There's no loss of information there. So I could just convert it to an A and then if I wanted to convert it back, I just stick a none on it. I know what none is, none is none. So whether I have it or not is sort of immaterial, right? So those two are equivalent and essentially you build up a set of rules doing this. Pair AB is equal to BA and then you can move the pair and then you got this none thing. So in some sense, this is kind of a set of typing rules about pairs and it's slightly kind of extended universe. Okay, I mean, you might be looking at this saying just Dave has just completely gone off the rails with this weird equivalence rule, but it kind of works. Okay, so that's one line of thinking about arrows. Basically, we're talking about arrows and you can put a type on it. You can put a type on the arrow and then you can start thinking about pairs of arrows and all kinds of other things. So there is another line of thought though on arrows. Okay, so let's say you had an arrow and I wanted to do something other than put a type on it. What can I do with it? Well, one thing that you could do with it is just change the direction, just reverse it. Reverse arrows, okay? Just take all the arrows and reverse it. This is actually something really good to do in real life, by the way, not pick on Brian here, but just take like screws and nails and stuff in your house and just put them in the reverse way and then just see if people ask questions, right? Okay, so we're gonna reverse all the arrows. Okay, so imagine this scenario. Alien comes down, presents this magic object and instead of arrows coming out of it, it has arrows going into it. And then it's sort of weird. It's like once this alien object has, arrows coming in, suppose that you can adapt it into different things, like you can adapt it, but you can just never split it anymore. It's like the reverse of a pair. It's like, I don't know, it's like you put things in and you can never split it, but you can repaint it and reshape it and deform it and melt it, bury it and all this stuff, but no matter what you do to it, the thing is basically indivisible. It's like a permanence to it. It's like this, you sort of have this shape that looks like this, two things come in and then there's like this, you follow the arrows, but there's kind of this finality to it, right? It's like once the two arrows come in, you just can't do anything with it. And so the question with that, reversed arrows again is what is it? Like how would you describe this thing? Like, okay, what are we looking at? And maybe after a bit of study on it, you would conclude that this represents choice. It's not two things paired together. It's a choice of one thing from two things. And so examples are things like bits. Maybe it's one or zero. It's left zero or it's right one, but it's not both. It's either left zero or right one. Maybe it's a Boolean of some kind, like an if, else kind of thing. It's like it's either true in A or it's false in B, but it is not both, it is one or the other. It's either A or either B. More interesting case would be something like a Python function. Let's say you have the most, just a really simple function involving ints, return x plus two. It actually follows the same shape. Maybe there's an input like f of two where you get a value and you get a result back. Okay, you get a value four. Now, you might be looking at this and sort of thinking like, well, what's that? What's the second arrow? I don't see any choice in here. I don't see any if statement or anything like that. Well, I'm not talking about an if statement. I'm talking about exceptions. The other arrow might be exceptions. Like if I put two in there as a string, you get an error. So Python function is a choice. It's either you get a value or you get an error. Not both, but one of those. Okay, so this sort of line of thinking kind of leads to some parallel thought with the pair thing. It's like, you can start thinking about, well, okay, what are the rules for this choice business, this either business? Like, can I switch the A and the B? I think you'd argue, yeah, it's like you're picking one or the other. It doesn't really matter what order they're listed there. And you can also kind of shift the choices around. Like, is the choice of either A and either B or C the same as just moving the either over there. And again, those are basically equivalent. I mean, you're choosing one value and it doesn't matter really whether you decide to choose the A, B first and then choose the C, between that and C, or you go the other way. So there's sort of a certain similarity to what we had before. But then you sort of get to this little riddle. Okay, so here's kind of an interesting little thought. Okay, so none in Python is something that exists. It actually, it exists. Okay, I mean, I can type it in the REPL and it exists. Okay, so none is not none, it's this object, it's none. And this world that we're working in is this world of reversed error. Everything got reversed, right? And so what is the reverse of none? Like, if I were to reverse none, what are we talking about? None is something exists. It doesn't have many properties other than existing. So the reverse of none is maybe this concept of void. None or void, what does this mean? Okay, so void, this is not a Pythonic kind of concept, really, but void is essentially a type that can never ever exist. It's the opposite of existing. None exists, void doesn't exist. So imagine you have a class, if you try to create it, it just instantly blows up. Can't exist, okay. This leads to some other rules, like what if you had a choice of either A or void? What is that equivalent to? Well, it's equivalent to A. And the reason it's equivalent to A is that you can't create voids. Void can never exist. And since it can never exist, you can never create it. And since you can never create it, you can't choose it. It's not a valid option, okay. So the type either A, void is A. Just as an aside, by the way, you can create things from voids. If you wanna have a function that just spontaneously creates 42 out of nothing, okay. Like the empty parans are like void. You can do that. You can implement the big bang. You just can't implement the void, okay. So that is perfectly allowed. And so this leads to another set of rules, basically rules about this either operation. It's kind of in this universe with the reversed arrows, right. It's like, okay. And if you pair that up with the other rules, essentially you have rules of pairs and you have rules of choosing. And the thing that you're gonna notice here is that basically the rules look almost identical to each other, except for the none void thing, okay. So none and void are kind of opposite concepts. None exists, but void is something that can't exist, okay. So you have that. As a final kind of line of thought, you can ask questions about whether these, what happens when these mix together? Like what happens if you create a pair and you put a void in there? Is that equivalent to anything? What's that equivalent to? And it turns out that that's equivalent to void. The reason it's equivalent to void is you can't create voids ever, not as part of a pair, not in a data class, not in a struct or anything, okay. Void can never, ever be created. So if it were part of a pair, you wouldn't be able to create that either. It's like a, I hesitate to say the word virus, but void is like a virus on the types. Like you put that in there, you can't create them. A bonus kind of trick question is what if you have a choice of two pairs but the pairs have some commonality to it? Like let's say they both have an A. What is that? Well, you can rewrite that in a different form. You could say this is a pair where there's an A and then it's either B or C. There's basically what's going on there. It's either choice has an A in it. So you have that. There's no question about the A. The only question is about the BC part. So putting all this together, you get this kind of, this system of type rules. Okay. We've written some rules and they kind of come from different worlds. I mean, the thing I think it's interesting, you know, there's kind of the world of the forward arrows. That's the pair world. And then there's the world of the reverse arrows and that's the either, the either world. And so, so let's say you work this out. Okay. Work this whole thing out. And then let's say you're the one to beam it to aliens. Okay. We're going to flip the roles here. It's like, okay, you're going to give this away. Or maybe you're actually not aliens. Let's say you're just going to give it to your coworkers and or maybe you publish it in a conference or something like that. Okay. So you work out this system of type rules and you're going to give it away. And naturally, when you give it away, the aliens and your coworkers are not going to see it the same way. They're going to see it probably something like this. They're going to look at it and say, what is this? What are you talking about? Is this some kind of quiz? And you're going to say, no, it's not a quiz. It's a job interview question. This is what we give our job applicants to find out if they're 100X or not. We give them this question and we ask them, what is this? Okay. So that is kind of leads to an interesting thought experiment as well. Like if you were given this with no background information at all, just out of the blue and you were asked to describe what it is, what is it? Okay.  You know, it's like, huh, okay. What is this? After a certain amount of coffee and maybe a long bike ride or something like that, you might actually conclude that this is algebra. This is describing algebra. And here's the rationale on that. Maybe the emoji, the hands there, maybe that's like multiply and the finger is like plus. Maybe these are describing operators. And what you're seeing there are actually some rules about like sums and products. You know, the fact that you can like switch the order or you can do the grouping, you know, in different order like that. So maybe that's what's being described in the first part of this is kind of multiply and divide, you know, multiply and add, you know, kind of rules like that. Maybe the little arrows are like one and zero. And so what this rule is, the third rule there is sort of saying that A times one is equal to A. A plus zero is equal to A. These are sort of algebraic rules and maybe the other rules are some other, you know, some other rules from algebra. You multiply something by zero, you get zero. The other one is sort of distributing things or factoring that kind of stuff. So maybe somebody would make a claim that this is algebra and you would actually be correct. One of the things that's out there is this concept of algebraic type systems. This is something that you sometimes see in other programming languages. They'll claim that, oh, we have an algebraic type system. And usually they throw around terms like, oh, we have product types and sum types. And usually what they're talking about is you have structs and records and you have enums. Enums would be kind of a maybe a weak area of Python or maybe a more, that's probably a new, like Python traditionally has not had a whole lot with enums but it's starting to show up. But this is kind of the foundation of algebraic type systems is this idea that types can be expressed in algebra. Now, I wanted to do one example of this that just kind of sort of blows my mind on the algebra side. So let's say you had like a list of T's, I don't know, like a list of ints of some kind. How would you describe the type of that in this system that we formulated? Now, as a Python programmer, you might run into this and you would just say, well, this is list T. I don't know, typing module or something, list T. And I'm gonna get super annoyed by that. And in fact, I'm gonna dock full points because I'm gonna say no, use algebra. That's not algebra. I don't know what that is. That's just something else. Okay, so you're gonna look at that and say, okay, Beasley, what are you talking about? And here's the line of thinking in algebra. Maybe you use none to represent an empty list. And in this whole system that we formulated, none is basically like the one object. Okay, it was like this weird, it's a singleton. One is the one, none is the one. It's just the one object. Okay, so maybe list is one. And then if you have a single item list, maybe that's T, maybe T none is represented like that. This is a choice basically at this point. It's like, I either have a choice of none or I have a choice of a list with a T in it. Plus is choice, it's not both, it's a choice. It's either empty or I get a T. And then you can ask, well, how do I get, like, how do you get all these other T's? One way that you might do that is through recursion. You might read a little funny, but what you're saying here is that this is, okay, I have a choice of either an empty list, one, or I have a T followed by another list. It's recursive. Okay, so it's this recursive definition of the type.  What are you talking about? Hate recursion. There's a recursion limit, okay? Beesley, what are you doing recursion for? Okay, so if you didn't wanna do recursion, there's another way to express the type, which will probably equally annoy people, but another way to express the type is through infinite series. You can say that a list is basically the infinite series of T to the N power.  Okay, so really read this as like, it's either an empty list, one, or it's a list with one T, or it's a list with two T's, or it's a list with three T's, or a list with four T's, and so off to infinity, okay? So this will be left as an exercise, by the way, how to express this for like type hinting or something like that, right? Okay, so you can do it as infinite series. Now, having shown you infinite series here, here is a really interesting line of exploration. Infinite series is actually something that one studies in calculus class, and one claim about calculus is that people sort of say that, oh, calculus, that's totally useless for programming. We don't do calculus. Well, I mean, okay, maybe you're making games or something, but like for just programming, there's nothing in calculus that's useful at all. But one of the things in calculus is you talk about infinite series, and it turns out that this infinite series actually has a result that you can compute. Now, never mind the fact that calculus, it's like for numbers, has to be less than one or something like that, but there's a result that you can compute, and being a Python programmer, I'm just gonna duck type this thing. In fact, I'm just gonna write that list T is equal to one over one minus T. I have no idea what this means, okay? T is a type. What is division of types? What is subtraction of types? I don't know what that is, but I'm gonna continue in my duck typing world here, and I'm gonna just do algebra on it, okay? One minus T times list T is equal to one. Again, I have no idea what this is doing. T is a type, okay? So, but we're gonna continue. We'll multiply the thing out. List T minus T list T, and then I'll move it over to the other side, and then I'll notice, hey, that's the same definition as the recursion. It's the same type. As I mentioned, there will be a quiz on this later on, okay, algebraic type system. Okay, that is an interesting, weird, strange, strange world. Now, going back to the original question, though, back to the symbols, okay? So let's go back to the quiz, the job interview question. Somebody else might look at this and say, you know what I see? I see something else in this system that you've created here. What I see is actually logic. I see the rules of logic. Maybe the hands are the and operator, and the, you know what he figures, the or operator. And I have rules of like and and or, and maybe the arrows are true and false. So a and true is equal to a, and a or false is equal to a. These are statements that we know from Boolean logic. Maybe this whole thing is actually describing kind of a logic system. And the answer to that is yes, actually. There's a whole, so you can view types, like a type system is a system of logic. So, you know, if types encode logic, you can sort of run down this other direction as like type checking, is that a type of proof? Are programs proofs? Are proofs programs? What can you instantiate? That's kind of an interesting question. If this is logic, are you allowed to instantiate falsehood? You can't instantiate void. That was the distinguishing feature of void. So like, if you're, if this is logic and void is the same as false, it's like, huh, okay. That's sort of interesting and I'm getting a wild thought there. And then, you know, again, going back to the, you know, back to the magic language here, somebody else might look at this and maybe they conclude that this is a language for describing diagrams. I would actually kind of worry about that person a little bit, because it's, you know, that might require more thoughts on it, but having gone through this, you suddenly have this question of like, what are we talking about here? We talking about algebra? Are we talking about logic? This arrows business? What are we doing here? Are we talking about types? And the answer is yes. That's what we're talking about. And that's the end of this talk. Now, having gotten to, that's the end of the tone poem part of this talk, you're gonna look at this and say, what was that? Okay, like, what are you talking about, Beasley?  And then we'll, we'll talk a bit. Okay, so one of the things that's happening in Python right now, there's a lot of interest in typing, static type checking and type hinting and all this, a lot of stuff with types. The thing with types though, is that is a pretty big ocean. Like, if you look at it at the world of types, it is way bigger than Python. There's a lot of kind of weird stuff out there. I mean, like, if you get into the world of like type functional programming and all this stuff, there's a lot of stuff with types. And so after I had my bike accident, so I had my bike, getting back to the bike accident with broken wrists, I was sort of at a loss of what to do in the morning.  And I was like, you know, maybe, maybe I'll get a, maybe I'll get a gym membership. So I signed up, you know, signed up for the, signed up for the gym and went over there and it's like, you know, I'll just do stationary bikes or stair climber or something. The problem is the gym for me is just super boring. Oh God, it's terrible. So, so I was over there. I was like, you know, I should, I should learn something. I don't know. I should learn about something new, something that I don't know anything about, not async IO, you know, like the usual stuff, something really, really, really, really different. And for reasons that I do not understand and cannot explain, I decided to answer the question, what is category theory? Category theory is one of these things that you hear sort of typed functional programming people talk about. And then usually it goes off into some really big discussion of all sorts of terminology you can't understand. So I ended up dropping into category theory from like, you know, just out of nowhere. And I ended up watching probably about 80 hours of courseware on category theory. And this talk in some sense is a very, very, very, very impressionistic painting of category theory. So a lot of the things in this talk, what that is about is actually thinking about, I don't know, maybe shapes of things like arrows, like the relationships between objects and other kinds of related things. And a lot of the ideas in the talk are actually very category theory ideas. Like all that madness with like the perfect pair and like that's something like a categorical limit that people talk about. And this idea of reversing the arrows and all this stuff, those are ideas out of category theory. But there's also some ideas kind of floating around that topic related to types as well. There's an intersection of typing and algebra and logic and category theory where you can kind of notice that basically there's a lot of similarities in these topics and they all kind of intersect with each other. So, you know, another, you know, there's sort of direct inspiration for this talk is actually something known as the Howard Curry Lambic correspondence has to do with the intersection of these topics. So it's kind of interesting. It's like, could I talk about that without talking about it in some weird way? Now, as far as what this might be relevant for Python programmers, I have no idea. I will say that exploring this has had kind of a profound impact on how I think about Python in kind of a more nebulous kind of general way. One of the things that it's got me thinking about is the importance of interactions between pieces like APIs, like how do things compose together, how to features interact with each other and stuff like that. So that's sort of interesting, but beyond that, I don't know, I think maybe the interesting thing is that, you know, in this kind of ocean of types, there are other things out there and this is an example of another thing.  So anyway, that is the end of the talk. Sort of thanks for listening to that. A couple of things at the end. I have included a few links that are mainly my entry point into this crazy topic. I mean, if you're interested in looking at that category theory, this is how I entered that topic. There was an MIT course on that and there's some reading about that. Also just shameless plug the, I have a new Python book coming out. It just went to print yesterday. So you can look at that. I'm not gonna say any more about that though, but thanks for coming to the talk. Maybe there's time for a question. Wow, you got a whole bunch of people in a room there. Yeah, well, we organized something and then, you know, recorded a video of it. Yeah, yeah. Well, that was an excellent talk. Thank you very much, David. I mean, the audience is completely excited and there was lots and lots of discussion in the room. Maybe you can have a look at the room afterwards. Okay, yeah. And then, you know, just lots of really nice comments and, you know, theories and it was really interesting to read all of that. I have a couple of, yeah, go ahead. I was gonna say, just a comment. I had no idea that algebraic type systems was kind of this thing. I'd heard the term for years, but as a programmer, I was like, I didn't know what it was. No, me neither. Yeah, I was like, yeah. When you started, you know, describing all these things, I immediately thought, hmm, this is algebra, right? That was really interesting to see all these relations and to see all these, you know, the logic behind all of this. To me, it also shows that, you know, typing may actually be a bit frightening to people. So, because of all these weird things that can happen, and I've seen quite a few cases where people try to actually express in a type annotation what they really want to express and then have lots of trouble with that. And I think that goes a bit into that direction because the topic is actually quite complex and not something as, you know, straightforward as just writing some Python code, right? I think there's also like a, there's like different direction too. Like this is the thing that I've, I've kind of come at typing through algebra here. And that's a totally different line of thinking than coming to typing through like systems programming. Like I'm a C programmer. That's like a totally different reality than algebra. That's. And see, you typically know what you're dealing with, right? But in Python, if you have a dict of, you know, lots of different types and then it's basically somewhat different. So, two questions I have here. I hope I gather everything. So, first one is, what is your study background? People were wondering. Because it's really deep what you're talking about. Like in school. So, I was a math major. And I actually was in a PhD program in math and I got kicked out of it because I failed algebra, believe it or not. I like, I could not figure out what was going on in algebra. I ended up going into, I started taking physics classes and then at some point in graduate school, they're like, Beasley, what are you studying here? I'm like, I don't know. And then they're like, well, get out. And then, so I survived like two years of a graduate program in math and then switched to computer science. Interesting. And now you're learning category theory, right? It is extremely punishing for me. I realized that like this is like confronting this has made me confront like fears from my past. I mean, I literally like failed algebra due to all the diagram stuff. I was like, I don't know whether I missed a lecture someday. Did I, was I out sick or something? But I just remember coming into class and then it just was off the rails. And I was like, I don't understand a single thing that's going on in here. And just never, never recovered. And so, you know, doing the category theory. It's like, this is probably the craziest thing that I could be looking at for somebody who's studying numerical analysis. Like that's kind of ended up what I was studying in math was that, but. All right. So we have a second question here. This one is Haskell like type inferences coming to Python anytime soon. What are your thoughts on this? I have no idea, but didn't go. I think Guido just had something like yesterday was there was some big event where it's like somebody's going to teach Guido F sharp.  He's not really a fan of functional programming, you know, right? Yeah, I know. I mean, actually another bit of that actually programming in ML. I did a not, I actually did learn a bunch of programming in standard ML back in graduate school. My experience with that is actually what led me to Python. I found the strict typing environment of that to be sort of very difficult to wrap my brain around it. It was sort of, you'd have these experiences where you just sit there and fiddle with the code for like three or four hours and never ever having it compile. And then you would make like a sudden change and then all of a sudden it would compile and magically give the right answer. But you'd have like, I'd have no mental concept of what I did to make it give the right answer. But, and then I would just turn it into the, to the TA saying, okay, my homework is done. I have no idea why it works, but it compiles.  Maybe I didn't quite get it, but I kind of, you know, in Python, I kind of like more of the, you know, the more immediacy of it, you know, where it's like, the code can run now, even though it's broken. At least you get an exception, right? Maybe I'm just better at, maybe I'm better at debugging bugs than debugging compilers that I'm willing to admit that. Okay, so let's see. We have one more question by Lukas Langer. Who you probably all know. Yeah. That one up. Do you think the choice type, typing paradigm, you discussed in terms of error handling as used in Rust has a place in Python? You know, that is a really interesting question. And I honestly, I think it might, I mean, that might be kind of a weird thing to say, but one of the things with exceptions is that they kind of fall outside of all of the typing stuff to me.  You know, I get this in classes. People ask, hey, can I figure out what exceptions a piece of Python code will raise? And I have to tell people, it's like, no. Well, unless you want to read the source, I mean, there's no way to, there's no way to know. And so you've got this, you've got this, you've got all this typing and then you've got this one thing, exceptions that sort of sit outside the rule. And I don't think anybody is proposing to put like checked exceptions in the pot. Is any, I don't think there's any proposal to do that.  I mean, I have, Python is actually already doing this. Like this, like if you've used things like the, like futures, like concurrent futures and you get these like future objects and other things that that is sort of a style, that's sort of in the rust style where you get an object that has a result and an exception packaged into it, into one thing. And you start passing that around. And it's like, I don't know, maybe, maybe it's probably the worst pun, pun that I could say on that right now. But yeah, maybe. Maybe, yeah, there's a choice, right? Yeah. Excellent. So thank you very much again, excellent talk. Everyone is very excited. They probably have more questions. So I'd like to ask you to go to the breakout room, Optiver. Okay. And Matrix. And then, you know, maybe you can, you can have a discussion with folks by chat or you can join the JITZI. There's a JITZI, which is in there. JITZI is an audio video system that you can, where you can conference and then, you know, answer more questions. So thank you very much for, you know, getting up earlier for giving this talk, it was an excellent talk, yet another one in the longest series of great talks that you've given. And thank you very much for coming to your Python. Okay. So thank you and I had fun doing that. Thanks. Bye-bye. Okay.


Welcome, Weirdos! I'm Darren Marlar and this is Retro Radio, old-time radio in the dark, presented by Weird Darkness. Each week I bring you a show from the golden age of radio, but still in the genre of Weird Darkness. I'll have stories of the macabre and horror, mysteries and crime, and even some dark science fiction. If you're new here, welcome to the show and be sure to subscribe or follow the podcast so you don't miss future episodes. And if you're already a member of this Weirdo family, please take a moment and invite someone else to listen in with you. Spreading the word about the show helps it to grow. If you're here because you're already a fan of nostalgic audio and print, you'll want to email WeirdDarkness at RadioArchives.com. When you do that, you'll get an instant reply with links to download full-length pulp audio books, pulp e-books and old-time radio shows for free. That's WeirdDarkness at RadioArchives.com. Coming up, it's an episode from ABC Mystery Time, also known as Mystery Time Classics, and Masters of Mystery, and simply Mystery Time because apparently shows in the days of radio drama just could never make up their minds on show titles. Anyway, after RCA divested itself of the Blue Network in 1943 and it came under the ownership of Lifesaver Candy King Edward J. Noble, it was rebranded as ABC, the American broadcasting company. From the beginning, ABC struggled to create new programming in order to compete with the big three networks, at the time being NBC, CBS and the Mutual Network. At the same time, ABC was also trying to compete in this new arena of television. But as we all know, television was just a fad, never lasted, radio, on the other hand, is going to live forever. One way to increase its programming was for ABC to use a process touted by crooner Bing Crosby to use pre-recorded programming. To the already established big networks, only live broadcasts could hope to give the needed fidelity, but Bing demonstrated that taping could be used to produce higher quality shows as well as being easier on the talent. Bing Crosby was known to tape several episodes around his golf schedule after moving to ABC, and he moved because NBC disallowed pre-taping. Imagine saying no to Bing Crosby to an idea that would eventually become the standard for most all broadcasting. One way ABC used pre-recorded programs to increase its content library was to schedule a mystery slash thriller program every weeknight at 8.30. The lineup included Mike Malloy, Private Eye on Monday, The Adventures of Sherlock Holmes on Tuesday, Wednesday and Thursday it was Mystery Classics and then Police Blotter on Fridays. Not only did the programs share a theme and a time slot, but they were also each hosted by popular morning radio host Don Dowd. Mystery Classics had a couple of audience-grabbing hooks. First, it took a cue from CBS's Classic Escape program and turned to classic literature for stories to adapt. Plus, the program is also willing to pay for A-list movie talent to appear on the program. Big names included Ralph Richardson, Orson Welles, Michael Redgrave and even Sir Lawrence Olivier. Best of all for the producers, this high-grade talent would be hired for relatively cheap because the actors could tape episodes around their schedule, as Ben Crosby indicated. However, Mystery Time Classics came in a bit too late in the Golden Age of Radio to gain classic status. Tonight, it's an episode that I really couldn't find any information on except for the title.  This is Don Dowd, your host for Mystery Time. Back again to introduce another in ABC Radio's great Monday through Friday line-up of Mystery dramas. Every night at this time, a new and different story. Our drama tonight on Masters of Mystery, presented live from New York, is written by Jerry McGill. Listen now to the story of a man who confronts the wife for the ghost of the past, himself, as Masters of Mystery brings you Death by Proxy. I'm Jeff Cobb on the payroll of the news leader. City Death has me labeled as special feature writer, which means I get hooked for the offbeat stuff. Death by Proxy was plenty offbeat. It started in night court after Bart Lane got out of a disorderly conduct charge with a $50 fine and caught. He was a big handsome guy sunburned the color of copper. I was curious. I latched on to him and got him into a neighborhood bar. He had trouble.  What's your line? Mining engineer, prospector. What were you looking for in that apartment you crashed? My wife. Oh, so that's why you slugged the guy that opened the door. No. He thought I was after his wife. He got nasty and I lost my temper. The Amazon jungle makes you jumpy. How long were you there? Five years. I got lost. And you came back and expected to find your wife in the same apartment? Yeah. I was foolish considering we'd almost called it quits before I left for South America. But you know, some women are like jungle fever. You never really get over it. It goes, but usually comes back. I gotta find her. Find out if I'm cured. How do you buy a drink, pal? Maybe I can help you find your wife. Thanks. A bartender, two more. Double. Okay. How can you help me, Jeff? Well, it's a lot harder for people to get lost in the city than in the jungles of the Amazon. You leave her any money when you went prospecting? $5,000 in joint savings and bonds. She closed the account and sold the bonds. Any chance she could have used it to get a Mexican divorce? Maybe. And you still want to find her? I was reported missing, probably dead. But you want to find her? Yeah. Okay, Bart. We won't find her here. Skip the drinks. Let's go dig the morgue file and see what gives. I took Bart Lane to the news leader office and left him in the reception room to cool his heels while I dug through the morgue file for a lead on his wife. I found it all right, but with a twist that sent me out of the reception room for a fast double check on his story. You find anything, Jeff? Yeah. Plenty. What word is she? Well, first I want to know when you got back in the States. Yesterday, Bart Lane from Rio, why? Under what name? My own name. Say, what is it? Can you prove that you're Bart Lane, the mining engineer who was lost in the Amazon jungle five years ago? Sure I can prove it by my passport. All right, let's see it. The picture doesn't look much like you anymore. Here, the jungle does things here. What's the big idea? You're dead. Dead? Yeah, dead. Killed. Oh, that's sure. Missing and presumed dead in the jungle. Not many get out once they're lost. No, no, I don't mean that. What do you mean? Here, look at this. Bart Lane, a mining engineer only recently returned from South America, was instantly killed when his car went out of control on West Highway. That's impossible. I never came back. I don't own a car. In spite of the fact that his body was partly destroyed by fire that followed the crash, the remains were positively identified by his widow Mrs. Mildred Lane of 10 Highwood Avenue. That's my wife's name, Mildred. Then you were legally dead and buried in New Long Cemetery. When did I die? May 10th, 1956. About a year ago. Yeah, now what goes? I don't know, but I'm going to find out. What was that address when Mildred was living? Oh, no, wait a minute. Hold it, you're in a spot. What do you mean I'm in a spot? Well, stop and think. Somebody was killed driving a car registered in your name, and your wife identified the body and buried it. Why? That's what I'm going to find out. Were you carrying any life insurance when you left five years ago? Yeah, 30,000. Who was the beneficiary? Mildred, my wife, but the policies must have lapsed. She could have kept up the payments. Couldn't wait seven years to have you declared legally dead. Yeah, but who was in that car? Somebody was killed. Ah, now you're getting it.  And it was probably Mildred. If it wasn't Mildred, she wouldn't have the nerve to try it, unless she may have had help. 30,000 would buy a lot of help. I got to find a talk to her. Yeah, and I'm going along for the interview, but you keep your shirt on. If you don't, you're liable to trade it in for a sheet on a slab in the morgue. And I don't mean our newspaper file. I got my car out of the garage and drove Bart Lane over to the last known address of his wife. Number 10 Highwood Avenue turned out to be a fairly plush apartment building. I questioned the switchboard operator. I'm sorry, but there isn't anyone by the name of Mrs. Mildred Lane living here. How long have you been working here? About six months. Mildred Lane's husband was supposed to have been killed in an auto accident about a year ago. She gave this address when she claimed the body. I heard about that from the girl who ran the switchboard before I took the job. What did you hear? I just heard her husband was killed right after he came back from South America. He's been lost in the jungle or something. That's the woman? What happened? Did she move out? No, she's still here. Well, under what name? Well, I'm not supposed to give out information about our tenants. How about making an exception to the rule and just giving us her new name? Well, who are you anyway? Well, I'm a reporter following up the story of her husband's death. Who is the other gentleman? Mr. Lane's dead husband. Dead husband? Oh, he's still here. No, he's not. Now, do you want to give us her new name or do you want to tell the police? She's married again. What's her husband's name? Mr. Dean. Malcolm Dean. They live in the penthouse now. What's his business? He's a builder. He has a new development out on Tenset Heights. Are they in now? Mr.  You know when Dean moved into this building? About two years ago, I think. I see. Thanks. Well, what do you make of it? I could mean that your wife knew this Dean guy before you died. And it could also mean that he was in on your accidental death. So what? Well, that would mean that we're dealing with two murderers, not just one.  I'm going up to her apartment. Sure, sure, but just let's play this smart. Let's get some proof and let the police handle it. Oh, well, you go up there like the prodigal, returning for the fatted calf. Like you didn't know that you're supposed to be dead. What good will that do? You might find out a lot of things. Try it. Keep your shirt on. See how she reacts, what she says, what she wants to do about it. Well, I don't know if I can carry it off. Try it. You can always call the cops and I'll be waiting right here. Well, OK, I'll try it. Yes, what is it? Hello, Milner. What is it, really? You? You're supposed to be dead. Yeah, I know. Lost in the jungle. How did you find me? Compared to getting out of the upper Amazon, it was a cinch. When did you get back in the state? Yesterday. Milner, you don't seem very glad to see me. I am. Believe me. I am, boy. It's such a shock. I thought you were dead. The report was exaggerated, as they say. Well, aren't you going to ask me in to your swank apartment? Oh, yes, of course. Come in for a moment, but... What? But it's awful. I don't know how to tell you. I'm married again. So I get it. From the new name in this place, it is all right. But I've got to talk to you. Explain, but not here, not now. Afraid of this new guy you married? Dean? Malcolm Dean? No, but he's coming home in a while. Good. I'd like to meet him. No, please, but let me talk to him first, alone. Why? Well, he explained to him, and it could be easier that way. Maybe we can work it out. Work what out? How I feel, now that I know you're alive. Oh, please, but please, if you ever love me, if you still love me. Hmm. The same gal, the same Mildred. How much time? Until... until tomorrow. Where are you staying? Nowhere. I've been looking for you ever since I landed.  What do you think, baby? Don't, Bart. Please, give me time. Well, well, this Dean guy must be pretty good.  Older and different. But he's very kind. I don't want to hurt him. You've changed, honey. Tell me, have you any money? I mean, enough to stay somewhere near here until I can settle things with Malcolm. Yeah. I guess I can manage to live a few days. Well, there's a motel down on the highway at the end of the street. Could you go there and wait live for me? When? Okay. Okay, Mildred. Oh, you darling. I'll save that. All right, Bart. Tell me, do any of our old friends know that you're back? Just you, honey. I wanted it to be a surprise. I'm glad. Please go now, Bart. Please. I'll call you at the motel late at night. Okay, Bart.  I told the motel manager you're expecting an important call and he'll switch it to this gallon. Thanks, Jeff. I didn't know that I want to go through with it. Why not? I don't know. It isn't the way I thought it was going to be. Well, how did you think it was going to be? Like I thought I'd want to get Mildred back at any price or killer. And how do you feel? Sick, tired, old. Almost as if I were really dead. Oh, come on. Snap out of it.  Why not?  It looks like you were murdered for your insurance. Looks like your wife and this guy, Dean, are parlaying your money into a fortune. I don't care about the money.  You owe him something. And I owe you a story, don't I? No, there'll be a story no matter what you do. I know enough already to be certain a crime has been committed. Now, if you don't want to help find out how and why, I'm calling the cops. Okay, you're right. Besides, I would like to know what Mildred's going to do. And I've got a pretty good notion. And I don't think we'll have long to wait. Hello, Sunset Heights Development. Malcolm. Oh, hello, Mildred. Why haven't you come home? Well, I'm busy. I told you I'd be late. You've got to come home right away. Something terrible has happened. What? I can't tell you over the phone. But I'm afraid to leave the apartment. What's happened? He is alive. He didn't die in the jungle. He's back here in the States. Found me somehow, came here just a while ago. Alone? Yes. Does he, uh... Does he know about the accident? He didn't act as if he did. How long has he been back? Only since yesterday. Where's he now? Well, I just waited him to give me a chance to talk to you first alone. He's gone to the highway motel and promised to wait until I called him later tonight. Yeah, well, good girl, good girl. I was using your head. Well, what are we going to do? What did he find out about? Well, how did he act? What did he say? Does he want to meet me? Yes. He wants to talk to you. He acted strange. Not at all surprised I married again. Well, good. That gives us time, a chance. To do what? To sound him out.  He said he had money. He looked like... Does he want you to get an annulment? Go back to him? No, he didn't say. I made him leave. Go to the motel until I can talk to you. Okay, okay, that was smart.  Get your car out of the garage, pick him up at the motel. Bring him up here to the office. What if he won't take money to go away? Well, in that case, there'll have to be another accident. Now, you call him. No matter what you have to say or do, get him up here tonight. There's your call box. Take it. Well, she wants to come here. Let her come. Listen to what she has to say. I'll get out. Yes? Are you Mr. Lane? Yes, who's calling? I'm the girl. The switchboard at your wife's apartment building. Oh, yes. Look, I don't know if I should be telling you this, because I really shouldn't have been listening. But your wife called her husband. I mean her other husband, Mr. Dean, at his office. All right, miss. Why did you call me? Mr.  Yes, I know that. But she's going to get you to go up to a new development on Sunset Heights and meet Mr. Dean. Good. But why are you calling and telling me this? Because... Because I think if you don't take money to go away... Once in a blue moon, you run into a yarn that has more twists than the rope that hangs a lot of people who think they can get away with murder. When Bart Lane told me what the switchboard operator had passed on to him, I knew it was time to call him the long arm of the law. But before I could persuade Lane... Never mind the cops, that'll be Mildred. Let me handle this my way. Now, a chance, Lane. If you go with Mildred, it's an even bet somebody will be killed. Maybe. Hello? Hello, boy. Listen, I just talked to Malcolm at the office. What did he say? Well, naturally, it was a terrible shock. How did he take the news I'm alive? Oh, boy. So kind. So understanding. What's he gonna do about it? He wants to see you at his office. Meet you and talk to you. I'm willing? When? I'll come for you in my car. Wait for me on the highway outside the motel. I'll be there in ten minutes. All right, Mildred. I'll be waiting. Ten minutes. Okay, Bart. You've made your date. Now, let me make mine. Who are you gonna call? The Homicide Squad.  How much farther, Mildred? I was just ahead. In the woods along the ridge. What are you stopping for? Boy, let's talk for a moment. Why, what's there to talk about? You? I? What really happened? I got lost. Died, remember? I mean, did you find what you went after? You mean the gold? Yes. Did you find any? A little. Much? Enough? What do you care? You seem to have done pretty well. Not really. Malcolm is rich. He's real estate development and speculation. But that isn't what I'm getting at. What are you getting at? Oh, Bart, you know. Couldn't we try again? Go away out of the country far away. What about Malcolm? I can handle him. He wouldn't say anything. We might even be able to get some money out of him. If you haven't enough. You'd do anything for money, wouldn't you, Mildred? Bart, don't say that. I'm only thinking of you. Oh, how you must have suffered all these years. Stop it, honey, you're breaking my heart. Oh, Bart, don't you believe me? No, Mildred, he doesn't. Malcolm! Yes. I saw your headlights from the office. I saw you park here, in fact. I thought I'd come over and see how you two were getting on. Great. I gather you've got an earful. Yes, yes, quite an earful, ladies. And don't bother to get out of the car. We're going on from here. Where? Well, I want to show you our new development. It's quite interesting. We have several excavations dug already for the pouring of the concrete. One of them will make a very nice grave. Malcolm, you said... Yes, too much has been said, my dear. Now start the motor. I'll get in the back of the car. Wait a minute. What's the idea of a gun? Let's have it on the line. It's really very simple, Lane.  You died in an automobile accident over a year ago. Yeah. So I found out. Malcolm, he knows. Yes, I suspected as much. I think he came here to blackmail us. Lead us white as the price of silence. Rondie and dead wrong. And it doesn't matter. What about Mildred, our loving wife? I haven't quite made up my mind. Malcolm, I was only leaving him on, trying to find out if he had any money. Oh, well, that was greedy, Mildred. Foolish. But you've always been greedy, haven't you? Never quite satisfied with what you have. His insurance wasn't enough. How well he knows you, my dear. And by the way, Mildred, who is the guy you identified who died in a car in my place? Go ahead, tell him, Mildred. It doesn't matter. You did it. You arranged it. Pick up that hitchhiker, make the car burn the body. Oh, so that's how it was done. Yes. So now let's go over to the side of my first model house. Shall we? Being built with your insurance. Let's not, Dean. Malcolm, behind you. That's right, Dean. Drop that gun. You. And without turning around. That was smart. I'd hate to have to shoot anybody in the back. You better get out of that car, Bart. You died in one last year, remember? Yeah. Thanks, Jeff. Where are the cops? Oh, I thought they might be a little tardy, so I tagged along behind when you drove off with Mildred. They'll be here any minute now. Bart, help me. Believe me, I didn't kill that hitchhiker. Malcolm did. He planned the whole thing from the very beginning. It was his idea. It won't do, my dear. Murder isn't like your kind of marriage. We're in this together, Mildred. Until death do us part. This is Don Dowd again, your host for Mystery Time. You have just heard Masters of Mystery live from New York. Tonight's play, Murder by Proxy, was written by Jerry McGill and produced by Clark Andrew in association with Ronald Dawson and Robert Arthur. Featured in tonight's drama were Everett Sloan, George Petrie, Kathleen Cordell and Lyle Pseudo. Next Wednesday and every Wednesday night, another presentation of Masters of Mystery. Tomorrow night, Mystery Time brings you Mystery Classics presenting Death Rides the Storm by John West. Be with us then, won't you? Don Dowd, your host for Mystery Time. See you tomorrow night. This program came to you live from New York. This is the ABC Radio Network. Thanks for listening to this week's Retro Radio, Old Time Radio in the Dark. If you haven't done so yet, be sure to subscribe or follow the podcast so you don't miss future episodes. And if you like the show, please, share it with someone you know who also loves Old Time Radio and Pulp Audio. If you want to hear even more, drop an email to WeirdDarkness at RadioArchives.com and get an instant reply with links to download full-length Pulp Audio books, Pulp Ebooks and Old Time Radio shows absolutely free. That's WeirdDarkness at RadioArchives.com. I'm Darren Marlar. I'll see you next time for Retro Radio, Old Time Radio in the Dark.