Podchaser Logo
Home
Nuxt JS with Anthony Fu

Nuxt JS with Anthony Fu

Released Wednesday, 8th May 2024
Good episode? Give it some love!
Nuxt JS with Anthony Fu

Nuxt JS with Anthony Fu

Nuxt JS with Anthony Fu

Nuxt JS with Anthony Fu

Wednesday, 8th May 2024
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

Vue is a popular JavaScript front-end framework,

0:02

and Nuxt is an open source meta-framework

0:05

on top of Vue. Anthony

0:07

Fu is a framework developer on the Nuxt

0:09

team. He joins the show

0:11

to talk about Vue, Nuxt, open source

0:13

development, and more. This

0:16

episode is hosted by Josh Goldberg,

0:18

an independent full-time open source developer.

0:21

Josh works on projects in the

0:23

TypeScript ecosystem, most notably TypeScript

0:25

ES Slint, the tooling that enables

0:27

ES Slint and prettier to run

0:29

on TypeScript code. Josh

0:31

is also the author of the O'Reilly Learning

0:34

TypeScript book, a Microsoft MVP

0:36

for developer technologies, and

0:38

a live code streamer on Twitch. Find

0:41

Josh on Blue Sky,

0:44

Mastodon, Twitter, Twitch, YouTube,

0:46

and.com as joshuaKgoldberg. Anthony,

1:02

welcome to Software Engineering Daily. How's it going?

1:05

You're having good. Thanks for having me. Oh,

1:08

and it's our pleasure. Could you give the

1:10

audience a little introduction? Who are you and

1:12

what's going on? Yeah, sure. So

1:14

my name is Anthony Fu, and

1:17

I work for Nuxt Lab.

1:19

I'm kind of really active. I'm

1:21

a very enjoying doing open source. So

1:23

as for the title, I'm the coding

1:25

member of Vue, Vue, and Nuxt, of

1:27

course. And then I

1:29

made some open source project.

1:32

So I made no testing

1:35

framework VTest and CSS, framework,

1:37

Windows CSS, and

1:39

a slide maker for that, that you

1:41

use Markdown to do the slides, which

1:43

called Slide Dev. And

1:46

yeah. That's quite a few projects.

1:48

How often would you say you start a new

1:50

project that's open source? I think

1:52

it depends on the scale of the project,

1:54

right? So it can be a

1:57

small library, where that it can be a few

1:59

lines of code. So it can happen every

2:01

week, I guess. But for a big

2:03

project, it's like, I would love to do more. But

2:06

it really depends on when you

2:08

got the inspiration. So not often, maybe

2:11

one or two a year, I think. Sure.

2:14

Only one or two big projects a year. It's not

2:16

that big, I guess. Let's

2:18

take a step back, though. How did you first get into programming?

2:22

For me, I think I got

2:24

into programming quite young, I guess.

2:27

So I think I started as a primary school

2:30

five grade, which is like 13. So

2:33

I got into open source because I

2:35

got a friend, the same name as me, who

2:37

somehow got to know how

2:39

to do the programming. And he shows

2:42

me how he got to do with

2:44

Visual Basic. And I feel like that

2:47

cool app is like recording your keyboard on

2:49

the background and saving to a text file

2:51

so that you can treat your friend to

2:53

enter their password. And later on, you can

2:55

get their password. Something like that. So

2:58

this is very cool. I didn't know this is

3:00

possible, and you can write it. So

3:02

that's how I get into writing

3:05

code. So I started by learning

3:07

Visual Basic. And then that time,

3:09

it's like 6.0, which

3:12

is like compiled directly to Windows. But

3:15

I think the very good part compared to

3:17

now frontend is you got a visual.

3:20

So you can drag the button and find the

3:22

events, something like that. So which is you've

3:24

got the feedback very quickly. So that really

3:27

helped me to get on board like programming,

3:29

because you can see what you've got, and

3:31

you can show your friends what you made.

3:34

And then I took the computer science degree

3:37

at college. And after

3:39

getting college, I think, OK. It seems like

3:41

everybody is saying that if you do open

3:43

source, it's a direct proof of your skills.

3:46

And they're probably good for looking jobs, something

3:48

like that. So that's how I started

3:50

to try to do open source. And

3:53

interestingly, I ended up staying

3:56

at open source. And now I've been super

3:58

lucky. to

4:00

work for Knapp Lab, which now is

4:02

again being working full time on

4:05

open source. So I wouldn't

4:07

expect my career to be like that, but so

4:09

far I'm pretty enjoying that. Would you

4:11

give that same advice to folks who are now in

4:14

college that open source is good for your career and

4:16

finding a job? Yeah, I think I

4:18

still do. And so

4:20

I think open source is something

4:22

that it's basically building public, right?

4:25

So it's basically what you did

4:27

and how you communicate

4:29

with each other also do. It's also

4:31

present on open source. So it's like

4:34

even though you don't get into working

4:36

ready for open source, it's still like

4:38

when doing open source, you've got to

4:41

practice your skills and you

4:43

can try to learn and see a lot

4:45

of problems in different ways. So I think

4:47

that really helped. And

4:50

so even you got into enterprise

4:52

to work on something different, still

4:55

like the skill of solving problems or

4:57

skill like trying to, even like creating

4:59

issues, you also need to know how

5:01

to face your problem, face

5:03

your questions and how to communicate, collaborate

5:06

with each other. And

5:08

I think that really helpful. And if you are in

5:10

college, I think that for me, that

5:12

can probably be the perfect chance to

5:15

get into open source because you have a lot of time and

5:18

you can purely focus on

5:21

those different tasks. So

5:23

yeah. Yeah, it's funny.

5:25

There seem to be different stages of growth

5:27

and joining open source. The first one is

5:29

doing it at all, whether it's your first

5:31

issue or sending your first pro request or

5:33

just open sourcing a repo. And

5:36

then after that, some people stick in and

5:38

keep doing things, more issues, more repositories. Is

5:41

there any particular point

5:43

or motivator that you

5:45

found particularly effective for getting people from

5:47

that first issue to continuing in open

5:49

source? If you mean as

5:52

a maintainer, I think what I could do

5:54

is like I trying to encourage

5:56

people to try to solve their

5:58

problem their own. I mean, that

6:00

really depends on the issue as well. For

6:03

me, I find that whenever you have a problem,

6:05

or you have an issue, you have a block

6:07

of a certain library, you are actually

6:09

the one that knows this problem the best. And

6:12

also, you kind of have the most

6:14

incentive to improve that, because it

6:16

affects your problem eventually. So,

6:18

but if you kind of throw a

6:20

kind of challenge or a task to

6:23

maintainer, the maintainer might be interesting in

6:25

implementing that as well, but it

6:28

can be like the maintainer doesn't need that feature, but

6:30

you are the one that need it. So,

6:32

I would encourage that the original creator

6:34

of that issue to try to solve

6:36

this problem, and if that's in the

6:38

scope of the project. And

6:40

so I think to doing that is

6:43

like, even though sometimes like they

6:45

kind of being afraid like saying, you

6:47

know, I'm not good at creating issues,

6:49

not good at like sending code or

6:51

sending PRs or an IPR gallery drive

6:53

it or something. So they usually it's

6:55

like, it's hard to do the first

6:57

step to know that you can actually

6:59

contributing to that, to open source for

7:01

development, actually everyone could. And

7:03

it's not that hard to do

7:05

so. So at least you can try.

7:07

So I just, as a maintainer, I will

7:10

try to encourage people to do that. And

7:13

so I think if you are the

7:15

one that's creating issues, I think the

7:17

first thing is like, you maybe try to

7:19

describe your problem better and to

7:21

try to provide the more information as you could.

7:25

And maybe at least I think, I think

7:27

before you working on that, maybe you should ask

7:29

for the maintainer if the problem or

7:31

the future is like in the scope of

7:33

that project. So I think that would help.

7:36

Yeah, for sure. It's funny, you

7:38

know, very, very large companies, multi-thousands

7:41

of workers, in some ways

7:43

are closer to open source than a small

7:45

startup. Because when you're at a very large

7:47

company, you might not have any personal or

7:49

professional rapport with the people you're interacting with.

7:51

So I really respect and appreciate and agree

7:53

with your point earlier that, you

7:55

know, those skills of being able to report

7:57

an issue effectively are pretty transferable to day-to-day

7:59

life. life as a software developer in the

8:01

industry? Yeah, I think so, yes. Do

8:04

you think there are any other particular skills that

8:06

translate to and from open source and corporate life

8:08

particularly well? I'm not super

8:11

sure, but because I think I like,

8:13

actually after I graduate, I got the

8:15

offer from the next lab. So I

8:17

never got a chance to work on

8:19

a real corporation. But I think communication

8:22

skill is really important. I think it's

8:24

very kind of covered with describing issues

8:26

as well as part of that, I

8:28

guess. And then

8:31

I think it's like, so I

8:34

think in working open source project, because

8:36

the open source project can be owned

8:38

by different people or different teams.

8:41

And they may have different principles

8:43

or guidance or rules

8:46

to be. Or even for code

8:48

style, the code style can be different. So

8:50

whenever you're contributing to a project, I think

8:52

it's just maybe similar

8:54

to going to the other project or

8:56

something, they have their own rules. So

8:58

the first thing is when you're going

9:00

to contributing a project, you have to

9:02

read how they prefer contribution to

9:04

be made. Or what is code

9:06

style they prefer. And it's

9:09

best you follow their code style to

9:12

have a consistent look of the

9:14

whole entire project. So I think

9:16

that may also relate to it.

9:18

I agree. As

9:25

a listener of Software Engineering Daily, you

9:27

understand the impact of generative AI. On

9:30

the podcast, we've covered many exciting aspects

9:33

of gen AI technologies, as well as

9:35

the new vulnerabilities and risks they bring.

9:38

HackerOne's AI Red Teaming addresses the

9:40

novel challenges of AI safety and

9:42

security for businesses launching new AI

9:45

deployments. Their approach involves stress

9:47

testing AI models and deployments to make

9:49

sure they can't be tricked into providing

9:51

information beyond their intended use. And that

9:54

security flaws can't be exploited to access

9:56

confidential data or systems. Within

9:58

the HackerOne community, a Over 750

10:01

active hackers specialize in prompt hacking

10:03

and other AI security and safety

10:05

testing. In a single recent engagement,

10:07

a team of 18 HackerOne hackers

10:10

quickly identified 26 valid findings

10:12

within the initial 24 hours

10:14

and accumulated over 100 valid

10:17

findings in the two-week engagement.

10:19

HackerOne offers strategic flexibility, rapid

10:21

deployment, and a hybrid talent

10:24

strategy. Learn more

10:26

at hackerone.com/AI. That's

10:29

H-A-C-K-E-R-O-N-E dot

10:31

com slash AI. Let's

10:39

continue down your personal story towards Nux

10:41

and Nux Labs. So what was the

10:43

first big open source project that you

10:46

worked on or created that was popular

10:48

in the dev community around you? Okay,

10:50

for me, it's actually in VS

10:53

Code extension called IAT in ALLE.

10:56

Back then time I was working at a college,

10:58

I gathered with a few of my friends to

11:01

try to build an app with Vue.

11:03

So it's like, what the app is, it's

11:05

not important, but it's like we want to

11:08

add some different language into

11:10

it. So we want to

11:12

do internationalization. And because

11:14

we also have some friends who are

11:16

learning foreign language, they are majoring in foreign

11:18

language. So we're thinking that we can gather

11:20

all those friends to do the translation for

11:22

us and we can kind of

11:25

collaborate to create an app.

11:27

And I found that the

11:29

experience of doing translation

11:32

is not easy,

11:34

especially for non-programmers.

11:37

And so I was thinking, okay,

11:39

maybe I could do a VS

11:41

Code extension for that. They just

11:43

replace all your extension, all your

11:45

IAT usage into a real text.

11:47

So you can preview directly for

11:49

the content of the text rather

11:52

than the key in the map

11:54

or something. So that's how I get

11:56

into open source and I got a

11:58

lot of feedback, actually. So I

12:00

try to share my project and people

12:02

really liked it. And

12:04

then because initially it was only for

12:07

Vue, and because

12:09

I only use Vue, and I only do it for my

12:11

knee. And people started asking, is that

12:13

working for React? They have their React project,

12:15

and they want to use it as well.

12:18

So then I started thinking, OK,

12:20

how I can do it? How I can

12:22

make this open source project serve for multiple?

12:25

So that kind of takes some

12:28

big refactor and make it universal.

12:30

So in the end, it kind of

12:33

works for 20 different frameworks, and it's

12:35

also extendable. So you can create it

12:37

for your custom framework. So something like

12:39

that. And during that, I find

12:42

that open source is very interesting and kind

12:44

of rewarding because people kind

12:46

of send appreciation to your work.

12:48

Well, that's the initial work is that

12:50

I do it for myself, and I

12:53

do it for us. So that's how

12:55

I get into this. And

12:57

also, that kind of get my

12:59

kind of confidence to say, OK, maybe I

13:01

could do more. So that

13:03

kind of being more active in

13:06

the Vue ecosystem, and then eventually

13:08

join Vue. And then

13:11

the next. That's

13:13

really lovely and also something that I've somehow

13:16

found. The internet has a reputation for

13:18

not particularly great emotions being thrown at folks.

13:20

But in the open source community, it

13:22

is actually surprisingly positive at that many

13:24

times, where folks who are doing notable

13:26

note work that benefits people do actually

13:28

receive a lot of praise. They can

13:30

be very rewarding and encouraging as a new

13:32

maintainer to do that type of work.

13:35

Yeah, that's true. Yeah, that motivates me a lot.

13:37

Yeah. Cool. Let's talk

13:39

about Nux then. So you mentioned Vue earlier,

13:42

and we've also talked about Nux. Now, not

13:44

everyone particularly works

13:46

with front-end frameworks or meta frameworks. Could you tell

13:48

us what is Vue and then what is Nux

13:51

and how does this stuff all fit together? Yeah,

13:54

I'll try. So I think the

13:56

definition is sometimes ambiguous. And

13:58

so Vue is from Nux. framework

14:00

that renders your data into

14:03

a DOM, which is, let's

14:05

say, the view of the web page. And

14:07

we will also provide some component features so

14:09

you can do separation of concern. So you

14:12

can provide different components to do

14:14

different tasks and then compose them together

14:16

to create, eventually create your app and

14:18

that can be interactive and can be

14:20

feature rich. So that's

14:22

view and we also have quite a

14:25

few alternative like React

14:27

and survey out

14:29

Angular, something. And then

14:31

for Nux, Nux is a meta-framework

14:33

on top of view. So let's

14:35

say that meta-framework for view. What

14:37

a meta-framework is, to me,

14:39

it's also hard to define, but it's just like,

14:41

it's just trying to providing you a bunch

14:44

of different solutions together and

14:46

to solve different needs. So for example,

14:49

like view itself is only focusing on

14:51

how to synchronize data with

14:53

your UI, with your view. While that

14:55

meta-framework care more about that, on top

14:57

of that is like how you define

15:00

your data, how you deploy your app

15:03

and how you're communicating with the

15:05

server to send data or retrieve

15:07

data and how you do like

15:09

search engine optimization, something like that. So

15:11

Nux is a meta-framework on top of

15:14

view and it providing feature like SSR,

15:17

which is server side render, so that

15:19

you can have the initial request from

15:21

the server that's already pre-rendered with your

15:23

UI. And then we

15:25

can have the client side render, which is just

15:28

how view works, but we can mix them together

15:30

so that you can write

15:32

your code once and your code can run some

15:34

both server side and client side, which if

15:36

you set up your own, that can

15:38

be quite a lot of work. So we handle that for

15:41

you. And then we're providing

15:43

some kind of like integration for

15:46

you to make it easier. So like if you want

15:48

to deploy to anywhere, it's just like

15:50

you can just do it without any configuration because

15:52

we handle all the things for you. And

15:54

then if you want to install some sort of like third party inspiration,

15:57

we also have like module system. so

16:00

that you can use it. So yeah,

16:02

basically, it's more like, I don't know

16:04

how to say, maybe it's like enterprise

16:07

solution, but it's also open source. So

16:09

it's a package of different

16:11

solutions for different aspects. And

16:13

we consider that for you. So it's just

16:16

trying to make your development experience

16:18

easier and more efficient. This

16:27

episode of Software Engineering Daily is brought

16:29

to you by Vantage. Do you

16:31

know what your cloud bill will be for

16:33

this month? For many companies, cloud costs are

16:35

the number two line item in their budget

16:37

and the number one fastest growing category of

16:39

spend. Vantage helps you get

16:42

a handle on your cloud bills

16:44

with self-serve reports and dashboards built

16:46

for engineers, finance and operations teams.

16:48

With Vantage, you can put costs

16:51

in the hands of the service

16:53

owners and managers who generate them,

16:55

giving them budgets, alerts, anomaly detection

16:57

and granular visibility into every dollar.

16:59

With native billing integrations with

17:01

dozens of cloud services, including

17:04

AWS, Azure, GCP, Datadog, Snowflake

17:06

and Kubernetes, Vantage is the

17:08

one FinOps platform to monitor

17:11

and reduce all your cloud bills.

17:13

To get started, head to Vantage.sh, connect

17:15

your accounts and get a free savings

17:18

estimate as part of a 14 day

17:20

free trial. data

18:00

changes, you can call it state. It depends

18:02

on the type of the data. But it's

18:04

just like when the data changes, you should

18:06

reflect to the UI, right? It's

18:09

like you're saying that if the

18:11

button is being clicked or not, and

18:14

you should present, when you change

18:16

the data, you should present it in the view. And

18:19

so I think for me, the difference

18:21

between view and the React is a

18:24

lot, actually. It's not too much, but

18:26

it's also a lot. If you're taking

18:28

it very detailedly. So I

18:30

think the difference is that view has its

18:33

own syntax. It's called view single file

18:35

component. We call it SFC. That

18:38

you can have your template, which

18:40

is the HTML code, and your

18:42

script, JavaScript code, and your style

18:44

CSS into one file, so

18:46

into one component, so that we kind of

18:48

have the solution for you to say the

18:51

logic, the UI, the structure, and

18:53

also the style is all in one single

18:55

component. So you only

18:57

need to concern about this component, where

18:59

that React does not handle it. React

19:02

doesn't handle it for you. But React

19:04

instead, I like to say, oh, we don't care

19:06

about this. And we've got a community to do

19:08

it. And then in the

19:10

React, you have, I don't know, maybe hundreds

19:12

of different solutions for the same thing. And

19:15

it's also good in another way. It's like you

19:17

have a lot of choice. But for me, it's

19:20

like in some technical taste

19:22

or decisions, I kind of prefer view.

19:24

And also because I'm learning, I'm kind

19:27

of starting to learning view. Because

19:30

I heard, they say that in the

19:32

journal lab, they

19:34

will say that view is easier to learn. So

19:36

at that time, okay, I pick view, and then

19:39

I stay at view, because I also

19:41

find that the later decision of view that

19:43

make more sense to me. But I think

19:45

in the end, it doesn't really matter.

19:48

It's like when you're looking at a website, you

19:50

won't tell it's a front view already, unless you're

19:52

looking to it. And so I

19:54

think both sides is like, depends on what you

19:56

use, depends on what you need,

19:58

you can choose different framework. And I

20:01

think on the high level, they are

20:03

interchangeable in a way. I

20:05

think the way you've answered that, correct me

20:07

if I'm wrong, is somewhat informed by how

20:10

a lot of online discourse about these competing

20:12

front-end frameworks has evolved over the last decade,

20:14

where back in the day, folks tended to

20:16

be very aggressive, very, no, you can't use

20:18

X, you have to use Y. View sucks,

20:20

react great, react sucks, view great. But

20:22

no, you're right. A lot of the

20:25

shared ideologies between the frameworks are common.

20:27

Things like the concept of a component

20:29

is somewhat similar between them. And

20:32

they've all learned and grown through and from

20:34

each other. Yeah. And I think that

20:36

you can see that also like framework trying

20:39

to evolve and to

20:41

add new features, and we

20:43

will learn from each other. So I

20:45

think as the view one, the components

20:48

concept, it doesn't exist. And

20:50

like view two, we have

20:53

the virtual DOM concept from

20:56

React. And view three, we

20:58

take the view comes to the unit,

21:00

which will be similar to React hook.

21:03

And then React also takes on inspiration

21:05

from view as well. I think they

21:07

have like use transition API or something,

21:09

which is they care that it's inspired

21:11

from view. And I think that it's

21:13

basically like we are learning with

21:16

each other. And the newly framework is

21:18

also like, they build on the

21:20

concept that they already know that's the different

21:22

trade off of different framework and they

21:24

build from scratch, but they still based

21:26

on the knowledge that we kind have

21:28

different experiments or different trade

21:31

off. Yeah. So I think that's

21:33

also like, I why I'm joining open

21:35

source because they it allows different opinions

21:37

to exist. But also like, eventually, we

21:40

are building good stuff for for people for

21:43

everybody to use. Yeah, it's a real

21:45

strong counterpoint, I think against building these things

21:47

in close source, who's trying to determine what

21:50

company's visibility, it's harder to let people learn

21:52

from you. And then it's harder to let

21:54

people contribute. This

22:03

episode of Software Engineering Daily is brought

22:05

to you by Starburst. Struggling

22:07

to deliver analytics at the

22:09

speed your users want without

22:11

your cost snowballing? For data

22:13

engineers who battle to build

22:15

and scale high-quality data pipelines,

22:17

Starburst Data Lakehouse platform helps

22:19

you deliver exceptional user experiences

22:21

at petabyte scale without compromising

22:23

on performance or cost. Trusted

22:25

by the teams at Comcast,

22:27

DoorDash, and MIT, Starburst delivers

22:29

the adaptability and flexibility a

22:31

lakehouse ecosystem promises on an

22:34

open architecture that supports Apache Iceberg,

22:36

Delta Lake, and Hootie, so you

22:38

always maintain ownership of your data.

22:41

Want to see Starburst in action?

22:43

Get started today with a free

22:45

trial at starburst.io/SED. Let's

22:54

talk about NUCST. NUCST is

22:56

a meta-framework for a view, if I've understood

22:58

right, and it adds in features such as

23:00

server-side rendering, nice integrations with data, fetching. Are

23:03

there any particular parts of NUCST that you've

23:05

been working on recently that you're excited about?

23:08

So NUCST comes from... React

23:10

also has a meta-framework called NUCST,

23:13

and then recently you remit. So

23:16

I think NUCST comes up

23:18

around the same time with NUCST,

23:21

which is around seven or eight years

23:23

ago. So now we are on

23:25

NUCST 3, and while NUCST 2 was for

23:27

view 2, NUCST 3 was for view 3, and

23:30

at NUCST 2 we kind of built on

23:33

top of Webpack. And I

23:35

think Webpack is super popular at that time,

23:37

and that's probably the only valid solution at

23:39

that time. And then for NUCST

23:42

3, because of the rise of VIT, so

23:44

we're thinking that maybe we should also support

23:46

VIT for the better developer experience

23:48

and the faster hard-market

23:50

replacement, and maybe also the ecosystem.

23:53

So in NUCST 3, we try to

23:56

integrate VIT to be supported in NUCST,

23:58

but we also don't want abandon the

24:00

existing user of using webpack for them

24:02

to transfer my workflow from NUC2 to NUC3.

24:06

So then we end up to support a bit

24:08

like agnostic layer of builder so

24:11

that you can use VTO webpack

24:13

as you want. You can switch

24:16

two different underlying bundler. And

24:19

then also we kind of create

24:22

a kind of universal layer of

24:24

plugins called unplugging that you can

24:26

write your plugin once and that

24:28

works for webpack and lead and

24:30

also like the other like ES

24:32

build and RSpec or something. So

24:34

then it's very interesting. It's like,

24:37

and then we also have a server layer

24:39

because we need to handle the, like your

24:42

API request when you host it and

24:44

how your servers are rendered and how

24:46

you deploy to different platform for the

24:48

kind of like serverless functions. So

24:51

they are output and they are format

24:53

is a little bit different. And then

24:55

we have the nitro, which is the

24:57

underlying server engine that we made from

24:59

NUC3, but then we make it universal.

25:01

So it decoupled from view and decoupled

25:03

from NUC2 so that everybody can

25:06

use it. And then now analog, which is

25:08

a angular framework. Now it's

25:10

using nitro to do this thing and

25:12

solid for solid star. They're also using nitro.

25:15

So what I want to say is like,

25:17

we take the concept of making things universal

25:20

and we're peeling some like features

25:22

that kind of complex problem outside

25:25

of our NUC project

25:27

to make it as another open source

25:29

project. And that can be universal beneficial

25:31

to the others. While that's

25:34

not itself can be specific to the

25:36

problem you're trying to solve while the

25:39

underlying things can be shared with the

25:41

rest of the community, even though they

25:43

don't use view. So

25:45

yeah, I think that's really excite

25:47

me about, we don't see it

25:49

quite often in open source in

25:51

the front end of the field.

25:53

Yes. Yeah. I hope folks learn

25:55

from you before we get into each of those awesome

25:58

pieces of tech you mentioned. I want to shout. about

26:00

is there's a really interesting design principle.

26:02

You just mentioned here that if you

26:04

build your layer on top of composable

26:06

components that can be swapped out and

26:08

made available, that A, lets

26:10

you focus on the thing you want to

26:12

do more, and B, makes more good open

26:15

source projects other folks can use. And that

26:17

almost feels to me like an extension of

26:19

the classic coding philosophies, single responsibility

26:21

principle or the Unix philosophy of say, do

26:23

one thing and do it well, or only

26:25

have one reason to change. That you're making

26:27

these composable blocks that sound like good software

26:29

principles in general. Yeah,

26:32

I think so, yeah. And I think

26:34

also like if you're making your

26:36

logic or something that

26:39

can be independent from the original problem

26:41

yourself, is actually you will find a

26:43

better, even better, how to

26:45

say architecture or structure of

26:47

your problem. It's like you can see the problem

26:49

more clearly. That's why you want to do

26:51

this, or like how you can do it

26:53

better. And then like with a different

26:56

solution or different approach trying

26:58

to use your solution, is

27:01

like you can make it more universal

27:03

and maybe more robust. And

27:05

I think, yeah, I think that that's really

27:07

like, also like when maintaining this piece of

27:09

a block is actually a

27:11

lot easier because you can only focusing on this

27:13

scope and you don't need to worry about the

27:16

others as long as the scope,

27:18

inside the scope, the input output is how

27:20

you expect it. And then on the higher

27:22

level integration, you can just use it as

27:24

a block to build something else. Absolutely.

27:28

Let's dive into that as some of the

27:30

building blocks you mentioned. The first was switching

27:32

from Webpack to Vite. And for those who

27:34

aren't familiar, could you give us a brief

27:36

intro on what our Webpack can be in

27:38

similar bundles? How do those fit into the

27:40

stack? Okay. And

27:43

so Webpack comes

27:45

out with a, actually

27:47

I think at that time it's a

27:49

very innovative idea. It's like trying to

27:51

bundle everything into JavaScript. And

27:53

so like, I think back then, that is

27:55

how you need to serve your HTML by

27:57

yourself and then JavaScript and then CSS. you

28:00

need to kind of handle all the relationship

28:02

between each other and how you serve those

28:05

files. And I think that works

28:07

well when you serve only one HTML file or

28:09

the other HTML file is like static and

28:12

should be relatively easy to maintain.

28:14

When you adding some like dynamic

28:16

generated blocks or like when your

28:19

website structure becomes very complex, it's

28:21

really hard to manage those things. And

28:24

what that comes up when I do is

28:26

like, I will bundle in CSS and

28:28

HTML as part of JavaScript.

28:31

And then I can just based on this page,

28:33

how many different stuff you use, I would just

28:35

make it one bundle or

28:37

several bundles of those different chunks.

28:40

And then whenever user visit a

28:42

page, the page one knows that

28:44

which blocks to be grabbed and

28:46

then serve those things automatically. And

28:50

that can really make the front

28:52

end to be, how

28:55

to say, it's like from something that

28:57

it can be only handles a small

28:59

scale of project becomes server. It allows

29:01

you to do much more complex project

29:03

in a manageable way. So

29:05

that really evolves the front end world a

29:08

lot. And then

29:10

the problem becomes like, because this allows

29:12

you to do more complex projects, so

29:14

then people will do more complex projects.

29:16

So for sure, right? And that makes

29:18

sense. And then

29:20

we kind of have some like a bottleneck

29:22

is like, when you have too much files

29:25

and the bundling and the transpiling

29:27

process can be very slow. So

29:30

that maybe when you're starting a

29:32

dev server, so you're trying to preview the

29:34

website you are working on locally, it takes

29:37

a lot of time and like

29:39

taking two seconds fine. But like, what if it

29:41

can be like two minutes or five minutes and

29:44

then it's like, you need to wait for

29:46

to doing another work. But I think in

29:49

the traditional development or maybe like compiling it

29:51

just like that, I guess, but

29:53

fully web is something is like, when

29:55

you also have different type of content,

29:57

different type of app. also

30:00

want to change something. So for

30:02

example, like if you're adding a document, and

30:05

the document, whenever you type some word

30:07

of the content, it can take two

30:09

minutes to react to be showing some

30:11

the webpage, it's not really acceptable, it

30:13

kind of breaks your, your

30:15

workflow and trying to like

30:17

mind flow. It's like when you're trying to think something,

30:20

but you're getting to arrive by kind

30:22

of annoying because the tool doesn't catch up

30:24

your mind, something like that. So

30:26

then for VIT, so VIT console is like,

30:29

because webpack is doing a lot of

30:31

work to trying to bundling all your

30:33

package, and when your page is relying

30:35

on a lot of things, it will

30:37

kind of repackaging all these dependencies. And

30:40

VIT is trying to do another way, it's like we do

30:42

like a bundle list, it's like we don't bundle your code,

30:44

we just serve your code as is, but

30:46

we transfer it to be consumable by

30:49

the browser. And whenever you change your

30:51

content, it's only changing that file, it's

30:53

not causing the whole bundle to be

30:55

recalculate. And it also like doing these

30:57

things on demand. So that means

30:59

if you have a website that has a

31:01

million of file, and you

31:03

enter one page, you don't bundle the whole one

31:06

million files, you just only bundle like 10 files

31:08

that are related to this page. And

31:10

that kind of solves a lot performance

31:12

issue from webpack. So yeah,

31:15

I think that there are many difference. And

31:17

then I think VIT now

31:20

kind of grows as the right is

31:22

still right even using and it's built

31:24

on top of the consumption is like

31:27

browser can consume yes modules. While that's

31:29

like I think five years ago, it was not possible.

31:32

So VIT will only be possible when

31:34

the new spec of JavaScript comes out.

31:37

And reasons is still a relatively new

31:40

tool. But now it's like has a

31:42

very vivid ecosystem. Just

31:45

a current of information by ESM

31:47

you're referring to ECMAScript modules, the

31:49

ratified JavaScript modules format? Yes.

31:51

Well, yeah, that's

31:54

amazing that it's a direct

31:56

reflection of work being done on the JavaScript

31:58

language in the ecosystem. making

32:00

its way to the platform to allow better tooling

32:02

to be built than what was there before for

32:05

users. Yeah, exactly. Yeah. Beautiful.

32:08

All right, let's go to the next one. You

32:11

mentioned after that the unplugging universal

32:13

layer. So there's, if I understand

32:15

right, a kind of general plug-in

32:17

layer that folks can write plug-ins

32:20

for, for Nux and similar. Is

32:22

that accurate? Yeah, kind of.

32:24

Yeah. So we basically,

32:26

because Nux also needs some like

32:29

internal plug-ins to make the

32:31

Nux convention works. And

32:33

because we want to support both Webpack

32:35

and VIT. And then

32:37

basically means that for the internal plug-ins,

32:39

if we're going to support both fund

32:41

dollars, that means we probably need to

32:43

write our code twice. And

32:45

that kind of debate the principle of not,

32:48

do not duplicate your code, right? And

32:51

so we kind of think maybe if

32:53

we could have a universal layer that

32:55

you can write code once and that

32:57

can work for both bundle. And

33:00

that kind of save us a lot of effort to

33:02

maintain those things. And also like

33:04

the misalignments between two implementations, which

33:06

is really hard to kind of

33:08

solve, right? And that can

33:11

also affect the user experience because a

33:13

different platform can have a different behavior,

33:15

which is quite confusing. So we're trying

33:17

to do that. And for

33:20

unplugging is initially is trying to build a

33:22

layer between Webpack and VIT. And

33:25

because VIT is also inherent on Roa

33:27

app, so then we can also naturally

33:29

support Roa app plug-ins. And then

33:32

because we have these layers and

33:35

we made it open source and people

33:37

say, okay, this is maybe a good

33:39

idea. And they, they starting to integrating

33:41

more funders or more build tools into

33:44

this plug-in layer. And then

33:46

now I think we have

33:48

ESPute support and also

33:50

RSpack, which is experimental. And

33:52

then all these things, they are like low

33:55

level build tools. And

33:57

then that means like with this layer, the plug-ins are

33:59

very easy. you, you, you also, I said,

34:02

it works for those build tools and also

34:04

works for every metaphor I built

34:06

on top of those tools. So

34:08

that means if you are targeting

34:10

for VIT and that means Nux

34:12

would also benefit from it and

34:14

then the VEL kit and solid start

34:17

and yeah, maybe remix. Remix is also

34:20

like migrating to VIT recently. So that

34:22

you are able to use the plugins

34:24

to be like, to use for all

34:27

those things. And now also

34:29

like saves a lot of this, like you

34:32

don't have like, if you want to do

34:34

some plugin, you don't have a VIT plugin

34:36

version and webpack plugin version from different author

34:39

or like with different implementation, a bit

34:41

like it's not really vendor

34:43

locking, but they just like you are being locked

34:45

into this ecosystem when you want to migrate to

34:47

the others, it'll cause you a lot more to

34:49

do it. So I'm talking just

34:52

like trying to find a common feature.

34:54

It's like a common part of

34:56

different tools. So it's not as capable

34:59

as a native V2 native plugin, but

35:01

it's just like in general,

35:03

trying to providing the common part

35:05

of different build tools as

35:07

for the plugin. Yeah. If I were

35:09

an end user on a team, what would be an

35:11

example of a plugin that I might want to

35:13

write that would then work with the unplugging system?

35:17

So we have, if you've heard

35:19

of Sentry, it's a telemetry, telemetry

35:21

library or something, and I

35:24

think they made unplugging Sentry. So that they

35:26

are a central integration with unplugging. It can

35:29

work for VIT, for webpack and for the

35:31

others, while that they only need to maintain

35:33

one single code base. And

35:35

I think that at the end user, you're probably not going

35:37

to use it directly, that

35:39

for a library author, that would be

35:42

more relevant. That's really nice. Sentry

35:44

is also in particular with open source, very

35:47

good about publicizing what they're doing. They've got

35:49

a great open source program headed up by

35:51

Chad Whittaker. So shout out Sentry. Let's

35:54

continue. So you've been

35:56

talking about what's currently happening in Next with

35:58

Next3. Is there anything coming up

36:01

on the horizon that you're juiced about for NUC

36:03

in general? Yeah. So

36:05

for the last year, my main focus on

36:07

NUC is trying to build the NUC step

36:09

tool. Because when you say

36:11

that meta-framework is trying to provide

36:14

different solutions, it can

36:16

be a little bit like it's adding

36:19

too much sometimes. It's not very obvious

36:21

what the framework is doing or what

36:23

it's doing under the hood. And

36:26

whenever you have some bug from the internal of

36:28

the framework, it can be very hard to debug

36:30

and you don't know why or you don't know

36:33

why this is caused or you don't know the

36:35

relationship between each part. So I

36:37

would call it lack of transparency.

36:40

So it's like the framework becomes a black box

36:42

and you don't know what is going on. And

36:45

it's really hard to find things from

36:47

outside. So we want to improve

36:49

the transparency of this black box. So

36:52

we made a dev tool which lets

36:54

it's trying to tell you more

36:56

information that the framework knows how

36:58

your components is being located and what's

37:00

the relationship between each of your components.

37:03

And also, so for user facing,

37:05

it's like how your route being

37:08

how your navigation is being constructed

37:10

and how your components being constructed

37:12

and how your logic is being

37:15

organized or something. And

37:17

at a bit low level, it's like internally

37:19

we will tell you how each hook, internal

37:21

hooks of the NUCs, like how long they

37:23

take or how many times they go so

37:26

that you can know better of the

37:28

internal things. And then we

37:30

also have that third party modules, right?

37:32

And modules can also provide their own

37:34

dev tool integration to providing a view

37:38

of how the modules is doing. So

37:40

for example, like we have an OG image

37:42

module that can generate a dynamic

37:44

OG image for different routes. And

37:47

if you want to preview your OG image, it's like

37:49

you need to, the traditional way is like you need

37:52

to check your source of the page and to grab

37:54

the link and try to access the link. And

37:57

that's okay if you do it once, but that would be too

37:59

tricky if you want. to try different

38:01

multiple routes. And it's providing it. So

38:03

with the module, it's providing a UI

38:05

in the DevTools for you to preview.

38:08

And whenever you navigate a page, it will

38:10

just preview the content of it. And whenever

38:12

you change some title or something, the OG

38:14

image will be updated automatically. So

38:16

that's something that we are trying to

38:18

improve the overall developer experience and

38:21

to make these things easier to use

38:23

and easier to understand. Do

38:26

you see a medium to long-term

38:28

future where other meta frameworks, like you

38:30

mentioned Solid Start earlier, would also be

38:32

able to use this kind of DevTooling?

38:35

So we actually have quite a

38:37

few frameworks. He's already doing so.

38:40

So Astral, I think they announced

38:42

a kind of Astral tool bar

38:44

or something, which is following the

38:46

similar idea. And Midian,

38:48

Midian is a React library

38:50

to improve the rendering performance. It

38:53

also providing a DevTool. And

38:55

then I know Quick is working

38:57

on their own DevTool. And

39:00

then ModernJS, ModernJS is also

39:02

another React framework, Metafine

39:05

or Firebase, and they're

39:08

also working on their own DevTool. So

39:10

I would be really happy to see that

39:12

the more and more frameworks is trying to

39:15

providing such integration and trying

39:17

to make the debugging or the

39:20

overall things better for you to

39:22

understanding or manage your project. And

39:25

we have a relative long-term

39:27

goal to say if we can

39:29

make a kind of DevTool kit,

39:31

which is like infrastructure for DevTool

39:33

that works cross-front work, that

39:36

we need to take some time to

39:39

deal with the details of it. And it

39:41

may be tricky doing permanent ideas. But

39:44

we'll see. Yeah, to your point earlier, there

39:46

is a lot of quote-unquote duplicate work

39:48

happening. All those different Dev

39:50

setups, toolbars, and so on are the

39:52

implementations of the same idea. But

39:55

is it possible to unify before

39:57

all these implementations have experimented? Is

40:00

there any work that can be done now to unify them?

40:03

I think it depends on what

40:05

a different framework would need. And

40:07

I think maybe not unifying too

40:09

early would be better for allows

40:12

different ideas to come up. So

40:14

I think for us, it's like we were kind of

40:16

saying that for DevTool, it's still

40:19

a relatively new thing that's

40:21

not being explored a lot. So

40:23

for example, we have a lot of

40:25

data internally when we're bundling things or

40:27

when we're serving content. If

40:30

we got the data and how we present

40:32

it, how we visualize it, and how we

40:34

make it interactive is something that no one

40:36

did that before. And also

40:39

like no one have exactly same data you

40:41

have. So that can be a challenge that

40:43

you can, you basically try and arrow and

40:46

you can view something for the open source

40:48

and then people will use it and give you

40:51

feedback to say if they want this better or

40:53

if they kind of need some different

40:55

information and then we improve and

40:57

iterate later. So I think it's

41:00

still a very new field. And so

41:02

I think different frameworks, they are now

41:05

trying to present those data in a

41:07

different way and probably not unifying those

41:09

things too early might also help them

41:11

to say they can work there, like

41:14

they can do more different type of

41:16

visualization presentation rather than you have to

41:18

use this kind of the friend or

41:20

something. It's like you don't need to

41:23

be limited by the API that

41:26

the layer, the universal layer provide.

41:28

So I think it definitely depends

41:31

while that's universal is a good thing, but

41:33

it's not always the best in many cases.

41:36

Sure. You mentioned the

41:38

dry philosophy, don't repeat yourself earlier. There's

41:40

a corresponding philosophy function in the front

41:42

end also sometimes like to say wet,

41:44

right, everything twice. You

41:46

can't really know what you're doing until you've done it. Sorry.

41:49

Yeah. Like render

41:51

twice. Yeah. Cool.

41:55

So that's a lot on Nuxt and I do wanna

41:57

ask also any other particular projects you're working on. Have

41:59

you been... playing an open source recently on stuff

42:01

outside of NUC, so you want to talk about? Yeah,

42:04

for very recently, I've been working on

42:07

a rewrite of another open source project.

42:09

So my project called Shikiji and

42:11

the project so that it will

42:13

be a ESM rewrite of Shiki

42:15

and Shiki is a syntax

42:18

highlighter that's based on

42:20

VS Code text-made grammar.

42:23

So that means that it can reuse all the grammar

42:25

you have for the VS Code. So

42:27

to say that if someone build

42:29

a extension, a VS Code extension

42:31

for a certain language and

42:34

Shiki can use that language syntax to

42:36

highlight the code, you answer. So

42:38

you don't need to do the work

42:40

twice, while that it can provide a

42:42

very accurate syntax highlight that

42:45

the other approach may not be easy

42:47

to approach because as the VS Code

42:49

evolve, this thing will also evolve as

42:51

well because it shares the same engine.

42:54

So the reason I'm doing this thing

42:56

is because I'm actually also

42:59

a maintainer of Shiki, but we

43:01

have some long-term issue about how

43:03

we're loading those grammars or how

43:05

we're loading the Wasm dependency. Wasm

43:08

is WebAssembly, which is VS Code

43:10

uses. So we have to

43:12

use the same WebAssembly in order to achieve

43:14

the same effect. But this is a kind

43:16

of static asset that we need to import

43:18

it from somewhere. So originally we

43:20

used the file system to read it and

43:23

then it kind of coupled with that because

43:25

we use the file system, that means this

43:27

code can only run on node. But

43:30

we also have some demand as to

43:32

run on the browser or run on

43:34

the age environment in a worker so

43:36

that it can be relatively low cost

43:38

faster. And then this dependency of our

43:40

system or the file path kind of

43:43

blocking that. And while that's in another

43:45

way, if you want to change all

43:47

these things, you need to break a

43:49

lot of things. So that will

43:51

break the existing user. So I'm thinking, okay, maybe

43:53

a safer way is I would do it from

43:56

scratch as another project so I can break as

43:58

much as I want. And and

44:00

I can try different ideas. And

44:03

then after these things, okay, this kind of

44:05

actually works out. So I can use the

44:07

ESM. Oh yeah, by the way, at other

44:09

times probably ESM is not popular enough for

44:11

Shiki to adopt it, but now it is.

44:13

So now I'm able to load a lot

44:15

of things from ESM. And

44:17

ESM is also trying to support the web

44:19

assembly natively, but that's the spec for the

44:22

future. So it's not yet now. So

44:24

basically with the whole rewrite, it

44:26

can achieve more efficient and more

44:29

environment agnostic thing. And

44:31

then because I break a lot of

44:33

things, I try to think creative and

44:36

trying to use the cutting edge things

44:38

as much as possible. And

44:40

then looking back, if I compare to what

44:42

I break and what is breaking, and actually

44:44

I can provide in a compatible layer. So

44:47

for Shiki-G it also has a Shiki-G Compat

44:49

project, a package that's just

44:51

using the same engine, but

44:54

it just trying to providing the legacy

44:57

format, input and output. So you

44:59

can basically swap the original Shiki

45:01

without changing any code. And

45:03

then it also works, but more efficiently.

45:06

And while that's if you prefer the

45:08

new things that you can migrate over, so

45:11

something like that. So we are

45:13

trying to find a way to merging

45:16

the Shiki-G project as the next version,

45:18

a major version of Shiki. So

45:21

eventually these two projects might be merged

45:23

together so you don't have these

45:25

different things. And I'm still

45:28

talking with the original author and we

45:30

are trying to find a way. So

45:32

that's what I've been working on. Good luck.

45:35

Yeah, thank you. Well,

45:39

I wish we could dive into more, but unfortunately we

45:41

have a non-infinite amount of time. And I do want

45:43

to get to a few questions at the end. You

45:46

have what is probably my

45:48

favorite personal website background of

45:50

all time. It's this beautiful little

45:52

visualization that slowly grows when one

45:54

visits antfu.me. Can you tell us

45:56

about that and what generative art

45:59

is? Oh,

46:01

thank you. So I

46:04

think that in 2022, no, it's like

46:06

2021, I said something. It's like, I

46:11

was with my friend to say maybe you

46:13

should do a like generative arts challenge. So

46:16

generative arts is like you're writing some

46:18

code to draw something to

46:21

generate in some graphics that looks interesting.

46:23

And because you have the program, so you

46:26

can, the input can be randomness. So you

46:28

can use some random function or you can

46:30

use something programmatically to generate in

46:32

these things. And with the cameras, you can do

46:34

it dynamically. So you basically can, you can draw

46:36

an animation or even with, you

46:39

can do some interaction. So you can grab

46:41

the position of your mouse and take

46:43

that data to do something. So

46:45

generative art is like just creating some and

46:48

any graph with some code. So

46:50

at that time, so we are trying

46:52

to do a 100 day challenge to

46:54

say every day you're going to make

46:56

generative art. So every day can be

46:58

a different. So I'm trying to think

47:00

about different way of doing that. So

47:02

that's why I have a website to

47:04

hosting all my, my experiments. The

47:06

link is like 100 dot NTFU dummy

47:10

is my website. But yeah, unfortunately I

47:12

didn't finish the 100 day. I think

47:14

I end up at 41 day or

47:16

something, but the background of my website

47:19

is coming from one of the

47:21

day. It's a growing tree. So

47:23

I call it plum because the branch is

47:25

very short. It's more like a plum, how

47:28

plum grows. So the logic itself is very

47:30

simple. So also that's why I love it.

47:32

So it's like, you grow a branch and

47:35

you draw a branch and after

47:37

drawing a branch, you decide to kind of

47:39

roll the dice. 50% it will

47:41

grow a left branch and 50% will grow

47:43

a right branch. So eventually some

47:45

branch will end up with no new branch and

47:48

some branch will continue growing. And

47:50

then with iteration, so like every

47:52

500 milliseconds you, you

47:54

draw a new branch and then it's

47:57

growing and start growing. And

47:59

that's really interesting. So the rule

48:01

is simple, but the outcome, I really like it.

48:03

So I put it as the background of

48:06

my website. So yeah, I

48:08

think I should do more. I think. That was

48:11

my next question. Do you ever plan on resuming

48:13

that 100 days challenge? Yeah, I

48:15

do. But it's

48:17

really, yeah, I think I really enjoying

48:19

that period. It's like you trying to

48:21

be creative and trying to think of

48:23

different approach. But also really

48:25

tiring, to be honest. It's

48:27

like you have the pressure to be, today

48:29

you're going to finish it. And if you want

48:31

to be easier next day, you

48:34

have to think before. So

48:36

after you finish today's mission, you

48:38

start to think about the tomorrow.

48:41

If you can't have the rest of the day,

48:44

you can think about it. It's like, it'll be

48:46

easier for you to like having half a day

48:48

or like, of course you have a life to

48:50

go on, you have work to do. So you

48:52

have to find time to think about it. But

48:55

it's like, I think idea doesn't come from hardworking,

48:57

I guess. You don't think it really hard to

48:59

come up with the idea. You got the inspiration.

49:02

So yeah, I think probably that part

49:04

really scared me out. So maybe I

49:06

should try it. But

49:08

I just like think about that day that it's just

49:10

really hard for me to go back to these things.

49:13

But yeah, I think that also like challenged

49:15

me a lot on my programming skills. Like

49:18

how to do the animation, how to do it

49:20

in a session way and how you can, yeah,

49:23

I think especially evolve with the

49:25

graphs. Graphics is like, because you

49:27

have the metrics, you have like

49:30

millions of dots to deal

49:32

with. And you have millions of

49:34

loop. And you also like, you

49:36

need to optimize it in order to not

49:38

running on a very low frame rate, something

49:40

like that. So I think that's a very

49:42

fun. And yeah, I don't,

49:44

I cannot give a promise, but I

49:46

probably should continue doing that. Well,

49:48

let me know if you do, that'd be lovely. There

49:50

is, I think, an interesting parallel or

49:52

a contradiction, almost a dichotomy in how

49:55

one writes graphics or graphics intensive code

49:57

versus traditionally what you would want in

49:59

open source. source, you want your

50:01

code to be clean and readable and someone who

50:03

has no idea anything else in the project can

50:05

come in. But then a graphics code, the opposite

50:07

priority comes into play, it needs to be efficient,

50:10

and you need to micro optimize and that can

50:12

really harm readability. Yeah, that's true. Yeah.

50:14

And I think that's kind of quite a challenge that

50:17

you try to looking for the balance

50:19

of both. It's like, what if you can

50:21

write a clean code that can be efficient.

50:23

And yeah, that's a, for

50:25

me, it's like a really fun challenge

50:28

to me to work with, because in

50:30

the end, you got the fast and

50:32

also clean code. And that's really interesting.

50:35

I mean, that's based on the fact that you're

50:37

going to you end up with that, but it's

50:39

not always the case. On the other

50:41

hand, do you ever feel a sweet happiness from

50:43

no longer having to worry about writing clean, readable

50:46

code for the prospective newcomer to just hack some

50:48

crap together and get it onto the page? Yeah,

50:51

I think yes. But also, like, one

50:53

thing I find is interesting is like, there

50:55

are some like hacky code, right? And you

50:57

will feel bad about it. But if you

50:59

extract it into a library, and you just

51:01

import it from a library, you don't you

51:03

don't mind it anymore. Because the complexity is

51:05

hidden in the library. So the hack is

51:08

not here, it's there. I

51:10

don't care. Yeah, that's beautiful.

51:12

But I think hack is also like a relative

51:15

turn to me. It's like, at

51:17

this moment, when you think about an idea

51:19

is hack, but it's like, when you will

51:21

maintain or well test by some library to

51:23

say it can be a reliable thing. If

51:26

you deal with that, and someone's maintaining that

51:28

and probably it can be a valid solution

51:30

to something. The industry is constantly

51:32

learning how to do stuff better. The most beautifully

51:34

written code today in the latest and greatest meta

51:36

frameworks, we would probably consider that to be a

51:39

hack and looking back at it 20 years from

51:41

now. Yeah, exactly. Yeah. Well,

51:43

that's a lovely note to end on. Last question

51:45

for you. Where would people be able to

51:47

find you online? So

51:49

I have my website, ntfu.me,

51:52

ntfu is my handle. So

51:54

on GitHub, I'm also ntfu. And

51:57

Twitter is with the sevens or ntm. I've

51:59

used And I think basically you

52:01

can find all the links on my website. And

52:04

it's very pressure to be here. Oh,

52:07

it's a pleasure to have you. Thank you so much. And

52:09

to any users of any of your software

52:11

who are listening, I'd highly encourage them to go sponsor you on

52:13

a lot of sponsorship platforms. Actually

52:15

are you currently on GitHub sponsors? Yeah, GitHub

52:17

sponsors, yeah. Well, that's great. Thank you again

52:20

so much, Anthony, for hopping on the podcast.

52:22

This has been a pleasure. Cheers. Yeah,

52:24

thank you. Thank you.

Rate

Join Podchaser to...

  • Rate podcasts and episodes
  • Follow podcasts and creators
  • Create podcast and episode lists
  • & much more

Episode Tags

Do you host or manage this podcast?
Claim and edit this page to your liking.
,

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features