Dave's got a theory that we could build dev teams like video game teams, Chris has an API edge rant, Dave tests Nuxt 3, billionaires buying apps, camper talk, and the search for the perfect webcam.
Time Jump Links
MANTRA: Just Build Websites!
Dave Rupert: Hey there, Shop-o-maniacs. You're listening to another episode of the ShopTalk Show, a podcast all about front-end Web design and development. I'm Dave--in the shed--Rupert and with me is Chris--in the booth-Coyier. Hey, Chris. How are you doing today?
Chris Coyier: I'm good. I like your enthusiasm. Ready to go on this random--
Dave: Every week, you show up.
Chris: Show up.
Dave: You gotta show up, and that's part of the job.
Chris: Part of the job. You're God dang right. Yeah, front-end. Even though your life is probably so back-end lately, I bet.
Dave: I am up to my armpits in backend work.
Chris: Are you really? Oh.
Dave: And it's just like I'm looking at -- I was looking at the tickets today because I just finished a project. Right? I just was on a bug crush sprint, you know, like we had showstopping bugs. I just was like, I'm going to fix those, because that's like -- get those out of the way, and then we can cut new features. That's kind of the new, next phase of life, you know. And so, I'm looking at all this work, man.
Dave: And I'm just like, this is a back-end. This is a back-end. Okay. That's all back-end. I'm just up to my eyeballs in stuff. I'm just trying to - I don't know - figure out how to cut this work up and stuff. We've got a little bit of help, so that's nice. But it's just trying to get this all sorted. It's hard.
Chris: I bet, dude.
Dave: It's funny. You go to -- I don't know. I've been going around to a lot of startups sites and stuff like that. You check out their About page. You're like, "How many people work on this thing?" It's like 10 or 20 people. They make blog for dogs, or whatever thing that I'm like, "Does that really take ten people?"
Chris: It's always more than you think, isn't it?
Dave: Yeah! Then I'm looking at CodePen. I'm just like, "How the hell does CodePen do it? They've got like seven-ish or eight-ish or something." I'm just like, "Y'all are--"
Chris: I'll tell you how. Everybody is very smart and we've had ten years to do it.
Chris: I say ten years because June -- it's something like June 19th or something. I'd have to look it up. Next month will literally be ten years since the beta.
Chris: Really, we were working on it before the beta was public, so we're kind of past ten years of actually working on it.
Dave: Well, and your money machine is going.
Dave: You've got a payment coming. I'm like, I need a money machine. [Laughter]
Dave: I need a payment service. Ah, crap! So, that's more back-end tickets. Anyway, it's all just--
Chris: It is. It is.
Dave: But the back-end, I can do the back-end. It's fine. I get very -- what would be the term?
I was thinking about this today. Can I mouth blog a blog for you?
Chris: Do it.
Dave: Okay. I put a poll up on Twitter. I can see how it's going. But it was, basically, I was thinking about teams and how we assemble teams. We're like, "Oh, you need a senior developer. You need a junior developer." You know?
But is thinking about teams in video games where it's like you need a tank. You need a support. You need a DPS, a damage hero who just--
Chris: Probably like League of Legends. Classic. You have a tank and a mage.
Dave: League of Legends, yeah.
Dave: You wouldn't go into a battle with only five supports. Maybe you would just for the meme.
Dave: [Laughter] You went in with five supports. You're going to get flattened. I just was kind of like, you know, maybe that idea applies to Web development -- to some degree -- because it reflects more like style. It reflects, like, I'm a tank, dude. I have infinite hit points and I can just take whatever grind there is.
Chris: Right. What's your weakness then, though, as a tank? You know?
Dave: But I'm defense, but I'm slow as heck. I'm a defensive coder, but I'm slow as heck - or something like that. Right?
Chris: Right. Right.
Dave: Then damage. You could have a range sniper, and they are just two--
They are specialized, right? They do one thing and one thing very well, but not super good.
Chris: Right, but you only get them on Thursdays. On Monday, they're sleeping. [Laughter]
Dave: Yeah. they're not good in the mid-fight or the close-fight.
Dave: You don't want them. You want -- or, you know, it's like a spell caster or something. Maybe that's -- I don't know. Now you're getting into D&D sort of characters, right? The cleric ... just like, "Hey, buddy. You can do it." Somebody who is literally supportive. That's super valuable. Maybe you need that on your team, right?
Dave: Maybe you need these roles more than you need junior, senior.
Chris: It reminds me of interviewing, though, because it's kind of like you're going to get at what they're good at pretty quick, right? It's kind of like, "Oh, you talk and talk, and you're going to tell me what you're good at. What you're good at is on your resume. What you're good at is on your website. What you're good at is on your social media. What you're good at is on your Git app."
We're going to get at that pretty quickly, although you do need to verify it. But what's harder and more difficult to root out is what you're bad at. It's almost like a good interview is like, "All right. All right. We've already figured out what you're good at. You need to tell me what you're bad at because I super need to know." You know?
Dave: Because if we chuck in a team, we can't -- right? I need to know you have zero back-end skills before I ask you to--
Dave: If you put full stack on your resume, but if you can't do this, please let me know because this is security critical - or something.
Chris: Right. The people that are like fire fast, which I don't hate, it doesn't jive with my personality very well, but I get why it's so useful. It's hard to root out what somebody is bad at, so just hire them. Then if they're bad at stuff, that's bad for your company. Just fire them quick so they can move on.
Chris: I like the metaphor, though. Support really is a role in League of Legends, isn't it? That's one of the--
Dave: It is. Yeah, and it's in Overwatch and even in D&D. It would be a cleric or something like that. It's just like somebody who can come in and assist or they're excellent pair programmers. I might be a support because I'm actually really good at being a rubber duck. I am super good at it. I don't mind saying that.
If we sit together and you're coding, I'm pretty good at just sitting there. [Laughter]
Chris: Yeah. I think that's important, though, but it would be nice to be in a role where you had a bunch of people doing work then that you could visit. I feel like that. I almost wish we had more coders because I feel like I'm a better pair programmer than I am workhorse. You know?
Dave: Well, there you go. Yeah, you're low on damage, maybe you're high on support - right now in your career.
Chris: Yeah, and I have high context too, and I can ask questions, and I can tell you what the front-end team is thinking while we're doing back-end stuff.
Dave: See that. What value is that? That's management, maybe. But that's a skill that we don't factor into hiring, like, how good are you at understanding the whole complex machine? How good are you at that?
Dave: It's okay if you're medium good or low good, but are you a specialist or do you like to sit in the back? Are you range, but you're at an area of effect spellcaster because you like to see the whole picture before you attack, or something like that? You're constantly looking at the whole picture.
It's something to think about. Are you a shock collar? Are you just -- I don't know. Are you doing it for your own glory? Who knows?
Chris: I like it. Are there funny programmer archetypes?
Dave: Oh, so back-end. I mean I don't know. I can back-end. I can tank down and back-end to back-end work, but it's going to be slow. It's going to be--
Dave: I'm kind of maybe cautious. I'm fearful because I'm like, "Oh, if I do that, it'll open up a giant security hole," whereas some people are just like, "I added payment in about ten seconds."
Dave: I'm like, "Cool. That sounds fraught with problems." You know?
Chris: Does it have tests? Do they run in CI? Yeah.
Chris: Did you actually think about this because nothing happens that quickly.
Dave: Yeah. Did you test with a credit card from Azerbaijan? Did you do that? I don't know. I don't know the rules. What about that one weird Netherlands bank that you have to have a money transfer or whatever? Did you do that? I don't know.
Chris: Mm-hmm. Mm-hmm. I've been trying to switch over because you have way more back-end experience than I can do, but I find it more and more compelling, more and more useful to the heart of a business. I hate to say that. That feels really dismissive or something.
Dave: Oh, man. Man.
Chris: But for me--
Dave: There we go. Glass ceiling over here.
Chris: Ack, yeah.
Chris: But maybe just because I'm reflecting my own experience that we've always had front-end so well covered at CodePen. It's never been a big problem. I'm not going to forget any of that stuff, and I like it.
Chris: In fact, I have a big front-end project I just need to sit down and do.
Chris: That's just super React-y, and it's refactor-y, but it also involves some APIs and stuff that I really want to be able to handle myself because I'm like, "I can do this."
We use Go for lots of stuff at CodePen, and I'm learning it - like straight up. I'm like, "Dang it! This is going to be -- I demand that this is part of my brain now. I am going to learn the language of Go."
Chris: Part of it is you've got to hit it a million ways. If you're going to learn to play the fiddle, you don't just sit down and be like, "I am going to learn it." You've got to have your fiddle in your hand a lot, and you've got to watch the YouTube, and you've got to take lessons, and you've got to go watch bands that have fiddle players in them.
My desire is there, and I'm trying to hit it from all the angles, which is required to learn anything, which is fine.
Chris: Here's an example. I got an email from Unsplash.
Chris: You know that company?
Dave: I love that company. Yeah.
Chris: They are a pretty cool company. They have an API, a pretty robust developer API, and it's like so many other APIs. To get a key, you submit a little application, and you get a development key just immediately.
Chris: This is what I'm going to use it for. Boop, here's your key.
Then as soon as you want it to be production, then you submit a little bit more detail. Then somebody reviews it and gives you a higher rate limited production key.
Well, we did that. We integrate the Unplash API into the CodePen editor. You can search for Unsplash images, and we have a nice little DX around grabbing HTML image tags with those Unsplash images and such. We've had that for years and years and years.
They write in, and they say, "Somebody stole your API key and is trying to DDoS us with it.
Chris: At some time in CodePen's history, we got an API key from them. It's production grade. If a job at CodePen can be front-end, we tend to leave it on front-end because we have more front-end strength.
Chris: Not that we're better at it. We just have more people on it. And so, we wrote it up as a React component, and it just hits the Unsplash API from the front-end, gets the JSON results, and does what we want to do with it. API key totally unprotected. Whoops!
Dave: Whoops. Yeah.
Chris: But it's findable. So, if somebody found it, hammers us, Unsplash turns it off, emails us that it's a problem. Fine.
Chris: The way to handle this, we've talked about a million times on this show. It's some kind of proxy. You Lambda proxy the thing. It would take two minutes. Make it a Cloudflare worker or whatever.
I actually wrote it as a worker real quick one morning, but then I was talking to Alex and whatever. Workers are amazing, but somebody has got to wire up some deployment code, some GitHub action workflow or something to deploy it because the way you deploy workers through their wrangler API or whatever--
Chris: --it's not as straightforward as just this goes out with the rest of our stuff. We've been using Go for all kinds of stuff, so we have these very powerful Go servers just sitting around doing work for us - all kinds of stuff - powering the API, powering little Web servers, powering microservices of sorts, et cetera.
He was like, "Just throw it on the Go server because we have a precedent for that. Then nobody has to wire anything up because it's just going to go out with the rest of the Go server when it goes out." I'm like, "Perfect job for a budding Go developer."
Dave: [Laughter] Yeah.
Chris: I can write a proxy. Damn right I can. So, I already wrote the worker. You know what a proxy is.
Dave: Fetch JSON.
Chris: Hit request. Fetch. Return it. I don't even have to look at what is in the middle. I just take the result and pass it along as the thing.
Dave: Right. Mm-hmm. Mm-hmm.
Chris: It should be just so easy, and it truly was easy, but then you get to learn little nuances of the language and how it expects things to happen and how error handling works - yadda-yadda-yadda.
But we were able to build it pretty quickly and then talk it through and have tests and do it kind of the right way.
Dave: And then immediately my brain is like, "Austin, you made a proxy. What's keeping other people from using that proxy?" Now you're going down this big firewall tree or whatever.
Chris: No. That was part of the advantage of doing it, Dave, is that our Cloudflare worker wouldn't be a proxy or is a proxy but it wouldn't be protected. You can do some stuff like check the refer.
Chris: It's just a header. Just see if it came from codepen.io. If it didn't, reject the result. That's a little useful. But if somebody is really dedicated to hammering you, they can just fake the refer.
Dave: Spoof, yeah.
Chris: It might be one of the first checks they do.
Chris: Because they might be like, well, they're probably blocking on the refer. Not so with our Go servers, Dave! Our Go servers are protected behind all kinds of crap.
Chris: Including having a valid session cookie. Good luck spoofing that. You can't.
Dave: Right. Right.
Chris: That was an advantage to putting it on the Go server, too, is that all those protections and crap are already built into our internal servers.
Dave: See. Yeah. Well, yeah. I mean that just speaks to the power of the back-end.
[Banjo music starts]
Chris: This episode of ShopTalk Show is brought to you in part by Notion. Learn more and get started for free at notion.com/codepen. That's notion.com/codepen to help you take the first step towards an organized, happier team today.
That again is notion.com/codepen. I know this is ShopTalk Show and not CodePen Radio, but that's the URL we got just to keep all them clicks all consolidated for this overall sponsorship.
Notion is the best. As you know, I have done videos about how we use Notion. We've talked about notion a ton on CodePen and ShopTalk Show. It's a phenomenal software product. In my opinion, it really changed the game and kind of invented a new category of knowledge management app, which is kind of how I think of it. It's an app that's really at the core of running any kind of business, but probably mostly software technology businesses because that's where my brain is at.
It helps you plan projects and have shared calendars and have shared meeting notes. What you can do with it is really open-ended in the best possible way. Everything you make is like a database or documents, and it's all nested and has good permissions levels and stuff.
I know I'm speaking very abstractly here, but once you get into using it, you're going to find it very natural and comfortable to use, especially in a team setting, and it just really brings people together. I have no doubt that it's made us a better place to work at the places, the businesses I've incorporated Notion into there. Notion is where the work happens a lot of times, and I really love that.
I also want to say one thing about how I appreciate how they get the details right at Notion as a company. For example, for a long time, anybody who says, "Where is the API? Where is the API?" for years and years and years. Finally, they're like, "Here's the API," and it's super well done, and it's well documented. It has good default integrations. It's just a super well done API to the point where people were just like, "Um, thanks." [Laughter] That's perfect, actually. Great. You know?
Then they took a bunch of time to get even a little detail about how text is selected across blocks in the document editor. It just underwent this great improvement of how you can select text across. It feels just like you're selecting text in a natural way that you'd expect in any text editor, which was different before because of the block nature of editing. A little hard to describe, but if you don't notice it, well, that's what they wanted.
They didn't want you to be like, "Ugh. Why is text selection weird in here?" which it kind of used to be a little bit. Now it's just better. I appreciate that we're going to spend time on that detail. Not on necessarily some big flashy thing, but just on getting the experience of using the app good.
Thanks for the support, Notion.
[Banjo music stops]
Dave: I've been looking. I test drove Nuxt 3, Chris.
Dave: Nuxt 3 beta.
Chris: It's only a couple of weeks out, isn't it? Well, it's beta.
Dave: Well, they put a beta out in September, and it was a rough cut.
Chris: Okay. [Laughter]
Dave: But the new one is smokin'. It's great.
Chris: What do you get?
Dave: The big thing is it has this new nitro server, which is like--
Dave: I don't know. It's based on this other package or something.
Chris: It better be Vite.
Dave: Yeah. It's Vite-based entirely - esbuild, Vite. But what's cool about it is you now can do server routes from Nuxt. You don't have to spin up an express server inside your Nuxt app - or whatever. You just have a folder called server/api/post.js - or whatever. Now, you have file-based routing.
Dave: And you can do it post.getjs and then post [id.get] or whatever you want to do.
Chris: File system routing, baby.
Dave: File system routing, and it's awesome, very fast, and it hot module reloads. There's a bug now with Nuxt where your server middleware won't hot reload if it has a require statement in it. That sucks. But anyway, the update is really pretty stinkin' awesome.
What I think I like about it is now you can deploy to Netlify. You can deploy these routes to Netlify, the server.
Dave: And it'll get auto-chunked up into edge functions because, basically--
Dave: --each of those routes is one export handler. And so, all those get split up into edge functions, so you're running a server-side application.
Dave: Or all the server stuff is running on the server stuff. Then pages is all UI stuff, and that's all file-based routing too.
Dave: And so--
Chris: Who wrote that? That's a nice adapter.
Dave: I mean I'm going to--
Chris: Good job.
Dave: Ben, BenCodeZen. [Laughter]
Chris: Yeah. [Laughter]
Dave: Who is Ben? But no, it's just like--
Chris: He's high-end Nuxt, right?
Dave: Netlify and Nuxt. I think it's in his domain, but I don't know if he wrote the adapter. But there's a lot of auto-magic happening.
But I think what's super cool about it is that line between what's a server and what's a function and what's a client-side UI is just erasing and it's wild.
Chris: Mm-hmm. Mm-hmm.
Dave: Because I just pushed up my Nuxt app, my client-side Nuxt app, and all of a sudden, I have server routes happening.
Chris: That's awesome. That's awesome.
Chris: We just did a video, me and you, on the Cloudflare pages that uses workers kind of vibe, and they have that file system based thing too. I feel like, as common for Cloudflare, I know I give them a lot of credit, but I think they do cool stuff. They took it one step further in that because they're workers, it's not just a route, but they just automatically run by hitting that URL.
Chris: Both the page gets returned and the worker runs on top of it. They both run, which I think is super cool. And that they have these wildcard routes that you can use these double bracket syntax. It's basically star. You know? Which I think is kind of cool in a path.
Dave: [Laughter] Yeah.
Chris: Like /product/abc, you can make sure that abc runs on ABC and DEF and GHI and whatever. I think that's just freakin' cool, dude, and edge functions are the best.
Dave: Yeah. Well, and I mean I just went through a whole deal where I un-Netlified the whole app because we had some long functions like background API kind of stuff that took more--
Chris: Don't they support that, though?
Dave: Well, they do, but it's like you had to name them something weird. It was just kind of like we had enough stuff, we had to have a Node server and cron jobs. They didn't support cron jobs. Guess what, they support cron jobs now.
Dave: Now I'm like, "Oh, man. Netlify my work again." But you know. But then you have a database server and stuff. Anyway, we're just trying to -- anyway -- figure it out. We're getting there, but you know. It could be a future where I'm back on Netlify, which would be totally wild.
Dave: But just the idea that I can very easily spin up little server routes, that's very good for me, where it was very hard before.
Chris: What is there, like HTML rewriter answer? Are there edge functions just like their server functions that happen to run at edge nodes, or can they change the responses also?
Dave: I think they can change the responses. I think that's the one thing it does. In theory, it's generating a whole response.
Dave: But I think they can also do the edge functions sort of rewriting of things, but I haven't looked into that yet for specifically Nuxt or whatever.
Chris: I'm curious what the API is because I've used the HTML rewriter API a bunch and it's -- [clears throat]. Not a bunch, but I get it. It's just a little strange. It streams your HTML through the HTML rewriter function, and you have to respond to matches as its streaming and such. It's a little hard to describe.
Dave: Interesting. Yeah.
Chris: I wish it was a little bit more like jQuery.
Dave: Yeah. Yeah.
Chris: Here's the response. Dollar sign whatever.
Dave: Yeah. Yeah.
Chris: Just query for the thing and replace it - or some crap. That may just not be speed compatible.
Chris: Because then it needs the whole DOM before it can modify it or something.
Chris: I wish it was like that.
Dave: How do you modify a streaming thing? I'm sure you can now because a lot of work has gone into streams, but yeah, that's stuff I don't get too much.
Dave: Blob and streams.
Chris: Your HTML better be well formed, which is fine if it's your own site, probably. But less so when it's not.
Dave: Over in the D-d-d-d-discord, we were one day solving a password protected PDF task. You'd think, "Oh, proxy." But when you're proxying a blob, all sorts of crud happens. Renaming the PDF, so it's not like your actual file's name and handing that back down. It was kind of a mindbender. I need to dig up that solution and maybe blog about it or whoever was doing that needs to blog about it.
Dave: It was just kind of a big mindbender, man.
Chris: I bet.
Dave: I was totally nerd sniped. I should have been working.
Dave: But I just was like, "This is the most important thing today."
I just was like, man, it should be easy. It should be five lines of code, and it kind of is but you have to know the five lines. That's sort of the trick. What are the five magic keywords that make this PDF password protected streaming blob show up?
Chris: That gives me the heebie-jeebies, almost.
Dave: It's so much. It's so much.
Chris: My little tirade yesterday that nobody seemed to care about, which makes it perfect ShopTalk fodder.
Dave: Yeah, dude. This is the world for our unrequited tweets.
Chris: Yeah. And we wonder why syntax is more popular. Come on.
Dave: Yeah, I know. Why is syntax more popular, Chris?
Dave: We were running our gums about some dumb tweet we tweeted.
Chris: Yeah, with hard evidence that nobody cares. [Laughter]
Chris: But the whole thing is, I just think about websites and a single page app that it spins up and then it has to go get some data, so it does, and comes back and renders it. We all know what that is, right?
Chris: There's been a little bit of industry pushback to that being a great idea or not, but plenty of people do it and there are plenty of use cases for it.
But it's like when that API request happens to go get some data, there's a really super high chance that wherever that is happening is a single origin server. It's in one place on planet Earth.
Chris: It's in Oregon or Amsterdam or Japan or something. It's not CDN'd.
Chris: It's probably just not because multi-origin stuff is really hard to pull off. You know? But I screen share with Rachel (on my team) in Australia sometimes, and it's like I watch her do development. It's like, "Whoa! That sucks." [Laughter]
Chris: You know? You're pulling a docker container.
Dave: Yeah, because she's in Australia. She's got to -- yeah.
Chris: Yeah, and people pretend like they're so multi-region, fancy CDN'd. You're like, "No, you're not."
Chris: Especially if, okay, sure, your stuff is on Netlify, so it's CDN'd, right? Well, not if you hit any API because the stuff that comes back from the API is probably the most important content of the whole site. It's not the HTML shell. It's the....
Dave: Yeah. You don't get much. You don't get much without the API data.
Dave: There's really not a heart and soul to the website.
Chris: Sure, maybe you use some fancy Netlify stuff. Maybe you use one of their builder things where it happens once and then it really is cached.
Chris: There's so much stuff, API stuff, that depends on the logged in user and blah-blah-blah. That's always the most important data and it's always single origin.
I haven't even gotten to the tirade part. The point is, rather than trying to solve the single origin problem in moving your data to edge nodes, which is a noble goal and, if you can figure out some way to do that, fine. The way around it, though, is to leave it a single origin response but make the Internet get the data first, like make the CDN perform the fetch request to that CDN, get the data, rewrite it into the response, and respond with the response.
Chris: The advantage to that seems massive to me because it's not your crappy Internet connection doing the fetch. I'm overstating this for effect, but it's not your phone doing the request on the network.
Dave: Yeah. Rachel isn't going to Oregon to get the data, like over her consumer wi-fi.
Chris: Right, and it's still got to go to Oregon from Australia, but why doesn't the Cloudflare node there go do it instead, which is a huge computer sitting on a super fat pipe?
Chris: That computer should go get the data, come back, transform the response, and then deliver it. To me, it's not quite the same as multi-origin, but at least you're making super fat pipe Internet computers do that fetch, not your client, not your phone or whatever.
Dave: Right. Yeah, I guess at some point you would hope it does get on the fat pipe. But server-to-server seems way more durable.
Chris: Yeah. The last mile sucks. You know?
Dave: Yeah. Yeah. No, that's interesting. Yeah. Interesting. Have you done it or does it work? Did you try it?
Chris: Yeah. That's the thing is I've done it over and over now, you know.
Dave: Oh, really? Okay. Has it improved her experience?
Chris: Well, it's not. The Rachel thing, I haven't actually done anything to fix her experience. That's like NPM install is sick slow for her.
Dave: Yeah. Wow.
Chris: It's the same, so that was just an example of what it's like. I just mean if we're going to fix the industry, maybe that's a way to do it. Rather than multi-region everything, just make edge computers do more. I think that's the point is that Netlify's edge functions and workers. Vercel has got edge functions. They're starting to clearly be movement in this direction. That's going to help, overall, the problem.
Dave: Well, it could be, too, caching at that layer, too. Maybe it's a little more durable.
Chris: Right. Right. Right.
Dave: Oh, I just went and got this a minute ago with all the same header data. I don't actually need to go -- yeah.
Chris: True. Caching is totally part of the story. I don't even claim to be a [explicit used] computer scientist that understands all the details of what's involved here. I just mean there are some -- you know, captain proxy over here feels like make the proxies happen at the edge. Why not?
Dave: Yeah. Maybe, man. I would love to see how fast it could go. Yeah. In my brain, I'm like, "Oh, it all hits a fat pipe eventually," but I don't know. Servers are so fast versus me calling--
Dave: And your servers all know each other. They're all in the same DNS. They're all in the same-- It doesn't have to hop its way across the Internet to find itself.
Chris: You can look at the actual data, too, because you can log in and see how fast your edge functions are running. There's 100% change they're smoking your network tab in your browser.
Dave: Right. Right.
[Banjo music starts]
Chris: This episode of ShopTalk Show is brought to you in part by another podcast, another podcast that just so happens to be even a little bit older than ShopTalk Show, and we've been here for ten years.
For over a dozen years, the Stack Overflow podcast has been exploring what it means to be a developer and how the art and practice of software programming is changing our world. From COBOL to containers, from Rails to React, the Stack Overflow podcast is the best place to learn what's happening in the world of software development.
Each week, you'll hear from working developers and leaders from top technology companies hosted by Ben Popper, Cassidy Williams, Matt Kiernander, and Ceora Ford. The Stack Overflow podcast is your home for all things code. New episodes twice a week wherever you get your podcasts. Thanks for the support.
[Banjo music stops]
Chris: Elon Musk bought Twitter. That was a thing, right?
Dave: Elon Musk bought Twitter. You know it's -- you know I've been thinking about you just have to choose which billionaires you're going to live under. You know? Whichever house you're going to join. You know?
Dave: Which billionaire house and whose shade tree are you going to sit under?
Chris: Is this not actually done, though? We keep saying it, but is it actually done?
Dave: I think the board has approved a potential sale; I think is what it was. And so, I think they have to vote on that officially - or whatever.
Dave: The board, yeah, has approved considering the offer - or something like that. Anyway, so I think it has to go through a bunch of stuff. It may not be six or nine months. But then I just read something. He's the interim -- he might be the interim CEO if it's going through.
Chris: Okay, so we don't actually know yet, but clearly it's hot drama or it was for a minute. But it seemed to die off pretty quickly. As we're talking about it, it doesn't seem as hot of news as it was last week.
Dave: But there's also a chance that he is going to nuke his own deal by running his mouth. [Laughter]
Dave: He has a non-disparagement agreement. He can't say, "Twitter sucks," or whatever, but he's clearly done that.
Dave: You know. I don't know. But there is a really good -- Mike Industries. What is that? Mike Industries.
Chris: Oh, yeah. No, what was his first thing that you know Mike Davidson from?
Dave: Oh, man. I'm blanking.
Chris: He ran this news aggregator website that was all green. Anyway--
Dave: Oh, News Vine. That's it.
Dave: ESPN, Disney, Twitter for a long time. He had a really good post. I'll post it here in the show notes. It was about--
He just basically made comments on this whole thing from an insider perspective as somebody who worked under Jack and Dick Castolo. He worked there for a long time as head of design. There's a lot to read here because he's just kind of like, "Hey, look. Elon is good and bad." [Laughter] "There are parts of him that are good and there are parts that are bad. I think this is how it would impact Twitter."
Chris: Interesting. I have not read that, and I kind of like Mike. I didn't mean to couch that, Mike. I like you, Mike.
Dave: I kind of... No. But yeah, so it's very interesting to me. I liked his perspective just because he's somebody who has worked on and cares about the product. He goes into, like, Twitter is--
You can sort of think it just needs to be way open. But, man, that just opens the door for abuse big-time, abuse you don't want to even think or hear about.
Chris: Yeah. Truly.
Dave: Before you say, "I'm just going to go fully unmoderated," you need to really think about that.
Chris: I mean there's no excuse for that. I would not tolerate--
Way long before Elon Musk -- this was even ever news at all, I had one of those, kind of like, "Is this really healthy for me?" moments, and I haven't really left Twitter. I'm not really even thinking about doing that, but I did the thing where you just take it off your phone. I know you've done that a number of times in the past, right? Maybe you even still do.
Dave: Yeah. It was off my phone for a long time. I just logged in. It's that thing. I go on a business trip, and I just need it because somebody is like, "I'll DM you where I am."
Chris: Yeah. Right.
Dave: You're like, "Dang it!" So, it's on my phone, but I need to take it back off. It's so nice when it's off. You feel so stupid, but you're just like--
Chris: I've had it off for months now, and I really like it. It doesn't mean that I never use it on my phone because they have a Web app. It's just when it's not an icon on the home screen, I just don't do that as much.
Chris: I only check it when I really want to - or whatever. It does feel like a bit of a load off. I like it.
Dave: It's tough because you're now in boring mode. [Laughter] You have to find stuff to be interesting, and that's always hard.
Chris: Yeah. I ended up clicking Instagram a lot more, and that got out of hand, so I had to remove that one, too.
Dave: You know Instagram pushed me out, Chris.
Chris: They did?
Dave: They want my birthday, and I'm just like, "No."
Dave: So, I'm done with Instagram. Sorry, friends I've known since college. We'll see you. I guess we don't talk anymore. Your babies are stupid, so I'm not on that app anymore because they want my birthday.
Chris: I had a like a re-honeymoon with it because I just followed a million meme accounts, just any meme thing that they would do, and I loved it. I was just like, "Oh, man. This site has got jokes." You know?
Chris: The memes... [Laughter]
Dave: Yeah. Yeah, yeah.
Chris: I love it. I stopped caring about people on there at all. I was just like, "Just give me the jokes." You know? But then it started to get unhealthy because all I did was click the icon in the same way I clicked the Twitter one to just be like, "Give me a hit of them jokes," you know?
Dave: Refresh. Give me that dopamine, baby.
Chris: Then the memes started to all feel the same. I'm like, "Oh, yeah. Avocado toast," or whatever. I get it.
Chris: Then I started getting a little weirder and darker with the memes, and I'm like, "This is useless," and I had to delete that too. But I do like sharing stuff on Instagram when I can.
Dave: Dude, I was getting into it. Maybe because you were. But I just was like, "Maybe I'll start posting on Instagram more. I like interacting with old friends here." You know?
Dave: Now they want my birthday.
Dave: Bringing it a bit serious, could we get serious here on the ShopTalk Show?
Chris: Hmm... Yeah.
Dave: We don't get serious.
One thing that Elon has made me realize, you know, I think, immediately, people are like, "I'm going to build my own blog. I'm going to build my own social network," or whatever. That's cool.
But the thing that's been rattling around in my head -- maybe I should blog about it -- is just like you can structure your life in a way that it doesn't matter what billionaire bought your favorite thing. Maybe take steps. If Elon taking over Twitter frightens the hell out of you, maybe you need to make a blog and host it somewhere.
Then even on top of that, what if Matt Billman from Netlify turns out to be just the worst billionaire? He's not. He's very sweet, downright dude. But what if, right?
Dave: Then what? What do we do, Chris? What do we do?
Well, guess what. My blog is a bunch of Markdown files.
Chris: Yeah. Big deal.
Dave: I just pick up another. You know what I mean? Anyway, that's just something to think about. Maybe there are pieces of your life you can structure to where it doesn't matter.
Chris: That's true. Sometimes that dread comes from not necessarily even your own usage of it but just for the world.
Chris: I'm sad for the world, and me leaving isn't going to affect that that much. But yeah, I like the idea of your own infrastructure. But these days, my gosh, we're built on the back of 100 things.
Chris: Just leaving that top level thing maybe doesn't matter. Maybe it's Markdown itself that turned out to be a Nazi. [Laughter]
Dave: Grover is the bad one!
Chris: I was thinking of, like, isn't BEM? You know?
Chris: Just block element modifier.
Chris: Isn't that super Russian?
Dave: Oh, is it?
Chris: Should we stop using that?
Dave: Yikeronies! Yikeronies! I didn't know that.
Chris: What do you do with that?! I don't know.
Dave: What do you do? Yeah. No, that could be a problem.
Chris: Don't quote me on that exactly, but I get the idea that it is.
Dave: I think, in that situation, no one is profiting off of my use of hyphens and underscores. But it's probably fine.
It's interesting times and the future here with the whole Twitter-roonie, so I don't know.
Chris: Jim Nielsen writes in.
Chris: He's asking me about my life, you know, after CSS-Tricks. We were talking about camper vans, apparently. Actually, after we record this show, I've got to go pick one up. Not that we bought.
Chris: That we rented on Outdoorsy.
Dave: Yeah. Yeah. Yeah.
Chris: Have you ever used that app?
Chris: Yeah. Just getting a Sprinter van. I don't know if Sprinter is the brand, but that's kind of how people think of them, those big delivery vans.
Dave: Yeah, loaded up. Yeah.
Chris: Yeah, ready for camping. They've got a bed in the back and stuff, but they're not enormous. But they can be outfitted with a sink, a fridge, and a decent electricity situation inside and stuff like that. That's what this one is.
It's kind of the official van of the remote -- what are they -- vagabond-style tech worker thing.
Dave: Yeah. The #vanlife? Yeah. Yeah.
Chris: I go in phases of being like, "These are the best! I have to have these," and being like, "It's too small for my large body."
Chris: You can't actually hang out in it. It's not really an RV. Maybe little people can, but you're either in the bed, driving it, or not in the van - to me.
Dave: Yeah. Yeah. Yeah, I think that's it for me. I actually don't. In Texas, at least. This might be a Texas thing. Maybe up north where it's cold, you actually want this.
Why do they put a kitchen in there? I don't want to cook food in there. [Laughter]
Chris: Preach, Dave.
Dave: Even bathrooms.
Dave: I don't want to doo-doo in my car. [Laughter] That's--
Chris: Well, I think the kitchen and other stuff. Even the fridge and stuff, I know some people love it, so no shade, but that's what takes sometimes a van from the $60,000 level, because they're kind of expensive, these vans, even as the shell.
Chris: To like $160,000.
Dave: Yeah. Yeah.
Chris: The full buildout and stuff. You're like, "I don't want any of that." I've camped my whole life. You know where you want to cook bacon? On the picnic table on your white gas stove with your cast iron skillet because then all that bacon ass grease goes up into the sky for other campers to smell before it turns into rain or whatever happens to bacon grease.
Dave: Yeah. You want a good six feet of clearance there.
Chris: You know how much that costs? $40 because those little stoves are cheap, and you just have a junky cast iron skillet that you've had forever.
To have spent tens of thousands of dollars to produce this kitchen that you don't even want to use feels very sad to me. The toilet is the same. You don't want a little pullout pooper in there. Gross!
Dave: Yeah. Maybe an emergency potty or a nighttime potty is useful.
Dave: I will concede. But the idea that that is the best use of my limited square footage is kind of shocking to me.
Chris: No. Sometimes they turn out to be a stool and you lift open the stool and that's where the little thing is. [Laughter]
This was so great. There's a sink in one I went to go look at. I was craigslisting, and she's like, "Meet me at the grocery store parking lot," and we looked at her van. There's a sink. When you use the sink, the water just ... right out the bottom of the thing. There's no--
Dave: Okay. Yeah. All right.
Chris: That's just how they're built. I think that's common.
Chris: She wired up into it. Not only does it do that, but another little hose that, at the top of it, had a kind of like female body part kind of like thing that you put there, and then you pee into it, and it just vacates too.
Dave: Oh, okay.
Chris: Yeah, so it just goes right out the bottom of your van, which I thought was very clever because then you don't have to store your own piss. You know? You just let the piss--
Dave: Let it go to nature.
Chris: Let it go.
Dave: Where it belongs, yeah.
Chris: Yeah. Throw a little water down there to swoosh it out.
Chris: [Laughter] Dudes can just pee in the sink. She needed a little-- [Laughter]
Dave: Utility. No, I think there's -- yeah. I really resist the urge of quitting tech and designing a camper just for myself. [Laughter]
Chris: [Laughter] Mm-hmm.
Dave: I know what I'll do. Get into mass fabrication.
Chris: I can't find the right -- because that appeals to me, too, certainly. But if the Sprinter van, to me, feels a little too small. Although, I'm just renting one for the first time here, so we're going to find out. Maybe it'll be my favorite thing in the whole world.
Size-wise, I want whatever Aerosmith tours in. You know? That would be great. But then where do you camp? You can't camp anywhere cool. You've got to camp in a cornfield because you're certainly not making tight corners and gravel roads with that beast.
Dave: Yeah. I'll see people come into the camping grounds with those things, and they're brutal, dude. They're just scraping trees on all four sides.
Chris: Yeah. [Laughter]
Dave: Even the windshield is getting hit by scraping a tree.
Dave: They pick up a tree on the way in. That is so cool, and you are living the life, and your little slide-out living room is awesome.
Chris: The slide-out. Clutch. Yeah.
Dave: I'm into it but, man, I don't think you're getting home.
Chris: [Laughter] Yeah.
Dave: I don't think it's going to make it home.
Chris: Not to mention your sub-five miles per gallon.
Dave: That's brutal, too.
Chris: People buy those things to drive across the country. I'm like, "Oh, my God. It must cost you $20,000 in gas to get across the country."
Dave: But you're living life. You're living life on your own terms. That's good.
Dave: I don't know. I like the -- especially if you're going to live in a camper, you need a kitchen or you want a kitchen. You want even the slide-outs and everything. But for me, as a very casual camper, I just want small, a kitchen on the outside.
Dave: Bathroom on the outside or--
Chris: Talk to me about kitchen on the outside. Can you just slide out a drawer that would have a stove or something?
Dave: Let me tell you about the OPUS 4.
Dave: Putting a link in the show notes for everybody.
Chris: Did you order one or do you got it?
Dave: Oh. Oh, Chris. I went and looked at it. The OPUS 4 is awesome. It's a little offroad. It's a popup, officially.
Dave: But the problem with it -- can I tell you the problem with it?
Chris: I'm looking at it.
Dave: Okay, so it's a popup camper, so you open up the top. Right? Almost like a book.
Chris: Yeah, I had the SylvanSport Go. It's really similar.
Dave: Okay. Very similar. And this one, though, is inflatable, so it's not a mechanical popup.
Dave: It's like air, so it's like a bouncy castle.
Chris: So, the only thing that can wrong is a leak, but not--
Dave: A leak, but you can duct-tape it.
Dave: Or your air compressor can go out. I haven't looked into it, but I think you can maybe even just plug in another air compressor. You can hotrod into it.
Dave: That's all it would take to make--
Chris: Make your kids take turns blowing it up.
Dave: Yeah, blow. Go, kids. When you get lightheaded, switch off with your sibling.
Chris: Yeah. [Laughter]
Dave: [Laughter] But anyway, this is maybe where I'm headed, but it's kind of a rugged pull. It's sport. Sport package. You've got to get the sport package so it's off the ground, right?
Chris: Yeah. It looks good. A little dinette in the middle. Slide out kitchen, though, I see.
Dave: Slide out kitchen, so that's critical. You just slide the kitchen out. It's not on the inside. It's on the outside. That's why you went camping, to go outside. Right?
Chris: Yeah. Yeah.
Dave: Unless it rains. That's a bummer, I guess. But guess what. You put a little tarp over there.
But anyway, it's awesome, but it was like $38,000 to start. I just was like, "Man, I like it. I don't know if I $38,000 like anything." [Laughter]
Chris: Yeah. The SylvanSport started at $11,000 and it has a lot of similarities. But it is a little more rugged.
Dave: A little more rugged.
Chris: Although, do you need the kitchen? What you need is a table and then--
Dave: Yeah. Yeah.
Chris: Yeah, a Coleman stove, dude. Nothing.
Dave: Well, and that's it. Maybe we could get down, but we also want big beds because we've got kids and stuff, like, kicking us.
Chris: Yeah. Yeah. Yeah. This will work for four, though, because you've got two and two on each side.
Dave: Yeah, and then it has the, like, you can fold down the living room and put stuff or make a bed in the living room.
Dave: I originally was against this feature, but it has a cinema feature, so you can--
Chris: Oh, like a big white wall to blast--
Dave: Like a big white wall.
Dave: Throw up Dory on there, you know. [Laughter]
Dave: Finding Dory, and let the kids just zone out.
Chris: I was looking at these the other day on Amazon, and now it will not stop showing me these Nebula Capsules.
Chris: Yeah. It looks like a Bluetooth speaker, and it is, I guess, but it also has a little projector built into it.
Dave: Yeah. Yeah.
Chris: They look sweet. They look sweet.
Dave: No, I've seen those, and they've come up in my feed too because, yeah, you just, boom, pop that out. That's your speaker for the weekend, too. Like double purpose. I love it. Shirgeru Miyamoto (creator of Mario) loves it. We love it.
And I was against it but then I was like, you know, if you want to go camping as grownups, we're going in the winter. It gets dark at 4:00. Maybe this is awesome. We just park the kids and grownups can sit around and drink and talk and do stuff. I don't know.
Chris: I love it.
Dave: It's expensive. But the thing about campers, here's the other thing. you can't always think about the initial costs. You've got to think about--
Chris: Resale or what?
Dave: You can factor in the resale, and so -- but unfortunately, the resale value is like zero, as I've found out. [Laughter]
Chris: Hmm. Yeah. Maybe at the beginning of COVID it was juicy, but not no more.
Dave: Yeah, so anyway. We'll see. I don't know. It's very cool, but it's very expensive. But maybe this is my - whatever - rage quit alternative.
Chris: Maybe. Yeah. Maybe. So, Jim, no vantricks.com, until we have a couple of years.
Chris: This is your van trick.
Dave: This is the only episode of van tricks this year. Maybe we'll have more.
Chris: I was using the Sony ZV1 camera. You got one too. We have the same camera.
Dave: I'm using it right now.
Chris: Beautiful, I think. Mine would just quit in the middle of a call. I could be 15 minutes in, and it would just go. You know when the lens kind of recedes back into the camera? It just goes....
Chris: It's like, "I'm about to be out of juice, so I'm just going to turn off."
Chris: I think the way that that camera works is you plug USB into it, like micro or whatever.
Chris: It's continuously charging the battery. Then the camera uses the battery. At some point, the battery degrades so far that it's just toast.
Dave: It can't. Yeah.
Chris: So, I buy a third-party battery, and it's been a little better. But even the third-party battery I can tell is such a piece of junk that it still shuts off once in a while.
I'm trying to find the right battery, and then I was like, "Maybe this isn't right," because it's close. It's better than my big old DSLR was. Even quality-wise, I think it's outstanding.
You have two outputs. You have the USB and you have the micro-HDMI out. It's a two-cable situation. I'm always looking around. Could it be a one-cable situation?
Dave: I feel you. I feel you. Yeah.
Chris: Yeah. So, I buy the Logitech Memo Frick.
Chris: Logitech Memo Frick. [Laughter]
Chris: Mevo, and it's got a killer landing page, great marketing material. They look like nice, well-built little cameras. They try to sell you three of them for whatever reason. They have some useful multi-cam stuff for streaming and stuff that I think is kind of neat and probably open the door for low budget but still multi-cam shoots. You know?
Dave: Mm-hmm. Mm-hmm.
Chris: But I was like, these things are $400 a pop.
Chris: It's not just a webcam. People aren't spending -- most people aren't spending $400 on a webcam. I was in that market. I'm like, I want a bad-ass webcam. Charge me $400 for the webcam. The Sony ZV1 is more than that. But it's in that ballpark.
It seemed like I could theoretically replace my CV1 with a Mevo, get the same kind of quality with just a USB-C straight up output, and I was like, "Oh, that's going to be sick." But it comes today. It's just trash.
Dave: Oh, no!
Chris: The quality on it is really bad. Like, wow!
Dave: I'm sorry to hear that.
Chris: How bad can a $400 camera be? And you need special software just to connect anyway, so it doesn't just immediately recognize itself as a webcam.
Chris: You have to install stuff for that to work. Install two pieces of software: one on your phone and one on--
Whatever. I was astounded at how good of reviews this thing got for being such a garbage camera that doesn't just recognize itself as a plugged in webcam. Really bad.
Dave: Chris, are you saying that the entire Internet is fake? I think that's what you're hinting at.
Dave: That's too bad. I really like Logitech and Logitech peripherals, so this is too bad.
Chris: Yeah. I mean it's just my experience. Maybe I got a bum one or something, but I'll post some side-by-sides so you can see.
Dave: I bought the 4K Brio business one.
Chris: That's Logitech, right? Yeah.
Dave: Yeah, Logitech. It was okay, but it's got a plastic face, and so if any moisture is in the air, it just looks like I'm in a cloud.
Chris: Oh, man.
Dave: Foggy rims.
Chris: I have one of those too sitting around because I thought it would be amazing, and it is 4K, but it's meh. It's no good.
Dave: Yeah, the quality is kind of rough. I think glass lens, you've got to have.
Dave: Yeah. it's too bad.
Chris: Then there's the Elgato Facecam looks pretty good. It's even cheaper than the Brio, which makes me worried. I hate to be that price sensitive, but it looks too cheap to be good, to be really good.
Dave: It does. Yeah, yeah, but I wonder if the quality is just there. I think Elgato is maybe a good--
Chris: I'm tempted to try it. There's no way it can be worse than the Mevo. The example shots are pretty sweet.
Dave: And their whole business is streamers, right? If streamers pick up and gamers pick up on this that it's bad, it's just going to fall off the face of the Earth.
Chris: Yeah, but it hasn't. Maybe I'll try the Facecam. I'll return this Mevo and get a Facecam.
There's also this Opal camera that I really want to see ship. It's just been in -- it's $300 and it's been in preview forever.
Dave: I've heard it's cool, but I heard they charge you (for the AI software it runs on) every month or something like that.
Chris: Oh, what?!
Dave: I was like--
Oh, we were looking at the Elgato website in the Discord -- I forgot about this -- the Facecam website where it has the raw to the core section. It might be different, but it's like Facecam, and it's just one marble sliding down....
Dave: Then the other webcams, oh, that marble takes a journey, man. It's not -- it's bad. Obviously, the other one is bad.
Chris: This is really disingenuous. Yeah.
Dave: It's my favorite graphic on the Internet. Full 3D animation. Oh, it's beautiful, dude. Oh, and the marbles start out orange, Chris. Or it's blue. It turns orange. Then it goes back to blue. Oh, that's an inefficient way to do marbles from your webcam.
Chris: I do not know what to even say about that thing. That is an amazing graphic.
Dave: I love this. Oh, I'm crying. It's so beautiful. [Laughter] It's so, like, how can we explain this concept?
Dave: Not even ... it's saying it's simple, but it's just so -- the Internet is a series of tubes. You know? I'm just dying. Okay. It's the best. Everyone, go check it out. It's legato.com/facecam.
Chris: Oh, my God. Do I have to buy one of these? I almost like that it doesn't have a microphone, though. The Opal, you're clearly paying for their very fancy microphone on it also.
Chris: Which you don't really want.
Dave: No. How many times have you been on the -- you just sound like a potato because you're in the Facecam.
Chris: It just means that some of those $300 are going towards that, which I'd want it to go towards the glass on the lens. You know?
Dave: Right. As a podcaster, we already have $300 going towards a microphone.
Chris: Yeah. To be fair, we kind of do. What I want is Sony, apparently, because the frickin' ZV1 kicks butt. To make a version, make it the ZV2 that's just not a point and shoot. It just has USB-C out on it.
Chris: Just the same camera or even more trimmed down because I don't need any on-camera shenanigans.
Dave: I almost don't even -- I flip out the little preview thing, but I almost don't need that. I really just need something that turns on and looks good.
Chris: Yeah. Just make that the same. As good or better of glass.
Chris: That would be slick.
Dave: Think about it, Sony. You could do it.
Chris: [Laughter] Yeah. Well, I'm glad. Thanks. I got to get all my rants out today. That was good.
Dave: We do some good mouth blogging episodes. I think I should do that, write down my DPS, my video game job title or just role, how you get the role.
All right. Cool. We should wrap it up then, huh, Chris, because we've got--
Chris: Probably, yeah.
Dave: We've got jobs to do. Thank you, dear listener, for downloading this in your podcatcher of choice. Be sure to star, heart, favorite it up. That's how people find out about the show. Follow us on Twitter, @ShopTalkShow, for 16 tweets a month.
YouTube, it's back up and going. There might be a video right -- yesterday, two days ago, something.
Dave: Videos are back on over at youtube.com/shoptalkshow. Join us in the D-d-d-d-discord, patreon.com/shoptalkshow. Chris, do you got anything else you'd like to say?
Chris: Ah... no. Bye. [Laughter] ShopTalkShow.com.