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