JS Party – Episode #259

How do you define joy?

with Jerod, Nick, KBall & Chris

All Episodes

Jerod & the gang analyze the State of JS 2022 survey results, play a wicked game of HeadLIES & share some Pro Tips to help you live your best dev life.



FastlyOur bandwidth partner. Fastly powers fast, secure, and scalable digital experiences. Move beyond your content delivery network to their powerful edge cloud platform. Learn more at fastly.com

Fly.ioThe home of Changelog.com — Deploy your apps and databases close to your users. In minutes you can run your Ruby, Go, Node, Deno, Python, or Elixir app (and databases!) all over the world. No ops required. Learn more at fly.io/changelog and check out the speedrun in their docs.

Notes & Links

📝 Edit Notes


1 00:00 It's party time, y'all
2 00:59 Introducing the panel
3 02:27 The State of JS 2022 results are in
4 03:33 The most important category, duh
5 05:26 Digging in to the framework wars
6 10:37 Using survey results & defining joy
7 13:54 Chris on getting Selenium right
8 19:36 What is WMR? (Sorry, Jason!)
9 21:00 Don't use W3Schools
10 22:33 It's time for HEADLIES!
11 23:52 KBall with the smoking gun
12 25:09 Round 1: Funeral flashmob
13 26:18 Round 2: Roomba leaks intimate photos
14 27:24 s/smart/surveillance/g
15 28:50 Round 3: Microsoft combat goggles
16 30:32 Round 4: Adobe's Katy Perry concert
17 33:39 Round 5: Boston Dynamics + OpenAI
18 36:49 And the winner is....
19 38:27 It's Pro Tip Time!
20 38:54 Nick's pro tip: LSPs
21 42:20 Kball's pro tip: habits
22 43:58 Jerod's pro tip: URLs
23 46:22 Chris's pro tip: Graphite
24 49:23 Wrapping up
25 50:11 Outro (changelog.fm/491)


📝 Edit Transcript


Play the audio to listen along while you enjoy the transcript. 🎧

Alright, y’all, you know what time it is… It is JS Party time! I’m Jerod, your internet friend, and I am joined today by b0neskull. What’s up, Chris?

What’s up, Jerod?

Are you excited to go through some survey results?

Yeah, I totally love this survey every year.

[laughs] Are you excited to play Headlines.

No. You still haven’t explained to me what that is…

That’s part of the fun. I also have Kball with me. What’s up, Kball?

Hello, hello. I’m excited to play Headlines, and watch b0neskull’s head explode…

This will be fun. So Kball, you’ve played this alone, and Nick played it alone… And then Nick played it with Amal and Amelia. Who won that round, Nick? Was it me?

Probably. Of course.

Yeah, I think I won that round.

Am I the only one who’s ever beaten you, Jerod?

I’m pretty sure I won. I can’t remember exactly how it went down, but… if I recall correctly, I did end up pulling that one out as well. We’ll see who wins this time around. [whispering] It’s gonna be me… But first, we will talk to Nick. Have I intro-ed you, Nick? Hello. Ahoy!

Ahoy-hoy. How’s it going?

It’s going good. How’s it going with you? I’m very excited to be here, and to get to our topics, like what’s a testing framework and what’s not. I’m so excited for that.

Yeah, so we will have the epic debate… Chris does have opinions on what is and what is not a testing framework. What is Selenium and why is it a testing framework?

Show title.

Survey results, 2022, State of JS. It’s out, it’s done, it’s in the bag… Congrats to Sasha and the whole team. This is an epic effort each year; lots of adjustments, they’ve built out a lot of software to run this thing… I thought it was pretty cool - they say in the opener that this year they received almost 40,000 responses, which is about double of last year’s amount. So we’re starting to hit, I hope, at a certain point, critical mass. They’ve been working on getting more people from more places, and more areas, and more identities and stuff into this mix… We can talk about that as well.

I don’t know, I was looking at the demographic breakdown… It still looks pretty unbalanced, but…

At a certain point, doesn’t that also represent the industry that it’s in, which is also unbalanced?

If it’s as unbalanced as the survey results, I’m depressed…

Okay. You might just be depressed here for a few years as we continue to work on it. The question is, was it better than last year? And the answer to that is I don’t know, because I didn’t look at last year’s. Maybe you can dig that up and we can get some results there… But let’s dig into it anyways, and start with the most important category, which is favorite JavaScript podcasts… Which is the one that everybody skips to immediately, and answers, I think… Or is it just me…? And unfortunately, those blasted Syntax guys got us again. What’s up with that, Nick? What can we do? How can we fix this bug?

I think it’ll fix itself. We’re now an award-winning podcast, so…

This is true.

I think we’re in the running, and based on the – we’re in second place; they’re ahead by like double.

They’ve doubled us up. We did get way more votes than last year, but again, twice as many participants, so it seems like we just scaled alongside the results… But I don’t know.

Where in this page do I see podcasts?

It’s in the Resources section…

Oh, of course.

Right underneath Video Creators, or something like this. And you’ll see we have Syntax with 3359 votes, JS Party with 1546, HTTP 203 coming in at number three, and then the Changelog followed by JavaScript Jabber.

I think that’s impressive…

Pretty similar to what it has been.

I think it’s impressive for the Changelog too, for not being like a dedicated JS podcast, to be so high… It’s awesome.

We’re slowly creeping up on Syntax. I’m looking at last year versus this year. Last year, they had two and a half times as many votes as we did. This year is closer to two times.

Keep projecting that out and in like 2030 we’re passing them.

On an infinite timeline, we are going to be the number one podcast on this survey, darn it… And then we can all die happy and old. Alright, we kid a little bit… It’s definitely not the most important part. It’s just the most important for us as we navel gaze. Let’s get into some of the actually interesting bits. Nick, what did you find interesting out of the survey results?

Well, if you go to the frameworks one - I immediately kind of jump to the frameworks, and I like seeing that graph of like where things are landing, and I kind of thought that it was interesting… If you look at the frontend frameworks ratios over time, React was not number one last year; it actually was overtaken by Svelte. This year, it’s been overtaken by Qwick, Svelte, and Solid, which are all ahead of React in retention, and interest, too. But if you actually look at usage, React is wildly popular, in terms of people are still using it and haven’t quite switched over to these other frameworks.

So I think it’s important to take where things are headed, and where things are actually headed, and kind of compare them… But it’s very interesting.

[06:13] I mean, interest - it says, “Want to learn, divided by want to learn and not interested.” How many people haven’t learned React yet?

It’s true.

Like, it’s gonna lose on interest, just because everybody already knows it.

Yeah, that’s true.

So it’s becoming an old, boring, but established and dominant. It’s kind of par for the course, right?

It’s not losing market share.

It’s also not losing awareness.

It does seem like there’s a heating up of the framework wars again, where it was like React kind of sucked all the air out of the room for maybe a few years there, and now there’s interesting things abounding. Kball, I know you’re interested in Qwik; we had Miško Hevery on the show last year, and he’s coming up again; you’re gonna go deeper, a deeper dive into Qwik, I think next week, or the following… So that’ll be exciting.

Next week.

Yeah, I think that’s great. This kind of healthy competitiveness between the frameworks… Like, they’re all pushing each other forward, which is exactly what you want. You don’t want things to stagnate. And there’s a lot of good ideas across all of these frameworks, and they do things a little bit differently, and there’s a flavor that suits you probably; if not, there will be next year when you write it. But there’s a lot of cool ideas, and nobody is sitting still, which is great.

Well, and one of the things I talked with Chris Ferdinandi about last week, I think, and that is showing up a little bit in this, but it’ll be interesting to see how it plays out over the next couple of years, is more and more adopting of these frameworks that try to pre-compile away a large amount, and sort of ship a minimal runtime, ship smaller amounts of JavaScript. There’s more sensitivity about how much JS is going over the wire.

Agreed, agreed. Chris, are you finding any interesting data points, any tidbits, any analyses that you can provide?

I was looking at this, the Percentages tab, and then I clicked the Rankings tab, and that’s easier for me to read… But if I look at usage, you have to remember that it’s not like – maybe you’re in a job where you’re using two, maybe even three, but the numbers don’t add up to 100. So the usage is “Okay, like 82% of developers use React”, or is it “They’ve used React before”?


…and right now they’re using something else? And so, you can say, “Yes, I’ve used multiple of these frameworks.” So it’s kind of hard to get a good picture from this, I think, like “What do people use today at their job?” So I think that’s – I wish there was a good way to kind of surface that, but…

Right. Versus “I have used…”

Yeah, to distinguish using at work, using for a hobby… I mean, I think the retention might have to do with “Are they still using it or not?” But the context of “Where are they using it?” isn’t there.

Right. And is it the only one you’re using? So it’s just a little bit difficult for me to look at this and try to figure out “Well, what does this really mean?”


I don’t really know.

Another interesting tidbit with surveys in general is like survey fatigue… So one thing that was interesting to see - they have actually completion percentages. As a completionist, I respect that 90% of people got to the end, or… What was the number? No, that’s not right. It was like 73% of people made it 90% of the way through, which is less impressive, but I think more accurate than what I said the first time… But pretty good. But what I notice with myself with surveys -it’s like, I start off all gung-ho and like “I’m gonna answer all these”, and then eventually, I either stop taking it, or the little demon inside me comes out and I’m like “I’m going to start just hitting C for everything.” You know, like we used to do in school back in the day. And there’s a lot of people out there that just want to see the world burn… And I think at 40,000, you’re pretty safe that like those people are fringed out and don’t really matter, but I know as a person who goes through all of our Frontend Feud surveys, there’s always a few that answer every question incorrectly on purpose.

[10:14] So there’s so many little things around the edges of surveys, such as that distinction you pointed out, Chris, which is a really big one when you think about… It like “How do I interpret this question and answer it?” On top of that, the people who are just trolling and lying; on top of that, the demographic problems.

Like, it’s fun and interesting, but there’s so many problems with them that what can we really – like, Kball, when you look at these… I know you enjoy the analysis and the dissecting, but do they affect your life? Do they help you make decisions? Do they help you - what?

Good question. I use something like this often as just a hint at “Are there new things I should be checking out?” Like, looking at this, for example, Frontend Frameworks, I notice a new addition, Stencil. I’ve never heard of Stencil. I’m going to go look that up. I don’t know what it is, or what it’s doing, but maybe we should dig into it, maybe we should have a show about it.

Also look at this sometimes as a way to check my expectations a little bit, or give myself a little bit of feedback… If you go to Other Tools, and you look at libraries, the third most regularly used library by respondents to this survey is still jQuery…


And we tend to get kind of in this world of “Okay, everybody’s React, and everybody’s doing this”, and all of this, and very like front-focused… And React is old news at this point, right? Well, you know what’s older news? jQuery is older news, and it’s the third most popular library listed here.

So it’s easy to be looking too far in the future, to be constantly thinking about “What’s changing? What’s new, what’s new?” and sometimes I use this to sort of check my reality and say, “You know what - you can still build a lot of stuff, and a lot of people are building a lot of stuff with old, boring tools, and that’s fine.”

Yeah, absolutely. Same story with like Angular, right? The interest is towards the bottom, but once you sort by usage, it’s second place. It just wildly jumps up.

What would be really cool is we just sort by revenue. I know this is impossible, but like global revenue, or like GDP for a JavaScript library or framework. That would be so cool. I think we’d see different results – I think React will probably at this point still be where it is, but I think we’d see different flips in different places, because a lot of them… Like, Angular tends to be used more in enterprises, less as hobby horses, and so probably driving more revenue, but less interest, less joy. That’d be cool - global joy produced, right?

Even on the revenue, how would you attribute it? Would it be “This company is using this and it’s driving it?” Because Google uses Angular for some things, but Google search is not using Angular. And Google Search drives a tremendous amount of their revenue.

Right, that’s the problem, is you have to actually specify… You’d need breakdowns inside of each corporation, like which products are driving revenue. I mean, like I said, it’s a pipe dream; you couldn’t get it. But it’d be really cool. And actually, now that I said, I’m way more interested in global joy produced out of a library or framework; like, how cool would that be? Especially for the creators.

That’d probably be – I don’t know, I’m thinking like that’d be more like Eleventy or Astro.

How do you quantify joy in the first place? Yeah, exactly.

It’d be the static stuff.

I think you’d have to define joy first… That may look very different.

How do you define joy, Chris?

I don’t… [laughter]

Chris doesn’t know what we’re talking about.

I am saying you’ve gotta define it so I understand what the hell you’re talking about.

“…so I understand what it is…” [laughs]

You’ve gotta Marie Kondo this stuff. “Does this framework bring me joy? No. Trash it!”

Exactly. So Chris, which part of the survey brought you joy? I saw there was a note about Selenium. Was this joyful?

No. Okay, well, first, it’s not a JavaScript project. But second, it’s not a testing framework either.

What is it…?

[14:08] It’s a browser automation framework. That’s all it does. If you’re “using Selenium”, you’re using some other client code, whether that’s written in Python or Java… You’re using – God help you if you’re trying to use it directly, but you’re using some other framework. Maybe that’s like WebDriver IO, maybe that’s water in Ruby, or something like that… But Selenium is just a server. It just sits there. It provides a way for you to automate a browser. There’s nothing about testing in Selenium. There’s no test organization, there’s no reporting, there’s no assertions… It’s just a browser automation framework. And that’s the thing that I think, obviously, people still don’t really understand.

On one hand, it seems a bit unfair to lump Selenium in with all these other ones, because it doesn’t do that. It’s not Cypress; it doesn’t have assertions, or whatever. It doesn’t work out of the box like that, and give you everything you need. So anyway, that’s my Selenium rant, but… I don’t think it belongs in this survey.

Do you think it belongs in your life?

Selenium? I don’t use it.

What do you use?

Well, I work on Appium. Appium is basically Selenium for devices, right? So yeah, I don’t use Selenium for anything. But sure, people can and should use Selenium where it’s appropriate.

What’s the test story in Appium? What do you do? How do you test it?

It’s the same story as in Selenium. Appium is not a testing framework. It’s a device automation framework. And so if you want to use Appium to test your device, your mobile browser, or your Smart TV or whatever, you’re probably going to pick up the one – when we want to self-test stuff, we just use Mocha with WebDriver IO, and that seems to work fine. But Appium just sits there. It’s an express server, and it talks to devices. But nobody else is going to look at an Express server and say, “Oh, that’s a testing framework.”

I feel like this sort of categorization error happens in a lot of places. I was looking at the Build Tools category here, and have Gulp in there. Now, first off, people are still using Gulp? Yes, people are still using Gulp.

In fact, it says 25% of people are still using Gulp. It has dropped off to the bottom, but that’s still it. But second, Gulp is not a build tool. Gulp is a task runner. People use it for builds, but there’s a fundamental category error going on here, and I think it comes to that - what are most people encountering this, in what context, and how are they using it? Most people encounter Selenium when they’re writing tests. Most people encounter Gulp when they’re dealing with building a frontend project of some sort… So they include it in that category, even if that’s not really what it is.

Yeah. Another thing is this survey is for developers, and the main users of Selenium and Appium are not developers. They’re QA engineers. They’re automation test engineers, they’re [unintelligible 00:17:18.22] And they’re not going to use this survey.

Oh, I misquoted something about Gulp…

What’s that?

I just realized… This website is broken, the State of JS. If you select Usage, and then you click from percentages to rankings, it resets you to retention. Gulp has really low retention, but it’s still the second-used, 50% used in usage of your build tools.

Gulp is behind Webpack as the second most used build tool.

How is it ahead of TSC…

Or Vite…

…of TypeScript?

Because they’re new. Gulp – I mean, I don’t throw away any of my old scripts… Do you guys?

Yeah. I throw them away. [laughs]

[18:02] Do you? I still run them. I still use them.

I actually – I spent quite a while pulling Gulp out of Appium. It was using Go, but no. It’s just odd to me that like if you go and you look at the most dependent-upon dev dependencies, number one, I think, is ESLint, but number two is TypeScript now. So then why is Gulp higher than TypeScript? I don’t know…

It’s the TypeScript CLI… I suspect most people using TypeScript have it packaged up in WebPack, Vite, or Gulp.

Hm. So they’re not using it directly.

Or they don’t think about it. I mean, if they were using it directly, they would. But when you think about TypeScript as a build tool - we know what it does, but… I mean, again, category errors; I don’t think it’s necessarily out of the – it should be there, but it’s not like what comes to mind. And maybe a lot of what people answer is what comes to mind. I don’t know.

We can get really deep into semantics with that too, because Vite and other ones - they don’t do anything with TypeScript, except ignore it. Whereas TSC is actually compiling it, and will give you errors, and things like that. But then you also have the language server part of it, that is actually probably – like, it’s probably higher than everyone, because if you’re using VS Code, or have your Neovim set up, like, you’re using that LSP.

I need to check out Vite, because I also don’t do anything with TypeScript but ignore it.

You’ll get alone.

Not for long, Jerod.

[laughs] I just ignore it, Nick. It’s all I do with it.

What’s WMR?

We have a show on it, actually, with Jason Miller, I believe.

We do so many shows I can’t recall…

That doesn’t answer the question, Nick… [laughter]

“That doesn’t answer the question…” It does tell us that we should know what it is… Yes, I remember, because we gave him a bunch of different acronyms that they could use, because it didn’t have one, or something; like, their acronym was bad… I can’t remember what it is. It’s coming out of the Preact team, right?

Exactly, yeah.

Tell us more, Nick. Google it real quick.


“ChatGPT, what is WMR?”

It’s almost like a Create React App type of thing, or like a packaged runtime almost… Not runtime, that’s the wrong word, but like a package build setup for an application. And yeah, it came out of Preact, but it does work with React, and maybe other things, too.

I think we are excused, because if you look at the percentage of respondents who have never heard of WMR, it’s like 95%, or something.


You can include us in that.

Not me.

Even Nick, who apparently did an episode on it…


I was there, I have no excuses, but I still can’t remember what it is. There’s lots of things, and some things take hold, and other things don’t; and I haven’t heard WMR, I think, since then. Not to knock on it, it’s just a fact.

Do you want to know something else depressing from this survey?


“Which sites, courses etc. do you consult?” Number one, Stack Overflow. Okay, not so bad. Number two, MDN. Yeah, I’m with you. Number three, W3Schools.

SEO, man…

Please don’t consult with W3Schools… Oh, my gosh…

I’ve heard they’ve cleaned up their act. I’ve heard that they are okay now.

I’ve heard they were trying to, yes. I haven’t checked.

I haven’t checked either… They burned that bridge long ago.

MDN - can we just stop for a second and just say how amazing MDN is though? It’s so good. I love it.

Yeah. It really is.

MDN is phenomenal. Phenomenal. Why would you use anything else?


You know, I’m happy though that when I started off, everything was Experts Exchange.


And I don’t see that on here at all.

I think it might have got banned off the internet. It’s on the dark web now.

Don’t you have to like pay a micro transaction to see the answer, or something messed up like that?


On Experts Exchange?

Oh, man… I don’t know.

I remember just going to it, and it would have the exact question that you want to get answered, and then everything was blurred out after that.

Yeah. And it’s like you have to log in and pay for a subscription, or something. I don’t know…

Alright, we are back for the award-winning podcast to play its potentially award-winning game, Headlines. This is a game in which I have scoured the interwebs and I have found headlines. I have also fabricated some headlies. It is your guys’ job to figure out which is which. So here’s how the game works. I will read a headline, at which point each person has the opportunity to stake a claim - is that true or false? Is it a real headline, or is it a false headline? If you guessed right away, you can potentially win two points. Or you can wait for more information. I also have the first paragraph from the news stories that I will read. You can hear the first paragraph, which will give you much more information, and you can then decide whether it’s true or false, at which point you score one point if you’re correct, and zero if you’re incorrect.

For longtime listeners who are wondering why I’m not punitive anymore, and subtracting points if you get it wrong - because my math skills are terrible, and I got confused last time, and it was rather embarrassing. So we’re gonna go simple, positive scores. We’re going to keep it positive today, and we are going to see who’s the best at detecting BS.

Speaking of confused - you were asserting that you had won all of our individual headlies/headlines episodes before… So I looked up JS Party episode 220…


…and can I quote an authoritative source, Mr. Jerod Santo? “Final score: Jerod, 8. Kball, 8. It’s hard to even utter the words, but you, sir, are the Headlies champion.”

Oh, my…

In the words of the one, the only expert, Jerod Santo, it turns out that Jerod Santo has not won every single game of Headlines.

Well, I knew those transcripts would come back to bite me at some point…

Jerod, wait, wait, wait… So if you are running the game, and you have the headline, how do you score points?

Okay, so that was one-on-one, because Kball was the only one on the show, and so it was him versus me, the game runner. I will not be a participant in this game. So it’s going to be you guys against each other. I’m just going to run the game, so I’m not going to score any points today.

But back then it was just me versus Kball, so I had to make it competitive, because I make everything competitive.

That doesn’t make any sense, but okay.

So it’s like the asterisk on the wins there for Kball.

Yeah. It didn’t really count –

He won, but with an asterisk.

Yeah. So… Fair enough. Go with it, Chris…

So today - today will be the day that it really counts…

This is a pretty big deal.

Alright. Are you guys ready for the first headline?

Nick, you’re going down.

Let’s do it.

The first headline is “Dancers flash mob funeral with Another One Bites the Dust.” Nick, would you like to stake a claim or hear the paragraph?

Oh, I’m going to – I’m gonna say that that one’s true.

Okay, Nick claims true. Kball, do you want to guess, or…?

It’s too good. I’m also going to say true.

True. And Chris, do you want to say true, false, or do you wanna hear the paragraph?

Yeah, I’m gonna go with true.

True. Dancers flashmob funeral with Another One Bites the Dust - that is… True!


Congratulations. [Win, win, win, win. We all win.]

Another one bites the dust…! Another one bites the dust…!

[25:55] You guys all win on that one. A dance troupe flashmobbed a funeral with a performance of Queens, “Another One Bites the Dust” at the request of a woman who wanted her send-off to be memorable, but not sad. So that actually happened. Congratulations. Everybody has two points. I’m gonna keep a running tally this time, so that I do not do what I did last time.

Alright, headline number two: “Roomba testers feel misled after intimate images ended up on Facebook.” I’ll read it one more time, “Roomba testers feel misled after intimate images ended up on Facebook.” Kball, we go to you first…

I love it.

True, false or hear more?

I love it, but I think it’s false.

Kball goes in with a false… Chris, we turn to you…

It’s true.

Chris says it’s true. And Nick.

I also think this one is true.

So we will not all win this round… Somebody will lose, and the loser of this round is Kball. That actually happened. An MIT Technology Review investigation recently revealed how images of a minor and a tester on the toilet ended up on social media. I Robot said it had consent to collect this kind of data from inside homes, but participants say otherwise.


That’s kind of a quintessential story for 2023, isn’t it? Like, data privacy breach, Facebook’s involved…

This reinforces actually – and I should have gone with true, obviously, but this reinforces the regex that I have in my brain: anytime someone says “Smart blah”, so in this case, it’s like “Smart vacuum”, I substitute “smart” for “surveillance.” So Roomba, the surveillance vacuum.

I like that, Kball.

You know, Amazon has that drone coming out this year. I think this year…

Who does?

Amazon, or Nest… They have a drone that will patrol your house. It’ll fly around your house with a camera, patrolling it when you’re not there. So these stories are only going to increase.

No, it’s Amazon. It’s Ring.

Or is it Ring? Sorry.

It’s Rring, not Nest.

Oh, was it Ring?

Yeah. Nest is a Google –

Yeah, Nest is Google.

So Ring is owned by Google?

Ring is Amazon, Nest is Google?

Sorry. I got that wrong. You’re right.

Amazon - Ring. Okay. And so it flies around your house… When you’re not there?


When you’re there, it just chills…

Oh, it’s finally available, according to The Verge. For only $250.

So that’s kind of cool… It’s like having a patrol, like an armed patrol, only it’s an Amazon device.

Before you know it, they’re going to arm it.

Yeah. No doubt.

Take out your house invader remotely. Oops…! Someone came home early…

After two rounds, Nick and Chris are tied in first place with four points. Kball trailing with two points. We now turn to round three. The headline is “Microsoft combat goggles score as Congress says yes to buying more.” I’ll read it one more time… “Microsoft combat goggles score as Congress says yes to buying more.” Chris, you’re up first. You can call true or false, or you can wait for the paragraph.

I’m going to wait for the paragraph.

Okay, Chris is going to wait. Nick.

It doesn’t sound real… I’m gonna say that it’s a lie.

Nick is calling false. Kball?

I’m gonna call false. I think it’s not Microsoft. But I suspect that the combat goggles thing is going to be accurate… But we’ll see. I’ll just call it a lie.

So Chris, you are now on the hook. For one point, here’s your extra information: “Microsoft Corp will be getting more orders for its combat goggles soon after Congress accepts the US Army’s request for $400 million to buy as many as 6,900 of them this fiscal year.”

Yeah, I’m gonna go false.

[29:46] So we have three falses, but Chris waited for the paragraph. Is that correct? And the winner of this round is [Win, win, win, win. We all win.] You all win. Kball was correct. He was also incorrect. It was Microsoft. The difference is that I flipped the bit… Microsoft actually did not get approved. The combat goggles falter as Congress says no to buying more this year. So Congress actually did not approve this contract.

But Microsoft legit sells combat goggles… Interesting.

Yes, they do.

So Nick gets two points, and Kball gets two points, and Chris gets one. So after three rounds, we have Nick in the lead with six, Chris in second with five, and Kball in third with four. It’s a tight race. We now move to round four. There’s five rounds, by the way, so this is the fourth of five.

“Adobe closed out 2022 and celebrated 40 years with an employee-only Katy Perry concert.” Are we back around to Kball going first? Or who’s going first this time?

This is the fourth round… I think it’s Nick.

Okay, back to Nick. Nick, do you want to hear it again, or are you ready to guess?

I’ve got some breathing room; I’ll wait for the paragraph.

Okay, Nick’s gonna wait. Kball?

Can I hear the headline again?

“Adobe closed out 2022 and celebrated 40 years with an employee-only Katy Perry concert.” What’s your thoughts right now? What are you thinking?

So on the one hand, we have generally a bad tech environment. People are cutting back, there’s the zeitgeist of cutting back. This sounds like not generally what’s going on. On the other hand, Adobe just splurged shiitake tons of money for Figma, and so it is clearly doing okay, at least along some dimensions for cash. I’m still gonna go false. I think the environment is too stingy across the board, and contagion is a thing… Also, Katy Perry? Really?


If they had it, it’s going to be someone else.

Okay. So Nick’s waiting, Kball false… Chris, what do you think? Has Kball convinced you of a false?

So this is the last round?

This is the fourth of five, so there’s one more round after this.

Well, that makes things more complicated…


Yeah, I’m gonna go false though. I’m gonna go false.

Okay, so we have two falses registered, and we also have Nick waiting to hear this paragraph. “Despite economic headwinds, Adobe went big on its 2022 holiday party. The event attendees shot hoops in an arcade, received spray-on temporary tattoos, and grabbed drinks and food from a variety of vendors. The stage then transformed into a mushroom-filled Fantasyland and out walked the night’s surprise headliner, Katy Perry.” [laughter]

It’s gotta be false… Food trucks and then Katy Perry is like what I heard…

Mushroom-filled Fantasyland…” [laughs]

“Mushroom-filled Fantasyland” is what I heard…

Well, the truth is stranger than fiction, because with this one you all lose. This actually happened. It is true.

Holy smokes…

Oh, man… [laughter]

Tacos, sliders, dumplings…

Really in a fig jam with that one.

It was a 90-minute concert with Katy Perry on a mushroom-filled Fantasyland, and there’s pictures and videos on the internet if you want to go look for them. Okay, so in round four nobody scores; you were all wrong, so the scores remain the same. Nick in first with six, then Chris with five, Kball with four… That brings us to our final round. Kball, you run out of time to pull out a victory.

Our fifth headline and final is “Boston Dynamics in talks with OpenAI to bring GPT-powered tech to their humanoid robots.”

Oh, that’s delightful… I’m gonna say yes, because it’s the zeitgeist of the moment.

Okay, Kball with a true. Chris, what do you think?

I have to go? Nick can’t go before me?

You have to go. You can wait; you’re one point behind Nick, so if you wait and get it right, and he gets it wrong, you’ll tie him.

Yeah, I don’t want to tie him.

But if you want two points, you have to guess now.

Okay… Well, I’ll go – and Kball… What did Kball do?

[34:15] I said true, even though this also sounds like something that –

Okay, I’m gonna go false.

Okay, he’s just playing the game now. He’s going opposite Kball… Which leads to Nick. So Nick, if you get this right, you win. If you get it wrong, and Chris gets it right, he wins. He’s already on board with false.

Yeah… Hmm…

You could go strategy-wise. If you say false, then the worst you can do is tie.

But you said false, right?

Kball’s in on true.

I said true.

You said true. See, if my only goal is defeating you, then I should go with you, so that if you win, I win.

That’s true. If your only goal is defeating me, you should go with me. And if your goal is to –

Why would you make that your only goal?

…optimize your chance for first place, you should go the other way.

Yeah, I don’t know… I just clinged onto that as my goal.

I see.

A worthwhile goal.

Yeah. [laughs]

Beating Kball - always worthwhile. I would also try to beat Chris if I were you, but that’s just me.

Okay. Okay. So is that telling me to go with false?

You can clearly not choose the wine in front of me.

I think your best strategy is to be correct.


Yeah, exactly… [laughs]

Can you read it one more time? I forgot what we’re even talking about.

“Boston Dynamics is in talks with OpenAI to bring GPT-powered tech to their humanoid robots.”

You know, I’m gonna go with false, just thinking – like, not trying to gamify this. Do they even have humanoid robots?

Boston Dynamics?

Oh, yeah. They have videos of them dancing, and doing all sorts of things…

Oh, they do…!

Yeah, they’re the ones with the dancing robots. They have the dog, they have –

They’re super-creepy.

They do. Okay.

You’re sure you don’t want to pick the other one?


Are you sure you don’t want to pick true?

I’m gonna go with false.

False. The blurb is “Atlas, the world’s most advanced humanoid robot, may soon gain more human-like communication abilities. Their potential partnership with OpenAI would be a major step forward in the field of robotics, as it could open up new possibilities for robots in industries such as healthcare, hospitality and retail.” That paragraph was 100% written by me when I made up this story, because it is not true. It is false.

This is not my day. Nick, you have succeeded in defeating Kball.

[laughs] I wasn’t trying.

So Nick and Chris both score two, Kball scores zero, and a runaway victory - actually, a runaway losery by Kball, and the other two are pretty close. Nick with eight, Chris with seven, Kball with…

…four. Embarrassing.


So our big winner for today is Nick. Congratulations! [applause] And Chris, a fine showing for your first time. This wasn’t so bad, right?

No, that wasn’t so bad.

There we go.

I should probably be a little less cautious though… [laughter]

Yeah, that one point killed you.

I need to think of a new way of designing the game so that you guys want to hear the paragraphs… Because I really put the most work in on the paragraphs. The headlines are easy. But that’s on me.

Well, I mean, you could just read the paragraphs…

Just require it.

…like after we choose, even if we all choose before you read it.

That’s what I just did.

Yeah. What you just did, essentially.

Or just take away all the work and have GPT…

I actually did ask GPT to come up with some fake ones, and they were terrible.


Yeah. It was all like “Big company X launches product Y.” And product Y is like a Rover, or a man on Mars. They’re just completely unbelievable. I was like “Be more believable”, and then they were not. I was like “Alright, I’m done with you.”

So on the topic of using those blurbs… What if you always read it before you told the answer, and we got two times we could swap our answer out of the five? So we would place our bets…

I see.

Actually - yeah, instead of having the two in one. You’re always betting after the headline, but you can change your mind twice.

I like that mechanic. Very good.

Alright, after that excellently thought out game of Headlies, it’s now time for Pro Tip time.

Why…? Why is it still a thing?

Oh, it’s delightful, Nick.

Because it’s spectacular.


Pro Tip Time. This is where we share our pro tips. They can be useful, they can be silly, they can be whatever we like, as long as they are professionally tips. Nick, got any pro tips?

I do. Maybe I have two, I don’t know. My main one that I put down was - there’s probably an LSP for it, or there’s probably a language server for it. Over the two weeks that I had off over the holidays, I completely rewrote 1,100 lines of my dotfiles, and kind of redid everything that I’m doing… And as part of that, I switched from like the LSP installer plugin over to one called Mason, and it gives you a list of like all of the LSPs that it knows about, and linters, and formatters, and all of that. But it’s just like a plugin that maintains all of those for you. And these LSPs are theoretically editor-agnostic, so they should work in other editors that support language servers, which is like VS Code, and other ones, if there are other ones.

And just going through the list, there are some amazing plugins for the LSP, for like different languages, and for different everything. So like one in particular that I was having fun with was installing one for Markdown, and – installing two for Markdown, specifically. One’s called Vale, and the other one is called Proselint. And they just yell at you in LSP form for writing terribly… [laughs] Which is exactly what they’re doing.

So wait, wait. Hold on, step back.


Define LSP and LSP form.

Okay. LSP - Language Server Protocol. It’s what like TypeScript uses to tell you, “You’re trying to use that as a number, but you actually passed a string”, things like that. And the LSP form can vary based on your editor and how you’re using it, but for myself in Neovim, it puts virtual text to the right of the line, that tells me exactly like “You’re doing this wrong”, or “That’s a number. That’s undefined, and you didn’t check for that to be undefined.” So that’s what I mean by LSP form, I suppose.

And so this is like going through – and I just opened up like one of my very few blog posts from my website in it, and it’s just kind of funny, the tips that it gives me about my horrible writing. It tells me a lot that – for one of them specifically, I’m talking about a video that I did at a meetup called OMG, or Omaha Maker Group… But it tells me that “OMG is chat speak. Write it out.” So that’s like one tip that it gives me.

Another one is it tells me that I’m using over 30 PPM. I don’t actually know yet what PPM means, but I’m using – it basically boils down to “I’m using too many…” It says “More than 30 ppm of exclamations. Keep them under control.” So I’m being too excited in my writing, so I should use less exclamation points. I just think it’s funny that these tools exist…

Parts per million?

Yeah, I don’t know…

Paragraphs per –

I definitely don’t have a million characters.

So is that coming out of something called Proselint?

It is. And so yeah, it’s a linter/LSP. I mean, it’s not an LSP. It’s a linter in that case. But I’m thinking more in terms of these plugins that theoretically are editor-agnostic at least… And so it’s just really cool being able to play with them and see what they give you. So my pro tip is go explore what LSPs you can install to yell at you more, because you’re not being yelled at enough by your tools.

[42:16] I like it. LSPs, LSPs everywhere. Kball, how about you?

Yeah, mine is, as is my want, a human thing, not a technical thing… But since we’re in January, everybody’s focusing on New Year’s resolutions, and goals for the year, and things like that… And I want to share the pro tip that at least for me, it works a lot better to focus on habits rather than goals. So instead of saying “I want to write 12 blog posts this year”, I’m going to develop the habit of “I’m gonna write every day.” I’m going to focus on 500 words every day, or something like that… But the goal is the habit of what I’m doing there. Or similarly for fitness. I think we’ve talked about this before, but it’s not like “I’m gonna deadlift 300 pounds.” It’s “I’m gonna work out three or four times a week”, and build a habit there. So that is my pro tip.

And there’s some thinking behind this, right? So the thing with a goal, especially if you do – like, the sexy thing is, “Oh, we’re gonna make a SMART goal, and we’re gonna have it be specific, and measurable”, and all these different things, and time-bound. But the problem is, if you do that, what happens if you don’t hit your goal? So like “Oh, I was very specific. I’m going to do this. I can measure it, I know how I’m measuring it, and I’m going to do it by this time. And that time has passed, and my specific measurement has not happened. What is my incentive to keep going and start again?” But in the real world, it’s going to be a lot better if you keep going, and you accomplish that a week or two later. And if you focused, instead of “What am I specifically doing?” or whatever, you’re saying, “I’m gonna build a habit of working towards this direction.” You’re gonna get there, and that’s what’s gonna keep you going and moving in the right direction, far more than your SMART goal.

Your surveillance goal? Sorry, I’m just applying your regex.

Exactly. Don’t create surveillance goals.

Very cool. I have a pro tip… This is not out of my head. This comes from the brain of Scott Antipa, who’s a programmer in San Francisco. He says, “You can store your app’s entire state in the URL.” He’s certainly not the only one who’s done this, but he lays it out very nicely… And I will just read what he had to say about that. He says that he’s building this flowchart editor that runs in the browser, and he wanted a way for people to use it without having to sign in, or store any data on his servers. And he wanted to give them control over their data, and to be able to store it locally to open and edit later, and also make it easy to share with other people just by copying the URL and sharing it as a link. So he decided to encode the entire application’s state as Base64, and then put it in the hash mark of the URL. I think it’s called the fragment identifier… And so he has a little – it’s super-easy to do; he has laid out how you do this. You basically just take the JSON – if you have all your app’s state in JSON, you just stringify that, then you run some sort of compression on it, so you can fit more data into the URL… Of course, URLs do have a max length, and I’m not sure how much data you can fit in before you hit that… But there’s some compression you can run on, and then you Base64-encode it, and then you just push that onto the URL… And then later on, when you need it, you decode it, you uncompress it, you parse it back into JSON, and you apply it into your application’s state.

So that’s a cool way of having persistent storage that’s persisted not in a cookie, on a server-side database, and not in local storage, where it’s stuck in that browser session. It’s stored in the URL. Which is, I think, kind of cool.

There’s other people that do this. He mentions Mermaid JS. I’m not sure if you’ve seen mermaid.live; it’s a very cool diagramming tool inside of Markdown, that GitHub supports now. They do it. So people do this, and it seems like it works… And so that’s something that you can do.

[46:01] I really liked the side effect of having no sign in, no local storage. Copy and paste the URL, and you can just like refresh and rehydrate application state just using that. So check it out. I’ll link to that in the show notes, his blog post, “How to store your app’s entire state in the URL.” So that’s my pro tip. Chris, did you think of one?

Yeah. So I don’t think I’ve mentioned this, but I may have mentioned it before… It’s a thing called Graphite. It’s like an app – it’s like an SaaS and a CLI, and it integrates with GitHub. Graph.dev is the site.

Anyway, so what this thing does is - it like builds this metadata on top of Git, and it helps you do stack pull requests. And I’ve been using the heck out of it. So I don’t know what it is about the way I work; maybe I’m just doing something that I shouldn’t be doing… But I will make a pull request, and then I’ll be like “Okay, I need to work on this other thing now”, and I need the stuff that was from my pull request. And so I can either add all my new junk to that original pull request, or I can make a new one, targeting the first pull request. And so that’s what this thing helps you do - it creates a stack of pull requests.

So part of the dashboard thing is - because if one of these pull requests in the stack gets merged, what it’ll do is it’ll automatically re-stack everything, and change the targets, and rebase the merged PR onto the one that it was targeting. And so it does all this stuff automatically, and then in their dashboard they have a tool to help you review this code, because it’s not so easy to do in the GitHub UI… Because if you add any sort of commit to the PR - well, there it is, and it’s all mixed in to the list of files in your PR in GitHub. But what their review interface does is it splits it up by stack, and so it knows which PR, what code came from. And a reviewer can easily only review the stuff that was in one particular PR, even if it’s been merged back into the original one.

So this is probably really difficult to explain, and I hope they do okay, because they’re just like a startup making this thing… Because again, it’s like – it’s pretty technical, and it’s really hard to explain… But it’s really cool to use, and I would suggest check it out if you’ve ever been in a situation where you’re like “Oh, I have this work that’s in progress, but then I have this other tangential thing that I need to get done based on that work.” And of course, if you use GitHub, too. But it’s been really helpful; it does all this automatic rebasing, and pulling changes down, and re-stacking everything automatically, and so there’s not a whole lot of – you don’t have to think too hard about managing the stack of pull requests and branches. It’s cool. Graphite.dev.

I immediately signed up. This looks awesome.

It does look cool.

Very cool. Thanks for your pro tips. So in review, there’s an LSP for that, focus on habits, store stuff in the URL, and check out graphite.dev.

Alright, that is our show for today. Nick, Kball, Chris - thanks so much for partying with me today. It was lots of fun. Always a good day when Kball loses at headlies, so we’re happy over here… Just kidding, Kball. I love you. And that’s it. That’s JS Party. I’m Jerod – um, final words? I’ll give you guys a final word. What have you got?


[unintelligible 00:49:57.24] Go!

You heard it here last. Alright, that’s our show. Talk to you next time!


Our transcripts are open source on GitHub. Improvements are welcome. 💚

Player art
  0:00 / 0:00