spotifyovercastrssapple-podcasts

elm-land with Ryan Haskell-Glatz

We discuss elm-land, how it compares to elm-spa, and its philosophy of making Elm mainstream.
September 11, 2023
#90

Transcript

[00:00:00]
Hello Jeroen. Hello Dillon. It's time to take off that face mask, take those cucumbers off
[00:00:07]
your eyes and get out of the spa because we are moving on to Elmland. Oh Elmtown is back
[00:00:14]
but you're going to Elmland? Absolutely and no more cringing at my pronunciation of it
[00:00:21]
because it's just Elmland, simple as that. I mean now you only you always say Elm SPA
[00:00:27]
so I'm good with it. That's fair. All that work for nothing. All that work for nothing
[00:00:32]
but if there ever comes a new Elm SPA then I know you'll be good. But now Elmland and
[00:00:40]
we have a nice guest with us. We have Ryan again. Ryan Haswell-Glass, welcome. Hello.
[00:00:44]
How's it going everyone? 1000% renamed the project because spa and SPA. Could not, I
[00:00:51]
didn't know how to resolve that conversation. But yeah, first when you said face mask I
[00:00:57]
was like oh god it's COVID. Like I was so scared. Like what's happening? Am I not in
[00:01:03]
the loop? And then the cucumbers. The cucumbers. That would be a weird combo. Yeah that brought
[00:01:08]
me back. I'm like ah alright I'm getting the visual. This is good. This is definitely better.
[00:01:12]
I was confused until a little bit later. But no it's great to be back. Thanks for having
[00:01:18]
me back on the show. Yeah great to have you Ryan. And well so we're here to talk about
[00:01:22]
Elmland and it is not quite 1.0 but why don't you just tell us like what is the gist of
[00:01:31]
Elmland and you know in a nutshell how does it compare to Elm SPA? Totally. Yeah Elm SPA
[00:01:38]
I mean if people walk away from this and be like oh Elmland's the next Elm SPA I'll be
[00:01:42]
happy with that. Elmland is kind of a I took a step back. I might have brought this up
[00:01:48]
on the previous episode of Elm SPA but when I first got into Elm SPA I really thought
[00:01:55]
I was just going to make an Elm package and that's all that I needed to do. I just wanted
[00:01:58]
to make something to make that boilerplate for like wiring up a browser application easier.
[00:02:05]
And as I started to like get deeper I realized I couldn't get the ergonomics I was looking
[00:02:10]
for without doing a little bit of code gen or generating those basically that case expression
[00:02:15]
in the update or in the view without having the person's custom type in my package there'd
[00:02:20]
be a lot of like pattern matching with underscores at the end. It was kind of a it wasn't a win.
[00:02:25]
So I didn't want to have that. I didn't want to have bugs for people forgetting to wire
[00:02:28]
things up. So Elm SPA was initially just like it kind of brings me back to like the early
[00:02:33]
days when I was learning Elm where we kind of had one tool for everything and that was
[00:02:38]
like I feel like a sense of like we had a sense of pride around that. It was like if
[00:02:41]
you want to use UI we have Elm UI. If you want to use GraphQL, Elm GraphQL. And if you
[00:02:46]
want to do routing, Elm routing, just kidding. Elm SPA because I had to break the pattern
[00:02:51]
there. But no like I feel like I wasn't interested in kind of providing answers for those other
[00:02:58]
areas but as I started to you know talk to more friends about Elm and try to figure out
[00:03:03]
like you know what's what's keeping you from trying it you know where'd you get stuck.
[00:03:09]
I started to realize that the holistic experience of building web apps is tricky and I wanted
[00:03:15]
Elmland to kind of be like hey let's just like handle the whole problem like how do
[00:03:21]
I do this how do I do that. Not necessarily make tools for everything but I wanted Elmland
[00:03:25]
to be able to just focus on like the most critical issue and address that. So that's
[00:03:30]
kind of that's kind of how Elmland spiritually differs I guess from Elm SPA if that makes
[00:03:34]
sense.
[00:03:35]
Right. So yeah philosophically I hear you talking a lot about Evans let's be mainstream
[00:03:42]
talk in this context. I believe that's the inspiration for the rainbow logo.
[00:03:48]
Absolutely. Yeah totally. Yeah that was my first that was my first talk and that was
[00:03:51]
like what got me hooked. So that always gives me a nice warm fuzzy nostalgic feeling.
[00:03:57]
That's awesome. Can you summarize like what were your takeaways from the let's be mainstream
[00:04:01]
talk for anyone who hasn't seen it or doesn't hasn't seen it for a little while maybe.
[00:04:06]
Totally. Yeah my takeaway was so when I watched that the context was I was a JavaScript developer.
[00:04:12]
I was working at a web agency and I was using like react and Vue.js primarily. And when
[00:04:17]
I saw that talk I felt like it was addressed to me and I felt like the gist of the talk
[00:04:24]
was like hey there's this weird thing called functional programming. And if it's the quote
[00:04:30]
he had that really like it hit it was just like if it function if type functional programming
[00:04:35]
is so great outcome no one's using it. And that just like as someone that didn't know
[00:04:40]
it I was really satisfied to hear that. I was like yeah what's up with that. You know
[00:04:45]
what's going on over on the other side. The big takeaway for me was that historically
[00:04:51]
you know these functional languages have been maybe maybe the direction of the marketing
[00:04:56]
wasn't exactly what we wanted but almost designed for like people building front ends. And so
[00:05:02]
when I heard that it was like let's let's make a tool for people building front end
[00:05:06]
UI as opposed to like let's make a nice UI language for functional programmers. And that
[00:05:12]
really like I think helps like guide a lot of the decisions with Elmland which is like
[00:05:18]
yeah like if I have the choice whether to make it like familiar and accessible to a
[00:05:22]
JavaScript developer or make it like the most type safe or the most correct I'll usually
[00:05:27]
lean towards approachable. Normally I don't have to make a trade off because I'm so so
[00:05:32]
nice about that but that's kind of that's why we like it right. Totally totally. But
[00:05:38]
so that's kind of that was my takeaway. It's like what I realized I had been doing for
[00:05:43]
years as like a community member was that telling not showing and I was really being
[00:05:48]
like oh like there's all these guarantees and you know you have all this and you don't
[00:05:52]
like you don't get it. There's you know this is like a whole new level of building things
[00:05:58]
and I wasn't really connecting with some of those core concerns is like I feel like a
[00:06:03]
lot of people do get bought into the vision of Elm but they just have a hard time. How
[00:06:07]
do I use it now. It's like great like this is perfect. This sounds like I don't want
[00:06:12]
to run time exceptions but like how do I use it. And so I really wanted to start shifting
[00:06:16]
to focus on how to answer those questions. Right. I've noticed that the way you talk
[00:06:23]
about it and the way the guide the language of the guide the tone is very focused on the
[00:06:29]
task at hand and not jargon and not like just high level. What are you doing rather than
[00:06:38]
how you're doing it and what language features and immutability and even talking about like
[00:06:45]
custom types and the specifics of how you're doing it. It's more just like hey let's let's
[00:06:51]
add a new URL to our app kind of general language that anyone could understand. So you don't
[00:06:57]
mention monads it and we're in the guide. No no I do that. Yeah I do that never. That's
[00:07:03]
my advice. I still don't. I still feel like after using Elm professionally for like over
[00:07:09]
five years I still don't feel like I have a good grasp on exactly what that word draws
[00:07:15]
a line around. Like I know I'm using them. I know that there's like oh this and that
[00:07:19]
and this and I've heard the rules maybe three or four times and I forget them every time
[00:07:25]
and it's never matter. Sorry sorry functional programmers. I feel like I've got a good grasp
[00:07:32]
of what it means. But then whenever people really use it in a context like oh it's a
[00:07:38]
monadic X or monadic Y. I'm like no you lost me there. Yeah. Oh that's the monadic bind
[00:07:46]
that I'm like yeah you betcha. Yeah. Monadic bind. Yeah. That is like the literal thing
[00:07:52]
what it makes a monad in my opinion or in my understanding at least. But then whenever
[00:07:58]
they use it somewhere else I'm like oh no I don't get it. From what I understand it's
[00:08:05]
like a burrito and I consider myself an expert on burritos. I'm not very good at binding
[00:08:10]
burritos but I know that people do bind burritos so that must be why they're monads. So I feel
[00:08:15]
like the title barista is totally misused on coffee people. That should be on burrito
[00:08:20]
experts. I just. Why don't we have a word for that. And monad experts. Yes. Baristas.
[00:08:28]
So you've talked about this sort of like more holistic vision of making Elmland accessible
[00:08:35]
to people beyond just making a tool making a guide making a community. I think you know
[00:08:45]
you've really explored like that broader vision which is really cool just to like for people
[00:08:50]
who are new to Elmland to bring it back to like what it is exactly. There's still an
[00:08:56]
NPM package at the end of the day just like there's an Elm SPA NPM package. You can NPM
[00:09:01]
install Elmland as well and it gives you something that you can run commands to give you a dev
[00:09:08]
server to add new routes and like the actual tool itself at the core of it is pretty similar
[00:09:16]
to Elm SPA right. Yes that's very true. Yeah the CLI tool it's really just yeah a bit of
[00:09:22]
scaffolding a bit of code gen and then the only difference is that dev server kind of
[00:09:27]
got upgraded from Elm SPA. I think that's like the biggest difference in terms of capability.
[00:09:34]
So when you say that that's or you mean a tool that helps you run it in development.
[00:09:39]
Exactly. Yeah. Yeah. So I mean this this is a great example of like a difference between
[00:09:43]
Elm SPA and Elmland in terms of philosophy with Elm SPA. I made my server. There was
[00:09:48]
an Elm SPA server command. I was like oh it'll be like Elm Reactor. It's not really you're
[00:09:52]
not supposed to really use it for like you know doing full development because you can't
[00:09:56]
you know with Elm Reactor you can't like import your JavaScript you know web components or
[00:10:01]
anything like that. And with Elmland server I'm like why am I why am I asking people to
[00:10:07]
download this thing and then kind of giving them like half a tool where it's like yeah
[00:10:11]
you can use this until you like really want to use it and then you should go figure out
[00:10:15]
here's like a bunch of examples for how to use something else. Then it goes back to like
[00:10:19]
that core thing. It's like people don't want to pick a dev server. They just want to just
[00:10:23]
want to build something and just the tool should get out of their way. And I always
[00:10:27]
thought it was crazy before my days of Elm the fact that like the front end engineers
[00:10:31]
have to like build their own compilers for like oh this is my SAS pipeline and it's going
[00:10:36]
to go here. And like in the early days it was like Gulp and Webpack and you just write
[00:10:40]
all this code about how to like it's like cut it out. I want to make the button round
[00:10:46]
you know like get out of my face. But yeah. So with Elmland it's there's like there's
[00:10:51]
a little bit of configuration I kind of put in air quotes that don't probably translate
[00:10:56]
over the radio if I don't say that out loud. But the thing with configuration is it's like
[00:11:02]
yeah what link tags do you want to render in the HTML. Do you want the debugger. Yes
[00:11:07]
or no. You know for development for production. But you can just run Elmland server on a new
[00:11:12]
project and you don't have to configure anything special. It'll just work out of the box.
[00:11:17]
Right. And it has a Vite integration built in right.
[00:11:20]
Correct. Yeah it's using Vite under the hood and I don't expose the internals of that.
[00:11:25]
I might have like there's some discussion in the community about you know should we
[00:11:29]
just have that with like a warning. Basically my fear with exposing the internals for the
[00:11:34]
server is that if I you know JavaScript changes so fast if something happens in six months
[00:11:40]
and now everyone's using what's the Vercel one turbo turbo something turbo pack. It's
[00:11:46]
like the whole you know JS ecosystem pivots to using turbo pack for whatever reason. I
[00:11:51]
don't want Elmland developers to have to do that upgrade by hand. I'm like yeah that's
[00:11:57]
something that the framework can handle. You just want a really fast development experience.
[00:12:02]
You want your error messages in the browser. That's a framework problem. That's not a your
[00:12:06]
company problem or your side project problem. So I've done my best to try to hide that it's
[00:12:11]
Vite not like hide and sneak away but not have people bound to that technology the same
[00:12:16]
way that I feel like a lot of frameworks you know before would be like OK like here's your
[00:12:22]
web pack integration or here's your gulp. You know here's where you put your build tool
[00:12:28]
stuff because I've just seen how that changes so fast.
[00:12:31]
Right. So can you if you wanted to use SAS as CSS could can you configure Vite to do
[00:12:41]
that or I guess maybe Vite has that out of the box. I can't remember.
[00:12:44]
I'm not sure. They might have SAS the way that you would do it in Elmland is so there's
[00:12:49]
an example in the repo. I think there's assets and a CSS like folder up on the official repo
[00:12:56]
but the way you do it is you just compile your SAS to CSS using like the SAS package
[00:13:03]
from NPM those CLI tools you just kind of would run concurrently with with the server
[00:13:09]
and then output that in a generated CSS file. But it's not coupled to Vite in any way or
[00:13:14]
coupled to the dev server in the way that we're used to.
[00:13:18]
So they have to do it manually or with their own custom scripts next to Elmland right.
[00:13:24]
Basically yeah. So the example is you run NPM dev and it spins up Elmland server and
[00:13:28]
it spins up SAS watch or whatever it is. SAS watch.
[00:13:32]
SAS. Yes. But that allows you to you know in a few months everyone's doing post CSS
[00:13:39]
for everything everyone's doing tailwind. It's like yeah just plug in whatever you want.
[00:13:42]
The artifact that Elmland cares about is a CSS file. Give me that CSS file. We'll put
[00:13:47]
it in the browser and you're done. Everything else I don't think needs to be conflated but
[00:13:52]
I know I know that's kind of the direction that a lot of the ecosystem is right now.
[00:13:58]
So I'm curious about something now. So you're saying that the main difference between Elmland
[00:14:04]
and Elm SPA is the dev server. So so why didn't you just add a dev server to Elm SPA.
[00:14:12]
I think on the tooling side the big the big upgrade on the CLI side was the dev server.
[00:14:17]
But in terms of like the scope of the project I think Elmland more so differs in like its
[00:14:22]
philosophy and the amount of guides and resources and like I think a big example is like the
[00:14:28]
VS Code plugin. That is not a CLI tool by any means but it's like I watched someone
[00:14:35]
on Twitch try to use Elmland for the first time and it was an early version of Elmland.
[00:14:41]
There were plenty of little bugs that I was taking notes as I watched. And the biggest
[00:14:45]
problem that they ran into is their editor would just kind of be crashing giving them
[00:14:50]
false positives on errors. And I was like this is the number one problem with Elmland
[00:14:55]
is that they can't type. So like whatever it takes to make that holistic experience
[00:15:02]
work that that's kind of what Elmland is. It's not just the not just the CLI tool whereas
[00:15:06]
Elm SPA kind of was. Yeah. So you felt like a rename was probably a good step. Yeah totally
[00:15:12]
just just a step back and maybe it's just because I got the domain. Who knows. But it's
[00:15:18]
definitely a different project in spirit. It feels like. Just to clarify it is Elm.land.
[00:15:23]
Elm.land. Yeah. That is pretty cool. That's pretty sick. Yeah. So are you now president
[00:15:29]
of Elmland or. I am the janitor of Elmland. Okay. CEO janitor. I'm the only employee.
[00:15:37]
I'm literally anything. So I don't know. I do it all. But we do have a dictator. A benevolent
[00:15:43]
dictator for life. Yeah. In charge of one person. Yeah. So I don't know. That's like
[00:15:50]
every political system. You could pick any of them and it would work. Just one guy. It
[00:15:54]
does remind me of something I heard with with Bunn the creator of this Bunn JS runtime was
[00:16:01]
talking about how if like since the goal of Bunn is performance oriented like I guess
[00:16:07]
backward node backwards compatible high performance runtime he was saying that he didn't want
[00:16:13]
anything to be out of scope of what he would tackle if it was on the critical path for
[00:16:19]
improving performance. So if it's right to put it. Yeah. There's some like package he
[00:16:26]
need NPM package he needs to build because that's what's slowing down people's experience
[00:16:31]
executing JavaScript code quickly. Then it's like OK that's in scope. So your attitude
[00:16:35]
here reminds me of that in a similar way where it's just like all right let's look at somebody
[00:16:41]
is maybe somewhat experienced with web development but their interest they're curious about Elm
[00:16:47]
and how can you give them an on ramp that's going to make it as delightful as Elm promises
[00:16:54]
to be holistically as the whole experience of getting started using it. Totally. Totally.
[00:17:00]
Yeah. And there's like so many steps on the way like I when I was first learning it was
[00:17:04]
like finding the right educational like content the right resources and like wrapping my head
[00:17:09]
around the concepts and finding like analogies to what I knew. So like I think there's going
[00:17:14]
to be more development in that space in terms of like what I work on with Elmland is like
[00:17:18]
just providing more concrete resources like look this is a real app. Here's how it works
[00:17:23]
you can play around with it. And yeah yeah it's really about that whole that whole experience
[00:17:28]
just like you said. I really do like I like the like that perspective when you shared
[00:17:32]
with the bun crater. That's cool. Yeah. Yeah. I mean I've heard people saying really good
[00:17:38]
things about the Elmland guides and I think that's really cool that you're kind of I mean
[00:17:45]
you know as as you run loves to quote the Elm philosophy take responsibility for user
[00:17:52]
experiences. So it is very Elmy to take that ownership and say like it's not enough to
[00:17:59]
say that someone else's problem. Like if it's if they're experiencing that problem using
[00:18:03]
my thing then I'm going to take responsibility for that. That kind of ties into like a feeling
[00:18:08]
that I had early on and I know I've talked to you about this and I've talked to like
[00:18:12]
Matt Griffith about this. But when the community was so small in the beginning there felt like
[00:18:17]
there was a contrast of like stepping on people's toes and like it because it felt emotionally
[00:18:25]
easier to be like oh like I don't want to like mess with UI because that's like you
[00:18:29]
know Matt's domain or I don't want to mess with GraphQL that's Dillon's domain. And so
[00:18:34]
yeah there was like I think there was a hesitation initially. So I definitely I definitely get
[00:18:39]
why that hasn't happened historically in the Elm community because everyone's so friendly
[00:18:43]
and everyone's so close that no one wants to really be like hey don't use this use this
[00:18:48]
you know and no one wants to be competitive internally. So yeah I think that was probably
[00:18:53]
the biggest like emotional hurdle for trying to like make a framework that encapsulated
[00:18:57]
so many different aspects of building web apps. I'm like am I going to be stepping on
[00:19:02]
the toes of the people that like helped me get here. You know what I mean. That was like
[00:19:06]
a freaky. That was a freaky thing. And in talking to you and talking to Matt you guys
[00:19:11]
were both like no don't worry about it. Like what. Yeah great stuff. We want great stuff.
[00:19:17]
Totally totally. I totally understand that. Yeah it is true that when people say oh I
[00:19:23]
want to make this tool for doing GraphQL and like well there's Elm GraphQL that Dillon
[00:19:29]
made and like yeah but I still want to do like my own thing or like there's something
[00:19:35]
that Elm GraphQL doesn't support or something like that. The best solution is usually like
[00:19:41]
go talk to the author and see if you can do if you can improve their solution because
[00:19:49]
that leaves less choices to the user like which GraphQL package do you want to use.
[00:19:55]
Well this if there's one and it's great then that's the best experience that a user
[00:20:00]
can could ask for. If there's like five and they're all like well in this case in your
[00:20:06]
situation you might want to use this one or this one or these three other ones then that's
[00:20:11]
not as great. So there's this advice which I tend to give and I still tend to give but
[00:20:19]
I totally understand that also prohibits people from doing something because yeah you're going
[00:20:26]
to need to do something new in some cases like with Elmland.
[00:20:31]
That reminds me of that reminds me of the coolest. Hey coolest is extreme. The coolest
[00:20:37]
thing I ever heard in a tech talk from the Elm community was Richard Feldman gave a talk
[00:20:43]
about Elm UI and Richard Feldman most I'm sure everyone on this podcast knows and if
[00:20:48]
not don't feel bad sorry but Richard Feldman is like he made Elm CSS which was like in
[00:20:55]
my opinion like the de facto way to do CSS before Elm UI came out. It was you know there
[00:21:01]
was no alternative besides just not writing not writing it at all. And the cool thing
[00:21:06]
that he did was in his talk he was like yeah I made an alternative to this but like use
[00:21:11]
use this guys use Elm UI. I was like that was so cool because it gave us the benefit
[00:21:17]
of like yeah if you're like new to the community everyone regardless of who made what is like
[00:21:22]
advocating for you know the whatever the best tool at the moment is or whatever the most
[00:21:29]
likely to be successful tool is. But it's still allowed like Matt to create Elm UI which
[00:21:34]
like if you tried to this is maybe a silly example but like if he tried to coordinate
[00:21:39]
with Richard Feldman it's like hey I think you know like we really want one way to do
[00:21:43]
UIs maybe Elm CSS should look like this instead. I think that would have been like slower for
[00:21:47]
him and so I'm kind of glad that he went and said like no I don't in order to like experiment
[00:21:54]
or explore I don't need to really necessarily coordinate with Richard Feldman in terms of
[00:21:59]
like the projects like vision you know what I mean. Does that make sense or is it kind
[00:22:05]
of a yeah. A hundred percent. Yeah. In this example the vision of Elm CSS and of Elm UI
[00:22:12]
are different. So if the vision is different then you don't want to pursue the same path.
[00:22:18]
You don't want to have one project or at least if they're two different. Totally. Yeah they're
[00:22:24]
similar enough. I think it's great to collaborate. So was there like other projects which you
[00:22:30]
thought ElmLens visions conflicted with or coincided with. I don't think it conflicted
[00:22:36]
with anything. I mean the only similar tool in the space is Elm Pages and at the time
[00:22:40]
I mean before the v3 update there really wasn't too much overlap in terms of use cases. Now
[00:22:46]
the v3 is more like dynamic and it's kind of more like remix like style. There's definitely
[00:22:52]
overlap there. But I don't know I don't I don't see like I guess Dillon and I will talk
[00:22:58]
about like hey like this API is what I'm thinking about and we like share share ideas and ideas
[00:23:03]
from I know like Dillon's error messages for example from Elm Pages v2. That was something
[00:23:09]
that inspired ElmLand. And was it the shared model or what was the thing that was borrowed
[00:23:14]
from Elm SPA was the shared. I definitely definitely yeah borrowed shared you know you
[00:23:19]
doing the file based routing definitely gave me the confidence to be like oh yeah I guess
[00:23:25]
I guess that would work OK and like because at first I was like all these JS tools that
[00:23:31]
do it have much more flexible file naming patterns that you can use whereas with Elm
[00:23:38]
like you can only has to start with a capital letter and the only special character you
[00:23:43]
can use is underscore but but not at the beginning for some reason. Yeah exactly. Yeah totally
[00:23:49]
yeah. Yeah. I feel like I feel like that's an example of like two explorations that strengthened
[00:23:56]
each other as they grew because I mean the culture the culture within the Elm community
[00:24:01]
has never felt to me like you know X versus Y. Yeah for me the biggest like responsibility
[00:24:09]
that that I've felt and we've discussed this together is just like how do we explain to
[00:24:14]
people how to navigate these choices like how do we help them understand what the trade
[00:24:21]
offs are so that they know going into it how to how to make a good choice. And I think
[00:24:27]
that's like because I don't know I mean I think we're just trying we're all just trying
[00:24:32]
to improve the Elm community and strengthen that and having different having different
[00:24:40]
perspectives out there different you know tools that have a different approach or that
[00:24:44]
solve different you know maybe slightly different maybe overlapping problems but slightly different.
[00:24:49]
There's a lot of value to that and the innovation in itself is really valuable too. So even
[00:24:53]
if something is overlapping a little bit but it's innovating I mean it can get to the whole
[00:24:59]
JavaScript fatigue level and that's you know that's not ideal but I definitely don't think
[00:25:05]
we're there and I think there's value to the experimentation too. So is Elmland if somebody
[00:25:11]
is starting a new project right now should they use Elmland or Elm SPA? Elmland even
[00:25:17]
though it doesn't have that 1.0 version we have now surpassed the functionality as well
[00:25:24]
as the I think the quality of Elm SPA. On August 12th I know this podcast is going to
[00:25:31]
be recorded or posted a little in the future so I'll try to be specific but on August 12th
[00:25:35]
I released a live stream video on my YouTube of you know upgrading Elm SPA from scratch.
[00:25:41]
Yerun was hanging out in the chat I think Yerun's the first chatter you'll see if you
[00:25:44]
watch that but it took about you know an hour and hour 15 I'd say to migrate the real world
[00:25:52]
Conduit app over and it was mostly half of that was me just joking around and chatting
[00:25:57]
with people so sorry if you have to watch all that it's it come join the Twitch stream
[00:26:01]
it's more fun that way but yeah I upgraded the real world app and it was really just
[00:26:07]
it always comes back to the same thing Evan did such great work with the Elm compiler
[00:26:11]
I just get to piggyback off of that awesome user experience so if you have an Elm SPA
[00:26:16]
project and you want to like upgrade it like the Elm compiler will literally just tell
[00:26:21]
you everything you will in that stream you will watch me use about 2% of my brain and
[00:26:27]
hopefully the Elmland guide will cover the rest of like what does this error mean kind
[00:26:32]
of stuff.
[00:26:33]
So if you thought that Ryan was smart he's actually 50 times smarter than that.
[00:26:39]
Yeah no I think that what people should know about me is that I choose Elm because I want
[00:26:45]
to be dumb you know I don't I don't like I don't want to be fancy at work I don't want
[00:26:51]
to be clever I just I want to just do it the dumbest way possible and that just works and
[00:26:56]
it's reliable and it doesn't keep me up at night so Elm matches my personality I would
[00:27:00]
say.
[00:27:01]
Yeah I would say I like to be smart I like to feel smart but I don't like having to be
[00:27:07]
smart in order to program.
[00:27:09]
Fair enough I think it's hilarious to say I'm stupid I think that's just like a funny
[00:27:13]
sentence and fun to say so like if you just say that a few times it's like all of a sudden
[00:27:18]
starts to grow on you it's like I'm an idiot you know it feels good.
[00:27:21]
And that's one of those sentences where the more you say it the more people will believe
[00:27:25]
you.
[00:27:26]
I hope so.
[00:27:27]
Cool.
[00:27:28]
Only a fool would think that they're smart though let's be honest.
[00:27:33]
Yeah there's a name for that thing but I don't remember it.
[00:27:37]
So you said that if someone went to start with building a new Elm application you would
[00:27:43]
probably recommend Elmland or at least if they considered Elm SPA.
[00:27:49]
Do you think that Elmland is also at a point where if you just if you're new to Elm you
[00:27:55]
should start with Elmland or should they go through the Elm guide first?
[00:28:00]
I think if you're like me and you you learn with like examples I think Elmland is a great
[00:28:06]
place to start just so that you can it depends where you're coming from.
[00:28:10]
So Elmland was designed for for folks working with React or Vue who are familiar with you
[00:28:16]
know frameworks like Next.js or you know SvelteKit or whatever that just lets them just like
[00:28:21]
add a page add a button that kind of stuff.
[00:28:25]
Definitely the Elm guide is like a resource that you should check out but when it comes
[00:28:30]
to getting a feeling for the language and like experiencing the compiler I think leading
[00:28:35]
with syntax especially in Elm can be harmful because it gives the wrong idea.
[00:28:41]
I think we kind of have a culture of like hello world like when you're looking at the
[00:28:44]
examples how many lines of code is it how weird do the letters look and it doesn't really
[00:28:49]
capture the feeling of oh I like change this and I got a really nice error message.
[00:28:55]
So I personally think that starting with examples whether that's Elmland or you know another
[00:29:00]
framework I think starting with the framework is a really good way to get a honest view
[00:29:04]
of what it would be like to work with the tool as opposed to comparing kind of snippets
[00:29:08]
and learning like like whoa they use plus plus instead of plus like I'm out of here
[00:29:13]
like what is this.
[00:29:14]
It's like that's not what you're going to hate in a year.
[00:29:18]
Yeah that's actually true like the Elm guide is amazing but one of the other amazing things
[00:29:24]
with Elm is the compiler error messages and I don't think the guide mentions it much or
[00:29:33]
nearly enough like just the fact that you should rely on the compiler error messages
[00:29:38]
and that this is just great part of Elm.
[00:29:41]
I don't think it does put enough emphasis on it.
[00:29:44]
Yeah it's hard because it's like a you know a Gitbook and it's really the goal of that
[00:29:49]
document is like how does the language work at a fundamental level.
[00:29:52]
I mean that's that actually really does resonate what you just said with me because when I
[00:29:57]
was reading the Elm guide I was I was I was I had like one foot out the door.
[00:30:01]
I remember looking at the syntax being like this is weird.
[00:30:04]
I don't think even if I could figure it out if this is something that I'd want my coworkers
[00:30:09]
to be exposed to and then it wasn't until I saw that button example like the counter
[00:30:15]
you know plus minus and there was a challenge at the end of the guide section was like hey
[00:30:20]
add reset.
[00:30:21]
It wasn't until I did that that I experienced the compiler and I'm like oh like this is
[00:30:26]
nuts.
[00:30:27]
I just typed in like some weird alien language and I just added a feature and it was right
[00:30:32]
on the first guess with no help and I'm like whoa.
[00:30:35]
And it circles back to I'm not smart like I'm telling you guys this is something you
[00:30:40]
could do with no experience and the compiler does guide you.
[00:30:43]
I think yeah I think a lot of people when they see people that can use these tools the
[00:30:48]
assumption is oh they must be different than me they must be able to do something.
[00:30:52]
It's like no.
[00:30:53]
I was a Vue.js developer like we're all on the same team here.
[00:30:56]
I didn't know you really have to believe Ryan he's really not that's not so dumb.
[00:31:01]
You guys someone tell me.
[00:31:04]
I'll just you have to ask my coworkers.
[00:31:10]
Is there anything else on your radar.
[00:31:14]
We talked about like that this idea that nothing is out of scope for trying to like give this
[00:31:23]
easy on ramp for helping people get acclimated to Elm with this goal of let's be mainstream.
[00:31:30]
Like what other points of friction do you see for users with their on ramp to Elm right
[00:31:38]
now.
[00:31:39]
Some of which you might have solved already and some of them you haven't.
[00:31:43]
Yeah.
[00:31:44]
Of the things I haven't solved.
[00:31:46]
So I set out with that like initial like Elm land you know hello world post or whatever
[00:31:51]
I set out for the goal of like you should be able to build GitHub with Elm and every
[00:31:57]
you know the framework should be able to handle an app with that level of complexity and without
[00:32:02]
without setting like that concrete goal I wouldn't have catch all routes right because
[00:32:06]
you can't have GitHub without that file explorer page where you don't know the depth of the
[00:32:11]
users you know get repo you don't know if it's source CLI read me or if it's you know
[00:32:18]
read me dot basically like the depth of the URLs.
[00:32:20]
So catch all routes was something that was added.
[00:32:23]
But in terms of things that are still missing like if I wanted to make it up there's two
[00:32:27]
big things that are missing one you could get around by using you know some type of
[00:32:34]
I don't know like serverless function or something which is like meta tags for GitHub when you
[00:32:38]
share a repo you want to see a nice preview of that image you want to see you know you
[00:32:42]
shared on discord shared on Twitter you need to have meta tags at server render time for
[00:32:47]
those those meta tag crawlers to work and that's not something that Elm land supports
[00:32:52]
that's not something in the near term that I think about adding but it would be nice
[00:32:56]
to have an example of how to do that you know maybe with for sale or with Netlify like hey
[00:33:01]
if I wanted to do meta tags if someone had I think it was someone at Elm camp that was
[00:33:06]
I was like yeah I don't use Elm land for anything that needs meta tags and they were just like
[00:33:09]
can I just do that function I was like oh yeah I guess yeah thanks so that makes sense
[00:33:15]
the other thing is initially I was thinking about a UI plug-in and a graph QL plug-in
[00:33:19]
I've since backed off of the UI angle I think making a UI frameworks really hard yeah there's
[00:33:26]
like ideas I had an experiment that actually is public if anyone wants to play around with
[00:33:31]
it this is not Elm land related this is at Ryan NHG slash CSS dash in dash Elm CSS and
[00:33:40]
Elm and what it does is I just write my CSS file and I use this like you know 2 million
[00:33:46]
plus NPM download package that Svelte uses to just scan the AST grab the class names
[00:33:52]
and just generate me a file called CSS so I can just say CSS dot row that goes so far
[00:34:00]
I've been building out like a product with this just like you know playing around with
[00:34:04]
it and it's insane you can delete a CSS class and get an Elm error message you don't make
[00:34:09]
typos in Elm it's like you can use Elm review to figure out unused CSS in your dot CSS file
[00:34:16]
all with the ergonomic benefits of just typing CSS and like getting the auto complete from
[00:34:19]
your editor and all that I was that was like 40 lines of code and I just published it so
[00:34:24]
that people could could try it out and it's not it's like not perfect there's like little
[00:34:28]
like bugs that I work around because I don't care about it being right I just I'm using
[00:34:32]
it and it's great but I don't want to make a UI package for Elm land I think Elm UI 2
[00:34:38]
might be on the horizon I don't know the timeline is for that I want to hold anyone anything
[00:34:42]
but I've heard rumors that that might be a thing and then GraphQL when I was working
[00:34:47]
at vendor I kind of started that I kind of started the GraphQL project a little bit but
[00:34:52]
then with like resourcing and stuff Matt Griffith was able to take that and take push over the
[00:34:58]
line there were some ideas that I wanted to explore with GraphQL that I think would be
[00:35:03]
really great and most importantly I want to have a really good documentation experience
[00:35:08]
for people working with GraphQL so if you're making a GitHub app you're going to want to
[00:35:12]
use the GraphQL API so that's actually something I've been working on in the past like within
[00:35:16]
the past week I was just kind of tinkering around with that and seeing where that goes
[00:35:21]
but yeah I think GraphQL meta tags those are the biggest limitations right now and when
[00:35:26]
it comes to building real things but I think they have a future for Elm land for me is
[00:35:31]
building stuff and finding those gaps that's been really satisfying I love to start new
[00:35:35]
projects and I love to like deploy things and share cool cool screenshots and gifts
[00:35:41]
so I think I'll continue to do that and then that'll reveal more more holes in the framework
[00:35:47]
but yeah that's cool so it sounds like maybe like the guides fill a big part of that gap
[00:35:54]
for you of making the onboarding experience easier absolutely yeah I think there's a lot
[00:36:00]
of stuff where it's like it's doable now but it's not clear how to get there and so like
[00:36:04]
there's some things where it's like yeah I don't even have to implement a feature I just
[00:36:07]
have to explain a concept components the component section of the guide is something that it
[00:36:11]
took me years to really find a pattern that I was happy with when it came to like advanced
[00:36:15]
you know components that needed to not only keep their own state but also you know bubble
[00:36:20]
up events to the to the parent and so I think the components section in the online guide
[00:36:25]
is like one of my favorites because I feel like I could finally share that share that
[00:36:31]
that problem I had for years solution to that with people what are some of the highlights
[00:36:35]
of the component section of the guide yeah highlights is you know using using the simplest
[00:36:42]
component possible so it starts by just introducing you to like if you want to make a footer and
[00:36:47]
it doesn't have any interactivity just make a function called footer and put some markup
[00:36:51]
in there and if you want to make something that's highly configurable I recommend using
[00:36:56]
Brian Brian Hicks had that robot button from Mars pattern so if you just find yourself
[00:37:03]
trying to do the first thing where you're just making a function but you have all these
[00:37:06]
optional arguments that you don't want to specify explicitly every time use that builder
[00:37:11]
pattern very useful and then yeah when it gets in the stateful the there's it's I think
[00:37:17]
it's called like the one two threes of elm components or whatever in the guide that third
[00:37:20]
level is the really interesting one which like answer the question that I had which
[00:37:24]
is how do I keep state private how do I guarantee that like my drop downs closing itself and
[00:37:29]
you know when I search it's managing that that search string but I'm not making the
[00:37:34]
the call or wire that up every time and so a lot of that is optimizing for making the
[00:37:39]
component easy to call at the cost of making the update function do the you know do the
[00:37:44]
HTML mapping and all that kind of stuff for you doing doing them the mapping internally
[00:37:48]
so so is this more of a tutorial or a really a guide or does element also do something
[00:37:55]
special with those components it is just a just a guide or a tutorial and it's in the
[00:38:00]
concept section if you go to elm elm dot land slash guide it's just kind of introducing
[00:38:05]
you to components in general but kind of putting in context of the elm framework or sorry the
[00:38:10]
elm land framework where we have a fact dot send message which is kind of a core core
[00:38:16]
feature of bubbling up events and things like that but you could use this in a vanilla elm
[00:38:20]
app you could use this in elm pages the technique totally stands for anyone who has an existing
[00:38:24]
on project today and it's what we've adopted we adopted at vendor and we are not using
[00:38:30]
elm land you know at vendor yeah I recognize a lot of patterns that we use at work as well
[00:38:34]
so definitely good things in here someone tweeted something that really warmed my heart
[00:38:39]
the other day it was something like this like oh I just wish I knew about this elm land
[00:38:43]
framework it's like all the things we use at work that it's like public now or whatever
[00:38:48]
I forget the exact wording but it was cool to like to feel validated by it's like yeah
[00:38:52]
if you made a bunch of people figure it out on their own and no one coordinated they'd
[00:38:56]
all arrive at that solution it's a concurrent evolution yeah I think the point that he was
[00:39:04]
trying to make was something like I spent years coming out arriving at the same solution
[00:39:11]
so if elm land was here today or back when I started then I would have jumped a few years
[00:39:18]
already yeah hopefully that's what we're that's what we do we can you know achieve as a community
[00:39:23]
it's like just building those foundations so people the next wave of elm developers
[00:39:28]
starts a little bit higher up the rung than we did mm-hmm yeah I mean when I started the
[00:39:33]
question was like how do you do an elm SPA yeah right and now we're we're past that it's
[00:39:40]
like how don't you do an elm SPA how do you do a single page app which with literally
[00:39:49]
one page place great I tried I tried making one page but I had to make two like what the
[00:39:57]
hell it was very difficult figuring out in those early like the early elm 19 days figuring
[00:40:07]
out how do you build an SPA I mean because you we really do rely on these patterns and
[00:40:13]
examples and you know once you've done it you you know what to look for so you can you
[00:40:20]
know plunk it out but but yeah I mean like how do you approach components how do you
[00:40:26]
build an SPA you know in the case of elm land it takes care of the routing for an SPA and
[00:40:32]
all the wiring so that's even better you don't even have to think about it which really is
[00:40:37]
I think as it should be like it just I don't see any value in manually doing that wiring
[00:40:43]
yourself personally I think I think that's well done as a solved problem but um but there
[00:40:49]
are many things in elm where it is sort of like elm is such a simple language that it's
[00:40:55]
just like there are these patterns and this is the natural way to do it but it's hard
[00:41:00]
to figure out those patterns on your own so a little guidance goes a long way for things
[00:41:05]
like how do I do a component and and in this guide you're choosing to use these terms I
[00:41:11]
think that someone from a JS background would be more comfortable with even though it is
[00:41:16]
sort of frowned upon to talk about it like a component in elm because it's like well
[00:41:22]
components are object-oriented things that hide state and we don't do that in elm yeah
[00:41:29]
I I had like an elm SPA component guy that was with that energy was like well we don't
[00:41:33]
really do it that that's not the elm way that's the JavaScript way and we do it this way and
[00:41:38]
then I joined vendor and that's I shared this with Matt Griffith and he's like well then
[00:41:41]
how do you do this and I'm like well well it's I guess I don't do that then because
[00:41:46]
I can't with that limited you know I was so now I kind of embrace like no it's fine we'll
[00:41:51]
do it that way because that's I don't know how else to do it good you know so it's okay
[00:41:56]
to very rarely I will create a stateful component like that but when I need it it's great to
[00:42:01]
know how to do it I think that's probably the biggest difference with JS it's like everything
[00:42:05]
is is that by default one thing I really liked with elm SPA so Dillon talked about that it
[00:42:12]
does all the wiring for you handle all the boilerplate or a bunch of boilerplate one
[00:42:18]
thing I really liked with elm SPA is that that boilerplate was made using code gen and
[00:42:23]
that you could actually just find that boilerplate you could because it was in your dot elm SPA
[00:42:31]
folder or something and if you were wondering like where is this page used or how is elm
[00:42:41]
SPA using it in this boilerplate that I don't know well you can look at it and the magic
[00:42:47]
would vanish it's like oh it's just it's just that simple do you still have that in elmland
[00:42:53]
yeah still look great yeah absolutely yeah so now there's a big changes instead of an
[00:42:59]
elm SPA folder I've moved it to an elm land folder and oh my god so sorry I will say the
[00:43:05]
biggest difference in terms of the generated code is two big differences I'll call out
[00:43:11]
one elm land doesn't use a package elm SPA did so there was some portion of the elm SPA
[00:43:17]
generated code that was kind of behind an elm SPA package with elm land it's just using
[00:43:22]
URL it's just using like all the all the native kind of elm modules that people are used to
[00:43:28]
so there's no like other thing to look at and there's no confusion when I talk about
[00:43:32]
you know installing elm land it's like no not the package you can't find it so if you
[00:43:37]
if you go to the elm packages thing and you search for elm land I didn't make one someone
[00:43:40]
could please don't it'll confuse people I was thinking of doing it right now no I did
[00:43:45]
not do this there will be a for this episode there'll be a your own elm land with a reading
[00:43:49]
that says got him but no the that's one big difference and the other difference is with
[00:43:57]
elm SPA when I couldn't figure out how to solve a problem I would just make main elm
[00:44:02]
customizable and what that did was it allowed people to like you know they weren't limited
[00:44:09]
by the framework and I felt like I would get you know pinged less or whatever but with
[00:44:13]
elm land I'm really doing my best to be like if you have a problem everyone's gonna have
[00:44:18]
that problem how do we solve it in the framework in a way where I'm not putting the cost on
[00:44:22]
each individual company or each individual user using the project so main is no longer
[00:44:27]
customizable in that same way but now because of that trade-off now pages and layouts they
[00:44:33]
have access to these hooks they have URL change hooks which in most cases were more ergonomically
[00:44:39]
beneficial and was one of the requested features for elm SPA so by constraining you know the
[00:44:45]
ability to customize main all of a sudden oops it's just a better experience out of
[00:44:50]
the box for everyone and more features that are helpful so you can't eject out of some
[00:44:57]
parts of well and elm SPA I guess that's because you could configure your view or you can configure
[00:45:06]
your main or you can configure some things right but now yeah with elm land the only
[00:45:12]
difference is the main file is not ejectable but view is ejectable effect shared everything
[00:45:19]
that you you needed to have access to before the 404 page all those are still ejectable
[00:45:23]
totally customizable except for main main was my name was just like I don't know guys
[00:45:29]
here you go you know please don't don't yell at me on slack that was just like a I don't
[00:45:35]
know what the word is can you also define your own index that HTML or something so you
[00:45:40]
do but rather than specifying at as HTML you're gonna specify what tags you want in your elm
[00:45:47]
land JSON file and the reason for that is if you have control over the HTML file you
[00:45:52]
are coupled to beat if you're using a certain module import for example that works in beat
[00:45:58]
I didn't want anyone to get coupled to the framework so what I did was I exposed those
[00:46:04]
link tags those script tags those meta tags as data that can be specified in a data format
[00:46:10]
and then I can translate that into whatever you know dev server we're we're using in six
[00:46:15]
months a huge example of when this can be beneficial I need to coordinate with Simon
[00:46:20]
Lydell about this you had a you had a elm radio episode with him about elm watch that
[00:46:25]
tool is amazing I want that in elm land I think it's like the best elm hot reloading
[00:46:30]
experience I've ever seen with this approach without being able to customize the HTML file
[00:46:36]
I can upgrade everyone to use elm watch for the elm files and they can continue to use
[00:46:40]
beat for their you know npm packages and all that stuff but the but the core could be using
[00:46:45]
that yeah when you said you're defying your own dev server I was like oh then you can't
[00:46:51]
use elm watch exactly awesome the trick is we need to you know figure out this there's
[00:46:56]
some it's like oh I like parcel better like feet better but at the end of the day it's
[00:47:00]
like performance when you save the file that's another huge thing I need to work on at the
[00:47:04]
elm land performance when you when you're generating the code but we just want the best
[00:47:08]
thing it doesn't matter like if people want to argue tabs versus spaces or you know indent
[00:47:13]
two versus four or like beat versus parcel I'm like that's great for the elm community
[00:47:18]
if you want that's not great for elm land elm land is like I want to make a button it's
[00:47:22]
got to be red I'm talking like real red and you got to be able to click it and make dollars
[00:47:27]
we're not going to worry about the those little those little debates within within the framework
[00:47:32]
so you don't define your index at html but you define it in some other way and you can
[00:47:38]
also define your own ports or define your own web components if you wanted to exactly
[00:47:44]
yep and I think it takes an approach similar to I think Dillon did this in elm pages where
[00:47:49]
rather than have a html file we're importing like the elm and doing elm main init it's
[00:47:55]
just a file where you can say hey this is where my flags are gonna go this is where
[00:47:59]
my this is a function I call when my elm app is ready and they have access to environment
[00:48:05]
variables and they have access to the app that that second function has access to the
[00:48:09]
app where you can access the ports and all that kind of stuff I really like that approach
[00:48:13]
and that does keep it agnostic of the framework or the dev server
[00:48:18]
yeah no it's it's really interesting to hear how your thinking has evolved with the customizing
[00:48:24]
main because in our elm spa episode that we had with you a while back you talked about
[00:48:32]
not wanting to have users blocked on something you didn't think of and I mean I thought that
[00:48:39]
was a really cool insight in in general this idea that like you know let's not make users
[00:48:46]
too dependent on me thinking of every single way they could possibly build an app but I
[00:48:53]
think you've maybe still kept that thinking that you you don't want users to be limited
[00:48:59]
by your imagination but maybe by providing some hooks and extension points you can give
[00:49:06]
them all the tools they need to do that in a more cleanly packaged way that isn't as
[00:49:13]
much of a sharp knife totally I think the I think the big thing is that's easy for me
[00:49:18]
to make a main customizable but what's really cool in terms of like a social like structure
[00:49:23]
is if I don't make it customizable I get bug reports and I actually get feedback so maybe
[00:49:29]
it's a little bit messed up but that's how I get I can get you know hey this how do I
[00:49:33]
do this and I'm like great if you could customize main you never would have told me that you
[00:49:37]
couldn't do this and then you'd come in you'd do it you'd have a bad time and that would
[00:49:42]
be a secret thing that happened at your company that you'd be suffering with for months and
[00:49:46]
I'd be like if you just told me I could have flipped this switch you know let me know about
[00:49:50]
it you know yeah and then you could come up with the best solution for everyone and now
[00:49:56]
no one will have that problem anymore I think a great example is something that I didn't
[00:50:00]
do is like the a lot of people want to use tailwind CSS and they're like how do I use
[00:50:05]
that the in the online discord there's a community member Dazoni who just like made a made a
[00:50:11]
plugin it's just so cool when just having a place where people are like I just want
[00:50:14]
to build it with this how do I do it and I can like link to someone's repo I feel like
[00:50:18]
there's a huge weight off my shoulders and people are like working together and that's
[00:50:22]
like a space where yeah no one's like everyone's like collaborating and I want to see more
[00:50:27]
of that I want to see more people joining that community and feeling empowered to make
[00:50:31]
suggestions and even like code changes to the the framework I don't want to be like
[00:50:35]
the bottleneck in terms of feature development so I try to encourage people when they do
[00:50:40]
suggest a feature I'm like that's a great idea and I would I'd love to review that here's
[00:50:45]
here's what I would need like if you just add this example or you know show what you
[00:50:48]
want we have a really cool test suite this is a bit of a tangent where it's not unit
[00:50:53]
tests it's not elm tests it is it's called bats and it's bash automated testing something
[00:51:00]
I don't think that's something but it's something else that starts with s and all I do is I
[00:51:05]
just have like tests that are like run elm land expect the output says welcome to elm
[00:51:10]
land run elm land add page blah blah blah you expect an error message it says hey specify
[00:51:16]
a valid url it's really nice and so with all these examples in the official repo I just
[00:51:23]
have run elm land build in that folder and that's a part of my automated testing so it'll
[00:51:28]
catch if I add a feature that breaks interop you know as long as there's an example that
[00:51:33]
perfect pretends prevents regressions and the cost of adding a test is adding an example
[00:51:38]
which is also beneficial because then people have something to click through and run on
[00:51:42]
their computer that is the most happy I've been with tests in my entire life I feel like
[00:51:47]
I'm not a very good TDD person so like I never really know how to start or how to but those
[00:51:52]
are like the most payout out of any test I've ever written I'm sure Dillon is like super
[00:51:57]
proud of you yeah no that's amazing it does sound great yeah and enters are huge I would
[00:52:05]
like to have actually more of this kind of fully end-to-end tests where it's actually
[00:52:11]
like running the CLI for for elm pages I do have a lot of Cypress tests where it's actually
[00:52:18]
spinning up a browser and running through examples and executing back-end tasks and
[00:52:24]
running tests against them and I mean it's it's very easy to write you know you just
[00:52:29]
like expect this text to exist in the browser and you know it's like it's it's not rocket
[00:52:35]
science but it gives you a lot of confidence that it's actually doing this thing it's actually
[00:52:41]
printing this error message when you go to this route or if you if you remove a route
[00:52:47]
the 404 page in the dev server correctly guides the user on how to add a new page or whatever
[00:52:53]
you want to do you know so yeah that's huge it's huge for contributors yeah yeah I think
[00:52:59]
it's great because it's like the most important thing to me is that the promises that I make
[00:53:03]
on the guides are kept and so I love that the tests that cover my cover my butt when
[00:53:09]
uh when there's a breaking change so like I that's that's been great yeah and and I
[00:53:14]
mean talking about like creating a delightful on-ramp for for users right I mean if it's
[00:53:21]
if it's janky if it's glitchy it's not gonna be super delightful and at the end of the
[00:53:26]
day we're we're stupid right that's we're all self-admitted idiots so yeah except for
[00:53:32]
you and he's like no stop calling that you guys that fool how could he how could he not
[00:53:39]
think he's stupid but uh Dillon and I are stupid yeah definitely we're very stupid I'm okay
[00:53:45]
you're in the middle of the road you mean I stand in the middle of the road I don't
[00:53:54]
know I don't think that would be very middle of the road of you but yeah if you're if you're
[00:54:00]
stupid then you'd better write some tests to make sure when you make a mistake it catches
[00:54:04]
it because you will make a mistake because you're stupid right so I wouldn't love the
[00:54:08]
um compiler so much if I wasn't if I was able to like remember everything about everything
[00:54:13]
all the time you know like there's a certain like implicit like you know why you're here
[00:54:18]
because you know you make typo and typo make bug exactly elm is not a very good language
[00:54:23]
if you are a perfect genius who never makes any mistakes then yeah use assembly like get
[00:54:29]
out of here imagine the imagine the elm compiler remembered all of your mistakes and reminded
[00:54:37]
you of past mistakes when you make errors like oh again made this typo again yeah I
[00:54:45]
want that you know you sorry go ahead do you know you've made this mistake like 432 times
[00:54:51]
now that would be awesome another type mismatch come on I think what we should actually add
[00:54:58]
to the elm compiler is uh sometimes I make a typo that's a funny word it should chuckle
[00:55:04]
it should like ha you accidentally type like fart or something you know it's like I think
[00:55:09]
you meant to type first but that's hilarious bro I think you should have a sense of humor
[00:55:14]
the dictionary I often write uh list dot fitler oh yeah I do that too yeah I typed something
[00:55:21]
live on stream it was horrible oh I I mistyped flags and I'll just I'll stop there I like
[00:55:31]
screened oh and I just like immediately deleted it I was like I'm gonna get my VOD taken down
[00:55:35]
I'll get canceled it's horrible I had a heart attack but we should change that for your
[00:55:41]
name you do not deserve that rainbow logo that's true yeah yeah so earlier you mentioned
[00:55:48]
someone made a tillwind plugin they made a example repo uh they didn't make anything
[00:55:54]
too fancy or too specific to the framework but um yeah they basically made a resource
[00:55:59]
for people to use they click on it and then this is like a just like the examples in the
[00:56:03]
folder I think at some point I need to work that into the official repo but I haven't
[00:56:08]
had a chance to run it and play around with the experience to make it like official yet
[00:56:12]
but it's people have been using it and it's been really nice um allegedly from those people
[00:56:17]
I haven't I uh as as I told you I'm writing raw CSS and doing weird things that's cool
[00:56:26]
how do you think about that community so you have you have an elmland discord we'll drop
[00:56:31]
a link in the show notes to that tell us a little bit about the discord and the community
[00:56:35]
and and how you kind of think about building that community totally yeah I think so since
[00:56:42]
we already have the elm slack it didn't really make sense for me to have a separate space
[00:56:45]
with the same goals it's just like hey what if we had a smaller pool of the existing developers
[00:56:52]
something I noticed on the elm slack is that there is a big variety of of different folks
[00:56:57]
on there there are people that are excited about uh functional programming like language
[00:57:01]
syntax there's people that want to you know uh make cool packages and then there's you
[00:57:07]
know there's some people that want to like build apps and and get unblocked and do stuff
[00:57:11]
like that so the goal with the elmland community was to be able to set a tone of you know if
[00:57:18]
you join this discord if you know whether you're coming from react or view or angular
[00:57:22]
we don't x versus y here we're never gonna make a a subtle joke about you know oh like
[00:57:28]
this wow let's look at this new react library this is pretty bad or something like we're
[00:57:32]
not gonna do that kind of stuff what you come to the elmland discord for is hey I've got
[00:57:37]
this cool project I want to share it with people that are enthusiastic about you know
[00:57:41]
using elm to build things I'm looking at the I'm looking at the discord itself on the right
[00:57:45]
here but like I have a question right I'm a beginner I tripped up on got this error
[00:57:51]
message so it's really like a practical like troubleshooting as well as kind of celebrating
[00:57:56]
like real real work but there's no like channel for like you know argue about oh camel versus
[00:58:04]
you know haskell syntax and I kind of joke about that but like no moral judgment on that
[00:58:09]
at all it's just like that's not what I wanted this space to be it's just uh it's off topic
[00:58:15]
I guess is the way to think about it but yeah I mean uh what's come out of that so far is
[00:58:22]
like my favorite thing about elm favorite thing to see online is when people share like
[00:58:25]
things they built whether that's like a 3d car or like a website or an app or like a
[00:58:30]
I saw someone make like a midi app one time I wanted to create a space where people you
[00:58:35]
know if they weren't on twitter and they didn't feel comfortable doing that publicly they
[00:58:38]
had like a safe space where they could drop their project and we could all just spam it
[00:58:42]
with hard emojis and elm land rainbows and just have that kind of energy there so there's
[00:58:47]
been some really really cool projects that have come out of that and that's I'll post
[00:58:51]
my projects in there too so it's not just asking people to do it I'll do it too but
[00:58:57]
yeah I love that I mean I think you know like in in an elm spa or elm land slack channel
[00:59:04]
I mean I think you're gonna tend to feel a little more constrained if you want to just
[00:59:11]
spam with a cool project you're working on as you're giving updates on like oh this little
[00:59:18]
thing because it's like one channel and then somebody else is like asking a beginner's
[00:59:22]
question or somebody else is like trying to coordinate on like hey I want to add this
[00:59:27]
feature how can I contribute you know so it just opens up a little more space to give
[00:59:33]
people the the sense of comfort to just stretch out and do different things there in this
[00:59:40]
space and really build a community so I think I think that's a great idea to build a little
[00:59:46]
discord community sweet yeah I mean incremental elms out there I remember that too and it
[00:59:51]
is cool you have channels for different topics and you can kind of mute what you don't want
[00:59:55]
to talk about and it's a good vibe yeah which ones do you mute we're gonna judge you now
[01:00:00]
I'm gonna pull it open and see what I got muted do I have anything muted I don't have
[01:00:07]
anything muted I was too excited what a nerd anything muted do I no for anybody who doesn't
[01:00:15]
know incremental elm is a is a discord we have for contributing to the elm ecosystem
[01:00:22]
so it's completely focused on rolling up your sleeves and building things or giving feedback
[01:00:29]
less focused on the sort of slack what slack excels at giving help for for user questions
[01:00:36]
and things like that so yeah that's been a really cool space for us to cheer each other
[01:00:42]
on as we're kind of building fun projects yeah it's cool to see like all these channels
[01:00:47]
like cogen and like a forum and like all these different threats where it's like yeah if
[01:00:52]
you want to contribute to the ecosystem you've kind of got like a channel for everything
[01:00:55]
here which is great yeah I'm a big fan of these little communities with a very clear
[01:01:01]
purpose and I think I think communities thrive when there's kind of a clear theme to it all
[01:01:08]
so we talked about elm land 1.0 and is it basically is the headline for 1.0 that it
[01:01:16]
will come when you can successfully recreate github with elm land yeah I don't know if
[01:01:23]
if I'm gonna wait until like like an actual github clone is is out or like a you know
[01:01:28]
like a basic github clone is out that might that might be what stops the 1.0 release that
[01:01:33]
might be like a satisfying way to go but I really think it's it's about those features
[01:01:36]
that I would need to make that possible let me see if I've got it here yeah so like performance
[01:01:43]
improvements is big I think elm watch is a must it's it's like very very high very high
[01:01:49]
up maybe not a must necessarily because you still have a dev server but I think there's
[01:01:54]
a big room for improvement there's some missing guide sections for some reason I just forgot
[01:01:58]
about the interop section and the environment variables for anyone listening right now like
[01:02:03]
today you can make a dot env file and it just works it's very good but I didn't write I
[01:02:09]
didn't put no one I told nobody so that's kind of stupid so I got to put that in the
[01:02:13]
guide hard dogs are so hard I admire you for putting so much love into these docs because
[01:02:19]
it really is extremely hard yeah it's been the most time-consuming part of the project
[01:02:24]
though as they say the code is the easy part and it's really just been yeah a lot of docs
[01:02:31]
work I want to have like a clear answer to testing I want to like figure out what's the
[01:02:36]
easiest way like I've got elm review on here like the things like that where it's like
[01:02:40]
what's the like the normal de facto way to build an app and GraphQL is I need to have
[01:02:46]
an answer for it not necessarily a library I'd like to make an onland GraphQL plugin
[01:02:51]
but it does as long as I can point people in the direction of like hey here's how you
[01:02:55]
write GraphQL code and and make queries without having to write those decoders by hand I think
[01:03:01]
that's good and then beyond 1.0 I think it's just more more examples and more interactive
[01:03:06]
videos or more educational videos sorry it kind of feels like minor improvements or not
[01:03:13]
major improvements so it feels like you're almost there yeah it really is it's a lot
[01:03:17]
of minor stuff this last released 0.19 weirdly intersecting with elms current version that
[01:03:24]
was like the big that was the big thing where it was like I'm finally past elm SPA it's
[01:03:30]
finally like I've got those framework errors and you know it's it's ready for people to
[01:03:36]
upgrade to and yeah it was such a weight off my shoulders when I when I finally released
[01:03:41]
that so that was huge but yeah it's much a minor stuff but it's like the little stuff
[01:03:45]
that I think is really important it's like the remaining the remaining bit but yeah yeah
[01:03:50]
if you want to help contribute to that hop in discord and help me please we're almost
[01:03:55]
there then we can be big and exciting 1.0 people that's so cool yeah I mean it sounds
[01:04:00]
like you know I mean if I were if I were to guess before we had this conversation what
[01:04:06]
1.0 would involve I would guess like parody with elm SPA and and stability and and not
[01:04:14]
expecting any like major breaking changes for the sort of core functionality but it
[01:04:19]
sounds like that sort of 1.0 vibe is is kind of there at this point and you're like let's
[01:04:28]
be ambitious let's have 1.0 be like the guides are something I can fully get behind and say
[01:04:36]
I didn't miss any pages I you know people aren't tripping up on anything and we've built
[01:04:42]
like a holistic onboarding experience that's going to be really positive for people who
[01:04:47]
are new to elm for me 0.19 just means 1.0 so yeah right I think you're there our brain
[01:04:54]
translates it yeah well then I'll 2.0 to your own and 1.0 to the world I'll probably I'll
[01:05:00]
probably have a 20 in there before I have a 1.0 but we'll see but yeah no I'm excited
[01:05:05]
because I for a while I was streaming and then I was kind of streaming elm land development
[01:05:10]
and that's fine but like I'm excited about now that elm lands done getting to make goofy
[01:05:16]
things I was on the house on the way to lunch with my fiance or sorry not lunch I was I
[01:05:21]
was going for a walk with her this morning I was talking about you know what I want to
[01:05:24]
make I want to make a pet only Instagram you know you know just a bit goofy or it's just
[01:05:29]
like you can only have dogs and cats and they're just like doing stuff they're even doing like
[01:05:33]
influencer things you know like product placement but like only pets or something I don't know
[01:05:38]
I'm afraid of it and I'm not buying any domain so it'd probably be only pets that elm.land
[01:05:43]
oh that might have bad connotation so we'll think about the name we'll workshop that you
[01:05:48]
know like a mobile friendly dark mode that movies app that I just released last week
[01:05:53]
is like I really I really enjoyed that that was like a dark mode using a real rest API
[01:05:58]
type thing I want to I want to do more projects like that where people can just like have
[01:06:02]
fun using it you know they don't you don't have to dive in the code you can just be dazzled
[01:06:06]
that's fine yeah yeah at the end of the day we're trying to build cool stuff not build
[01:06:10]
cool stuff to let you build cool stuff yeah yeah although we spend a lot of time doing
[01:06:16]
that the three of us I'd say someone's got to do it you know and it's all right to do
[01:06:20]
and once it's done though you got to remember what our goal was in the beginning right exactly
[01:06:26]
yeah well amazing what should people look to to follow you for for future updates and
[01:06:34]
to keep an eye on elm land and what's going on there for sure yeah yeah if you want to
[01:06:40]
keep an eye on elm land if you go to join dot elm dot land that's that'll take you straight
[01:06:45]
to the discord I'm very cool subdomains I figured it out but yeah so elm dot land is
[01:06:51]
the website and then if you want to follow me on twitter I'm just at rhg underscore dev
[01:06:55]
I'll post when I go live on twitch on youtube if I have like youtube videos or whatever
[01:07:03]
but yeah the discord is a great place to see what the community is building so I definitely
[01:07:07]
if you only went to one of those links I would definitely recommend checking out the discord
[01:07:13]
or following following on twitter I guess if you're not a discord user yeah amazing
[01:07:18]
yeah and then I do have a github sponsors page for anyone that's interested in like
[01:07:23]
supporting the project you can go to l-9's website there's a sponsors section at the
[01:07:26]
bottom and you can just click sponsor and it'll take you to my face but yeah that would
[01:07:33]
that that'd be great there's just a few sponsors and they're already and it's just it's such
[01:07:36]
a satisfying feeling to know that like people are benefiting from it that they're excited
[01:07:40]
to to say thanks in that way and every dollar means I can like spend a little bit more time
[01:07:45]
on it it'll be really cool to be able to focus on this full time because there's a lot of
[01:07:49]
marketing work that would need to go into this before you know before we see that that
[01:07:54]
mainstream traction that I think everyone's hoping for yeah it's a great way to contribute
[01:07:58]
back if you if you enjoy the project well amazing stuff thanks so much Ryan for for
[01:08:03]
coming on and sharing all these thoughts with us it was really lovely having you back on
[01:08:08]
yeah for sure thanks for having me and Jeroen until next time until next time