Svelte Radio

We have chat with Svelte Hackathon winner Jason Bradnick (snuffy) about what it took to build his Wolfenstein clone in Svelte using only HTML, CSS and JS! No canvas used! He also talks about the work he's done on bringing the svelte language tools to SvelteLab. That means bringing the language server to the web!

Recorded on September 21st.

NotesSvelte Summit is happening on November 11th! Go submit a CFP!
Unpopular Opinions
  • Brittney: node_modules 🤬
  • Antony: It's ok to like different things, but agree on a standard
  • Jason: Please use CommonJS but don't work with me
Picks

Creators & Guests

Host
antony 
Dad / @SvelteJS maintainer / @SvelteSociety co-founder / Svelte Radio host. Born at 341.57 ppm CO2.
Host
Brittney
DS Eng @Provihq 🧜https://t.co/U8JoqVO4Sm 😺https://t.co/5FKTbGIW8d 👩‍🏫 https://t.co/wGvIldEAIe
Host
Kevin A. K.
Co-founder of Svelte Society 🌎 Organizer of Svelte Summit 🏔 Host of Svelte Radio 📻
Guest
snuffy
Software Engineer | Working on Beatbump, Wolfensvelte, and more! Here be dragons...

What is Svelte Radio?

Things about Svelte. Sometimes weekly, sometimes not.

Hey everyone, welcome to another episode of Svelte Radio.

As you probably know, we are back after the summer. This is the second episode.

I'm joined by my co-host as always, Antony, Brittany. Hello.

Hi!

Hey! Hopefully this week's recording will go a bit better and we don't have to record

over two days.

Varying audio issues and all sorts of fun stuff.

So today we have the first guest of the season, I guess we could say.

We're joined by Jason, Jason Bradnick. Hi Jason.

Hello, hello.

Hey! So you are famous, I guess you could say, in the Svelte community for building

something called Wolfensvelte, right?

And we're gonna talk a bit more about that.

But before we get into it, maybe we can just hear a bit about you.

How did you find Svelte? What's your background?

So for your first question, I found Svelte not trying to throw shade, but because of

Vue 2.

So back in the day I was first starting out trying to figure out how to build stuff on

the web and Vue 2 didn't jive with me and then I found Svelte.

And considering I didn't even know JavaScript at that point, it just kinda clicked.

So that's kinda how I found Svelte and just kinda fell in love with it ever since.

And for my background, I am a self-taught developer.

I've done everything from game dev all the way to desktop applications.

I've been doing this kinda, I think, 10 years now.

And that would mean I started at about 11.

So it's been quite a journey.

Yeah.

So you're pretty young then.

Yeah, I am going to be turning 22 this upcoming February.

Oh wow, that's amazing.

With regards to the projects that you've already built, I am already super impressed.

Because I could not build those.

And probably have a bright future ahead of you.

Yes, it does sound like that.

Well, I mean, hey, thank you.

Yeah, so your projects are really cool.

So let's start a bit with the Svelte language server that you've been working on.

So a couple of episodes ago, we had Paolo and Antonio on from Svelte Labs.

So that's the kind of unofficial REPL for SvelteKit at this point, I guess.

And it makes it easy, basically, to just try out SvelteKit.

Because the regular Svelte REPL doesn't support SvelteKit yet, I guess.

We'll see if it gets SvelteKit support.

But yeah, so tell us, what is this Svelte language server stuff that you've been working on?

What does it give us?

What are the features that users can expect from something like this?

So essentially, if you were to take your everyday experience of using the Svelte language server,

whether it's through the VS Code extension or one of the community-made language clients,

you get the same exact experience.

You get cross-file semantic intellisense.

You get essentially everything is the best way to describe it.

So you get hover tooltips better than the ones that are currently on Learn.Svelte,

and then better than the ones that are currently on SvelteLabs.

That doesn't sound nice at all. I hate features.

No, I'm just kidding.

No, that sounds great.

That's one of those things that you're kind of missing it in the REPL all the time.

Like, oh, where's the autocomplete? Where's the et cetera, et cetera, right?

And just bringing that extra stuff into the browser makes the experience so much better.

So I assume the Svelte language server is maybe not something that would work out of the box on the web, right?

Nope.

No. So you kind of need... I guess you need Node. Yeah.

I guess you could say you need it, but...

Maybe you don't.

That's something that would work with web containers?

It's something that could work with web containers,

but it would just kind of, at least my understanding of it,

it would be kind of building on the wrong foundation.

So you could get it to work, but should you get it to work?

That's another question on its own.

So it's hard to run in the browser?

Yeah.

Or impossible.

The route I took, honestly, it's probably more of a sturdier foundation

because I essentially just emulate Node in a way.

So you got everything from full file system, you got process,

you got basically everything you would want.

Chakadar, I think that's how it's pronounced.

That works for file watching.

You got file descriptor emulation, you got everything.

So it's all covered.

So it sounds like you've had to, I guess, made shims for a lot of these features

that don't exist on the web platform.

How hard was it?

So it wasn't too hard.

It was just kind of really complicated to figure out

because the main thing was how do I get TypeScript to say,

hey, this is a Node system, how do I get PostCSS to run,

how do I get all of the preprocessors and Svelte preprocess to work?

And then on top of that, you have to incorporate

a whole bunch of surrounding infrastructure

to the point where it's just kind of like too much

to be considered sane to go about doing it, I would say.

But it's definitely a task.

So, yeah.

So how did you figure out what to do in terms of,

oh, I need to shim the file system.

How did you figure it out?

So to be completely transparent, it wasn't me who initially figured it out.

I kind of built on top of, I can't remember the name.

Let me Google it, VS Code Web.

So the guy, I don't have his name,

but he's, I think, a contributor to Svelte.

And he did an initial Monaco editor implementation,

and then he did a VS Code Web implementation.

However, it was OK, but there were several things

that I spotted that could be improved

where in the original version that I base mine on,

they just didn't work.

So I just kind of took bits and pieces from what he did

and kind of incorporated it into something

that is kind of more all-encompassing, I would say.

Right.

That makes sense.

And we'll figure out the link or something to this person,

and we'll put them in.

Yeah, we'll be finding it.

We'll find who it is.

Yeah.

I actually just found it.

Oh, there you go.

I'll send it to Kev on Discord.

Yeah.

I do not recognize this name, but we shall put it in anyway.

Just thinking of the Shaynites.

Yeah.

So any other things that you, when you built this thing

or when you worked on it, that stood out as difficult or easy

or something that you think might make sense to mention?

So one of the complicated things was

trying to essentially inject all of my patches, all of my shims,

all of that into all of the dependencies,

and then get it to actually work properly.

So based on the original code that I stemmed mine off of,

it wasn't fully there.

But getting it to a point to where it was working

and it actually worked pretty well, I would say,

took a month and a half, maybe.

Wow.

That's not too long.

That depends on how many hours you, yeah.

If you're going at it nonstop, that's a pretty long time.

Fair enough.

Yeah.

At least four hours a day.

Yeah.

All right.

Yeah.

Cool.

So I guess maybe we can talk a bit about one

of your other projects.

And everyone is the, so before we move on, sorry,

is the Svelte language server in the Svelte Labs experience yet?

Or is it?

It's coming up.

It's a work in progress.

I have a draft PR open.

And I think there is a deploy preview live.

But that current build that's up isn't fully properly working.

I'm still trying to figure out what's going wrong.

But I've definitely made progress since then.

So I would say within the next week, maybe two weeks,

I probably would have it ready for them to review.

Oh.

Oh, that's awesome.

So stuff to look forward to in the Svelte Labs REPL then.

Maybe even, I wonder if this could also

be kind of backported into the Svelte language server.

So this is like the way that you would use the language server,

like have it web first.

And then it could work anywhere.

I don't know.

I don't know anything about the language server.

Maybe it might make sense to reach out to Simon,

doom-de-doom, to talk about that.

I think he might be interested in chatting about it at least.

He is captain language server.

Yeah.

All right.

So next up, unless you, Anthony, Brittany,

do you have any questions?

No, this is honestly over my head.

This kind of stuff, I have great admiration

for those who understand it.

Because for me, it's like, whew.

All right.

Let's talk a bit about the more visual stuff

that you've done, the hackathon winning submission,

WolfenSvelte.

So I guess to, actually, I'll let you explain what it is.

OK.

So my summary of what it is, is it's

a Svelte port of Wolfenstein 3D.

It's kind of half guesswork and half,

OK, this is how it's supposed to be in the original game.

And it works.

That's kind of like the big picture there.

When you say it's guesswork, which bits of guesswork

in your mind?

A lot of it.

So there's the enemy AI.

That's kind of guesswork, kind of based off the original.

There's actually quite a lot.

So it's not true to the original,

but it's good enough to a point to where

if I wanted it to be true to the original,

I could definitely get it there.

So what inspired you to clone a game which, to be fair,

predates you by about 15 years?

I honestly have always been a fan of id Software, of course,

Doom, Doom II.

Then you got Wolfenstein, of course.

But also, I'm a big Quake guy, and I

was playing a lot of Quake III Arena around the time

I decided to enter the hackathon.

So that just kind of had me in the mindset of, OK,

let's just do this.

So that's interesting.

Did the hackathon make you actually start doing it,

or was that the thing that got you to start working on it?

That's good to know.

Honestly, I never even thought about it before the hackathon.

And by the time I decided, OK, hey, let's just

enter and see what happens, it was already, I think, March 3.

So I built the initial implementation

in a little over a month, I would say.

Well, so in terms of the 3D engine,

because obviously the Wolfenstein 3D engine is not

really a 3D engine.

It predates the, I think, John Carmack or whoever

wrote the first true 3D engine for Quake, I think Quake 1.

So it uses this weird kind of, it's almost,

I remember talking about it, like you

see the walls splay outwards as you walk towards them,

because it's not really 3D, and you can't look up and down.

So is that engine, is that something

you've implemented from scratch and gone,

I'm going to replicate this behavior?

Or is it an off-the-shelf engine,

which I can't imagine exists, because why would it

exist when the Quake engine exists?

But how did that come about?

My implementation, it's not at all.

If you had a 10-foot pole and you

were trying to touch my implementation,

you wouldn't reach it.

It's that far off from the original,

because this doesn't use ray casting.

It doesn't use any of the techniques

that the original would have.

Zed buffers.

Yeah, like all of that, no.

This just is simple.

It's just, OK, we have a grid.

OK, let's just put a whole bunch of walls up, and then good to go.

So it's like.

OK.

Yeah.

I mean, that's kind of how I see the Wolfenstein engine anyway,

really, to be fair.

But yeah, OK.

Yeah.

From what I understand, it's all,

so one would think that this uses something

like Canvas and 3D rendering kind of things.

But from what I understand, it's just CSS and HTML.

Is that correct?

Yeah, if you were to load up E1M1 and open up DevTools,

you could go down a few element layers past the scene

and all of that.

And then you would just see a whole bunch

of divs popping in and out and just a whole lot of style tag

abuse.

Yeah.

Just out of interest.

Sorry.

Go ahead.

No, I was just going to say, it's

incredible that it's actually fluid doing that.

Because you would think with the DOM limitations,

you would run into issues.

Yeah.

There's definitely a lot of issues surrounding that.

So if you have too many divs, of course,

then everything gets slow when you add on all of the RNG

and all of the actual game on top of it.

It got to a point to where it would crash my browser.

But I managed to optimize it enough

to where you could play it on your iPhone.

So it's kind of exercise in optimization, I would say.

Just use the Shadow DOM.

No, I'm joking.

So I have a question then.

Because I did a 3D module in university,

and it was quite taxing for me at the time.

I found it pretty difficult. But I learned a fair bit from it.

Do you use any matrix transforms in that 3D engine,

or is it purely kind of manual?

That's actually a good question.

So originally, I was going to use actual matrix and all

of that.

But then I just decided, OK, screw it.

Let's just, OK, take a translate 3D, a rotate.

And that's essentially the core of what actually makes it work.

So it's pretty simple if you think about it

compared to what you would expect.

Yeah, I suppose translate and transform in CSS

is doing those transforms for you, I suppose.

It just saves you writing them yourself, I guess.

Yeah.

CSS has come so far.

We have so many things that we didn't used to have.

Yeah.

Yeah, definitely.

So this is all open source as well, right?

You can go check out the source code for this.

And it's surprisingly not that many components in there

from what I saw.

It's pretty cool.

You can do a lot with very little code sometimes.

This is one of those examples.

It's only about just over 6,000 lines total, I think.

That's insane.

That's the way I like it, though.

Automate as much as you can.

Just create some basic components

and just do what you need with them.

There's also, I remember this, maybe you've

worked on this a bit more, but there was also an editor

where you could make maps, I guess.

Yeah, that, I scrapped it.

Yeah.

It's kind of one of those nice things

to where if I were to do multiplayer, which I'm kind

of debating on, it would be nice to have that to kind of have

your own maps that you play with your friends.

But yeah, the editor, that was kind of a bad idea.

I mean, maybe if you had more time and more

to just work on Wolf and Swelt, maybe

it would have been a good idea.

And if you were making lots and lots of maps,

but maybe it's easier to just define it.

How do you actually define the map at the moment?

Is it hard coded or what's the thing there?

OK, so I'm trying to debate on that.

I would say it's technically hard coded

because now what it's doing is it's

reading the original game files and building the maps off that.

But for the original hackathon entry,

I opened up Tiled, the map editor,

and I just made the maps by hand, which was really tedious.

Right.

That sounds like a lot of work.

It took, I think, about two days to make E1M1.

Yeah, and that's the first map of Wolfenstein 3D, is it?

Because I don't remember from Wolfenstein

what the thing looked like even.

Yeah, the first level in Wolfenstelt,

that's E1M1, which is also the first level of Wolfenstein.

So we'll put a link to this map so listeners can go and play

around with it.

Yeah, I think the general way people have emulated game

engines before is just taking a bin file from the game itself

and then written a parser for it and read it out

and displayed it.

But I think going from scratch is certainly a,

what do you call it, like a twist, isn't it?

I think the next thing to build in JavaScript in Stelt

is SIEM Hospital.

I think that would be a great candidate for it.

See what I'm thinking now?

Because someone's done it.

Someone's done it in C or something.

They've made a free engine.

You get the game file and stick it in there.

They won't put it on the web.

That's actually surprising with how big that game is.

Right.

SIEM Hospital.

I remember trying it.

I used to play that a bit.

I don't know if it is that great, though.

I never played it.

I actually can't even remember what you're talking about.

I might have to go back.

When Jason finishes it, you can play it.

I mean, is that a suggestion or is that a challenge?

I don't know.

Which is more likely to incite you into doing it?

I would say make it a challenge.

OK, then it's a challenge.

Then it's a challenge.

I never played this.

It feels like a lot of work, though.

Consider it done.

This is what I need my employees to be like.

This is like more components.

You're going to need more components.

You can have like a doctor.

Nope, nope, just three.

Just a thing, one, and then wall, floor, and then that's it.

That's it.

And then you need like a Boolean.

Like, has it got inflatey head syndrome,

whatever it's called, that they get and stuff.

Yeah.

Just pass different colors and stuff into them.

Make them look different.

Yeah.

And then the banana skins.

All the banana skins, they need to be components all over the place.

Yeah, so Brittany, Theme Hospital is basically like a,

think of it like The Sims, but you're running a hospital, kind of.

OK.

That's the gist of it.

And it's a really old game.

It is.

But it looks kind of neat.

And the thing about it is all these characters,

like you hire doctors and staff and stuff,

and they have all these characteristics.

And they just make me laugh because it's like, oh, you know, he's very meticulous.

He's very good at what he does, but he's lazy and he smells, you know.

And it's like, OK, we'll take him.

Oh, jeez.

We'll take him anyways.

Yeah.

It's a pretty fun game.

Because he's cheap as well, I'd say.

Oh, jeez.

All right.

Let's move on to, you've got a third project.

I don't know how you have time for this, but apparently you do.

So this animation library that you've been working on, what's that?

Is the animation, since felt, not enough for you?

Oh, definitely not.

One felt adds motion path and like actual backwards compatible motion path.

Then I would consider it enough.

But yeah, the animation library, it's essentially

me getting frustrated with using GSAP at work and just saying, OK,

I can make this better and smaller.

And that's kind of like the thing that drove me to spend so much time on it.

But it's actually coming together.

Yeah.

Cool.

So GSAP is probably the most well-known animation library for the web,

I guess.

There's also some other options, like is it motion.dev?

Yeah.

Yeah.

So what's it like working with something that builds animations for people?

Or rather, lets users build animations?

I guess it's also complicated.

It's complicated, but the good thing is with the web animations API,

which is what mine's based on, just like motion dev,

it's easy up until you get to the part of actually doing motion path.

That's definitely where it gets tricky.

And then also doing custom easing functions.

So it's kind of a lot of effort for something that I could just

download a library for.

Right.

Yeah.

This is one of those moments when I, because I don't know much

about animations and stuff, it would be great to have someone that actually

knows what to ask you about animations.

Because I don't know.

Brittany, Anthony, do you know any stuff about animations?

I mean, not over the spelt stuff really.

I've just done some basic animation stuff, nothing more complex.

Which is probably why I haven't needed to reach for, I mean,

I've used GSAP before, especially for the scrolling effects that you need

to move things with scroll, like SVG scrolls.

But I barely even reach for libraries to do stuff like that.

Yeah.

A big draw for me is that it's built in the stuff I would use in a day-to-day

basis.

Because I just end up getting quite overwhelmed by animation libraries.

I think GSAP is a good example.

I guess two things.

One is you need to really learn it.

It's a whole new kind of skill.

And I think the other thing with it is when I last used it, at least, it was

probably about five, six times the size of my app.

Because it wasn't tree shakable.

It was just all in one, like, bang, here's all of GreenSock, go for it.

Yeah.

I think it's like 30 kilobytes.

Yeah.

It's definitely reduced the size, but at that point then, because I was

thinking it's just a bit too heavy for a bit of flash.

But that flare often, I find that small details often brings you a lot of joy.

It does, but that is, it sparks joy, but it does.

But that is kind of the draw's fault, right?

It's just kind of there and it's already in and you just stick it in and you've got the

flare.

I think for one animation or for one thing, it's really cool to have GSAP there, but you'd

have to use for multiple things to really get the benefit from sticking that whole library.

Right.

Yeah.

So how's the, like, what's the API like?

How are you designing the API?

How does one use NanoMate once it's production?

Well, maybe not production ready, but ready for someone to consume?

It's probably going to be a little bit before it gets to like a point to where I would consider

it usable.

But currently the way it works is just like if you were to do element.animate, the keyframe

syntax, it's the same.

So you can have a single object with array properties and have your key frames in there,

or you can just have an array of a bunch of key frames, except with this, it's fully typed

for one.

And also you can do like shorthand for scaling, rotating, stuff like that.

And it will use the more well supported, I would say, regular translate or transform

properties rather than doing the standalone styles.

Yeah.

Well, that makes sense.

Have you, have you looked at Threlt by any chance?

I have a little bit, but I'm not too familiar.

Would you be able to like go into some of the things it has?

Yeah.

So, so Threlt is basically a wrapper around D3.

So it's not an animation library, I guess, but it's, it's more of like a, it's just like,

I like the Threlt kind of API, the way of using Threlt is really nice.

And I thought maybe you could look at it for, for inspiration, for, for like the, the end

developer experience basically.

But yeah, that's, that's definitely something to take into consideration because I remember

at Svelte Summit, there was kind of that whole hype about Threlt and that kind of got my

eyes first on them.

And I've seen a little bit of the syntax and honestly, I think it looks very clean, very

maintainable and kind of just what you see is what you get.

So yeah.

Well, that's, it's, it's a really nice library.

I haven't, unfortunately I haven't played around much with it.

It's like all of this, this stuff, I never play around with the visual kind of libraries.

I want to play more with, with animations and stuff.

It's almost a little niche because you build 3D apps with it.

So you need like that thing to build, to build that with it.

Maybe you could build like a 3D version of Theme Hospital in Threlt.

You probably could, right?

They built some games using Threlt, so that's not, it's not impossible.

Any other things you want to mention about the, the animation library?

I guess for that, I would say if, if you want less of a headache than GSAP, but you want

something that's probably going to be more broken than using Motion 1, check out my library.

It'll make your day.

I think that's a great sell.

Yeah.

Hey, it's honest.

Yep.

All right.

Any, any other questions for Jason?

Are we going into the spicy section?

I think spicy time, because we do also have 14 minutes till the announcement of Svuelt,

where we combine with the Vue project and become Svuelt.

It's a crazy day.

Yeah.

Brittany, you're, you're also interviewing Thomas in a couple of hours as well, right?

I am.

Yeah.

Okay.

So Thomas is one of the people behind the Melt UI library, if you don't already know.

Yeah.

And we're just talking about how he's been converting all of these packages over to Svuelt,

which has been pretty impressive.

So our takes will have to be short and spicy takes, let's say.

Okay.

So then I think you should go first.

Okay.

My short and spicy take is, oh crap, I've forgotten it.

That's not good, is it?

It's very short.

No, it's way too short, isn't it?

I had it before and it's gone.

Oh, it's gone.

I don't know what it is.

Okay.

No, no spicy take.

Was there that node?

No, I'll come back to it.

I'll come back to it.

Yeah.

I'm going to pass because I don't have a spicy take today.

Well, that's quick.

Brittany, Jason, do you, do you have one?

Honestly, I would say if you want to use CommonJS, go for it, but please don't work with me.

I'm good on that.

Oh, I love that.

Oh, I love it so much.

That is part of the pain, right?

Like the CJS ESM nonsense that happens.

And I was going to say something about Node, and I don't want to add to the hate in the

Node ecosystem right now, but I had, I don't know if y'all remember, I had those prettier

issues that day.

And like, it was, it's been removing random things and doing random stuff.

And it's been conflicting with our config at work.

I thought it was the extension.

Like I started with kind of the thing I thought that was the most obvious, like the extension

is messing with it.

Dove into that.

Nope.

You know what it was?

My Node module cache.

So I had to remove my Node modules and reinstall and it fixed everything.

I went from having 877 files it wanted to format to zero.

I was an angry bear.

So I mean, I don't even know what my unpopular opinion is there.

I don't want to add to the Node hate, but it's really frustrating to get like stuff

like that.

That happens all the time.

Yeah, I guess, I guess my controversial opinion, because I can't think of my original one would

be something along the lines of it's okay to like different things.

People can use whatever framework they like, or they can use React, or they can use Vue

or Svelte, it doesn't matter.

It's all the same.

What I would say is that this doesn't apply when it comes to, for example, a standard,

because standards that differ make things really, really hard to interoperate with each

other.

So have different preferences and do what you like, but try to agree on a single communication

mechanism method or a single way of importing files.

Like I like that Bun's gone ahead with the whole JOOL thing, but no, just pick one.

It's probably better.

Have you got the same cup as me, Brittany?

Yeah, is it the syntax one?

Oh no, this one's got my name on it.

Oh, there it is.

Oh, syntax.

But it is the same cup, I think.

It is, yeah, it's a very similar cup.

Yeah, it's a Yeti.

Merch.

Nice.

Yeah, it's nice.

I have the skate deck like out of Vue too.

It's really nice.

I have, oh, and the cups.

Do you skate often?

This thing is crazy.

It's huge.

I don't skate.

It has no wheels on it.

I'm just using it as like decoration right here.

Did they already invent the hoverboard with the LK99 thing?

I think those exist, but they're absurdly expensive.

Right, yeah.

Cool.

We should go into picks then in that case.

Yes.

Yeah.

Do you guys, who wants to go first?

I have a pick if it's easy.

Go for it.

Yeah, so my pick is basically, I forgot this one as well.

How could I forget that one?

This is not good.

This is not going well.

There's too much pressure.

All right, I'll go.

I'll go.

So I think I picked this a couple of episodes ago.

I might have, but I'm going to pick it again because now I've actually played it.

So I'm going to pick Sea of Stars.

If you like old style JRPGs like Chrono Trigger or Final Fantasy VI,

this is a new game by an indie company.

That's really fun.

I've been enjoying it a lot.

That's my pick.

Very cool.

My pick's come back now, if it's okay for me to interject.

Yeah, so my pick is basically around, because you know I've got the solar system installed.

This is why it slipped my mind because I was thinking about it so much and it's gone now.

So, yeah, I've got this solar system installed where I've got solar panels on the roof and battery and all that kind of stuff.

And I found out the other day that they also, the same power company,

give you a cheap rate during the night to charge your EV, whatever.

But you can also charge your home battery with it.

And so now, because the weather in England is turning because winter's coming,

I can't quite generate enough with my small system to power us every day.

So what I do is I use the cheap rate from the power company to charge my battery.

And it costs like 7.5kW or whatever, rather than 34.5kW in the day.

So I end up running off the battery half the day, use the solar when it's available for the rest of the day,

and effectively covering my entire power usage with the cheapest rate.

But even better, they allow you to have both tariffs at once.

So I'm actually selling any spare electricity back to them.

I'm selling their own electricity that they charge me 7.5p for back to them for 15p a kW.

And my free stuff off the roof is any of that spare.

So I'm making money.

Hacking the system.

This is how power should work. Hacking the system.

No, but I think that is how power should work.

It is. And actually, what I learned about the way Octopus work is that sometimes

they have a thing called an Agile tariff, which basically every half hour, the price changes.

And they notify your phone saying it's going to be like 2 quid a unit next hour because it's really premium.

So don't do any washing or whatever.

Sometimes they'll say it's free and sometimes they'll pay you to use it, which is bizarre.

And the reason they pay you is because the grid can only take so much power.

So basically, they've got too much power and they need you to use it.

So they're willing to pay you to use the power, which is great.

Yeah, I love energy grids.

Like I've nerded down on this so much.

The fact that the energy grid has to have this particular frequency, if it goes up or down,

it's just like either you get brownouts or you blackouts or you get like fried electric appliances everywhere.

Yeah.

So it's kind of amazing that it works.

Because it's that that carries the power across the grid, right?

Yeah.

So it's amazing.

Yeah, I mean, power is fascinating.

The more you learn about it, you can just keep learning more and more and more.

Yeah.

I was watching one of those that YouTube guy, I can't remember his name, he does loads of videos on like,

why things are the way they are, why refrigerators work and all that kind of stuff.

I wish I remember his name though.

Is that Veritasium?

No, it's a guy, he's very comical and well-spoken.

He's like tech ingredients or something? Tech connections?

He's got a weird name like that.

I'll put it in the show notes anyway when we find out, but it's fascinating to watch.

All right, cool, cool.

All right, Brittany, Jason, do you have any?

You can go ahead, Jason, if you have one.

Are you still thinking of one?

Yeah, sort of.

All right, I gotcha.

I guess my pick would be Lenovo ThinkPads, because even though the one I bought back in June kind of died,

I got this one for a pretty good deal.

So hopefully this one lasts longer than two months.

Yeah.

Hopefully that lasts longer.

Otherwise we might have to go back and remove the pick.

I had a fallback one.

I don't know.

All I do in my free time is we watch a couple of TV shows at night,

and we've been watching The Morning Show right now, which is pretty good.

But last week I picked Silo, and I finished that book I was talking about,

and the book, I could not put the end of it down.

It was just so good to read.

So if you liked Silo, if you went and watched Silo, I think Wool is the name of the book,

the first book in the series, and it is really good.

I do want to read it, but I don't.

I don't want to ruin the future shows for me.

It spoiled forever for me.

It spoiled forever, but it was so good.

You will never believe what happened.

Oh, stop.

I'm going to have to read it then.

Oh, damn it.

There we go, a little peer pressure.

Yeah, that's all you need.

External motivation is what I call it.

All right, so I think that's it for us.

Thanks for joining us, Jason.

It was a pleasure having you.

Hope you had a good time joining us as well.

I mean, thank you.

Anytime.

Super interesting projects, and everyone should definitely go check them out.

Where can people find you?

Are you on Twitter?

By your own suggestion, I'm on Twitter.

And then there's also, of course, GitHub.

And I guess my Discord, if you're really that inclined.

It's the same thing as my Twitter and my GitHub.

So I guess you could hit me up on there.

Send me pictures of your cats if you have them.

All right, cool.

And it's at SnuffyDev on Twitter, right?

Yeah.

All right, we'll put these in the show notes,

and hopefully you'll get a lot of cat pictures.

Looking forward to seeing what you do in the future.

Yeah, which will be Theme Hospital.

We'll see you in massively multiplayer online Theme Hospital.

Wow.

Don't forget the microtransactions.

Oh, yeah, yeah, I forgot to.

We have two more microtransactions.

And with that said, thank you for everyone joining us online and listening.

And we shall see you all next week.

Bye.

Hey, it's Kavir.

If you like the show, please drop a review on your favorite podcast player.

It would help out a lot.

Thanks.

Bye.

you