Things about Svelte. Sometimes weekly, sometimes not.
(upbeat music)
♪ Welcome to Svelte Radio ♪
- Welcome everyone to another episode of Svelte Radio.
We are back after a hiatus.
This is usually how it goes nowadays.
We don't record as often as we would like.
But we are back, as I said,
and today I have a guest.
It's Julian Burgess.
Did I get it right? - That's it, that's it.
- That's it, all right, cool, cool.
So Julian, you are a long time Svelte veteran,
or so I understand it to be, at least.
Maybe tell us, well, what's your story?
What do you do, maybe first off?
- Yeah, so I kind of work at,
no, I currently work at,
well, I've been working at Bloomberg now for over 10 years,
and I'm in their graphics team
on the sort of engineering side.
And so that's a mix of kind of like looking after
extremely full stack,
where it's kind of like looking after the servers,
figuring out sometimes sort of DNS and CDN issues,
and then also actually working on the graphics themselves
and sort of the data pipelines and things like that.
And so with that, I've been using Svelte for a long time.
I think since version two,
which I think is sort of almost technically the beginning,
because I think version one was sort of,
Rich kind of threw it in the bin almost
as soon as it was ready and sort of like,
was like straight onto version two.
And it was funny actually,
'cause I almost worked with Rich as well.
It was a bit of a sort of regret
or sort of sad thing in my mind,
in that Rich was working at the Guardian and was trying--
- Here in London?
- Oh yes, he was in the London office
and was transferring to the New York office.
And so we were chatting a bit about that.
And yeah, and so then I got the job at Bloomberg.
And so I left not long after, just before he arrived.
But he came along to my house warming actually.
I just moved flat at a similar time.
And so that was the first time I met him.
And yeah, he's a--
- So you go way back then.
- Yeah, so he's a really nice, warm, lovely person.
And I suppose from that I then started looking
at some of his projects.
And I was saying earlier, I think,
I used Gobble and I can't even,
I should have looked up what it was.
I can't remember what it even did.
(laughing)
- We'll have to ask Rich.
- Yeah, and there was Splunk, which--
- That's an odd name.
- Yeah, well you know this Splunking
is where you kind of go down into a cave?
- Yeah.
- And so we actually still use that at work
where it's a kind of, the way it was,
we have a modified version of it.
But it kind of, it just sort of goes into a folder
and just any files, so sort of text
or sort of CSV or JSON or anything it sort of finds,
it will kind of append it onto a tree
so that you can then sort of use that quite easily
within your code.
Because we're using that within a build step,
so it doesn't really matter.
Or it may not matter about the file size in memory
at the time when you're doing the build.
The output of the build still matters.
But it's kind of nice things where it's nice
to just make the, you don't have to worry
about loading files, it's just done for you.
And I think I played around a tiny bit with Rective,
but never used it.
And then--
- So Rective is like the predecessor of Svelte.
- Yeah.
- One could say, I think.
- And then so I think Rich made the announcement about Svelte
and I was like, this sounds good.
- And this is Svelte 2 we're talking about.
- Yeah, I see.
And so I tried it out.
And I think, I'm gonna have to double check,
it was either the UK election for 2015 or 2017.
I can't remember which year it was.
'Cause we've had quite a few elections in the UK.
And yeah, the thing which was,
I mean, the thing that I think particularly was good
was the way that it was, which isn't necessarily,
now with the way SvelteKit works,
it's sort of different entry points into this.
But the way you could have multiple entry points,
because we wanted to make it
where there was the main graphic itself,
which shows the sort of overall results,
but then we wanted to extract out bits of it
to use on a widget for the homepage.
And so the homepage gets a lot, lot, lot more traffic
than anything else.
And so trying to make it very small is of key importance.
And I can't remember how it was really impressively small,
like, you know, 14K or something like that
of the total code that we had.
And I think we managed to get the data down to like one,
you know, under 1K or something like that as well.
- Yeah, I mean, that's almost nothing.
- Yeah, exactly.
And so it was kind of, so, you know,
you're not sort of worrying about the sort of performance
here or things like that.
And it's just kind of grown really.
So now the whole team, I mean, the team has expanded a lot.
We're close to about 50 people, I think,
across sort of London and New York and in Asia as well.
And yeah, and I think that it's interesting as well,
because I mean, obviously React is so big.
And I looked at React, I've never really worked with it,
because well, we actually, before as well,
we used, one of our colleagues used Angular.
And so I could sort of see how good it was
in terms of like being able to make components.
But it also seemed like it would quite quickly
get into kind of crazy problems
with like how much rendering was going on.
- Right. - Yeah.
- Right, and that's not very nice
when you're doing like some interactive graph or...
- And it can be, yes, because it's,
particularly with graphics, when you're doing,
you're often doing a lot of stuff with SVG,
but you can have quite sort of big DOM trees
where there's sort of like hundreds or thousands
of sort of elements going on.
And so, yeah, trying to avoid unnecessary renderers
is important, and particularly as well
where you have sort of interaction.
So if it's sort of like some sort of mouse,
you don't want sort of a mouse over
to sort of like cause the whole tree to be re-rendered.
You just want sort of it's like the sub-tree
or whichever bit to do that.
- I'm guessing that makes you excited about Svelte 5?
- It does, but I think there's a lot of kind of uncertainty
and skepticism, because I think with that as well,
the thing which, again, was also a big attraction to me
was that Svelte looks a lot like HTML,
regular HTML with a script tag and a CSS.
- I assume in Svelte 2 it was even like HTML files,
if I remember correctly?
- Yes, I think you could put kind of any extension.
So I think we, but we did use .html, yeah, I think,
which was a bit confusing, perhaps.
But then, yeah, and you had to, it wasn't,
I think with Svelte 2,
we didn't have the dollar prefix as well.
You had to, I think you had to have a computed property
that you exported, and then each function
was the kind of like, well, this was the thing
that depends on something else.
And that--
- I mean, the documentation is actually still up.
- It's still up, okay, yeah.
- If you go to v2.svelte.w--
- Oh, nice.
- You get to the old v2 documentation.
I've just randomly, occasionally, just gone in there and--
- Just to check, yeah.
- Yeah, just to check, see how--
- Yeah, 'cause it feels weird, I think,
'cause I remember, in a way, I was like,
this dollar thing seems a bit crazy as well
when it first came out.
And I was like, oh no, this is broadly good.
I mean, I think it can be, well, I did that talk
at Svelte Summit as well, where I was sort of saying
how the, it's one of the things I see a bit with people,
'cause we have a variety of sort of levels of skill,
and it's sort of on the team,
but it is one of the things I see sometimes
where people just kind of dollar prefix almost everything.
- Yes, I've seen that as well.
- Yeah, and not necessarily, which isn't,
I'm not saying it's actually necessarily bad,
but you're kind of like, if you're kind of thinking,
is it possible for this value to sort of change
without it causing all of the things below it
to change as well, or is it, and it's like,
can that value, sort of, is it possible really
for it to be cached and reused?
And even if it is, is it sort of valuable as well?
Because it's kind of like,
if it's doing some kind of long thing,
and then the sort of, it comes out with a string,
that's great, maybe you're gonna hold onto that,
but it's usually not like that.
And so I feel like trying to put the logic
into a whole kind of block which sort of encapsulates
everything that's supposed to be going on at that point.
So particularly around things like sizing
and stuff like that, you know, where you're kind of,
so in a graphic, very often you'll be kind of,
we use D3 a lot as well,
sort of a JavaScript visualization library.
And so a very common pattern is you've got some data,
you loop over them to find the sort of,
the maximum sort of minimum value
to set the domain of the scale.
And then you're kind of doing some other things
with the scale based on the size of the window
and all of that kind of thing.
So all of that is a kind of,
usually a nice sort of concise block that should,
should go in a reactive block.
- Yeah, yeah, I find that, like,
when I've seen people use reactive blocks,
I try to avoid them, actually,
but then my use case is not a lot of interactive stuff, right?
- Right.
- I just use Svelkit, and then I use form actions
and the load function, and that's pretty much it.
- Right.
- Some tiny amounts of interactive stuff I do,
but, like, rarely stuff where things are, like,
moving around the screen, or I have to, like,
recalculate things and stuff.
Like, I usually just let the, let Svelkit handle,
like, the invalidation of the data,
and, like, updating it and stuff, so.
But I've seen, like, examples of people
overusing reactive statements, and I find it gets
very hairy very quickly if you have, like,
many blocks and many statements,
'cause you kind of don't understand, like,
how they trigger each other.
And also, a reactive statement,
if you put it in the script tag,
even if you put it above some other declaration,
it always gets instantiated last, I think,
if I remember correctly, so you have to also think about
the order in the script tag that you put things.
That's usually not a problem, but it's something I'm--
- No, I think that is, I guess it's true, yeah,
that people, it is also confusing as to,
with a reactive block on mount, and then just sort of
stuff that is directly in the script tag,
which exactly is gonna happen first.
And I'm not even certain I could say for sure without,
you know, my life depending on it.
But the, I mean, I think with that as well,
what we tend to do is that sort of common pattern,
particularly where things are arrays,
you just have an empty array, and you're like,
let me just, you know, so it sort of is
initially instantiated with that.
- Yeah. - And then,
you know, data is loaded, and then you've sort of set it,
and then it sort of triggers it again,
but it's only one render.
- Yeah. - And that seems to,
it seems to be sort of a pragmatic solution, yeah.
- Yeah, so you were talking about the Svelte 5,
and you were talking a bit about simplicity
of Svelte before, I think? - Yeah, I mean,
I was gonna say another thing as well,
is we were also early to using SAPA as well.
- Right.
- So we used that to make a number,
I think we did at least one or two elections,
and we also did the best business schools guide.
- Yeah, so SAPA, for those that don't know about it,
people that are new to Svelte,
SAPA is the predecessor to Svelte Kit.
- Yeah, and it was good, it was a lot better, I think,
than anything we could have done previously,
or would have been, it made things much simpler,
but relatively, Kit made things so much easier.
There were a lot of problems around page navigation
and exactly where events would occur,
and trying to squeeze in,
even when you got the page itself
roughly doing what you wanted,
there was complexities with things like tracking
and analytics and things like that,
where it has to know whether it happens
at the beginning of the page or the end,
and whether it still has the previous page's URL in it
and that kind of thing.
So I know almost, I think, all of those problems in Kit
just disappeared and was so much nicer as well.
It was just like, so yeah, Kit has been a huge improvement.
And yeah, so I'm excited about Svelte 5.
In fact, it was interesting,
'cause I did a lightning talk in London,
the Svelte meetup, quite some time ago now,
maybe two years ago.
- Svelte Kit's been out for a long time.
- Yeah, and this was around,
I guess it would, that wasn't the title of the talk,
but it was essentially around fine-grained reactivity,
which is now the hot buzzword with Svelte 5,
because there's the immutable tag in Svelte 4
and probably 3 as well, I think,
where you can say, if these objects are not mutated,
then it would just do simple checks,
which can eliminate renders that don't need to happen,
because at the moment, Svelte, by default, is pessimistic,
so it sort of assumes that you might have mutated the object.
And so there's a kind of little demo bit of that
in buried, well, not exactly buried,
but it's towards the sort of advanced,
sort of empty bits of the documentation and tutorials.
But it always sort of stuck in my mind of kind of like,
well, that'd be interesting if we could try
and sort of eliminate unnecessary renders.
Although I have to say as well, with that,
well, we'll probably talk about this more in a bit,
but I use Svelte quite a lot on my side projects,
and it's amazing actually how fast things are.
And I think it can also be that,
am I over-optimizing and worrying about eliminating renders,
and it's actually fine, you can still just do
thousands and thousands of things
and still get 60 frames per second, and it's no problem.
So I don't know, but it feels,
I think that there's also to some extent,
if things are definitely only rendering when they change,
it's also interesting because you can then
sometimes have sort of effects which sort of play on change.
And that itself can be a kind of a useful
kind of visual sort of UX kind of addition.
So I'm excited to see where that goes in Svelte 5,
but it does mean that, yeah, so basically,
I said to Rich about the talk and he was like,
oh, we don't bother about it,
'cause in Svelte 5 it completely eliminates it,
and I was like, okay.
But yes, I've only played around with Svelte 5 a bit
in my spare time,
'cause we're currently working on the US election for 2024,
and this year is definitely not a time to go
playing around with completely new technologies.
It's a much bigger team and it's more ambitious
as a graphic.
- I mean, it's been release candidate for how long now?
- Quite a long time. - Yeah, a very long time.
- I think as well, it's just conceptually,
'cause it has been, a few people talked about it,
where the dollar had this kind of nice
sort of simplicity to it.
And I think kind of state, derived seems okay.
I think, 'cause I feel already, I've read a lot
and watched quite a lot of videos where people were like,
be careful with effect, yeah, and it's like you kind of,
and I can see why it's problematic,
but I know at the same time I'm just gonna,
I'm definitely gonna stumble into those problems myself.
- Right, yeah, same, same.
- Yeah, I was actually interested as well.
There was a video, I've forgotten the name of the guy,
it's the guy who says easy peasy lemon squeezy.
- Ah, Matia, Joy of Code, I think.
- And that was a really helpful video,
but he was talking, I think it was about this animation
sort of library he had, and how he was--
- Animation? - Yeah, that's it.
And the fact that he was still actually using stores
as, with Svelte 5, and I didn't actually realize
that they were so compatible like that,
and I was like that actually looks very helpful.
Right, that's good, 'cause I do love my readable stores,
one of their sort of favorite things.
- Yeah, because one of the new features of Svelte 5
is the fact that you can extract those reactive statements,
as it were, to separate files, right?
So you can reuse the logic, you couldn't do that before
because reactive statements could only be read
by the compiler in the Svelte files, right?
So that's an interesting change, right?
So you could kind of move away from stores
into something like that, but then there,
I know some people are worried about interactivity
outside of Svelte, because if you use the,
like the rune style, so you have to basically create a file
that's named something.Svelte.JavaScript or .ts, right?
And that's where you put your logic,
and then you can use runes in there,
and everything is fine and et cetera,
but nothing outside of Svelte understands those things,
right, I think.
So in that sense, stores are still maybe an easier way
to interact with non-Svelte stuff.
I'm not sure, I haven't gone down that route.
- Well, I have found that sometimes with projects where,
'cause I think once you start to sort of think
reactively like that, you kind of often want that
with things, and so there was like this project,
well, I should maybe say about prefixing it,
in 2019 I did a master's degree at Goldsmiths
in computational arts, which was really fun and exciting,
and I did learn a bunch of things,
but it's still with that, it's like when you've got a tool
that just becomes your kind of like favorite tool,
and so I use Svelte for quite a lot of the projects
with that, and I still, I use Svelte in sort of artistic
kind of creative ways.
And so yeah, there was something like that where I was
controlling a whole load of servos, and it was basically
just have an array of like the positions you want to go to,
and I was like, well actually, it's because you would
sort of send this over the wire, and again,
it's one of those things where it's like you don't,
you don't necessarily have that much time to investigate
as to how these things work, but it's a very low bandwidth,
it's like 9,600 bits per second, and so you're kind of like,
well, I don't want to go send an unnecessary kind of move
to this position if it's still the existing position.
Exactly, and so I was like, well, I'll just ship it
through Svelte, I mean, I could as well, I could just write
my own kind of like array different kind of thing,
or maybe this is probably tools for that, but I was like,
well, I don't really have to think about it like this,
I'll be like, why not just, you know, it's available
on a webpage, but it is a bit strange sometimes
where you kind of have things, well, I don't know,
I kind of go back and forth, 'cause it's having something
that's completely kind of, there's sort of like headless,
but then there's also kind of like, and not even having
any sort of interface to it at all, so this is strange
in that it's kind of like actually the user interface
is doing the calculation, so it's like nothing happens
unless this webpage exists somewhere, and so a browser
has to be kind of like looking at it, so to speak,
but you're kind of like, well, it's not necessarily
a bad thing because it's kind of like just like a kind
of interface panel that sort of tells me what is the position
of these servos, and so, yeah, but it is a bit strange
'cause you kind of, you have to have something that can run
a browser somewhere, so yeah, I suppose in a more purest way
it would make sense if that wasn't happening.
- Right, yeah. - If it could just be
happening purely server-side.
- Yeah, all right, so you still like your stores.
- Yeah, still use stores. - You wanna keep them?
- Yeah.
- All right, so how do you use stores like at Bloomberg,
like generally, do you use it to like interact
with something like Three.js, or is that done without stores?
- We don't use Three.js tons, or at least I haven't,
particularly, I mean, it's every, I mean, essentially,
so I should sort of say in terms of like in the graphics
team, pretty much every, the way, 'cause I sort of look
after the back end of how we publish graphics,
and essentially the API of the graphic or the publishing
system is just that we have a public folder and we just
deploy that, and so all of the, well, there's an awful lot
of intelligence that has to go into the sort of build step
to make the graphic, and then otherwise, after that,
it's all on the front end, and so, wait, what was I
talking about?
- Stores. - Oh, stores, I see, yes.
So, again, Three.js, so it's kind of, so with that,
it's very open for people to try things out, so we don't,
if people want to, so if you're doing something with Three.js,
it might be that Svelte is not necessarily useful
as a sort of tool for handling this, or you know,
you might use Throat, which is still built on Svelte,
but it's kind of often to its own thing a bit.
Yeah, so I mean, I don't know, the main, I mean,
the classic things, stores are great for kind of
interaction where you're kind of, you know,
you're selecting some kind of data point,
and it's often, even if you're not,
I quite often would sort of advise people to be like,
it's a good way to use a store, even if,
'cause there's a lot of editing that goes into a graphic
as well, so you quite often will be like,
it starts off as one chart, and then we split it out
into three charts, and then it goes to two,
and then it goes back to one again, or something like that.
And so, it's kind of having that sort of flexibility
is quite important, because what you don't want
is where you're sort of, you know, the editor says,
oh, actually, I don't think we need this, and you're like,
oh, damn, why did I put all this work into it?
Well, you know, if you take that chart out,
then it breaks the interactivity of other things,
or something like that.
And so, yeah, having that kind of thing
where you're like, you're just sort of binding to a store,
which is like, I'm selecting this sort of value
on the X variables, or something like that,
and then you can just be like, across all of the graphics,
you then just take that value, and be like,
now, this is the selected one, is very useful.
- Do you know if it's common to write custom stores,
or is that something--
- Not that common.
- Just generally use the built-in lightable and readable?
- Yeah, it tends to be.
- 'Cause I kind of find the custom stores to be
a way of encapsulating some form of functionality
that could be anything, but--
- It seems a good idea, I mean, I think it's,
building something that is sort of so strong,
like, that does strongly encapsulate is sometimes tricky,
or to what extent, 'cause I think very often, as well,
there's quite a small number of people
that are actually working on a graphic,
and so a lot of that knowledge is in your head
about the sort of the structure.
- I assume, as well, if you're in the graphics department,
you don't have unlimited time getting things out.
You have kind of like, you have some deadlines,
and then once it's done, you don't really touch it again.
Maybe you go back and look at how you did something.
I'm just assuming.
- Sometimes things do, it varies.
Sometimes things do get updated.
We've got, we've made a push this year,
which is working quite well with,
to extract out reusable components.
But with that, as well, the sort of direction we've taken
is rather than trying to build the perfect component
where you just kind of like just use it
and it does everything, it's actually to try and build
a kind of a good sort of component,
but that we actually say, we set it up
so that you actually just copy it into your project,
because there's, I mean, sometimes you can do a component
that is just like, it does everything that it needs,
but with things like a table,
a table is so fiendishly complex.
There's like, there's no perfect table component.
And it's like, and the more you try,
all that happens is you just get a bigger and more complex
table component.
- Just gets more abstracted and like complicated.
- 'Cause there's always something you can do to a table
that will just make it incompatible
with other things you've done.
And so with that, it's more like,
here's a bunch of kind of like,
this is a way of doing a table like this,
and this is a way of doing it like that.
And particularly once you want to start
putting other components inside the table,
and then you're kind of like based on this,
this thing shows or doesn't, and all of that, yeah.
So that tends to be--
- I hadn't even thought about that as a use case
for like showing things on a, like--
- And also just 'cause it's,
I mean where you find this all the time in HTML,
just 'cause it's sort of table-shaped
doesn't mean that actually a table is the right
sort of underlying elements to use as well.
- Although the table element is kind of underused in HTML,
I would say.
- Oh, I don't know, maybe, yeah.
I mean, it's weird 'cause I'm so old school
that sort of, you know, there was, for years,
there was all that thing of like,
stop using tables for layout.
- Right. (laughs)
- Well, maybe that's why I feel like tables are underused
because people are like, oh, I've been taught
I should never use tables.
- Oh, that's true.
I think, yeah, there was that.
- So they just like, ooh.
- Yeah, yeah, people were like--
- They're quite nice.
- Yeah, no, I do like tables.
I mean, I think it's, I mean, it's to do with the way
the layout, I mean, I don't know how,
what the algorithm is inside,
but you realize it's really weird and complex
to be this sort of like get the biggest thing
that won't compress, and then--
- Right.
- So there's all these kind of complex,
cascading kind of effects on like the sizing for it.
Whereas, but I mean, it's also one of those things
where if you, I mean, well, if you're making big tables,
you know, hundreds of rows,
and it does get kind of weird and complex,
but I mean, if you're using it,
very often in the way we tend to use tables,
you just like, this column's always this width,
and things like that, so the render
and sort of layout performance is perfectly fine anyway.
- Yeah.
- But yeah, I was gonna say the other thing
we use readables for, I mean, particularly for the election,
is for sort of polling and for fetching data as well,
and that's also one of those things I'd like a lot,
that they're sort of lazily evaluated,
and it's funny how often I forget that as well.
It's like so many times when I'm doing it,
I'm like, "Why isn't this thing even working?"
And I'm like, "Oh, because I'm not subscribed to it."
- Right, yeah, yeah, yeah.
- So yeah, so I often build quite a lot of little
sort of test pages for myself as well,
which is now, again, so much easier with SvelteKit,
where you can just be like,
just check that this sort of thing,
this component is doing its thing,
and it will be sort of subscribing to that store
in the way I expect it, yeah.
- Yeah, I think the dollar sign prefix thing for stores,
it kinda tricks you in a way that you're not using a store.
I don't know, it's kinda hard to reason about sometimes.
- Strange with when you have multiple
sort of derives that you don't know
which order they're gonna occur in.
And I presume, I don't know if there is even a,
if it's just a sort of a luck kind of race condition thing,
or whether it's just a sort of like how at runtime,
or whether it's how the code is compiled.
I haven't looked into this.
But basically, it's not reliable,
so you need to think through,
you can't have, I suppose that's effectively
you're having a kind of weird sort of side effect
in some sort of way happening there.
So anyway, so I've learned that the hard way
that you're kind of like,
you need to sort of think through this thing.
But often it just means inserting another kind of,
another sort of derived store.
But it can be, it can get a bit of a mad thing.
In fact--
- It's kind of similar to the reactive statements, right?
- Yeah, exactly.
- That it's like you don't know
which one's triggering in what order.
But it's a bit clearer, probably.
- I forgot his name again.
You mentioned earlier the video guy.
- Matia?
- Matia, yeah.
I think he also had that thing where he was demonstrating
where he built a nice sort of diagram tree
that was showing some of the interactivity.
I would love if we could do that with Svelte generally.
If it could have a kind of, you know,
show the entire tree of interactivity.
- Like, I've always felt like the kind of developer tools
are a bit lacking in Svelte.
- Oh really?
- In the sense that like extensions for the browser,
like I know there is one, there used to be one,
but I don't think it's updated anymore.
- Right.
- Having something like that in there would be nice
to see like the, oh okay, so this is happening.
- Yeah.
- This thing is updating this thing.
Or maybe like if you could see something updated here
and then you could see, you could go back
and through the history and see like
in which order it was triggered
and why it was triggered and stuff like that.
- That's true, but what was that amazing tool
that was demoed at Svelte Summit
where there was a--
- Oh, the Svelte inspector.
- Yeah, that's it.
- Yeah, that one's really good though,
but that's another kind of thing.
I always forget how to enable it.
- Yeah, I've realized--
- So I never enable it.
It's very frustrating because I know
there's documentation somewhere.
Like, oh, you just put this in the config,
but then there's, I always wonder like, which config?
There's the Svelte config and then there's the Vite config.
And I never remember where, I wish it was
already enabled by default.
- Yeah, I need to, I'm gonna do that next week then,
is enable it and remember, because ages and ages ago,
I never had actually a chat with Rich.
I mean, it's amazing as well how many things
you can kind of say, can you make this happen?
And it somehow does.
'Cause I was saying that there's no,
there aren't sort of source maps for HTML.
So it's weird that you can kind of in the inspector,
you can say, where does this bit of CSS come from?
It tells you, where does this bit of JavaScript come from?
But when the HTML is there, you're like,
where did this come from?
It's like, sorry, no idea.
But that tool effectively kind of does that for you.
- Yeah, because you can click something
and then you just end up, well, you don't click
in the source, right?
You just click the element on the page, right?
But it's actually, it's a very cool feature.
Like, I don't think--
- I bet it could do it from the source as well, actually.
- Maybe it can.
- I'm sure it could do it from the DOM too.
- I mean, it makes sense, right?
If you would just do it somehow.
But yeah, for those that don't know
what we're talking about, we're actually,
we're talking about something called the Svelte Inspector,
which is basically a tool that lets you click.
So you basically enable the tool by adding some config
and then you hold down a key
and then you click anywhere on the page
and then that opens up your editor
and at the correct line and at the correct file
and everything.
It saves a bunch of time.
I remember me and Dominic, the guy that made the Inspector,
we were talking about how you could,
what if you added an editor inside of the browser?
So you could just click it and then it would pop up
like a panel and you could just edit something
and then save it and then it would just update.
You wouldn't even have to switch context to the editor.
You would just like, I don't know how it would work
and it would obviously be like a very limited version
of a real editor.
- Well, that could be very handy though, yeah.
- But if you just wanted to change like a value
in the fade transition to see,
to make it look faster or slower, I don't know,
whatever, right, I think that could be nice.
Or what if you could shift click the element
and then you would get a list of attributes
that you could change on the component.
Like you could do so many things with something like this.
- Yeah, that would be good.
- Yeah.
- It's one of those weird things,
'cause I find I'm definitely guilty of this
where I get so stuck in my ways with the kind of,
you know, the sort of editor and the sort of general setup
I have and I can sort of see things.
So I'm like, oh, this looks better,
but I'm like, I don't have time
to retrain my brain right now.
Actually, I find often December is quite a good month.
It tends to be a sort of relatively quiet month.
It's quite a good time. - Like a lull in,
especially the news cycle, maybe?
- Yeah, news cycles, it tends to die off,
'cause everyone sort of stops creating events and news,
usually, hopefully.
I mean, that's sort of like natural disasters
and things like that hopefully don't happen.
Yeah, so that can be a good time
to kind of re-evaluate your own sort of tools and processes.
- Yep.
Yeah, I've been trying to use a new editor lately.
It's called ZED.
- Okay.
- Which is like a natural native application.
So it's not like a web view or something like VS Code.
I feel like it's nice to, when you click a file,
it actually just pops up with the correct stuff instantly
instead of having to wait for a bit.
I mean, it doesn't take that long, usually, in VS Code.
It's usually very fast, at least on my computer,
but you can still notice sometimes
the syntax highlighting lags a bit, and then it shows up.
- I think there was an interesting thread a while ago
on Hacker News about this.
It's very hard to, it'd be interesting to kind of,
you can't go back into the past,
and how much of this is just kind of,
what's the word for it, like nostalgia or things like that?
But they were sort of saying about
old kind of text-based interfaces and how fast they were.
And you were kind of like,
when you were back in sort of DOS and things like that,
and they were like, oh, everything just happened
at 200 milliseconds or less, and it just felt instant.
I'm like, I don't know if it did, though,
'cause I know at some point, there was this thing where,
I can't remember where it was,
but at some point I turned on, this was many, many years ago,
but even still, I switched on this old 486
or something like that, and I could not believe
how slow and noisy it was.
I mean, it sounded like a little machine gun
was going on inside it, with the noise of the hard drive.
- Like the hard drive, yeah.
- Yeah, and, so I don't know, but I feel like--
- Rose-tinted glasses, maybe.
- Yeah, I mean, also as well, I definitely remember
that I could, sort of back, sort of early days at school,
that you could overtake the speed of the computer,
but you kind of knew what the commands were.
In fact, yeah, where you would sort of like,
yeah, you would sort of like type it in,
and it would just be filling up the sort of keyboard--
- Right, right.
- And then it would kind of like, you know,
all your commands would sort of suddenly execute after that.
So I don't know, but it probably was that, that it wasn't.
But I mean, I think we kind of, it goes back and forth,
you know, it's kind of like processors have got,
sort of, you know, much faster, but we're continually
sort of slowing down the interface.
And yeah, I don't know, it's a tricky thing.
I mean, actually, I know that Chrome has recently
changed their sort of performance tab,
and tried it out the other day.
- I use Safari all day, every day, even for development,
which is kind of unusual.
- I was forced to use it for a while at work,
because for some problem with Chrome,
I couldn't understand.
In the end, I just re-imaged my Mac because I was like,
I just have to be back on Chrome.
It's weird though, actually, because in my personal life,
I use Firefox, so I'm kind of like between both of them.
But yeah, it's, I mean, actually, that's one of the things
that I sort of, not exactly miss, but it's kind of,
with graphics, because, like you were sort of saying,
the way that they, because it's news, so you work on them.
So it's one of the joys is that because we're continually
creating new graphics, it's a great opportunity
to try out new things, because you're like,
let me try it, see if it works, and if it doesn't,
well, you kind of either throw it away
and kind of make it work some other way,
or you, but quite often you'll be like, this was fine,
but I didn't really enjoy it, or it wasn't that amazing,
so I won't use it again.
But with that as well, it sort of, it means that there's not,
in a way that if you're just sort of working on the same app
for years and years and years, you can spend a lot of time
kind of thinking about sort of performance
and probably working in Chrome.
Although I say that, I was like, I say you could,
it doesn't feel like people are doing that that much.
You know, there's so many really terrible websites
out there that are really slow.
- Unbelievably slow sometimes, right?
Even just simple websites sometimes are really, really,
really slow, sometimes, like it boggles my mind a bit,
like when, especially when businesses have very slow
websites, it's--
- I found as well, actually, it's interesting,
'cause I work quite a lot with the data structures
that we use, and so particularly for elections,
because it's something where we're going to be fetching
that data an awful lot of times,
and there's going to be a lot of people doing it.
And so I find that it's hard to be CSVs or TSV,
'cause it's just, you're just kind of, you know,
normalize it down to the sort of smallest thing, and--
- Right, right, it's just like number, comma, number,
comma, number, style, right?
- I mean, we do, I've gone, 'cause I like to optimize,
I've done a bit of extra sort of tweaking,
where I kind of like tweak how dates work,
and if it's true or false, just remove the falses,
and you only put one as a true value.
But all of that, it kind of, it does add up,
this sort of, this bite-shaving--
- And election data is probably quite a lot of data.
- It's not-- - Not that much?
- Well, it's not loads, I mean, for the US,
I think there's, off the top of my head,
maybe three and a half thousand counties,
or something like that, so that's at that very fine level.
Otherwise, if you're just doing it for the states,
so we probably wouldn't, I don't think we're doing that
for the, as a sort of a default view,
that's more like a detailed view.
But, I mean, we also do it where we sort of break it down
by state as well, and things like that.
But, yeah, I mean, it's one of those things where
you can spend a lot of time being like,
trying to get a sort of file down from like 60K to 50K,
and then you look at these sites,
and they've got like a 12 megabyte video,
or something like that, and you're like,
yeah, why am I even doing this?
And also, it's hard, but the thing I suppose is
to remember that code and data kind of have
very different sort of performance effects
from like a video is just gonna be, you know,
fetched somewhere in the background.
- 12 megabytes of JavaScript, though.
- Yeah. - That's gonna slow you down.
- Yeah.
So, it is kind of strange like that.
But, yeah, it feels like it would be,
it would be quite fun in a way
to work on a really big app
that was just a sort of ongoing adventure.
I mean, we do have that bit, actually.
Our internal tools use Svelte as well.
- Is that something you work on as well?
- Some of them, yeah.
It's our publishing, the internal publishing system
that we use just for graphics uses it as well.
- Oh, cool. - Yeah.
But it's one of those things where
there's a whole load of urgent things,
and so it's always that kind of like,
which is the most urgent, and so that hasn't been
refreshing in a while. - That's the same.
I think that's the same in pretty much all business, though.
Like, it's always like a trade-off
of how well can we do it, and how fast can we do it.
And you have, like, business usually leans towards
do it fast. - Yeah.
- Which, in the long run, can probably slow you down a bit.
- I think also with internal tools,
you're kind of like, at what point,
you know, the goal is never the internal tool,
so the tool is to sort of enable something else to happen.
- But I find that it's nice to have the view
that there are, like, you have users
for your internal tools, right?
So they have to work, even if they,
obviously, like, maybe I'm contradicting myself now,
but like, they don't have to look as good
as the stuff that you put out in the public, right?
Because it's just a tool that someone is using.
But then, there's a nice feeling of using a tool
that, like, kind of sparks some joy.
So it kind of, I don't remember who it was,
but I think it was Josh Nussbaum,
he did a talk at Svelte Summit.
He said on Twitter, what was it, something,
I think I mentioned it before,
but like, how code affects your,
like, the quality of the code base
affects work-life balance.
Because if the code is bad, you go home
and you're tired because you've been thinking
extra hard about how to do something
that should have been easy.
So, I don't know where I was going with this.
(laughing)
I had some, I was gonna make some point, but yeah.
Let's move on.
(laughing)
It's just like a quote that I like,
'cause it's a thing that I've never thought about it
in that way, but it's very true.
Like, if you're working in a, well, all right,
so this was the point, like, if you're working in a tool
that is hard to use, then you're gonna be frustrated
and you're not gonna be happy working, right?
So, even if it is an internal tool, it is important.
- Yeah, now I think with it, it's like,
I mean, at the same time, actually, it's funny,
'cause design-wise, because we know it's internal,
it's actually, it's more like a thing to have fun, actually.
- Oh, nice, yeah. - Yeah.
'Cause there's a lot of design-y, creative people
on the team as well, so often it can be kind of like,
let's just ask them to do, submit something,
sort of fun icons or things like that.
But yeah, I think, yeah, it's a mix,
but it's kind of like, yeah, as you said,
there's always the sort of trade-offs as to where
you sort of are spending the time and energy.
- Yeah. - Yeah.
- Oh, should we make it look cool
or should we add this feature where I can,
that simplifies life for everyone?
- Yeah. - Probably the latter, right?
Do you wanna talk about side projects?
- Yeah, so, well, I was gonna say,
so I've mentioned already about that I did
that degree at Goldsmiths.
And so my, so it was weird, 'cause it started in 2019,
and so I was graduating during COVID,
and it was a strange time, because we weren't sure
if we were gonna have a final show at all.
- Oh, and it's very visual, I suppose.
- Yeah, so typically you have a big end of degree show,
and there's, I think back then there was about 80 people
doing the course, and I think it's now grown to over 100,
so it's quite a big show, and you're given a bit of wall space
or floor space, and people build all kinds of amazing,
sort of interesting, sort of artistic coding things.
And so yeah, so it was unclear as to what exactly
was gonna go on, and I was like,
well, and also with that, we didn't have as much ability
to go into the university and use the sort of lab
they have where it has a lot of sort of tools,
like the sort of laser cutters and printers
and things like that.
So I, yeah, so anyways, it's interesting, early in lockdown,
everyone was saying how they had these sort of
strange dreams, and I was sort of thinking about that,
and I have sort of quite strange and interesting dreams
as well, and so we were kind of like
in this little crit group, and we were sort of talking
through ideas, and so that was the sort of idea I pursued,
where I was sort of looking at how,
sort of the kind of ideas and sort of connectedness
within dreams, and are we, 'cause you often wonder,
or I wonder, is like, are we having the same dreams,
are we, or it's like, 'cause there's always that sort of
idea about where does sort of like consciousness
kind of come from, and where are we like that,
'cause it's sort of like, I mean, I don't know,
this all gets into all sorts of weird philosophical bits
about like the simulation hypothesis or things like this,
but we're having all these sort of like thoughts and dreams,
and we're like, where are they coming from,
and what are the sort of relationships?
- Even just like, what's the point of a dream?
- Yeah, it's all kind of strange like this,
and what was quite fun with this is you can take
quite a lot of the sort of skills that you have
from journalism, and applying them in an artistic context
is really quite fun, because you don't have to have
the same integrity, it's like in journalism,
you're always like, where does this data come from,
is it a sort of reasonable source, and all of this,
and in the art world, you're kind of given much more
sort of liberal sort of license to sort of play around
with things, so I scraped a whole bunch of dream
diary entries, there's a couple of sort of sites
which sort of have these, and it came to about
100,000 dreams, I think, in total.
- Oh, wow.
- And I used Word2Vec, which was that sort of,
it was issued by, I've forgotten the name of the people,
but they worked at Google, and it was one of the early
kind of sort of language models, and it's still, honestly,
it's kind of, it's witchcraft a bit to me,
how this even really works, in that you can basically
just feed in lots of text, and it just sort of,
somehow, there's sort of multiple levels of magic,
but somehow a sort of tokenizer is able to work out
what makes good tokens, so you're not explicitly saying
just split up space, it is able to sort of do more
cleverer stuff than this.
And then from that, it will work out kind of relationships
between words, and then you just get back these vectors
of the words, of the terms, and it absolutely does work,
where, I mean, you'll see this in these sort of explanations
of how does sort of word vectorization work,
where you can sort of, you know, you sort of,
they would say, like, take the word queen, and add male,
and you'll be the nearest node in the high-dimensional space
will be king.
- Oh, right.
- And they were sort of saying you could do things
like take the word Iraq, and subtract violence,
and you get Jordan.
- Oh, right, yeah.
- And so, it was really interesting with that,
so I basically, and it's nice because it was 100,000
sort of entries sounds like a lot of text as a sort of human,
but to these machine models, it's nothing really.
- Yeah, like these days as well, like how much data
are OpenAI or training their models on, yeah.
- And so I think I got it to output, I think,
at 100 or 128 dimensions, or something like that,
for all of the terms, so you get sort of a weight
for each term, and then, I'm trying to remember what I did.
- So you took the diary texts, and fed them into the,
and then you got tokens out.
- Yeah, and so I think I was using 100 dimensions
at the kind of, where it's working out the relationships
between them, and then there's an amazing algorithm
called t-s-n-e.
- What, what?
- T-s-n-e.
- T-s-n-e?
- Yeah, so it's t, lowercase, dash s-n-e.
I can't remember what it stands for now,
and it's a way of taking, of reducing dimensionality.
- Okay.
- So you can take these 100 dimensions,
and say reduce this to three dimensions,
and so it's kind of, it's sort of like you're taking
a sort of cosine difference between all of the values
across these high dimensions, and sort of reducing it,
reducing it, reducing it down.
- Sounds very complicated.
- It does, yeah, I mean it's again, very maths-y,
and clever, and it's, Google have a interactive form,
which is really quite satisfying to watch,
'cause you have sort of all these things,
and just a completely sort of jumbled space,
and then it sort of squeezes them,
and it looks a little bit like,
have you seen when starlings, or birds,
do those flocks, where they, there's a word for this,
what's it called, the word has escaped me.
But anyway, there's a special word,
where they sort of all fly around in formations.
- Yeah, yeah, I know what you mean, yeah.
- And so it looks a little bit like that,
and then it kind of like, it sort of flattens it out,
and it's like, and then it's resolved,
and then the sort of, you know,
the amount of change is disappearing.
So I used that to basically put them
into this three dimensional space,
and then used a lot of the D3 tools
for sort of geographic projection.
So I then projected it to this stereographic projection,
which is sort of how you would look at the nighttime stars.
So that's, it's a projection where basically
you assume you're in the center point of the Earth,
and you're kind of looking out for a sort of sphere,
which is effectively infinitely far away.
- So I'm looking at it right now, it looks very cool.
I thought it, like when I first came into the room,
I thought it was like, just an image of the,
like star signs and stuff,
like when I initially looked at it.
- That's good, that's the intention, really.
- Yeah, yeah, great success.
I'll try to take a photo and put it in the description.
- There's a blog post as well on it.
- Oh, nice.
- And yeah, so I used Svelte for that,
because again, it was just, I mean, I think,
so it's, being able to make components
just is such a huge sort of game changer,
'cause it's just so relative to, you know, how,
'cause I mean, it's like, I've been writing HTML
and JavaScript long enough that we sort of,
the backbone was a big sort of breakthrough.
- Right.
- Because it was kind of like,
that was sort of more like a sort of structure
as to how kind of things could depend on other things.
- How you could reuse things.
- Yeah, but I mean, and then we,
but we were still using D3, which I mean, D3 is excellent.
But the, I feel like the select kind of update pattern
is conceptually quite complex, it's very powerful.
And it's particularly powerful when you have
very sort of particular or complex kind of animations,
because you can sort of just select the piece you need
and kind of transform it in a way.
So it was both, but it is with that,
it's difficult to understand.
I think also it's, and that again is sort of partly again,
with going back to the sort of very early days of Svelte,
we had used D3 before for elections,
and it was working great, but we would get memory leaks,
because it was just harder to know what you were doing.
And normally on a graphic, it doesn't matter too much,
because you kind of like load the data,
do a big load of rendering, and it's done.
Maybe you have some little interactions
and perhaps they're leaking a tiny bit of memory,
but it doesn't matter that much.
Whereas with the election, it's like every 30 seconds or so,
you've got new data coming in.
And if that's causing the whole DOM to re-render,
but at the same time, you're like accidentally sort of,
you know, leaking memory on every single node.
- You're gonna have a bad time.
- Yeah, and it was things like that.
So you would find, it wasn't terrible,
but you could find that maybe after half an hour
or something like that, you would, Chrome would crash.
- That's half an hour isn't even particularly long, right?
To have something like that open.
- Yeah, exactly.
- Especially if you're like watching the election live
and you're like waiting for the results.
- So I think, you know, I think we, I don't know,
I don't think we had it as bad as that in the end,
but it was kind of like, it was evident that, you know,
we were having to spend more time thinking
about how our D3 sort of use was,
what we were doing and why we were leaking memory.
And it's felt, you just don't really think about it.
You just, you're just like, as long as you sort of,
you know, you do your mounts and unmounts correctly,
it's great like that.
- Yeah, unmount and unmount going away.
- Yeah.
- So I feel good about that.
- Oh yes, oh are they?
- Aren't they?
- I think you're right, they are.
- I think, I think.
- Let's, let's double check before we spread,
spread chaos in the, in the, in the podcasting world.
On mount, unmount, was it, what's it called?
Is it called unmount?
- No, it's destroy.
- Destroy, you're right.
I don't, I don't, I'm not finding anything here.
Maybe, maybe it's not going there.
- I think they're gonna stay around.
- Yeah.
I don't know, we'll see.
- Yeah.
- Maybe they, maybe it might be.
- In the long run.
- In lower case or something like that.
Who knows, it was a bit of a,
that's a sort of slightly strange thing
where on clicks, on colon click has become on click.
- Well, I mean, it is strange, but not really.
- Yeah, once, once you've.
- Once you've realized that, oh,
it's the HTML way of doing it, so.
- Yeah.
But yeah, so that's it.
So I use Svelte in a bunch of,
sort of side project creative things.
I think as well, maybe it is also I'm a bit of a person,
who just sort of likes having a structure
kind of already there for me.
- Yeah.
- Because I mean, ages ago I used to use Ruby on Rails.
And again, it was, I felt it was,
it was useful to have a kind of common structure.
And then you were like,
how are you deviating from this and why?
Rather than sort of, you know,
you get projects where every person
has just done their own sort of little cool thing.
And you're trying to work out.
- And that's very cool, but you don't understand anything,
right? - Yeah.
- It takes like six months before you understand anything.
- Yeah.
- But yeah, it's, that's why SvelteKit is so nice.
- Yeah.
- For me at least.
Like every time I need a new page or anything,
I just like initiate a new SvelteKit project
and I'm ready to go, right?
- I keep meaning to make my own personal website.
It's like, there's so many side projects
which I never kind of get finished.
I'm kind of keep saying,
I've been saying to a bunch of people,
I really need to just organize this myself
in a sort of low key way
about what we just have hackathons
where you're not allowed to start anything.
You just bring a project that you've been working on
and you finish it.
- That's a fun idea, actually.
I've thought about like, so back home,
I've thought about like,
'cause I wanna get a couple of people together
and just like in the space where we work on stuff,
but we don't necessarily work on the same thing.
It's just like a hackathon style thing,
but we just sit there and work.
I guess that that could be like a coworking space,
but then--
- Well, ages ago when I lived in New York,
this friend Michael Keller, we have this group
and it still kind of runs sort of in a sort of sporadic way,
which we named CSV Sound System.
And it was just us meeting--
- How does a CSV sound?
- Well, I don't know.
That was one of the funny things actually,
is we had this name and we for ages were kind of like,
as if at some point we would actually start making music.
And there has been a bit of that.
They did make, somebody made a thing
where they kind of audio-lized
the sort of US Treasury report or something like that.
There's definitely, there are projects out there
'cause people have sort of said about this,
there's quite a lot of projects where you can use Excel
and various other things as if you're making
like a sort of a beat tracking kind of thing.
But I mean, yeah, that was the name of it.
But it was quite nice in that we would just meet weekly
and it would just be kind of work on your side project.
'Cause I think there can be that kind of thing
where just in a space with other people,
you can be sort of productive in a way.
- And you like, you go there and you know that
this is sort of a social thing,
but it's meant to be like a work and like,
maybe you have food or whatever, but like--
- And 'cause I suppose also you both get,
it's interesting where you get direction.
People are kind of like, wow, that's really cool.
People like, I don't, it's clear
they're not quite understanding it, yeah.
- Why are you doing this?
- And things like that.
It was, I used to go to, I think I,
no, I don't think I remember anymore,
but the London Hack Space as well.
And that was one of the things I remember the most
is I was there and this guy came in
and he had like this great big long rope of LEDs.
And he, you know, you're like, oh, what are you doing?
He's like, oh, I'm making this like one pixel game.
And I'm like, oh, okay, yeah.
You kind of like talk through it and I'm like, yeah.
And I'm like, okay, yeah, that sounds kind of interesting.
Like he's a bit mad.
And then the next time I see it, I'm at the V and A.
- The V and A.
- Sorry, the Victoria and Albert Museum in London.
They had this exhibit on games and his game was there.
I think his name's Robert Balcoma, is it?
If you look for like one pixel, and it's really cool.
It's like when you play it, it's actually,
I've seen a talk as well, he's talked about it.
'Cause he actually, it's got this sort of big spring
that is kind of the controller.
So you're basically just, you control one pixel
on an LED rope.
- Okay.
- And you're just sort of moving along.
- Kind of like Snake?
- Yeah, and so there's kind of,
you're sort of having to go over like a sort of a fire pit
or things like that.
There's a lot left to the imagination
as to what these sort of obstacles might be.
But it's one of those things where it's just like
the sort of joy of the sort of interaction.
- Yeah.
- It's really cool.
But yeah, it's that kind of serendipity
and where you're sort of, and it's nice,
you know, where you, that sort of thing
where you sort of, I'm like, this seems mad,
and then you see it when it's finally done.
You're like, wow, this is really cool.
- Yeah, yeah, and he probably worked on that
at like that hacker space probably for quite a bit, right?
- Yeah, for ages, yeah.
He's also built this amazingly beautiful thing
with LED rings, a bit similar to that,
where there's a kind of, again, loads of these springs.
It's weird how, I think, because he just wanted a spring
as a sort of a bit like a joystick
and went down this enormous kind of rabbit hole
of like spring stuff.
A lot of his talk was about that,
'cause apparently there's some company in West London
where you can just make,
where they'll make custom springs for you,
which is what he ended up doing,
'cause he was like, none of the springs I could find
were quite right.
And, 'cause I think, is it Hooke's Law
or something like this?
I don't know if you studied this in physics,
but you know, there's a whole kind of like,
sort of early physics of like springs,
and it's the whole kind of interesting thing about it, but.
- I'm sure it's way more complicated than at first glance,
like everything in the world.
- That's it.
And, but yeah, just really beautiful interactions with LEDs
and making just sort of these lovely sort of smooth
kind of color transitions and things like that.
- Yeah.
Yeah, like having a space to go to work on side projects
and stuff like that.
That's a, it's a productivity boost.
It would be for me, at least.
- It's a tricky thing,
'cause I know the London Hack Space has been,
there's been sort of, I think, kind of political issues
and things like that with it and all of that.
But there's also, well, you know,
sort of like, it's one of those things where as it grows,
you know, you kind of,
like you can be a victim of your own success.
- I see what you're saying.
- So many people where they're kind of like,
oh, it should be going in this direction or that direction,
or you know, like.
And, you know, when it's sort of like,
when everything works where it's a nice community
and everyone sort of like puts in at least the minimum,
like more than the minimum effort that is required,
you know, things work well.
And then when people are sort of like,
and so it's also been difficult
because I think that this is one of the big problems
of where London has just got so expensive.
- Right.
- And so it's had to move around a bunch.
And so areas where it's,
and it is like,
you can't be that central.
- Keeps moving further and further away
from the center.
- Yeah, and so it's like, it's obvious,
the further it is, it's sort of like if it's in,
I think it's Northwest London now.
And so it's harder, it's very tricky
if you're in sort of Southeast or something.
But I mean, I think there are smaller ones have sprung up.
So perhaps that's, you know, the way in a way that is,
you know, there's successes that smaller other ones appear.
- Yeah, I think,
I don't know if you'd want it to be that big.
Like, maybe 10 people is enough.
- Well, that was the thing 'cause I joined pretty early on
and I can't remember what they topped out at,
but it was like, it was really scary
the way they were sort of something up
to something like 20,000 members or something like that.
- Yeah, oh wow.
- And you're like, wow, yeah.
- How do you organize 20,000?
- Yeah, but there's other fruits as well though,
come out of it.
So there's also, I don't know if it's directly related,
but there's also an EMF camp in the UK,
which is electromagnetic field.
And that's a really fun festival,
which is organized by John T,
who was one of the Hackspace founders.
And yeah, so that's like nerds camping in a field.
Actually, yeah, you were asking earlier.
- Wait, I think you were talking like last time we met.
We, I think you talked a lot about this.
- So yeah, that's really fun.
That's, this is the badge actually from that.
So every year they've been sort of giving,
I think, I don't know where this began.
I think it might've been,
there's some other sort of hacker related conferences.
I think it might be Black Hat or something like this
where you were kind of getting,
they started giving out chipsets as badges.
- I'll take a photo of this as well.
- So I don't know if it's got any power at the moment,
but the, yeah, so there's a lot of really interesting
sort of fun things like that.
I think actually as well, just going back to Svelte.
And there's lots of stuff with Svelte
where I feel like I would like to contribute more.
And it's like, it also looks like it is now quite complex.
I mean, it's always been like this.
And I think as Richard sort of said that there's,
one of the problems is it's like,
you're having to think about code that generates code,
which is just inherently quite complex.
But I think as well, there's like,
the docs are always really fantastic.
And I feel like there's things like that
because I know as well, one of the things
that I really liked early on was that we were using,
because we were using Svelte just,
'cause we just felt for the front end.
And so now we tend to use SvelteKit
and everything is very harmonious,
but I think there's still a lot of people
that are using PHP and various other sort of like static,
sort of the front end generation bits of it,
the sort of the static HTML.
And yeah, so sort of, I think keeping them
as part of that community is an important part.
- Yeah, there's been some work on,
like not by the Svelte team,
but by others where they've tried
to integrate other back ends.
So I think one was like the hackathon yet last year,
I think there was a Django thing.
I don't remember if it was, I think it was called DX Svelte.
Right, and it's basically lets you use Svelte
in your Django project somehow, yeah.
- I think that would be really good,
'cause I think a lot of people, it's quite easy to,
but it's strange, I mean, I go back and forth
about the sort of the take up,
because it's like Svelte is now definitely at a point
where it's got enough popularity and momentum,
but it's not kind of going anywhere.
- Right, yeah.
- And it's like there's, it's weird though,
it still seems, always, always,
that the primary thing people seem to argue about
is whether they like templates or not.
And they're like, oh, I don't like handlebar type templates.
- Yeah, but I mean that's, do you think it would,
like, how would you get away from--
- Yeah, I don't know if it would make that much difference.
Also, to some extent, I'm like solid JS,
and if you don't like, if you want to do it,
I'm like solid JS has lots of great features,
and Svelte has benefited from a lot of the thinking
that has gone on there too.
So, I mean, it's not like we want,
we don't want just one framework to be the winner.
- And that's kind of one of the,
the downsides, I would say, of Svelte 5
is that it moves closer to the other frameworks, right?
- Yeah.
- I mean, obviously, it's not the same,
but you're introducing effect,
which sounds a lot like the use effect thing in React,
I mean, sure, it's not the same thing,
but maybe you stopped using React
because you wanted to move away from that.
It's, to me, it feels a bit like,
even though I'm very excited about Svelte 5,
it feels like it's losing a bit of its simplicity.
I think we touched a bit on that earlier.
- Yeah.
- But yeah, I worry about that
rather than people arguing about handlebar stuff, templates.
Like, that's more of a worry to me
that people that have never once coded anything
in their life, picking Svelte up
and feeling rather than, oh, this is just HTML
and I don't have to worry about all this other stuff.
- Yeah.
- Suddenly feeling what is an effect?
- Yeah.
- What is a derived, like, what is this?
So that's one of my worries
that we're gonna lose that bit.
There was a, at Svelte Summit as well,
like a couple of years ago,
there was a talk about, I think a school in Norway
that was using Svelte as like a learning,
like to learn software development
because it was so simple to introduce to people
and you instantly get something on the screen.
- Yeah.
- It's so simple to get started with.
But yeah, that's one of my worries.
Maybe it's unwarranted, but we'll see.
- I mean, I think, yeah, we do need to see how it goes.
I mean, well, the thing is, it's,
the good news is that it's sort of,
it's maintaining backwards compatibility.
- Yes.
- But yeah, I think it might be that it's like,
to what extent does the,
it'd be difficult if the take-up of Svelte 5 is less
than we were hoping.
I mean, I'm not sure how the backward compatibility
is maintained as well as to whether it's sort of basically--
- I think the plan is to deprecate Svelte,
like the old syntax in Svelte 6, right?
So it is going away, but not yet.
- Yeah.
- There's, like, it also depends a lot
on what you're trying to build.
- Yeah.
- Because, so like I mentioned,
I only really use SvelteKit, right?
I let the load functions and the form actions handle
all of the, like the reloading of data
and like refreshing stuff.
For me, Svelte 5 is mostly just like I have
to write more characters, right?
- Right.
- But I mean, that's, we're talking about four characters
per state thing.
So it's not like it's a lot, but.
- Yeah.
- And in some places you save some characters
and it's also like it's, I guess it's more clear
what state is.
Oh, this is state, rather than just--
- Yeah.
- Some random variable.
- Yeah, I don't know.
I mean, I think, 'cause I was sort of saying
how that was at that creative coding meetup yesterday
where they had, we were looking at using p5.js,
which again is, I mean, that's a great introductory tool.
So that's a, it's a JavaScript fork of sort of processing.
- Oh, right, yeah.
- Maybe re-implementation rather than a fork actually.
And I kind of go, I'm not,
I think it's a great thing to learn.
I feel, and I think actually, honestly you could,
you could definitely do amazing big things with it.
And I think it's just because I've kind of come from
sort of other angles that I tend
not to use that sort of paradigm.
But they've done an amazing job as well
of like bringing in sort of really good libraries
straight into it so you can just,
which was sort of one of the demos yesterday
where you can just be like, I want a webcam
and put hand tracking and it's just your--
- It just works.
- Yeah. - Yeah.
- And that kind of thing.
- That makes it very easy to get started
and actually build something that's interesting
rather than like, oh, this box changes color
when I click on it.
- So I'm thinking it might be though,
to some extent with that, that it's,
in which, so I think that still could be
that the direction is that Svelte is,
'cause you want to build the most kind of
sort of valuable and best written sort of like thing there.
And you could always be like,
let's make a sort of subset and easier
sort of idea of it, which is more,
if there is that kind of thing
of like where people are wanting to kind of--
- Yeah.
- I think I agree with that.
There's people who wanted to build incredibly big,
complex web apps, sort of huge sites,
because even without the graphics that we build,
they're complex in their own way,
but it's not, there's a sort of a different level
'cause there's not that much sort of statefulness
and things like that actually going on.
And then yeah, there's people who are sort of more
where you're just sort of,
you just want to code your own website,
but have sort of a lot of control.
- Yeah.
- So I don't know, I think it would be hopeful
that we can sort of tune it to those different needs.
- I hope so as well.
I don't want the case to be that like,
I just don't want people to like pick it up
and then put it down because it looks too hard.
- Yeah.
- And it is also the case that like Svelte 4 is,
it looks easier probably than it is.
Like once you start using the reactive statements,
then it gets a lot more complicated
than you might think at first glance.
- It's funny actually though,
'cause I know that there's sort of,
I've seen those sort of long,
which is I guess what sort of triggered
the whole sort of change in a way,
where there's a few issues around how,
I mean, I think sometimes it's just a bit
in terms of what's going on,
where there's about three different ways
of making something reactive.
- Yeah.
- And they generate quite different code,
even though sort of on the conceptual level,
they look very similar.
- Yeah.
- And then there's also where people kind of use that
in a particular way, 'cause it's kind of,
and to what extent you could sort of say it's not exactly,
I mean, there's kind of like, there is the API.
So within that, it's a valid use of the API,
but you might be like, well, I wouldn't do it that way,
but whatever it is that people have done.
And then because of that,
they've ended up with sort of behavior
that is not as they expect and is also is incorrect.
- Yeah.
- And it's hard to know really with that.
I mean, you could kind of be like,
well, maybe if you took the app
and you would sort of rewrite it in a different way
and that behavior could be eliminated
through other sort of design choices.
But it feels like those problems are real.
And so that is where I think that 5 has a sort of
consistent sort of approach to things,
which at least it doesn't mean it eliminates those problems.
It just means that they'll be consistent.
- Right, yeah.
- And I think with that--
- Consistency is great, by itself.
- It is, yeah.
But I think with that as well,
it's weird because I think we may now find as well though
that yeah, the effect sort of ruin
is where strange things will be put into there.
- Yeah, people would just use that for everything,
even for things that should be derived.
- Yeah.
- Probably is my suspicion.
Like they're gonna be like,
why should I use derive when this thing--
- Yeah, 'cause they'll be like,
this thing isn't doing it when I expect
or just stick it in here.
'Cause I mean, essentially that is I think the algorithm,
the internal sort of thing that I think.
- Oh, for sure.
- Something isn't working,
I'll stick a dollar in front of it.
- Yep, yep.
- And actually it's weird how much we found at work
where things that needed a dollar
that we weren't expecting to.
- Right.
- And that's much more with SvelteKit
that it's quite easy to forget
that you have this sort of bit of data that you've loaded.
- Yep.
- And you think, oh, this never changes,
but it does because you're sort of,
when you're going from a page to a page.
- Yeah, when you go back and forth and--
- And things like that.
Or if you're invalidating data in the function,
like then it reloads
and then maybe you accidentally de-structured the data prop
into like, you know, const,
what could it be, like a posts equals data.
- Yeah.
- And then, oh, you realize now it doesn't update
because I didn't put a dollar sign in front of the...
Those kind of gotchas are going away though, right?
Because in Svelte 5, the data is a ruin, right?
So it'll be fine-grained, I think so at least.
I'm pretty sure that's the case.
So you can do stuff like that.
- Actually, one of the things I don't know,
and I'm always keen to ask questions
where like you shouldn't hold back
just because it might make you look stupid.
But does fine-grain, like, 'cause you have your template,
if, is it able to...
So I guess it's like it still is attempting
to render the entire template,
but it is able to sort of be like, as it's going through it,
it will say, well, this hasn't changed
so we can shortcut going over that.
But it's not like it's kind of like,
if this variable sort of maps to this bit here
and that bit maps to there,
it's all still kind of one function.
So it's still doing everything,
but it's able to skip the bits it doesn't need to do.
Is that the model?
- That's a good question.
- I should find this out.
- I don't know.
I know there's like one of the...
I think it's in the first blog post
when Rich announced runes, there's a video as well.
And in that video, he shows like a list
where using Svelte 4, and you open,
I think he opens the, what's it called, the inspector.
Oh, no, wait, he does something to show
that like the whole list re-renders in the old version.
And then in the new version, it's just the bits that,
I forget if he logs it or it's, wow.
- I think he flashes, he has a--
- Yeah, that might be it.
- There's a use, I think, which is kind of like
when this thing is it, you just play an animation to it, yeah.
- That could be it, that could be it, yeah.
I'm not sure.
Yeah, exciting times.
- Yeah, actually I find it's quite often as well,
it's like, if you think you might need,
or you could use another component,
it's often good to do it.
Components, just the way I work and sort of have seen it,
that you get components that are too big.
And it's very often as well, things I've found as well
where it's much easier to solve it,
because the point at which the component
is instantiated as well, it sort of,
it's then sort of encapsulated the whole thing.
And sometimes, yeah, I mean, like applying a,
you know, a, what is the damn store called?
Where Spring and all of those things,
say tweens and things like that.
But it's actually, it's much easier often
to break that down into a much smaller thing
where you're like, this is just the tweened version
of this little tiny bit of DOM,
rather than ups, you know, in the parent one,
trying to sort of like put the tween in there.
- And then complicate all the logic, yeah.
Yeah, that makes sense.
- 'Cause you're just like, this is it.
And also, 'cause you know when it's kind of like,
this is it when it's created,
and, you know, so you know that you usually
don't want a tween on the initial value
and things like that.
- Right, right, yeah.
- Yeah, so there's bits like that where,
I mean, I know as well that people complain about,
'cause I haven't really used React,
I don't know about the joys of this idea
that you have all these sort of templates within one file.
- Yeah, I mean, I used to work in React,
and I hate that.
- Oh, you didn't like it, yeah.
- I absolutely hate it, because the files are so large,
and I know, like, yes, you can search in the file,
you can go between methods easily and stuff,
but it's just like that mental overload
of just seeing so many lines of text.
- Yeah.
- It's--
- I get really stressed once there's more than 300 lines.
I don't know how some people do it, but--
- Yeah, I mean, 300 is a lot, in my opinion.
So, I mean, I try to keep 'em small.
It's subjective, right?
- Yeah.
- Like, if you like it or not.
I think it's preferable to just have one component per file,
because it's clear.
- I suppose you're saying the difficulty of, like,
naming it and sort of how much of your structure.
I know this person at the London Spelt Meetup,
I think, how many did he say?
It was like up to 170 components or something like that.
- Right.
- And I was like, that does sound quite a lot to manage.
But, I mean, it sounded also that they were, like,
using on every, almost every element,
you know, sort of like an H1 and H2 title
and everything like this was their own, and I'm like--
- I don't know if I'd do that.
- Well, I think, were they possibly using MD Specs as well?
'Cause I think there's--
- That could be the case, yeah.
- Where they were sort of trying to overwrite
their own sort of logics onto it, but, yeah.
- Then it makes sense.
- Yeah. - For sure.
- But, I think even with that, you just have to sort of
structure them into folders carefully and, you know,
there's probably a bit more refactoring goes on with--
- Yeah.
- To keep them nice.
- All right, so we've been chatting away for a bit.
Is there anything that we've missed that you think
we should talk to or do you wanna move on to the spicy bits?
- Yeah, yeah, do the things.
- All right.
- So, unpopular opinions, I told you before we started
recording that you could bring up an unpopular opinion
if you wanted to.
- I don't know if it's unpopular, it might be quite popular
even, I think it's often the way it goes, it's a rant.
I think CSS just shouldn't exist.
- Wow.
- I think we've been doing it wrong.
- Kind of wild opinion.
- Yeah, well I think we've just, so it's also going way back
in time, there was the CSS Zen Garden, and for me that was
the philosophical kind of direction we should have been
going in, where you would write your HTML in a kind of way
that made sense to the content that it kind of was wrapping.
I mean, the big, the huge caveat to all of this is that
the web has become so much more like apps
rather than documents.
But yeah, still I think with that, I still think that
if we could talk to the people who make browsers,
the actual developers who are absolute magicians,
I don't know how it's all done, but we have all these kinds
of really complex layers and sort of hierarchies and rules
about, you know, style tags and the sort of important tag
and all of this, and it's so complex, and it's like even
just knowing what those specificity rules are is so mime.
- I mean, it's a job in itself of knowing CSS properly,
right?
- And then there's, I know they've added, I've forgotten
what they're called, is it Layer now as well,
where you can kind of do that as well?
And so--
- I think you can even type CSS variables now in Chrome.
- And so that's it, it just feels like it's, as a language,
it's got so complex, and we, and it's for designers,
we want to be able to design things in a nice way,
and I think it would actually benefit us if we were
just writing, and I think the browser could maybe help us
while we're having a sort of, or if we had a sort of more
sort of like standard, this is the way things are kind of
looking, and you're just doing it, and then it's much easier
to just apply style, and I think that would be much better
as a browser tool, and I think it would also then,
it could just write it out as a binary format.
I mean I don't know, 'cause it doesn't really feel like this,
the syntax is weird and complex and confusing.
- It's very different compared to anything else, yeah.
- And--
- Did you see the JavaScript framework
that is made to look like CSS?
- Oh dear.
- It's called a corset, it's cascading binding sheets.
- Okay.
- Reactive UI without the complexity of SPA frameworks.
- Okay.
- Maybe something to check out if you like CSS.
- But I think that's the kind of, I think there is a,
I think this could happen somehow.
I think we'd need some browser genius
to write a kind of be like, to just sort of like,
at the level at which style sheets are actually being applied
to be like, look at a format that would make more sense
to the browser, and just extract that out,
and then build from the browser a tool for making that,
and then you would just add it on, 'cause I mean,
that is the thing, is we've always had it where it's like,
you know, type equals CSS or something like that.
We could, if we could find this new format,
we could just be like, let's add another link tag
that is type of some better style sheet.
- Style.
- Yeah, and it was just like, if that exists,
just throw away the CSS and use that.
And I think that would actually lead to us
writing better HTML.
- Yeah, 'cause that's often an issue that people have,
like they're trying to write something
that looks in a certain way, rather than focus
on the structure, and the structure is important
for people that--
- And it's interesting that we have--
- Use the structure.
- There's been a bit of this with sort of Bootstrap
and a few sort of other things, but that we don't have
kind of globally shared kind of CSS as well.
I mean, I also remember that very, very early days
of Firefox, in fact, I think they've removed this now.
I'm not sure, but you know the way you could
specify multiple style tags as style sheets,
and give them, say that they were alt,
and give them a sort of title, and then Firefox
actually had somewhere in one of the menus
where you could be like, let me just do this.
So this was an early way of doing themes.
So it was weird, 'cause that was so, so long ago.
And then it sort of has slowly come back,
where suddenly, you know, it's weird that,
I feel like that's why I say about the CSSN garden,
because it feels like so ideologically,
it was kind of like, this is one piece of HTML,
but we can make it look so different.
And it's taken sort of decades now.
It's been like 20 years ago, I think,
the CSSN garden came out, maybe more.
- Yeah, so it's pretty--
- And it's like, it was, all the ideas
have kind of slowly sort of come to fruition.
It just feels like, a lot of companies
have just been forever trying to be like,
we just want to make it like a PDF.
You know, their whole goal has been like
to control exactly how it looks for everything.
And then it's been like, well, you have to make it
sort of, you know, for ages they held out
on making sort of flexible designs.
And they were like, we're just gonna make it,
you know, 1024 wide, or something like that.
And they know--
- We'll never have other screen sizes.
- And then to mobile phones, really,
that absolutely wrecked that.
And they're like, you've got to have mobile
and desktop now.
And then, you know, now there's sort of
light themes and dark themes.
And you're like, and I mean, it's also sort of
all of the ideas with accessibility
and things like that also come through.
And it feels like it would just make,
I mean, it's absolutely, it's not an easy thing.
So I'm not saying, like, CSS is really complex.
And it feels like with that, it's like
people making beautiful style sheets
that could be much more reusable across sites.
You know, it's like, it's actually the sort of
preciousness about design.
I mean, I can understand, 'cause obviously
you want things to look really good.
But I feel like there's, I mean,
it would be interesting to talk to a designer
about this, because I think that they would
also have this kind of thing where they do,
a lot of designers are like, they like actually
having a sort of a shared kind of--
- Like a design system?
- Yeah, a whole system like that, and that's it.
And I don't think CSS really does that,
because it's kind of--
- Yeah, it's--
- Or you need tooling on top of it to make that happen.
- Yeah. - You know?
- Yeah.
- 'Cause it's like, and you see this a lot where
the cascading, 'cause it's a cascading
that doesn't really work.
- Yeah, super complicated. - It sort of flows down
with complex rules that are not easily understood.
- And then you just smack an important on there, and then--
- Yeah, and so there's this kind of like,
the systematic way, so I think it'd be like
how to sort of like merge those three things together,
where it's sort of like, we're writing good HTML,
you have a sort of design system that makes sense
to designers, and then a sort of format
that can actually efficiently sort of encode this,
and an editor for controlling it.
- Yeah.
- So that'd be my big wish.
- That's a--
- Sort of controversial thing.
- I do wonder how controversial that take is, though.
Like, a lot of people do not like CSS,
but I think a lot of people do like CSS, so.
- Yeah, I think if someone, there's some amazing hacker
out there who could build this,
or maybe it already exists and I don't know about it,
but it's kind of like, perhaps it starts as a plug-in,
or someone does it as an experimental thing.
- I mean, I know there has been, like in some frameworks,
there have been attempts at doing something like this.
I think in, if you're familiar with Elm, Elm Lang,
it's a JavaScript framework.
- I've heard of it, yeah.
- It's like a 100% fully functional style
programming language for the front end,
and I have some vague memory of them doing,
doing styling in a very particular way.
I don't remember what, though, so.
Let's see if I can find some, some example here.
This is great content for the people listening,
just listening to me browsing the web over here.
No, I can't find an example, but anyway.
I know there's been some attempts of doing,
like, another style of--
- I mean, I guess that's the thing, is that you,
I suppose a lot of the frame, the sort of systems
and frameworks we have for CSS, in a way of sort of trying
to achieve something like this, by sort of then writing
their own sort of language, sort of,
which is then turned into CSS, and that probably,
to some extent, I imagine that might be the best way to go,
'cause it means, like, maybe, I don't know whether
hacking into the way that the actual,
the way it's represented within the browser
would make sense.
Also, I have no idea if browsers represent it
in the same way between them.
- Sure, right, yeah. - Or possibly not,
I don't know, it's-- - Yeah, I have no idea.
- All right, that's all I'll take.
So my unpopular opinion is that ORMs are not the way to go.
The title here, for my unpopular opinion, is ORMs are shit,
just use SQL, but it's, I don't know if I wanna go that far,
but, so ORMs are, I generally always find them to be,
so for those that don't know, an ORM is,
I think it stands for Object Relational Mapping,
is that right, yeah, and it's basically an abstraction
on top of either SQL or some other database,
and it's supposed to help you interact with your database
in a more convenient way, like handle writing common,
like doing common things, like getting something,
like a row from the database, or updating something,
or deleting something, but I always find them to be lacking
in some way, so I always have to write raw SQL anyway.
- How often though?
- I mean, pretty often. - Really?
- And then also, I often find myself doing,
so for example, on the New Svelte Society website,
there's a, so I'm using SQLite, and the search is powered
by a SQLite extension called Full Text Search 5,
which is relying on a virtual table.
And in the ORMs that I've been using,
I can't do anything with virtual tables
because the concept doesn't exist.
So that's one limitation.
Sure, I don't have to do that much work
with the virtual table or anything,
but still, just like having to,
like in, so for example, I was using Drizzle,
and then you define your table in like a JavaScript,
like const users equals Drizzle, blah, blah, blah, blah.
You define the columns and stuff,
but then there's no way to do it for virtual tables,
so then I have to write SQL manually anyway,
and then have to manually enter, make it,
like go into the database, for example, and.
- So I mean, back in Rails days, it had Datamapper,
and I was like, oh, I love this,
'cause I did use to write SQL, and it's also where,
there was, I mean, that was also, there was back then,
SQL injection was a huge risk and problem,
and I think it still is when you're,
it's easy to accidentally do it.
- I think if you do it correctly.
- Yeah.
- But that's the thing, right?
But I also think that the tools nowadays are a bit better.
- Well, there was also, I mean, SQL injection
was like the easy bug in some ways,
but there was also a big problem where,
say for instance, where people would do things
where it's like find orders for this customer ID,
but they were kind of, they weren't always checking
that the customer ID that was being sent for that
was the same as the logged in person, and things like that.
- You get someone else's orders.
- Yeah, and so Rails, I think,
made a lot of those sorts of things
where there was sort of a lot of examples on that,
but also sort of making it easier to be like
sort of adding on kind of relational kind of mappings
like that.
- No, I, so, to be clear--
- Search, text search is a bit of a strange one.
I mean, it's like--
- It is, yeah.
- Bit of me is kind of like, well,
you could just use Solr or something like that anyway.
- Well, it's one example.
Another one would be like Triggers in SQLite, for example.
Can't write that in an ORM.
- I don't know if you can, well, also I use Prisma,
and it's very--
- Like, I love the way that you define tables in Prisma.
Like, I really like it, it's much cleaner
than the SQL way of doing it.
But yeah, and then there's, like,
you're relying on them implementing everything correctly
and like mashing together the transactions correctly,
and then you end up in some weird bug.
So I recently stress tested the Svelte Society website,
the upcoming one, and I added, I think,
two million rows into the database,
just to see, can I actually fetch stuff
without lagging the website?
And it was very easy to do that.
And with SQL, I had more control.
I could do, like, explain query plans.
I could see, like, oh, how does the SQLite engine
actually think about this, and what's it gonna do?
Oh, I need an index here, so I'll add an index,
and then fix, like, the performance issue I was having.
Stuff like that, hard to do with an ORM.
I mean, you can obviously, like, combine,
but you don't really know what the ORM is doing, right?
Under the hood.
- I don't know, I'm pretty happy with Prisma.
I mean, I feel like I do, you can ask it
to print out what it's actually doing.
- Okay, yeah, oh, that's good, that's good.
- So, I mean, I think also because of the,
I mean, because of the typing as well, it's nice.
- Yeah, the typing is a big one, yeah, for sure.
- But there have been some strange things.
I mean, I know, 'cause Prisma has its own kind of model
around, it's been a little while since I've used it as well,
but it was kind of like, it has its own model
around how transactions happen.
So I think there might be some things
where I've kind of been like, well,
based on, you know, this is an internal app,
and we've only got a few thousand people tops using it.
The chance of like, in that tiny millisecond
between, you know, you've kind of committed this thing
and then you go and fetch it back or something like that,
you know, it's changed.
Whereas, you know, as a purist, I would be like,
there's probably a way to write this in a single transaction
or something.
I don't know even that, did I mention it?
I can't remember, but certainly there, yeah,
the transaction model is slightly different
because it has to sort of map across different databases.
So--
- I mean, that complicates things quite a bit, I guess.
- Well, I feel like I might have to look at it again
as to whether there is actually, whether it was,
I can't remember whether it was an actual problem
or it was just that it was kind of different
from how I would have done it if I didn't have Prisma.
- Right.
- But I'm not aware of any problems occurring
as a result of it ever.
But I see what you mean.
I mean, I think it depends how much kind of crud-like stuff
you're doing, 'cause I mean, some people,
you have those kinds of things where you're just like,
you've got loads and loads and loads of tables
and you're like, oh, the thing is just about shunting it
back and forth.
- Right.
- And that kind of thing.
So just for the sort of like, typing alone.
And then also, migrations are really,
I think they're quite nice, generally.
- I don't think they're too hard writing yourself.
- Yeah, I mean, I'm not saying, I think,
you can definitely be too small for an ORM to be worth it.
- Yeah.
- I mean, or I think, well, back with Rails as well,
because it was built in and so you were just kind of like,
data map was just there and you just used it.
- Yeah.
- And there was, I think Rails had a really good sweet spot
for, I mean, actually, it's interesting,
because SvelteKit hasn't really kind of gone in
or taken any particular opinion, I don't think, on this yet.
Or maybe it won't do, I think it probably won't.
- I think it will.
- Oh, you think it will?
Oh, okay, well, that would be interesting.
But because there was that sort of thing with Rails
where your sort of initial scaffold would be kind of like,
it would make a little table that was sort of editable
and sort of mapped to a database table.
- Yep.
- And that does cover an awful lot of kind of apps
where it is just kind of taking things in and out of a table
and sort of validating them at some point
and things like that.
So yeah, I think Rails is still going very strong as well.
I mean, I think there's a sort of an alignment there,
actually, in that Rails never became a big,
a dominant kind of player, but it was very influential.
- Then you have Laravel, which is pretty big, I think.
- Well, to be honest, Rails probably is quite big.
- It's hard to know, yeah.
- I think it's bigger than we think it is.
- It's just very hard sometimes to estimate
how much these things are. - Yeah, I agree.
- 'Cause I know as well, I go to, I don't so much now,
but I used to go to an awful lot of hackathons.
And it was always like, it was through the Rails community,
so I was always going along.
It was all these sort of like other people doing Rails
and stuff like that.
And we'd meet people who were doing Python and Django as well
and sort of like go back and forth a bit about that.
But it always felt like it was probably the same people.
And then sometime I went to this hackathon at Microsoft
and it was all these people who were doing .NET.
- Yeah, yeah.
- And they were just, they were so different
and we'd like knew nothing.
We were just like in totally different sort of like
what you were thinking about and their approach to stuff.
It was weird it made me realize how, you know,
the differences between what we were talking about
with the Python people was so minor relatively
as to how we were sort of approaching things.
- Yeah.
Yeah, no, I mean I, maybe I should give ORMs another chance.
I do not like them though, but.
- Yeah, oh, so you've been using Prisma?
- Yeah, for a bit.
Prisma and then Drizzle.
- I haven't tried Drizzle, so.
- It's similar, but yeah.
- Maybe, I don't know, maybe I need to be
doing weird things with them so that I start to hate them too.
When you realize what you can do with SQL, wow.
- Yeah, well.
- I mean you could do field validation in SQL, right?
And raise exceptions.
- You can also do some really weird things in SQL.
- I mean that is very weird to do field validation
and raise an exception at that, yeah.
- But even just like,
some of the databases support it natively,
but like trees in SQL are really weird.
Where, you know, you're kind of like being like,
well I want to sort of select all of the sub-trees of this
and people can do these really bizarre queries
and kind of do it and sort of flatten it all out
and bring it back.
But you're like, it's just.
- Unreadable.
- Yeah, it's, I mean, I think 'cause I know for a while
Oracle was one of the few that did support
this sort of idea of trees, but I bet Postgres does it now.
- Probably, I feel like Postgres supports everything now.
- Yeah.
(laughing)
- You know, I never really,
so the thing about using SQLite
is that you kind of escape the N plus one problem
where like, you know, in a client server paradigm
you have to go back and forth over the network.
Even if the server is local on the same server,
you're still going through the network
'cause you're, that's how it works.
But with SQLite, you just have a file
and you can just like write.
- Oh, 'cause you're just going through.
- Yeah, you can just write very small readable queries
and just like do it sequentially
and you'll see like, oh, I'm getting the content,
I'm getting the tags for the content
and I'm putting them together or whatever it might be, right?
So maybe that's a reason why I don't feel like I need ORMs
because the queries that I write are very, very simple.
- I think as long as you're not having security problems
then it's probably okay.
- Yeah.
- And you could, I know there's definitely tools,
sort of lighter weight tools which will kind of ensure
that things are escaped and things like that.
- Yes, yeah, yeah, I think most clients do that now
if you use it correctly.
- Yeah, yeah, 'cause I think that was the scary thing
where people were just concatenating strings
in kind of bad ways. - Yes, yeah.
- And yeah, I've definitely made some bugs like that
in the past and definitely found some and things like that.
- We'll see when the new Svelte Society website goes live.
We'll see how long it takes before we're hacked.
- Okay, all right.
But yeah, all right, Pix, do you have one?
- Wait, I forgot now, I was trying to think of something.
Do you have one?
- I was gonna say SequelLite,
but I've been talking about SequelLite for so long now
so I'm just gonna say London.
It's a very nice city.
I like coming here, it's great.
- Well, this is a technology one which is interesting.
It was at the London Svelte chat and I've forgotten his name
but I've only just, it is a public repo
but there's this library called GUI, G-O-M-E-Y.
- Oh, you're talking about Brady?
- Yes, I said Brady's and I really like it.
So it's a kind of sort of thing for fiddling around
with the properties of things.
So I've been using Svelte tweak pane previous to this.
Well, actually let's say I'm still using Svelte tweak pane
'cause I've only looked at GUI and been like,
oh, this is interesting. - Sorry, what's Svelte tweak?
- Tweak pane. - Tweak pane, all right.
- So I would highly recommend Svelte tweak pane.
There's no, but he had been using that
and it was essentially, he has some very, very fancy
kind of audio and sort of visual kind of,
the tools that he's built and sort of that,
he needs a lot of kind of custom and sort of complex
kind of abilities to tweak it.
So I mean, also I'd say to any of the listeners
that it's a bit like if you've used DAT GUI,
which was a popular thing that the Google Data Arts team
made, but it's one of these sorts of things.
- So like digital audio converter, DAT?
- I think, I don't know what it stood for.
I think it might've just been like DAT.
- Is it D-A-C? - Yeah, D-A-T.
- D-A-T, oh, oh. - Yeah, I don't know,
like that, I don't know whether,
or maybe it did start for a digital arts team, maybe.
It's probably a digital arts team.
- I misheard.
I thought you said DAT, like a digital audio converter.
- I don't know, I think they also copied it
from somewhere else, but it's one of these things,
you know, where you see in a lot of languages
and programming things where sort of the ability
to tweak the values of things.
And yes, I've felt tweaked pain.
I love, use it a lot, but I will be investigating GUI
because it looked, and particularly as well,
because I have reached, which Brady was saying,
that I've reached that point where it's sort of,
sometimes I'm like, I want to make my own
interfaces to things, like it was a thing
where I wanted to have a sort of weird sort of
change in your relative position in time.
- Right, right. - And things like that, yeah,
'cause, you know, all the problems with times and time zones.
- Oh, right, I am very well aware of time zone issues.
- Actually, that was an interesting thing
which I probably don't know enough about yet,
but there was that proposal, or maybe it's even more,
is perhaps a further stage than that,
but the sort of new JavaScript,
sort of time and time zone combined.
- Yeah, it's called Moment?
No, that's the library. - Oh, sorry, that is called--
- It's called a-- - Temporal.
- Temporal, that's what we're doing.
- Yeah, 'cause actually, interestingly,
other colleagues at Bloomberg worked on it.
I don't know which ones are,
but they were the others on the initial proposals.
But yeah, it does, it's definitely something
that has been quite bad in JavaScript,
so I look forward to better things.
But I mean, a lot of it as well is just,
you realize how fundamentally complex
time and time zones are.
- Yes, yeah, and the fact that there are, like,
time zones where the difference is like 15 minutes,
or 30 minutes, instead of an hour, which is what you--
- Actually, this would pop into the controversial things,
which I need to understand somebody,
to talk with someone who understands it better.
But you know there's also this problem with leap seconds?
We did a graphic on this ages ago.
And so, 'cause we've been adding leap seconds a bit,
so I can't remember how, they'll be, like,
15 seconds ahead now, or something like that, of UTC.
But I'm like, one of the things I wondered is,
can we not just put,
why can't we just let the leap seconds
be applied to time zones, or something like that?
It feels like, 'cause time zones are already weird,
so it feels like it would be better--
- Just put the weird stuff in the time zones.
- Yeah, and then to just be like, UTC would just,
I mean, the thing I've realized now is they're saying
they can't really get rid of the 15 seconds either,
so there's this, like, gap between UTC
and the POSIX time step.
- Isn't there something about leap, the leap,
there's something about, like, how,
if we would have made the year 13 months and 28 days
or something, then it would just have been, like,
perfect, something like that.
- Oh, really?
- Yeah.
- Well, at some point it's kind of a problem, isn't it?
'Cause the Earth is slowing down.
- Well, sure.
- 'Cause there's some examples, like, half of it,
they were like, this was to theoretically
please astronomers, and astronomers are like,
oh, we don't use any of that anyway,
because it's completely--
- Right, it doesn't matter.
- They do something a bit like POSIX numbers anyway,
just with their own atomic clock.
- Like SI unit, but for time or whatever, yeah.
- But it's interesting with alternative calendars.
I mean, it's interesting, actually, a lot of those,
there's support for other calendars in,
already, I think, in JavaScript.
- I mean, there are other calendars, right?
You have the, like, the, is it Arabic or Islamic calendar
or something like that?
I don't remember what it's called, but.
- But yeah, and we're not really,
I don't know how many people
were sort of organized day to day on those,
'cause as I understand as well,
this is sort of a weird sort of Wikipedia dive
from ages ago, but the Kodak Eastman company
apparently internally used their own calendar system
until, like, the late '60s or something like that,
and you're just like, wow, that must have been so strange.
- That's wild.
- That you would go to work,
and there would be 13 months at work,
and there's only sort of 12.
- Does that mean, then, that maybe,
maybe there were a lot of different calendars
that people were using that weren't, like, standard?
- Yeah, quite possibly, yeah.
- It was just like, oh, at this company,
we used this weird calendar because.
- It feels strange that we haven't,
it feels weird that if Kodak were kind of
trying to advance things, they were sort of like saying,
this is, we think that this calendar
is gonna be better for our business needs
or something like that.
I mean, I suppose with that, we've found
that it's very hard, an improvement
has to be really significant to be worth
the kind of costs of the adaptation.
And I think also the trouble with it
is it's like, it's unfamiliarity with it.
And because I, with that, I mean,
I'm like the kind of chaotic person
who could be like, let's change everything.
I'd quite like us to change to a dozen
or a number-based system instead of decimal.
But I think that one's really fun now.
- Yeah, that's probably not gonna happen.
All right, and on that note, I guess we're done.
Unless you have something else.
- No, I think that's a perfect way to end it.
- All right, it was great having you on as a guest.
Well, actually, I'm at your place,
so thank you for having me.
- neutral guests, yeah.
- And to all the listeners, you will find
all the links in the show notes,
and I will see you again next time.
Not, probably not next week, but next time.
Bye bye.
- Hey, it's Kev here.
If you like the show, please drop a review
on your favorite podcast player, it would help out a lot.