WEBVTT 00:00.031 --> 00:11.586 [DJ]: I never expected to be on a podcast where we would be giving updates on a live mission to the moon, Justin, because when I was growing up, all of that stuff was in the distant past. 00:11.646 --> 00:12.407 [DJ]: But here we are. 00:12.967 --> 00:19.315 [JM]: It's fascinating to feel like we are reliving history, but this time in high-definition 4K. 00:19.976 --> 00:22.099 [JM]: It's really, really surreal. 00:22.619 --> 00:24.722 [JM]: I remember as a kid... 00:24.702 --> 00:26.525 [DJ]: Watching the moon landing, right? 00:27.005 --> 00:28.007 [JM]: I was not around for that. 00:28.387 --> 00:37.020 [JM]: But I do remember being at my grandparents' house and everyone was making a big deal out of some space launch that happened in the mid-70s. 00:37.501 --> 00:41.867 [JM]: But all the moon-related missions had all been done before then, so... 00:41.847 --> 00:46.033 [JM]: like you, I haven't seen any of those until this past week. 00:46.214 --> 00:54.206 [JM]: And it's been really interesting to see people at NASA get so excited about something that was done 50 years ago. 00:54.246 --> 01:03.079 [JM]: And presumably they're excited about it for the same reason we are, which is we weren't there when this happened before. 01:03.119 --> 01:06.184 [JM]: And they're getting super excited to 01:06.164 --> 01:35.547 [JM]: see the details of craters and see all these things that to some degree feels a bit old hat. We've done it before, like okay, we're just covering ground we've already covered, and not even that because we're not even on the moon yet -- we're just flying by it, and yet it really is very cool and exciting for I don't know what reason. I guess just because it's happening in real time and we're watching it, I guess, that's how I felt is just watching it all unfold in real time. Yeah I don't know -- it's cool. 01:35.527 --> 01:48.488 [DJ]: I think there is something to having a connection to the past. I was talking to a friend of mine recently about another topic that we usually don't cover on this show, but maybe we will on this episode a little, and that is large language models. It says here, "Pause for laughter." 01:48.508 --> 01:52.675 [JM]: 01:55.777 --> 02:02.967 [DJ]: We were talking about AI, so-called AI generated art, for example, and whether it could ever be compelling. 02:03.427 --> 02:06.512 [DJ]: And something that came up in the discussion was interesting. 02:06.712 --> 02:13.341 [DJ]: We sort of differentiated between art can be compelling if the experience of it moves you. 02:13.982 --> 02:18.628 [DJ]: And although most or all LLM-generated art thus far... 02:18.608 --> 02:21.232 [DJ]: I at least have not generally found to be moving. 02:21.472 --> 02:30.624 [DJ]: It's at least hypothetically possible that one could generate a text or an image with an LLM that would create an emotional response in the person viewing it. 02:31.085 --> 02:31.385 [DJ]: Okay. 02:31.826 --> 02:35.671 [DJ]: But another aspect of art is the historical context. 02:35.751 --> 02:44.363 [DJ]: Like when you go to an art gallery and you look at a painting by one of the masters of hundreds of years ago, 02:44.343 --> 03:05.322 [DJ]: I think there's something there that isn't just about the effect that the sight of the colors on the canvas has on you, but there's also a connection to what the artist and what the people around the artist were going through at that point in time and what influenced that art and how that art influenced the people that came after. 03:05.302 --> 03:05.783 [DJ]: Right. 03:05.923 --> 03:14.117 [DJ]: And like that's how curation at museums works generally is that like curators aren't just like, look at how look at how this one is red and that one is blue. 03:14.297 --> 03:14.497 [DJ]: Right. 03:14.738 --> 03:22.230 [DJ]: There's always a lot of context of like this is what was going on in Greenwich Village in the 1960s that led to thus and such. 03:22.210 --> 03:40.591 [DJ]: So I wonder if there's something similar here where most of us have at least some knowledge of the historical context, this notion that like the moon landings brought a large number of people together and gave them a shared sense of mission and accomplishment. 03:41.232 --> 03:45.417 [DJ]: And that's inherently valuable no matter what period you're living through. 03:45.397 --> 03:59.358 [DJ]: And so one of the things that feels nice to me about this Artemis two mission is having a little bit of that sense of, you know what it was like in, yeah, like the 1960s. 03:59.879 --> 04:04.546 [DJ]: Well, we're still doing things like that for some definition of we, of course. 04:04.726 --> 04:16.268 [DJ]: And I'd imagine that if you actually work at NASA and you have like so much more sort of institutional history, like I work at the same place as the people who made this happen. 04:16.308 --> 04:18.152 [DJ]: Now we're making it happen again. 04:18.212 --> 04:20.196 [DJ]: That's got to be really exciting. 04:20.378 --> 04:20.919 [JM]: For sure. 04:21.219 --> 04:29.067 [JM]: And the fact that we have technology that is so much more advanced than we did when we did this last time around is also interesting. 04:29.087 --> 04:35.334 [JM]: I saw that one of the things that the first visitors to the moon definitely didn't have was internet access. 04:36.034 --> 04:48.327 [JM]: And the current astronauts heading there have 250 megabit per second connections to the internet via lasers, which is really... 04:48.307 --> 04:54.739 [JM]: Just like something that feels like we've read it out of science fiction, and yet this is what's actually happening right now. 04:55.240 --> 04:56.162 [DJ]: Yeah, that's amazing. 04:56.402 --> 05:03.154 [DJ]: And also, I think that despite being advertised as a gigabit internet connection, that is effectively faster than my home internet. 05:03.295 --> 05:04.577 [DJ]: So that's quite impressive. 05:04.861 --> 05:07.000 [JM]: Latency might be a little higher, but... 05:07.170 --> 05:08.169 [DJ]: Do you think so? 05:08.630 --> 05:10.334 [JM]: Probably, given the distance. 05:10.354 --> 05:12.679 [JM]: Yeah, I would imagine, you know, light can only go so fast. 05:13.160 --> 05:14.945 [DJ]: It's going that fast through a vacuum, though. 05:15.185 --> 05:18.533 [DJ]: So I nod my head like I know what difference that makes, but... 05:19.272 --> 05:23.039 [JM]: In the interest of full disclosure to our listeners, neither of us are physicists. 05:25.142 --> 05:27.687 [DJ]: I am not a professional laserologist, it's true. 05:28.228 --> 05:36.262 [JM]: Speaking of the opposite of physicists, I came across an entertaining site called the Idiocracy Proximity Index. 05:36.923 --> 05:40.369 [JM]: And if you go to idiocracy.wtf, 05:40.349 --> 05:44.694 [DJ]: And a better use of that top-level domain, I cannot imagine. 05:45.194 --> 05:48.618 [JM]: Probably the best usage of that TLD I have seen. 05:48.678 --> 05:55.766 [JM]: And the mission of this site is to track how close reality is to Mike Judge's 2006 prophecy. 05:56.287 --> 06:04.075 [JM]: And if you don't get that reference, that's because (A), it was 20 years ago, and (B), it was a movie called Idiocracy. 06:04.836 --> 06:10.322 [JM]: And as of this moment, the Idiocracy Proximity Index, 06:10.302 --> 06:18.354 [JM]: on the scale ranging from functional society on the left to full idiocracy on the right, we are currently at 78%. 06:18.815 --> 06:28.069 [JM]: Or to put it another way, Idiocracy is basically a documentary at this point, as the site accurately describes. 06:28.570 --> 06:39.246 [DJ]: I feel like Mike Judge has already had many reasons to be smug for many years as the creator of lots of award-winning satires, but I just hate to think how smug he must feel now. 06:39.918 --> 06:41.179 [JM]: Yeah, you really got to give it to him. 06:41.660 --> 06:42.561 [JM]: He really nailed this. 06:43.081 --> 06:49.929 [JM]: One of the fun things about this site is it's not just like this person made up a number and said, all right, we're at 78%. 06:50.049 --> 07:00.020 [JM]: There's actual criteria listed as in this thing happens in the movie versus this is the reality that we're living in. 07:00.060 --> 07:03.664 [JM]: And then there's a percentage match for each of those things. 07:03.644 --> 07:10.308 [JM]: ranging from 55% on the low end to 92% on the high end. 07:10.348 --> 07:15.004 [JM]: And then the blend of all of those things is how we arrive at 78%. 07:15.068 --> 07:17.191 [JM]: But I feel confident that we will eventually get there. 07:17.451 --> 07:26.142 [JM]: We will eventually arrive, maybe not at 100, but close enough that we can say like, all right, we've achieved effective full idiocracy. 07:26.182 --> 07:30.027 [DJ]: That attitude makes it sound like that's the goal. 07:30.568 --> 07:33.231 [DJ]: That you're just like, I'm confident that we will achieve this goal. 07:34.052 --> 07:36.836 [DJ]: Like you're the CEO of the worst company that's ever existed. 07:37.417 --> 07:40.941 [DJ]: You're just like, listen, people, if we really roll up our sleeves... 07:41.174 --> 07:47.685 [JM]: Like our intrepid astronauts, I feel confident that we will arrive at our full mission completion. 07:48.125 --> 07:55.417 [DJ]: But yeah, this site follows, to me, it is of a piece with sites like Web 3 Is Going Great. 07:55.898 --> 07:56.539 [DJ]: Have you seen that? 07:57.060 --> 07:57.341 [JM]: Yes. 07:57.902 --> 07:59.885 [DJ]: And there's another similar site. 07:59.905 --> 08:04.633 [DJ]: And I think that one was created by, I believe her name's Molly White. 08:04.933 --> 08:06.035 [DJ]: I'm doing that off the dome. 08:06.095 --> 08:07.317 [DJ]: So I hope that's correct. 08:07.297 --> 08:18.133 [DJ]: That's another one of these sites that tracks things going on in the real world that are obnoxious and depressing but does so in a way that is enlivening and hilarious. 08:18.714 --> 08:24.462 [DJ]: I appreciate that these things are out there cataloging, I guess, how ridiculous everything is. 08:24.695 --> 08:33.227 [JM]: There's a ticker at the top that says things like "Secretary of State sponsored by Mountain Dew" and other entertaining breaking news. 08:33.708 --> 08:38.775 [DJ]: And now I'm honestly not sure whether those are references to the movie or reality. 08:39.276 --> 08:40.477 [JM]: That's the scary part, isn't it? 08:40.898 --> 08:42.400 [JM]: I can't tell either. 08:42.380 --> 08:43.261 [JM]: All right, moving on. 08:43.361 --> 08:53.734 [JM]: In other news, Claude Code is a tool that one can use in a terminal to generate code using the Claude model by Anthropic. 08:54.375 --> 09:01.024 [JM]: And last week it was reported that the source code to Claude Code has leaked. 09:01.044 --> 09:08.353 [JM]: Apparently there was some oversight by someone at Anthropic that resulted in a map file being 09:08.333 --> 09:13.459 [JM]: published in their NPM registry, and as a result, the source code became available. 09:13.940 --> 09:27.596 [JM]: Someone posted a link to it to Twitter, which was subsequently downloaded and reposted to every possible place on the internet, including hundreds or perhaps even thousands of times as GitHub repositories. 09:28.217 --> 09:35.824 [JM]: Most of which, if not all of which, at this point have been taken down due to presumably requests from Anthropic. 09:36.244 --> 09:53.560 [JM]: The fact that it's still available on Twitter, that the original link, as far as I can tell, is still there and downloadable, should surprise nobody who's paying attention, because I can just see the current owner of Twitter being like, "Oh yeah, I'm leaving that one up." 09:53.580 --> 09:57.443 [JM]: That just seems so perfectly onbrand. 09:57.743 --> 09:58.664 [DJ]: It does, yes. 09:59.385 --> 10:21.017 [JM]: And there have been a lot of interesting insights into the source code to Claude Code since it became available, including an April Fool's joke that was just about to be released when this code leaked, where you could type slash buddy and you would get a little Tamagotchi-style companion creature with ASCII art sprites. 10:21.217 --> 10:25.122 [DJ]: but Claude Code already prominently includes a little Tamagotchi-like creature. 10:25.802 --> 10:29.787 [JM]: Yes, I think this one was more interactive or animated. 10:29.807 --> 10:33.011 [JM]: It wasn't just some static image that appeared on launch. 10:33.471 --> 10:47.528 [DJ]: Well, this one in the bold path blazed by the Tamagotchi, this one would die if you did not keep feeding it and giving it attention, which might also be a good metaphor for our current obsession with large language models. 10:48.200 --> 11:07.103 [JM]: Another insight that was unearthed is that there is an undercover mode in which there are instructions specifically that the model should strip all references to Claude from commits and open source pull requests. 11:07.083 --> 11:10.347 [JM]: And you can take guesses, I suppose, at why they would do this. 11:10.908 --> 11:24.044 [JM]: Some people assumed it was so that Anthropic employees, when contributing to open source projects, wouldn't have the fact that they're using Claude to generate code be clear or transparent. 11:24.405 --> 11:28.450 [JM]: But regardless of the motivation, it's interesting that this instruction is in there. 11:28.430 --> 11:47.980 [JM]: I think one of the more damaging things for Anthropic isn't so much the leak of the code itself as much as it is the features that are referenced in it, as in the features that are coming, because that way their competitors can tell to an extent what their future roadmap looks like. 11:48.381 --> 11:56.293 [JM]: For example, I think one of the most significant features that became clear by looking at the source code is an autonomous agent mode. 11:56.273 --> 12:19.927 [JM]: And part of that is that it runs continuously in the background and has a skill called Dream, which performs nightly memory distillation, which is another way of saying when it's idle, it's essentially analyzing recent interactions and distilling those interactions down to some kind of actionable memory for subsequent interactions. 12:20.227 --> 12:21.589 [DJ]: That sounds useful, actually. 12:21.805 --> 12:23.848 [JM]: It's something that I know some people do manually. 12:24.328 --> 12:45.476 [JM]: And it is kind of interesting the way that they've even used the word "dream", which is a reference to how we believe our own brains work, where while we're sleeping, we seem to believe that our brains use that time to write certain information that we've learned to long-term memory or something to that effect. 12:45.836 --> 12:50.462 [JM]: I'm not a physicist nor a specialist in neurology. 12:50.442 --> 12:54.308 [DJ]: Yeah, I'm not a laserologist or a brainologist, just for the record. 12:54.708 --> 13:02.740 [JM]: One of the other insights was the quality of the code, which someone described as eye-wateringly spaghetti code. 13:03.161 --> 13:13.075 [DJ]: I mean, in fairness to Anthropic, I would say something like 99% of all the code I've ever encountered in my professional career could be described as eye-wateringly spaghetti code. 13:13.139 --> 13:19.570 [JM]: Fair, but have you ever encountered a function that is over 3,000 lines long? 13:20.031 --> 13:20.231 [DJ]: Yes. 13:20.592 --> 13:20.852 [JM]: Wow. 13:21.774 --> 13:24.278 [DJ]: I mean, really, I hate to take the wind out of your sails. 13:24.398 --> 13:27.283 [DJ]: I once encountered a function that I think was 10,000 lines long. 13:27.864 --> 13:28.786 [JM]: Oh, wow. 13:28.986 --> 13:29.287 [JM]: Okay. 13:29.567 --> 13:31.952 [DJ]: There were no plans to refactor this. 13:31.972 --> 13:32.312 [DJ]: It's okay. 13:32.332 --> 13:38.623 [DJ]: I think the client that that software was written for was dissolved by the Canadian government a short time later, so it didn't matter. 13:38.603 --> 13:53.780 [JM]: Well, I was blown away by the fact that there is a print function in this code base that is over 3,000 lines long, the file in which this function is contained is 5,600 lines long. 13:54.261 --> 13:56.823 [JM]: So more than half is the single function. 13:57.184 --> 14:02.670 [JM]: It has 12 levels of nesting at its deepest and defines 21 inner functions and closures. 14:03.815 --> 14:11.444 [JM]: And is very clearly, according to the people that have analyzed the source code, generated by Claude Code itself. 14:11.824 --> 14:16.870 [JM]: It is very clear that Anthropic uses Claude Code to work on their products. 14:17.370 --> 14:19.172 [JM]: It is something that their employees talk about. 14:19.573 --> 14:20.414 [JM]: So it's not a secret. 14:21.014 --> 14:30.365 [JM]: And I suppose if you have seen functions that are 10,000 lines long, then clearly you can write spaghetti code even without these tools. 14:30.405 --> 14:32.387 [JM]: So I guess it doesn't really prove very much. 14:32.570 --> 14:38.024 [DJ]: I'm sensing a little bit of goalpost-moving in some of the commentary we're discussing on this. 14:38.625 --> 14:47.608 [DJ]: People want so badly to think badly of the company and the tools involved, and some of that is deserved perhaps, 14:47.588 --> 14:51.213 [DJ]: that you get these takes that are like, "But their code's really messy." 14:51.393 --> 14:54.317 [DJ]: And I'm like, bro, are you a professional software engineer? 14:54.397 --> 15:06.713 [DJ]: Because like all production systems that have slowly accumulated over 10 years are really messy because the idea of clean code or perfect code or whatever, unfortunately only exists in our heads. 15:07.214 --> 15:10.558 [DJ]: You don't have a mandate to do it when you're actually shipping. 15:10.538 --> 15:14.783 [DJ]: And then the other part is just like, did you know they use Claude Code to build Claude Code? 15:14.803 --> 15:15.083 [DJ]: Yeah. 15:15.183 --> 15:16.945 [DJ]: Have you ever heard the term dogfooding? 15:16.965 --> 15:26.816 [DJ]: You're supposed to use the tool that you're building while you're building it so that you can actually, you're supposed to be the first best user of the tool because then it gives you the most insight into how it should work. 15:27.177 --> 15:32.323 [DJ]: So some of this stuff is a little like, it just, it feels like we're clawing for reasons to criticize. 15:32.943 --> 15:36.327 [DJ]: There's lots of good reasons to criticize Anthropic. 15:36.307 --> 15:43.478 [DJ]: I thought the most cogent take I saw on this leak was the reason this leak is alarming is not because they have a messy function in their code. 15:43.639 --> 15:50.550 [DJ]: The reason this leak is alarming is if they can screw this up, like what else can they screw up? 15:50.810 --> 15:54.055 [DJ]: Like with all the data of ours that they have collected, right? 15:54.456 --> 15:58.382 [DJ]: That was kind of the concern that resonated the most with with me. 15:58.666 --> 15:59.006 [JM]: Yeah. 15:59.287 --> 15:59.748 [JM]: And you're right. 15:59.848 --> 16:05.556 [JM]: Like they use Axios, which was involved in a very high profile security breach. 16:06.057 --> 16:13.888 [JM]: So when you see what feels like incompetence by leaking this code combined with using Axios, you're right. 16:14.068 --> 16:17.653 [JM]: Like it does tend to undermine confidence in what they're doing. 16:17.819 --> 16:20.705 [DJ]: It's the, oh man, I haven't read Spider-Man in a while... 16:20.826 --> 16:33.313 [DJ]: It's the "With great power comes great responsibility" argument, which is if companies like Anthropic and OpenAI feel like they're trying to take over the entire world from basically the rest of tech. 16:33.293 --> 16:36.457 [DJ]: Like they're basically saying everyone should use all our tools for everything. 16:36.477 --> 16:39.300 [DJ]: No other software needs to exist, etc. 16:39.360 --> 16:45.007 [DJ]: Like the way that they're totally disrupting the tech industry, we should hold them to the highest standards possible. 16:45.027 --> 16:51.735 [DJ]: Because if a company says like, hey, pipe all of your proprietary information through our systems so we can help you build stuff. 16:52.115 --> 16:54.578 [DJ]: And then it's like, oh, by the way, we leaked our own source code. 16:55.239 --> 16:57.261 [DJ]: Um, that should be alarming. 16:57.422 --> 16:58.643 [DJ]: And it is alarming. 16:58.623 --> 17:11.518 [DJ]: I will say, though, that the thing where their code includes a regex of just hard-coded swear words to try to detect whether the user is getting annoyed with them, that is kind of silly. 17:12.123 --> 17:26.742 [JM]: That was definitely one of the more amusing parts of this was this use of regular expressions for detecting negative sentiment in users' prompts, which is then logged so that they can know when people are getting frustrated. 17:27.423 --> 17:35.833 [JM]: And I saw at least one person remark that an LLM company using regexes for sentiment analysis is peak irony. 17:35.873 --> 17:39.798 [JM]: And I think that's probably accurate, right? 17:39.818 --> 17:42.281 [JM]: Like we all kind of feel that that's inherently funny. 17:42.722 --> 17:46.907 [JM]: Yes, obviously using a regular expression here is faster and cheaper. 17:46.967 --> 17:57.840 [JM]: But the fact that they're using that tool as opposed to, I don't know, using a large language model to detect, you know, negative sentiment is still hilarious. 17:57.820 --> 18:00.543 [DJ]: So it is like it's conceptually hilarious. 18:00.603 --> 18:04.066 [DJ]: But again, I like I hate to find myself coming to the defense. 18:04.166 --> 18:07.470 [DJ]: But I think being pragmatic is good, actually. 18:07.550 --> 18:11.393 [DJ]: So the thing where it's like, well, this spaghetti code function has 12 nested functions. 18:11.754 --> 18:14.256 [DJ]: Well, that's bad if human beings need to review the code. 18:14.296 --> 18:23.085 [DJ]: But arguably, if that function has a robust enough test suite, and you're just going to use agents to work on it, it kind of doesn't matter what the code works looks like. 18:23.065 --> 18:37.675 [DJ]: And for the regex thing, like, honestly, in my like day job, I find myself sometimes giving feedback to people where I'm like, instead of running that through an LLM, which costs money and more important, and even more importantly, like makes the user wait several seconds. 18:38.176 --> 18:40.340 [DJ]: Have you considered like pattern matching? 18:40.480 --> 18:44.348 [DJ]: Have you considered like one of the many non-large-language-model-related 18:44.328 --> 19:07.517 [DJ]: computer science solutions to this? So again I can't actually blame them in practice for saying, you know what, just put a map of strings that contain common curse words in there and call it a day, because this thing has to run in like 0.1 milliseconds. Yeah, that probably is actually the right solution even though it is still funny. 19:07.733 --> 19:12.079 [JM]: To nitpick, this is a logging function that doesn't need to be done in real time. 19:12.119 --> 19:15.143 [JM]: This can just detect the sentiment and log it. 19:15.163 --> 19:19.809 [JM]: It can run in some cron job that runs 10 hours later. 19:19.889 --> 19:25.356 [JM]: It has nothing to do with the current user's interaction, but it does cost more money. 19:25.417 --> 19:29.522 [JM]: They have to consume more of their precious 19:29.502 --> 19:34.952 [JM]: large language model resources that they're already struggling to keep up with demand for. 19:35.012 --> 19:39.860 [JM]: So I can understand doing the quick-and-dirty solution that they went with. 19:40.221 --> 19:47.774 [JM]: Perhaps a little less understandable is the anti-distillation defense that they baked into Claude Code. 19:48.396 --> 19:53.164 [JM]: And when enabled, this injects anti-distillation 19:53.144 --> 20:04.766 [JM]: fake tool responses to every API request, which causes the server to silently put decoy tool definitions into the model system prompt. 20:04.786 --> 20:05.547 [JM]: Why would they do this? 20:05.587 --> 20:11.338 [JM]: Well, the goal is to prevent someone who's trying to scrape Claude Code's API traffic 20:11.318 --> 20:12.980 [JM]: to train a competing model. 20:13.361 --> 20:19.349 [JM]: The goal here is to poison the training data to make this distillation attempt less useful. 20:19.930 --> 20:40.279 [JM]: And someone noted that Quen 27B, which is a model made by a competitor, was distilled on Opus 4.6 and has some known issues with tool use specifically, indicating perhaps that this anti-distillation defense has been effective in thwarting 20:40.259 --> 20:46.826 [JM]: other competing model makers from using Claude Code to do their distillation. 20:47.327 --> 21:00.821 [JM]: I do think it's kind of amusing that Anthropic is trying to prevent people from using their tool to create derivative works when that's precisely how they created the model in the first place. 21:01.402 --> 21:10.131 [JM]: So it's a little, one could say hypocritical to try to prevent the very thing that allowed Anthropic to create this model in the first place. 21:10.415 --> 21:10.796 [DJ]: I know. 21:11.037 --> 21:17.236 [DJ]: It's hypocritical, but 100% predictable given the incentives, right? 21:17.296 --> 21:24.137 [DJ]: Like this is arguably the problem with these companies existing as for-profit corporations in the first place. 21:24.303 --> 21:25.786 [JM]: No, it's totally predictable. 21:25.826 --> 21:26.267 [JM]: No question. 21:26.748 --> 21:28.010 [JM]: I just find it interesting. 21:28.111 --> 21:29.634 [JM]: And like I said, kind of amusing. 21:30.355 --> 21:37.750 [JM]: All right, moving on to GitHub, who has been having a bit of trouble recently with uptime. 21:37.790 --> 21:40.476 [JM]: And people have noticed this quite a bit recently. 21:40.516 --> 21:41.738 [JM]: It's been affecting... 21:41.718 --> 21:43.361 [JM]: their ability to get things done. 21:43.982 --> 21:55.262 [JM]: And GitHub used to have a way of looking at historical uptime, but I think decided that was perhaps not very flattering and removed it in favor of just a current status. 21:55.383 --> 21:57.907 [JM]: Like these systems are functioning, these are not. 21:58.328 --> 22:00.672 [JM]: So people have stepped in to create 22:00.652 --> 22:12.389 [JM]: The missing GitHub status page and GitHub's historic uptime, which are two different sites that provide a bit of insight into how GitHub's been performing. 22:12.889 --> 22:15.213 [JM]: And spoiler alert, it's not good. 22:15.613 --> 22:24.486 [JM]: The last 90 days, according to the missing GitHub status page, shows uptime of 89.43%. 22:26.569 --> 22:29.393 [JM]: And the reason why that's funny is because 22:29.373 --> 22:33.118 [JM]: People usually talk about uptime in terms of nines, right? 22:33.138 --> 22:37.283 [JM]: Like, you know, five nines, however many, you know, 99 points. 22:37.303 --> 22:43.490 [JM]: How many nines can you get really after the decimal point is usually the implicit thing that's being discovered here. 22:43.590 --> 22:46.514 [JM]: And now GitHub is delivering zero nines. 22:46.974 --> 22:49.738 [DJ]: They have, there is a single nine in there. 22:49.898 --> 22:51.600 [DJ]: It's just in the wrong position. 22:51.580 --> 22:58.392 [JM]: Yes, which in terms of how that is usually scored is zero nines. 22:58.973 --> 23:03.360 [JM]: It's funny because when I originally looked at this, they only had two nines. 23:03.400 --> 23:10.112 [JM]: It was like 99 point something and then it was down to one and now it's down to zero, which is really quite an achievement. 23:10.160 --> 23:20.435 [DJ]: I mean, it's horrifying, really, if you consider a piece of infrastructure for the internet, for lots of businesses, for open source projects. 23:21.056 --> 23:27.965 [DJ]: Having less than several nines of uptime is not generally considered acceptable. 23:28.646 --> 23:29.147 [DJ]: Yeah. 23:29.127 --> 23:40.682 [DJ]: It's maybe some combination of the ubiquity of GitHub, like the too-big-to-fail nature of it, and maybe its ownership by Microsoft, which, same deal. 23:41.263 --> 23:43.966 [DJ]: That prevents any sort of... 23:43.986 --> 23:55.381 [DJ]: I haven't really seen any accountability about this, and I apologize if I've missed it, but I haven't seen a statement from GitHub recognizing that this is essentially a crisis and that they're going to do better. 23:55.481 --> 23:57.143 [DJ]: Instead, it just seems like... 23:57.123 --> 24:05.117 [DJ]: At least from my perch, like working for a company that uses GitHub, you know, sitting there going like, oh, there's another outage today. 24:05.178 --> 24:10.046 [DJ]: You know, it's like, oh, this part of our CI pipeline just isn't working right now. 24:10.647 --> 24:15.116 [DJ]: It's like, this does not seem to bode well. 24:15.436 --> 24:19.283 [DJ]: But what I haven't heard is GitHub running around reassuring us all. 24:19.482 --> 24:25.110 [JM]: Yeah, just to check my own sanity, I'm looking at the notes where I've been following the story. 24:25.550 --> 24:29.676 [JM]: And the original link that I put down here was from just under two months ago. 24:29.736 --> 24:39.248 [JM]: And the headline is GitHub appears to be struggling with measly three nines availability, which now seems almost quaint two months later. 24:39.268 --> 24:40.330 [DJ]: Yeah, exactly. 24:40.350 --> 24:41.912 [DJ]: And that was only two months ago. 24:42.027 --> 24:47.592 [JM]: So people were already saying GitHub might be in trouble back when that was their availability. 24:48.193 --> 24:52.196 [JM]: And I think you're right to call out the Microsoft acquisition. 24:52.697 --> 25:09.171 [JM]: Because if you look at GitHub's historic uptime, which is a page that will be in the show notes, and there's a graph of average uptime by month from April of 2016, presumably when GitHub came on the scene, through the present day. 25:09.412 --> 25:12.034 [JM]: And there is this vertical line drawn. 25:12.014 --> 25:15.659 [JM]: about November of 2018 when this acquisition happened. 25:16.120 --> 25:38.511 [JM]: And this graph is a damning indictment of Microsoft's stewardship of GitHub's uptime because it goes from being this horizontal line of green dots on the 100% uptime line to just a sea of yellow and red indicating very shoddy uptime post-acquisition. 25:38.491 --> 25:49.468 [DJ]: Now, Justin, we have to remember that correlation does not imply causation because if you really look at that graph, Microsoft acquired them in like 2019-ish. 25:50.029 --> 25:54.796 [DJ]: But when the uptime really starts to fall off a cliff is right around March of 2020. 25:55.016 --> 26:00.585 [DJ]: And I would like to remind you what other significant event happened in the world around that time. 26:00.825 --> 26:05.773 [DJ]: So I think possibly the real solution is that GitHub is suffering from long COVID. 26:05.833 --> 26:05.933 Yeah. 26:06.790 --> 26:09.596 [JM]: Well, if this keeps up, it's going to be more like forever COVID. 26:10.778 --> 26:15.427 [DJ]: If this keeps up, we're all going to have to move to self-hosted Forgejo installations. 26:15.928 --> 26:23.263 [JM]: Well, it's funny that you mentioned that because if you look at the status page for Codeberg, which is powered by... Say it. 26:27.411 --> 26:28.393 [JM]: I don't even know how. 26:28.643 --> 26:30.210 [DJ]: Powered by a fork of getee. 26:30.612 --> 26:31.114 [DJ]: Getea? 26:31.315 --> 26:31.858 [DJ]: Getea? 26:32.320 --> 26:33.787 [DJ]: What is it with these names, Justin? 26:33.827 --> 26:35.676 [DJ]: Why can't anybody come up with a good name? 26:35.736 --> 26:38.147 [DJ]: I mean, Codeberg at least is a pretty good name. 26:38.380 --> 26:39.001 [JM]: Forgejo. 26:39.562 --> 26:40.223 [JM]: I know that's wrong. 26:40.583 --> 26:41.524 [JM]: Forgejo. 26:41.544 --> 26:47.993 [JM]: I know Forgejo is not how it's pronounced, but that's what I am willfully mispronouncing it as. 26:48.734 --> 27:02.734 [JM]: So if you look at the uptime history for Codeberg listed by service, it's 100, 100, 100, 99.91, 100, 100, 99.86, and more hundreds after that. 27:02.714 --> 27:07.327 [JM]: I understand that vastly fewer people are using Codeberg than using GitHub. 27:07.788 --> 27:15.289 [JM]: And yet their overall uptime is just night and day, way, way above GitHub's at this point. 27:15.404 --> 27:15.804 [DJ]: Uh-huh. 27:16.365 --> 27:22.612 [DJ]: I saw a thing the other day from one of the heads of operations at GitHub, I think. 27:22.732 --> 27:32.703 [DJ]: It was saying that, well, I can't remember the exact numbers, but it was something like in, I think, the first quarter of 2026 on, I think it was like on GitHub Actions. 27:33.183 --> 27:39.150 [DJ]: They had something like, I don't know, 12 times as much activity as they'd had in all of 2025 put together. 27:39.130 --> 27:42.274 [DJ]: So like there are real problems with GitHub. 27:42.675 --> 27:56.915 [DJ]: I do also think that those problems might come from a genuine massive increase in scale and not simply the idea that Microsoft has assigned only the F tier employees to work on GitHub or whatever. 27:57.556 --> 27:59.198 [DJ]: And, and also like, 27:59.178 --> 28:01.300 [DJ]: Yeah, I have a fondness for Codeberg. 28:01.340 --> 28:10.828 [DJ]: But quite frankly, if Codeberg, if something like 1% of 1% of the activity on GitHub was suddenly shunted to Codeberg, Codeberg would go down tomorrow and not come back. 28:11.208 --> 28:13.170 [DJ]: Like, sorry, guys, that's what would happen. 28:13.490 --> 28:17.133 [DJ]: So some of this is not really like this organization is good. 28:17.173 --> 28:18.594 [DJ]: And this organization is bad. 28:18.654 --> 28:28.763 [DJ]: I think I think it really is more about the sort of unprecedented wave of software that has that has come about over the past year or so in particular. 28:28.996 --> 28:41.529 [JM]: Yeah, but I don't think you can look at this graph of GitHub's historic uptime and conclude that there was this massive wave around the time that Microsoft acquired GitHub. 28:41.789 --> 28:45.513 [JM]: Like, I don't think this timing is unrelated to the acquisition. 28:45.553 --> 28:57.265 [JM]: And I feel like particularly with the kinds of resources that a company like Microsoft has, they should be able to deliver better uptime 28:57.245 --> 29:13.195 [JM]: But I feel like they just don't put as big a priority on that as, say, deploying their copilot LLM in all the places where people sometimes don't necessarily want it. 29:13.360 --> 29:24.878 [JM]: Well, speaking of uptime or downtime, as it were, I think it's been interesting also to see how Anthropic has struggled with keeping their Claude service available and some of the outages that they've had. 29:25.299 --> 29:28.924 [JM]: I had one friend of mine say, "Claude was out for two hours today." 29:28.944 --> 29:30.947 [JM]: "I had no idea how to do anything." 29:31.388 --> 29:32.991 [JM]: And this wasn't even about code generation. 29:33.011 --> 29:36.516 [JM]: This was just about using Claude for non-code related things. 29:36.496 --> 29:39.581 [JM]: I do wonder what that's going to be like. 29:39.902 --> 29:49.058 [JM]: It's like that old XKCD comic where the manager sees their engineers goofing off and asks them why they aren't working. 29:49.699 --> 29:51.823 [JM]: And they say, "Code's compiling." 29:54.047 --> 29:54.808 [DJ]: That feels quaint. 29:55.160 --> 29:55.521 [JM]: Right? 29:55.921 --> 29:58.606 [JM]: And now it's going to be, oh, well, the LLM is down. 29:58.666 --> 30:00.649 [DJ]: That's really for real, right? 30:01.110 --> 30:05.797 [DJ]: It is kind of insidious how you get used to using this tool all the time. 30:05.998 --> 30:10.605 [DJ]: And then if your internet connection drops, you can't get any work done. 30:10.866 --> 30:17.677 [DJ]: But then also, if the company providing the LLM service has an outage, you can't get any work done. 30:17.857 --> 30:18.298 [DJ]: And like, 30:18.278 --> 30:31.455 [DJ]: I think we are going to want and need, as I am fond of pursuing, alternatives like things that run models locally on device or on a company's own infrastructure or something like that. 30:31.515 --> 30:34.759 [DJ]: Because this really is such a stark dependency. 30:35.300 --> 30:38.904 [DJ]: I ran into this just yesterday on a personal project. 30:38.964 --> 30:41.147 [DJ]: I was working with Claude Code and... 30:41.127 --> 31:05.852 [DJ]: Claude Code just decided you're not authenticated anymore. You know how you were logged in on that last request? Well on this one you're not, so please log back in. And you know it's relatively straightforward to do that: you type in a command, it opens a web browser, in this case my web browser like I have a cookie that's already authenticated with Claude, so you just have to basically click okay, but the first time I tried to do that it didn't work, so I tried again -- it didn't work. 31:05.832 --> 31:07.234 [DJ]: And I tried again and it didn't work. 31:07.294 --> 31:09.877 [DJ]: And so I was like, I guess I'm done using Claude Code for the morning. 31:09.917 --> 31:14.523 [DJ]: And sure enough, like I came back that afternoon and tried exactly the same thing and it worked immediately. 31:15.024 --> 31:18.769 [DJ]: So, but, but it did just like, it pointed out to me like, oh, okay. 31:19.029 --> 31:23.535 [DJ]: So now if I'm like working on something, I'm in the flow state, I'm focused on this project. 31:23.876 --> 31:30.705 [DJ]: My ability to keep working on it or not is somewhat dependent on this service being available. 31:31.165 --> 31:32.447 [DJ]: And I don't like that. 31:32.427 --> 31:41.219 [DJ]: And it's the case, whether your friend was joking or not, that generally for the things I use these tools for, I do know how to do them myself if I have to. 31:41.799 --> 31:52.814 [DJ]: But nonetheless, you know, we like we should acknowledge that the more you use a tool, the more that you build habits around its presence, the more difficult is its absence. 31:52.834 --> 31:57.220 [DJ]: And we have that with lots of things, our smartphones, Internet connection, etc., 31:57.200 --> 32:00.167 [DJ]: that we don't really notice until they go away. 32:00.207 --> 32:06.040 [DJ]: And we suddenly realize like, oh, I actually have to think really hard about how to do X or Y or Z. 32:06.902 --> 32:09.588 [DJ]: And this is just another dependency like that. 32:09.768 --> 32:11.833 [DJ]: So we should keep that in mind. 32:12.016 --> 32:24.807 [JM]: There does indeed seem to be a bit of angst regarding the degree to which we will become dependent on these tools and how well we will function when they go down or become unavailable for some reason. 32:25.188 --> 32:29.097 [JM]: Because you're right that you and I can function when that happens. 32:29.077 --> 32:43.767 [JM]: But there's going to be a whole new wave of people that won't be able to, that have just become so accustomed to using these tools, not in lieu of their own abilities, but because those abilities were never needed. 32:44.208 --> 32:47.575 [JM]: And it'll be interesting to see how that all plays out. 32:47.808 --> 33:05.614 [DJ]: I was on the train the other day, and I happened to glance over the shoulder of a fellow commuter, and I saw that they were using -- I think it was ChatGPT -- on their phone, there was a chatbot of one of them, anyway... They seemed be using it to describe a difficult social situation they were going through. 33:05.674 --> 33:10.721 [DJ]: Like I just, I saw something about whether someone's behavior was acceptable, something like that. 33:10.821 --> 33:16.969 [DJ]: Again, and then I looked away, like I did not spend a bunch of time eavesdropping on this person's private thing. 33:17.070 --> 33:33.812 [DJ]: But that just stuck with me because, you know, we've heard lots of lurid stories about people becoming dependent on these tools, not just for things like writing code or writing emails, but for portions of their like mental well-being, right? 33:33.792 --> 33:41.885 [DJ]: You know, this notion of using this tool is like a therapist, which is a real bad idea for a whole bunch of reasons that, you know, I'm not going to catalog all of them right now. 33:42.286 --> 33:50.620 [DJ]: But like, I've occasionally used large language models to help me process my own thoughts. 33:50.600 --> 34:15.240 [DJ]: I’ve tried to do it very carefully, and keeping very much at the front of my mind, things like the fact that the way these things are trained, they will tend to produce output that reads as confirming. So the danger of going, to use common parlance, like is it valid for me to feel upset in this situation, like just understand that you’re gonna get some version of, "Yes, absolutely." Right? 34:15.220 --> 34:29.032 [DJ]: And so if you're going to use a tool like that, again, I think it really is much more useful not to think that you're like asking a human being what to think and instead use it to basically say, I have a bunch of ideas in my head. 34:29.653 --> 34:34.444 [DJ]: Like I just I want to get them on the screen so that I can consider them. 34:34.424 --> 34:41.135 [DJ]: But the point being that you consider them, what you're doing is, in my opinion, like what you're doing is the skill of introspection. 34:41.476 --> 34:47.806 [DJ]: The thing is, you can do that with like a piece of paper and a pen just as much as you can do it with chat GPT. 34:48.207 --> 34:57.462 [DJ]: So to your point about skills, like what I am really desperate for is for people to continue to actively develop skills. 34:57.442 --> 35:13.088 [DJ]: Skills of managing their own mental well-being, which I mean frankly lots and lots of us are bad at anyway, right? Like, they don't teach you that in school, at least I don't think they do -- I haven't been in school in a very long time, but I'm guessing they still don't teach you that in school but... 35:13.068 --> 35:30.693 [DJ]: People are already bad at this, and outsourcing stuff like your ability to think through how to have a challenging conversation with another person to like a large language model service that might be offline at that moment is such a bad idea. 35:30.713 --> 35:41.067 [DJ]: So yeah, I'm pessimistic about this new dependency that we're building into our lives in the same way that we have done with 35:41.047 --> 36:10.362 [JM]: the internet in general, and it's interesting to see the variance in our tolerance for uptime and availability, and maybe not even our tolerance but just what we are currently observing, right? Like if our electricity went out as frequently as Github's service went down, or even as you said, the internet itself -- if our internet connections were as fragile and flaky as GitHub's uptime, 36:10.342 --> 36:12.184 [JM]: it would probably be a bigger deal. 36:12.264 --> 36:13.967 [JM]: We would probably be a lot more vocal about it. 36:14.007 --> 36:19.013 [JM]: And that might have something to do with the degree to which these things are different, right? 36:19.614 --> 36:29.667 [JM]: But I do hope we arrive at a point someday where people care enough about service uptime and availability that they try to deliver it 36:29.647 --> 36:36.036 [JM]: with as much uptime as, say, our electricity delivery is usually provided. 36:36.416 --> 36:43.286 [JM]: Because otherwise, as you said, our dependence on it, coupled with frequent outages, is going to start to become a real problem. 36:43.726 --> 36:47.472 [JM]: Which is why it's nice when we can run models locally. 36:47.512 --> 36:54.321 [JM]: And one of the use cases that I have found recently relates to dictation. 36:54.301 --> 37:02.929 [JM]: I am using a tool called MacWhisper for dictation, and it uses an excellent downloadable model called Parakeet. 37:03.329 --> 37:06.092 [JM]: But I find that sometimes the punctuation isn't quite right. 37:06.552 --> 37:09.955 [JM]: It'll put periods in between words that don't belong. 37:10.496 --> 37:13.458 [JM]: Sometimes things are miscapitalized. 37:14.119 --> 37:24.308 [JM]: And MacWhisper has a feature where you can feed the output of your dictation into the large language model of your choice, and you can run the prompts of your choosing. 37:24.288 --> 37:26.631 [JM]: One of the default prompts is called Cleanup. 37:27.052 --> 37:30.918 [JM]: It's designed to fix a lot of the punctuation and capitalization issues that I just mentioned. 37:31.318 --> 37:34.323 [JM]: The problem that I have with it is latency. 37:34.803 --> 37:39.130 [JM]: I find that push to speak dictation doesn't work really well unless it's fast. 37:39.330 --> 37:49.485 [JM]: If you hold it down and you talk for 10 seconds and you let go and you have to wait for another 10 seconds, it makes it really hard to use dictation effectively. 37:49.465 --> 37:57.437 [JM]: And the round tripping to process this transcription through the large language model and back is what accounts for that extra latency. 37:57.918 --> 38:08.654 [JM]: I originally was doing this with Gemini because Google gave me a bunch of free credits to try their model with, but it was just too slow to effectively use. 38:08.694 --> 38:09.295 [JM]: So I turned it off. 38:09.675 --> 38:14.322 [JM]: So yesterday I was thinking about it and I realized part of the issue is the network latency. 38:14.863 --> 38:18.308 [JM]: And part of it is even when I was running local 38:18.288 --> 38:21.832 [JM]: models, I was using larger models than I probably needed. 38:22.252 --> 38:24.155 [JM]: They were just too slow for the task at hand. 38:24.595 --> 38:32.364 [JM]: So I decided to experiment with the just released Gemma for open weights model from Google. 38:32.384 --> 38:37.750 [JM]: And they have a small 2 billion parameter model that I've been experimenting with. 38:38.150 --> 38:40.613 [JM]: And I have to say, I'm really impressed with the results. 38:41.213 --> 38:44.397 [JM]: I barely notice any difference between a 38:44.377 --> 38:49.625 [JM]: disabling the LLM post-processing and using it with it enabled. 38:50.006 --> 38:59.240 [JM]: And for me, this is really just an excellent use case for a local large language model, something that operates really fast because there's no network latency. 38:59.260 --> 39:03.086 [JM]: And obviously I love the fact that it's all happening on device. 39:03.286 --> 39:07.553 [JM]: So from a privacy perspective, I don't have to really think too much about what I'm dictating. 39:07.914 --> 39:10.738 [JM]: There's even an iPhone version of 39:10.718 --> 39:15.645 [JM]: on an app called Google AI Edge Gallery, which is a bit of a strange name for an app. 39:15.986 --> 39:31.748 [JM]: But apparently, this app can run Gemma 4 on device on your iPhone, which I guess could be an interesting way to run something on device until Apple ships their allegedly Gemini powered on device models later this year. 39:31.728 --> 39:44.493 [JM]: One other thing that I'll mention quickly is I recently experimented with a tool called LlamaBarn, which is a way to run local models via llama.cpp, which is a tool I've mentioned in the past. 39:44.914 --> 39:50.665 [JM]: But instead of running in a terminal, it's a Mac app that you can download and run in your menu bar. 39:50.645 --> 39:54.972 [JM]: which is a lot more convenient than running the llama-server commands in the terminal. 39:55.352 --> 39:57.235 [JM]: But there were a few issues that I ran into. 39:57.276 --> 40:05.529 [JM]: One of them is that I don't see ways of adding the plethora of command line flags available to llama-server in LlamaBarn. 40:06.090 --> 40:18.289 [JM]: And so using this dictation post processing as a use case, I couldn't replicate the same speed using LlamaBarn, presumably because some of the command line flags that I'm adding, I can't add in the Mac app. 40:18.387 --> 40:27.057 [JM]: And there are a couple of other minor things related to LlamaBarn, but it does seem like a cool tool that I will use once they get some of these rough edges sorted out. 40:27.418 --> 40:28.138 [JM]: What about you, Dan? 40:28.258 --> 40:30.741 [JM]: Haven't you been working with local models recently? 40:31.222 --> 40:32.023 [DJ]: Yeah, I have. 40:32.303 --> 40:36.828 [DJ]: And my principal machine for running local models is a Linux box. 40:36.849 --> 40:41.374 [DJ]: So I don't think LlamaBarn is usable for me. 40:41.674 --> 40:47.601 [DJ]: But in terms of having an easier user interface to models... 40:47.581 --> 40:50.448 [DJ]: than I'd get with raw llama.cpp. 40:50.568 --> 40:57.324 [DJ]: I've been using LM studio and it's, I've been happy with it for the small experiments I've been doing so far. 40:57.464 --> 41:01.533 [DJ]: Cause it gives you both like a, the common chat bot interface that you can use directly. 41:01.553 --> 41:04.881 [DJ]: And it's also able to stand up a server endpoint for, 41:04.861 --> 41:07.706 [DJ]: that I can hit from another machine on my local network. 41:07.766 --> 41:10.330 [DJ]: And I recently got that working reliably. 41:11.031 --> 41:20.467 [DJ]: Very long story short, there was some Mac OS network permission stuff that I had to dig out of the Arcana and then flip a switch and suddenly everything worked. 41:20.587 --> 41:21.288 [DJ]: So that was fun. 41:22.610 --> 41:23.832 [DJ]: It wasn't fun actually. 41:23.812 --> 41:36.954 [DJ]: But it is very cool to now be able to write software that wants to interact with an LLM and do that on a model that's running locally on my hardware. 41:37.175 --> 41:45.128 [DJ]: So, for example, I wrote a little app that I use to process my financial transactions, like my bank statements. 41:45.108 --> 41:49.672 [DJ]: I really don't want to load my bank statements into cloud or chat GBT. 41:50.152 --> 41:50.473 [DJ]: Thanks. 41:51.113 --> 41:57.799 [DJ]: But, uh, but now instead I can use a large language model to cat, to categorize bank transactions. 41:58.019 --> 42:01.022 [DJ]: This is something large language models are quite good at. 42:01.222 --> 42:14.473 [DJ]: Like this is actually a use case that large language models are good for is take a bunch of semi-structured information like the random names of businesses that show up on your bank statements and, 42:14.453 --> 42:19.137 [DJ]: and try to figure out which one of those is a coffee shop and which one is a piece of software you bought. 42:19.338 --> 42:26.845 [DJ]: And so I'm really enjoying being able to run that on hardware and software that's under my control. 42:26.945 --> 42:44.241 [DJ]: So I'm definitely going to check out Gemma 4 and other maybe smaller models because the last experiment I was doing, I was using like Quen 3 80 billion, which is a gigantic model, which I'm able to run because I have a lot of GPU memory in this machine. 42:44.221 --> 42:49.854 [DJ]: But it definitely felt like using a for the thing I was doing with it. 42:50.215 --> 43:00.559 [DJ]: It definitely felt like using, you know, a jackhammer to drive a nail into a wall to hang a picture, like just too much tool for the job. 43:00.539 --> 43:14.360 [DJ]: So it will be fun to play with some of these smaller things and see if I can achieve similar results faster and maybe heating up my GPU heatsink a little less. 43:15.242 --> 43:16.624 [JM]: All right, that's all for this episode. 43:16.644 --> 43:17.665 [JM]: Thanks, everyone, for listening. 43:17.826 --> 43:22.653 [JM]: You can find me on the web at justinmayer.com, and you can find Dan at danj.ca. 43:23.054 --> 43:27.120 [JM]: Reach out with your thoughts about this episode via the Fediverse at justin.ramble.space.