Tim Burks 0:00 Hi. 0:13 So I'm Tim. 0:14 Thanks for being here. 0:16 This is my second Atmosphere, and I just drove up from Northern California. 0:22 It's been great. 0:23 Everybody, including the organizers, has really been fantastic. 0:31 This is a short presentation of a hack. 0:37 I thought you might be interested in it. 0:39 It's an unusual way that I use App Proto, and maybe it would trigger some ideas for things that you might want to do with it too. 0:51 So I'm a software developer. 0:54 I recently left a corporate job to make something new. 0:57 It's a lot to talk about, so first I'm going to focus on a kind of a key problem that I had, which is how can I get feedback on early versions of my work? 1:09 You might have heard of products that help with this. 1:12 I've shown a couple on the slide. 1:14 Oh, I'm not showing. 1:21 Let's go to your extended display. 1:31 Yeah, we tested earlier and it worked. 1:35 Oh, here. 1:35 Yeah. 1:39 You know what? 1:42 Oh, oh, I probably need to mirror my screen. 1:51 Yeah. 1:53 Does that look better? 1:58 Okay. 1:58 Okay. 1:59 Thanks. 2:02 Yeah, anyway, that was my title screen. 2:06 So I'm a software developer. 2:07 I've actually spent most of my time coding for the last 2 years and haven't really talked to people, so I'm a little awkward. 2:16 But I was talking about wanting ways to get feedback on my work, and there are these products that my friends have told me about— ConfigCat, LaunchDarkly, and I guess PostHog— and these are all fine, but I'm like just one person. 2:31 I'm just a person with a laptop, and to me they seemed like too much. 2:38 Now you might ask, why don't I just open source it? 2:44 And I've actually done a lot of open source over the years, and as good as it is, it also has some downsides. 2:53 I mean, kind of the obvious thing is you might— your code might become used by one of your rivals. 2:59 It might be something that they or their training, their coding assistants use. 3:04 But really kind of more significantly is that you might commit too soon to a set of features that you regret later. 3:12 And even worse, you might unexpectedly become someone's critical dependency. 3:19 And that sounds far-fetched, but it actually happened to me. 3:25 I was an engineer at Google and I had a project and kind of unknown to me, it became useful to Kubernetes. 3:34 And before I knew it, it was a critical dependency of kubectl, the Kubernetes CLI. 3:41 And I wasn't on the Kubernetes team. 3:45 And as I moved around in Google, none of my managers appreciated me spending any time taking care of this project. 3:53 So it just became a tax on me, like a lot of open source projects do. 3:59 So what do you want to do, or do I want to do instead? 4:03 I'd like to have a way to release early binaries. 4:07 And this is independent of what I do eventually. 4:10 But in the beginning, I'd like to just give people binaries that they can easily install, but control who can use them so that I can get feedback both directly and through analytics on how that's been going. 4:25 And the way that I do this is that I just— this is a server-side component, so I just publish Docker binaries. 4:33 And I make all my builds require a license key, which is just a JWT. 4:37 And we all know about JWTs. 4:39 The JWT identifies the user and says they have a license to use this. 4:43 And then I add @proto/signin to my website, and anyone can log in to my project website with their BlueSky or whatever @proto ID and mint their own license key. 4:58 But in order to decide who can mint the license key— now, this is the hack— instead of keeping a list, I just say that whoever my project account follows can mint a license. 5:10 So if Agent.io follows you, you're in the beta. 5:15 So I really like this because it's so simple. 5:23 And because I'm using App Proto identities, no— like, I talk to enterprise companies that have their own, like, login with this or that. 5:33 None of them can be mad that I'm using one of their competitors to log in to my website. 5:37 So I'm neutral. 5:40 And then I didn't even add a lexicon. 5:42 It was just so easy. 5:44 I just have a dedicated account for this, and whoever it follows is in my beta. 5:48 And then I get this thing that my friend Marsh calls social proof, or social unproof if I'm not having users. 5:56 Basically, anyone can see who my users are. 5:58 So they can see who else is interested in the product. 6:02 And so that means it might not be right for you. 6:04 So if you don't like exposing that, you might just want to keep a private list. 6:10 And like anything, it's breakable. 6:12 So if you're, you know, enough of a hacker to break my licenses, OK. 6:22 And then people need App Proto accounts. 6:25 And if people interested in my project don't have one, they have to get an App Proto account, which is not a problem to any of us, right? 6:36 So that's my story. 6:38 This is just a list of things that I like to talk about or I'm interested in hearing about. 6:43 So if you see me around and just want to say hi, talk about any of those things or anything that's interesting to you, that's cool. 6:51 We don't have much time left, but I'll be here late today. 6:56 And I also— how many minutes do I have left? 7:01 Give me a budget. 7:03 You got time. 7:04 Okay, I'm gonna take maybe 5 minutes. 7:07 This is what I'm building. 7:08 This is what I call IO. 7:10 IO is a network proxy. 7:12 I'm gonna disconnect from it for a second. 7:15 So it's actually running on a droplet on DigitalOcean, and I can SSH to it, and when I do, I get this terminal UI, and I can use the terminal UI to see all the API traffic that I/O manages. 7:33 And so what I'm showing are different kinds of traffic that it manages. 7:37 And I wanna just focus on this one on the right. 7:40 Um, I call it ingress. 7:42 These are the HTTPS terminations of my server. 7:47 So each of these is, uh, under ingress. 7:51 This is a server, a server, a service that, um, you connect to with HTTPS. 7:58 This one, repo-works, is a PDS that I'm writing. 8:04 And so now I'm, I just stepped down into it and I'm looking at the traffic. 8:09 So somebody, well, here's my subscribe-repos traffic. 8:14 Um, these are calls to get like lists of repos and I can kind of drill into this and I can see the request. 8:23 This is the headers and response headers, the request and response headers for this. 8:28 And I can see— this is for debugging— I can see the request and response bodies, and this is what I'm returning. 8:35 So that's, you know, for observation. 8:38 Now here I've got an implementation of the Statusphere app, and this Statusphere app is actually also running on my proxy. 8:48 So if I go back up, I've got this statusphere.babu.dev. 8:54 Um, I'm gonna sign into this Statusphere app. 9:00 This, I should probably say, is not the original Statusphere app. 9:04 This is one that I modified to take advantage of my proxy. 9:08 And I'm gonna mention here, I'm gonna use an identity on my new PDS that I'm working on. 9:15 And you can see it's being developed by my fancy login screen. 9:23 And my very fancy confirmation screen. 9:27 And so now I'm in. 9:30 So my user is just named alpha user and I'm gonna set its status to, uh, what do we like? 9:38 Well, I like that, so it's a butterfly. 9:42 So, I mean, this is the status for app, we all know this, right? 9:46 So I come back and see what's going on in my proxy. 9:50 So we can look at the PDS and these are the calls that were made to my PDS. 9:56 So I can see, um, down here, sign in, the original like PAR request that we could look into that. 10:06 So this is the PAR request, that's the PAR request message that was sent by my app, that's the request, uh, that's the response body of the PAR request, okay. 10:17 And all the other traffic. 10:21 And meanwhile, I can also go over to the Statusphere app and see its traffic, which includes— let's see— the callback and the other messages that it sends. 10:40 So— oh, am I looking at the right one? 10:42 Okay. 10:42 So anyway, this is I/O. 10:44 It's a tool for building services and observing them as they run. 10:48 I'm doing a kind of open beta now, so if you connect with me, I'll give you a license and I'd love to hear what you think. 10:56 Thanks. 10:57 Hey, thank you very much, Tim. 10:59 We're going to have a very brief moment of turnover. 11:01 Roscoe, you're going to be up. 11:13 Yeah, let's kick this off. 11:15 The now responsible party for PLC directory, please