Elm Town 67 – Breaking things down with Gingko Writer

OCTOBER 17TH, 2023
|
51:05
Adriano Ferrari talks about how Elm allows him to solely support Gingko Writer and make progress on new projects while also homeschooling.

Details
/
Transcript

[00:00:00] Adriano: when, I came across Elm and I used it just for a tiny little bit of my existing app, just the file menu and favoriting your documents, something like that.

[00:00:08] And just, it matched exactly what I had wanted in a front end language. And just like since then, I refuse to use anything else.

[00:00:18] Jared: Hey folks, welcome back to Elm Town. I'm your host, Jared M. Smith. We'll be visiting with Adriano Ferrari today.

[00:00:25] Sponsored by Logistically

[00:00:25] Jared: But first, let's talk about our sponsor, Logistically. At Logistically, we make intuitive software to help logistics professionals make better decisions and spend less time on manual tasks. Our transportation management system helps squeeze every drop of efficiency from logistics teams of all sizes.

[00:00:43] Logistically pays me to record Elm Town episodes as well as pays for our production and hosting costs. We build the front end for all new features in Elm. If you're interested in our mission and enjoy writing Elm, Please drop us a line, elmtown at logisticallyinc.

[00:00:57] com. I'll put a link in the show notes.

[00:01:00] Introducing Adriano

[00:01:00] Jared: Now, Adriano Ferrari. Adriano is a fairly quiet Elm community member, but he has an important role as social proof for Elm. He wrote and maintains Gingko Writer, a simple but effective visual writing app that's built with Elm. Adriano, welcome to Elm Town.

[00:01:18] Adriano: Thank you, thanks for having me.

[00:01:19] Getting started in computing

[00:01:19] Jared: I wanted to ask you just to kind of go back here and tell us a little bit about your journey.

[00:01:24] How did you get started?

[00:01:27] Adriano: computing?

[00:01:29] well, like many, it was, uh, you know, as a kid, basically. Um, I grew up in Kuwait, so my parents are from Argentina, but they left 50 years ago and they moved to Kuwait. So growing up there, there wasn't, like, a community for that, so I was pretty much the only one into that kind of stuff. So at first I started with, um, I was into 3D graphics and that kind of stuff.

[00:01:54] I think as early as the third grade, I was trying on an Amiga to like, make 3D graphics and things like that. It was quite slow going, but I've just always had that as an interest in the, in the background. Some, you know, basic programming. Um, and yeah, so that's the initial start for me.

[00:02:12] Jared: this is interesting. So, you know, like you said, you grew up in Kuwait. So I guess you, it sounds like there weren't a lot of programs there for, you know, learning, uh, programming.

[00:02:23] Adriano: Yeah, not very much. Not, not at all, actually. I mean, in a sense, there's always a lag between what's available as a hobbyist and what's available, what's taught and what's, you know, available in the broader community. And that lag is greater in a place like that. Um, especially back then, the internet wasn't a big thing.

[00:02:43] So, that's just like the early, early history, going way back. Um, yeah. But I eventually ended up, um, studying physics. I came to Canada to do that. And in there I was doing a lot of computer simulations. So, that's my main... A chunk of my work there was simulations, um, and, but no front end at all, nothing involving that kind of stuff.

[00:03:08] So,

[00:03:08] Jared: Okay. So that's where you came from. And then just kind of going back to that initial start, what resources did you use? How did you, So, get into that. How did you learn? Did you have

[00:03:20] Adriano: um, well, my parents were very supportive, so they did find one, like, elder nerd, let's say, who, like, mentored. At least it was just like, here's, here's some software, here's a book, you know, that's, that was pretty much it. And, uh, yeah, so that's how I went through it. But throughout, I was always thinking I was going to do computer graphics or things like that.

[00:03:42] Um, just towards the end of high school I was, um, torn between that or physics and I ended up deciding to do physics as my undergrad. But, uh, I always liked the computer side of things and that kind of stuff.

[00:03:55] Physics in Canada

[00:03:55] Jared: let's move ahead to the physics and, and learning there. Uh, what was that like in Canada?

[00:04:02] Adriano: Um, well, it was, first it was a big shock moving here by myself, 18, like, it was a completely different world, basically. The winter was a big shock as well, coming from Kuwait to Canada. But yeah, learning physics, I went up to a PhD in that, and I just found it excellent training for just being fearless when it comes to problem solving.

[00:04:29] So it's like, you often find yourself in situations where you have to solve a problem that seems insurmountable, but there's always ways that you can make approximations here, just selectively. You know, tweak the problem so that you can make progress with it. And that's just something I feel like is a useful skill no matter where you're going with that.

[00:04:50] To just not be afraid of complicated problems and just say, Okay, just lay it out and just work step by step to get to somewhere where you can make progress.

[00:04:59] Jared: Okay. Interesting. Yeah, I like that. Uh, kind of gaining a, a lesson that you can use and take anywhere, right? So, uh, could you describe that a little bit more of, of maybe some of the, the techniques that you might have found and how you apply them otherwise? Are the places I mean?

[00:05:18] Adriano: Yeah, I mean, like, let's see, I don't want to get too deep into the physics portion, but for example, the, the simulations I was doing was, uh, why do some like charged molecules attract each other, even though they should be repelling each other? So, for example, DNA is a polyelectrolyte, and in solution, it should have a charge and they should repel each other, but then there's some...

[00:05:39] Additional forces there that make it, counterintuitively, they, they do come together. Um, this is way back, by the way. If anybody who has a physics background here watching might, you know, have something to say about these things. But anyway, um, yeah. And so, like, there are simple things, like, what's the electric field of a sine, like, sine wave?

[00:06:02] A perfect, you know, perfect sine wave. You'd think that that would have a known solution, and it doesn't. And if you look in the literature and then like, at least at the time, try to find, like my first impulse was to try to find that solution existing, right? And I spent so long doing that, I figured, you know, I can just do this.

[00:06:21] I can do this myself and, you know, like, just come up with other results. Like, just that idea that if you don't, uh, if you can't find it, if somebody else hasn't, doesn't, hasn't done it yet, doesn't mean you can't do it yourself.

[00:06:32] Jared: Sure,

[00:06:33] Adriano: of idea. I'm not sure if that answers your, your example.

[00:06:36] Jared: Yeah, yeah, yeah, I like that awesome, um, and so yeah, you're you worked on an Undergraduate and a graduate and you know got all the way got your PhD in physics, correct Yeah, all right. And so you're doing all of that, you're gaining some lessons that you can take with you. At what point did you discover Elm?

[00:07:03] Discovering Elm

[00:07:03] Adriano: so, first, actually, I, I was working on writing my own thesis towards the end of that, and I had trouble finding software that fit how my brain worked and how I wanted to tackle this problem, basically. Um, and instead of like, you know, just buckling down and doing it, I went off a side quest to like, you know, I could either find some better software to do this, and I couldn't, and that's where I came in with, like, okay, what I want doesn't exist, like, can I design something that matches what I want to exist?

[00:07:39] At the time, I didn't have the front end skills to do that, so I hired somebody to develop the first version. So that was, uh, ten years ago now, I'd say. Um, and so it wasn't in Elm, obviously at the time it was not a big thing. Yeah, so that was the first step. Um, I had a falling out with my partner at the time, just, you know, differences.

[00:08:02] So I ended up taking over development from there. And the language it was written in, I think it was BackboneJS, or some framework. It was probably the best choice at the time, or one of, a decent choice at the time, but it was impossible to work with, in my opinion. It was just really hard to make any changes.

[00:08:22] And I don't remember exactly when I came across Elm, but it was something... Well, actually stepping back, again, thinking what the ideal front end language would look like, I sat down at some point and said, okay, for me, what would the ideal language look like? And I actually wrote down, um, like for my math background, what made sense to me was a pure function where you have a view, then you put in the state of the thing.

[00:08:46] And it spits out, you know, a tree. And then I'm like, okay, well, how do you change it? Well, you check the diff between the trees. So I went on some scholarly research to see how tree diffing works. And when I did that, I came across React. And I'm like, okay, this is similar to what I have in mind. So I started trying to learn that.

[00:09:05] But, uh, I found there was too many gotchas, too many leaky abstractions. And it just wasn't easy to work with. Okay, so... At some point, I don't remember when, I came across Elm and I used it just for a tiny little bit of my existing app, just the file menu and just like, you know, favoriting your documents, something like that.

[00:09:24] And just, it matched exactly what I had wanted in a front end language. And just like since then, I refuse to use anything else.

[00:09:34] Jared: All right, fair enough. Okay, So you had, you know, went on this, what you call it, a side quest. I like that, that's a, that's a good one. So you're on this side quest, you go down the road trying, React. And, you know, getting the, the conceptual thing that you're looking for, but finding it not to kind of fit to the ideal that,

[00:09:59] Adriano: Right.

[00:10:00] Jared: had, Right. Yeah, yeah, that makes sense. And then, so, um, you tried that, then you found Elm, and you take what I would call the kind of the, um, official recommendation for introducing Elm. It's, you know, try it in one little spot of the app, see how it works. If you like it, expand.

[00:10:18] Adriano: Yeah.

[00:10:18] Jared: Okay.

[00:10:19] Adriano: So I did that. I tried it. I liked it. But I didn't continue that recommendation. I ended up, so I actually had some back and forth with Richard Feldman, um, asking him for advice on my situation. And yeah, the advice was essentially don't start from scratch, you know, add it a little bit at a time.

[00:10:38] Um, but I, I didn't do that. And I don't know if it turned out to be better or not, but it was a lot of work to rewrite everything from scratch, but I had fun doing it, and the end result, I like where I ended up, so. But the thing is, I work for myself, and there's nobody telling me whether or not I should do it, and so that decision was, like, more of a personal one.

[00:11:00] Like, I think it worked for the business, and I decided, you know, it's what I want to do if I want to keep developing this. I want to do it in a way that I'm enjoying what I'm doing, I can make the changes I need to. And so, Elm was a clear choice in that sense.

[00:11:12] Jared: Right. yeah, that makes a lot of sense. And so the team size here is one, right? You're,

[00:11:18] Adriano: Yes.

[00:11:18] Jared: you're the sole developer. And so, Yeah. you can kind of just completely scratch, scrap what you had and then, uh, start from fresh within Elm. Okay.

[00:11:30] Perfectionism

[00:11:30] Jared: And so I want to, uh, mention there was a video that you recorded and put on YouTube called Tools and Perfectionism.

[00:11:37] Adriano: Okay.

[00:11:38] Jared: And in that video, you say, quote, with, I guess I'll paraphrase this because, um, just to make it kind of fit here. But with JavaScript, changing the whole structure of the code was difficult. With Elm, it's much, much easier to do. And I think you had a particular, uh, point to that. Do you want to kind of, if you can recall back to that, that's

[00:12:01] Adriano: I, I don't, but I can, I can, you know, uh, tell you what I think about it currently. Um, I think that when the difficulty of doing what you're trying to do is decreased, you, you're, you can have more of your time, more of your energy towards thinking about what should be done, what, what you want to do as opposed to how to do it.

[00:12:23] You know, it's like those two things take space in your mind. And the more that How to do it takes up the less you can devote towards what you should be doing. And to me, that's one of the most important things about using a language that fits how I think and how that I can make changes quickly and, you know, refactor things easily.

[00:12:42] Is that, that whole chunk of like, how do I do this is very, very small. And I spend most of my time thinking, okay, what should I do? What should I develop? What feature should I, you know, how should it be? As opposed to, how am I going to make this work? And I'm not sure if that was the point. I'd like, I'm curious if that's, that was my point back then, but...

[00:13:02] Jared: Well, I'll link to it and folks can kind of decide for themselves a little bit, but from what I understood, the actual point you were making in that one was that because Elm gave you this flexibility, um, it was kind of, I think, a struggle with perfectionism and, and, and kind of, you know, because you had the power to refactor, um, you found yourself refactoring multiple times.

[00:13:24] But I think also you said that, um, one of the benefits of that was that, you know, with each refactor you were, um, Trying different things and learning different things with each one. So I think, I'm the same way, like, I'm very much a struggle, in a struggle with perfectionism. So, I think for me, what I like about Elm is that yeah, it definitely narrows the scope of like what I have to keep in my head.

[00:13:48] So there's fewer overwhelming things that I'm thinking about. So yeah, I can just kind of focus on getting this one piece done. And I have this guide, right? The compiler is guiding me. So as long as I can, Find an approach. So I think there's a few different ones in Elm of like, where do I start? Do I start with the view?

[00:14:06] Do I start with the model or whatever? But like, let's just take starting with the model for example. If I make a small change to the model and I save it, you know, and I'm like, alright, you know, what's going to happen next? And kind of leave it to the compiler to tell me where I need to go. Um, that helps me avoid going down routes where I kind of get, you know, lost in like what I would do with JavaScript, where it would be, Yeah. like, Oh wow, this framework doesn't even really fit for solving this problem. Now I need to go, you know, find what's the other, oh, and then you say, oh no, but this framework does do it.

[00:14:40] It's actually in the next version. So maybe I need to upgrade this framework. and you spend so much time, or I spend so much time going through that process or learning a new feature or remembering how, you know, to do inheritance or, you know, whatever the, the feature was, um, in JavaScript or, you know, TypeScript or whatever.

[00:15:01] And so, yeah, definitely when I found Elm, it just kind of helped me narrow in and focus.

[00:15:06] Adriano: Yeah, absolutely.

[00:15:07] Little leak in your mind

[00:15:07] Adriano: And the, the thing is that it's like, there might be other frameworks that come close to that. In different areas of it, but the, the absolute confidence that comes from the compiler is an important part because like, let's say you get to the point where you are skilled enough in some other framework.

[00:15:25] If you don't have the, the, you know, the reliability of the compiler that's, it just kind of adds this little leak in your mind of like, did I forget something? Whatever the framework needs, you know, like something that you forgot to take care of. And that's not present, so that, it's just, you follow the compiler and you just make the changes and you can be confident about what you've done.

[00:15:46] Jared: You mentioned it as a leak, you know, and I like that as a, as a way of explaining the mental load, that it, can build in there that can possibly not be present in your mind until you've tried a tool like Elm where those leaks don't occur and then you can, Yeah, just have a more, more working memory, if you

[00:16:11] Adriano: yeah,

[00:16:11] for sure. And I, I, I think I've, like I can feel that, like in other situations when I'm not using, or in other problems, like when I come towards a problem and I feel a bit of anxiety as I'm working through it, it's like I know something, like I know I'm not covering everything. And that, that drains you a little bit as you go through, you know, and it's not something that I have to worry about.

[00:16:32] Like I said, with Elm, yes, the fact that it's easier to refactor means that if you have other situations like where you have perfectionism, then you might end up, you know, refactoring it incessantly and not actually delivering features. But if, if you manage to get over that, it does allow you to, to like, make quick progress and focus on what you want to make, what you want to exist.

[00:16:54] Jared: Yeah, yeah, I like that. Yeah, in this context of, you know, talking about the overwhelming feeling with JavaScript, I, um, had given a talk in 2019 and, yeah, it was about the JavaScript fatigue, so it's kind of what you're saying, like where you're you know, you're just kind of getting worn down by, by those things.

[00:17:13] And,

[00:17:13] Adriano: Yeah, a bunch of paper cuts, like, yeah, little, little annoyances here and there, and just at some point you're just, yeah, it builds up,

[00:17:21] Jared: Yeah, they just kind of snap you down. Yeah. Okay. Um, cool.

[00:17:25] Overcoming creative blocks

[00:17:25] Jared: And so I wanted to bring up another video that you recorded several years

[00:17:31] Adriano: I should have reviewed my own.

[00:17:33] Jared: yeah, I know.

[00:17:34] Adriano: forgot that I had, had something.

[00:17:37] Sure.

[00:17:38] Jared: But if you recall this one, it's in the video Reset Expectations to Overcome Creative Blocks. And I was wondering if you could explain your idea of resetting the range in that.

[00:17:51] Adriano: Um, I think the idea was that what you expose yourself to, Like, you know, what quality of code or what, if you're talking about writing, you know, what writing you expose yourself to. That sets a standard in your mind, right? And especially when you're starting out, you cannot reach that standard. And that, you know, if you have perfectionist tendencies, that gap is really painful, right?

[00:18:16] And it's hard to, like, do enough of the work to get, to close that. But just... Resetting expectations is quite simply looking at poor work. It's, it's, you know, it's unfortunate. It seems, you know, like, uh, unfortunate. You have to look at poor work to feel motivated about what you can do. But the thing is that it's like, it's, it works, you know?

[00:18:39] And like, in a sense, it's just showing you that like, Another way that I've been framing it as well that's a little bit more positive is, I set the bar at existence. So like, my bar is not... This high quality thing I've seen, my initial bar is always does the thing exist, right? And that's been helpful for me.

[00:18:58] Like, from there I can incrementally improve, especially if I have, you know, a tight feedback loop and like I know what I want. I can incrementally improve to where I want to be, or at least where I'm saying it's good enough. Um, but before you start, if your bar is up here, it's just really hard to get started.

[00:19:16] So, yeah,

[00:19:16] Jared: Yeah, I like that. So, I guess we can kind of tie that back into with Gingko Writer, right? Because this was a tool that you had went out searching for and found it just, it wasn't there.

[00:19:31] Adriano: right,

[00:19:32] Jared: So you had to, to make it happen. I like that. Yeah. so bring it into existence one way or another and just get something to done, right?

[00:19:40] Adriano: exactly. I didn't have to, I could have just finished my thesis with some other thing, but it turned out to be a good decision. Um, because I mean, towards the end of my PhD, I was, um, thinking that I wasn't going to be doing academia. And just starting that process of developing the software, it felt more like something I, um, it's something more like what I wanted to be doing.

[00:20:03] And so I like, I had a lot of tension towards those last years where I'm like, should I just drop the PhD and focus on this? But fortunately, I, I pushed through the last couple of years and then just finished it. Um, but yeah, it was, it was quite a slog doing those two things. Also, my son was born at the same time.

[00:20:20] Uh, my wife started her business as well. So it was a lot of, uh, a lot of directions to be pulled in. But,

[00:20:27] Jared: Sure. Yeah, but you did it. And did you use Gingko Writer toward the end of your

[00:20:34] Adriano: yeah. I was developing in parallel and in the end, like, my thesis got done before. Like, I used it to, uh, to get the basic structure in place. And to get to that point where, like, I have something, the existence point, right? Like, okay, this is my thesis. It's not very elaborated, but it's there. Like, each chunk that I need to talk about is there at some level of detail.

[00:20:56] Um, and yeah, so that's kind of similar to the thing that inspired me to make something like Gingko, is where you can, you always have a version of your thesis, let's say. It's like, whether it's one card, or like three cards that are its children. And, you know, you can keep adding and elaborating, but like you starting from zero, it's like a continual path to your end point, as opposed to like this, what feels like one big insurmountable task.

[00:21:23] So,

[00:21:23] Jared: Yeah.

[00:21:24] Adriano: yeah, but I didn't, I did find it useful to like structure my things, but it didn't end up finishing it in Gingko. It would have been nice for the story though.

[00:21:31] Jared: Yeah,

[00:21:33] Um, a nice, uh, hero's journey, if you will. Um, but yeah. Okay.

[00:21:38] Breaking things down with Gingko Writer

[00:21:38] Jared: So I want to talk a little bit about how I use Gingko Writer because that's how I discovered, um, you and in your work. But there was one thing that I think relates to this. That I wanted to bring up. It's from Elm Town 61, Turning the Pages with Dillon Kearns.

[00:21:54] And in that episode, I talked with Dillon about some of the lessons that he learned from studying piano. And one of the things he said is, quote, Am I willing to do the hard work, roll up my sleeves, break things down small enough, if something is not digestible for me? I just need to slice it down thinner.

[00:22:12] Am I willing to do that? And if I am, I can do it. That's the thing stopping me from doing anything I want to accomplish, not my abilities. And I think that really fits with how Gingko Writer works because I can start and I have, yeah, one card. So folks can kind of imagine here and you can... Correct me as I try to describe what Gingko Writer is, but it's a web app and you start with a document and it's a tree that starts on the left with one card and that's kind of your top parent card and then from there, you can create cards and they move, uh, they're on the right of that card and they're children of that top, very top level part of your document, if you will. And so, as you create those at that level, you can also create more cards underneath Each of those levels. So if you think about it, what I like to do is I like to take and develop an outline by creating first maybe my thesis in the top card. You know, what, what's the thing? Why am I doing this? You know, what's, what's the, the goal here?

[00:23:21] And then from that I'll build out, you know, three or four steps, um, to that. And then from there I can. I can expand on each of those steps, but by knowing that I have each of those cards underneath that top level created, I can let those out of my mind long enough for me to focus on each of the individual ones. And that works really well for me. Um, I've been using it for this podcast actually. So I kind of break things down into... Uh, things like, uh, preparing, getting guests, uh, the kind of preparation for a session, and that kind of starts off with one subcard and then goes and splits out into others. And then with guests, um, each of those guests, I'm doing research.

[00:24:08] And so there's a card for, with the names of each of the guests. And then from there, I expand out into other cards for each of those guests. And then, as I'm, um, getting ready to... record an episode, I will print out the card with some crib notes of kind of, you know, what I want to talk about that's a very, uh, bottom level of that tree.

[00:24:29] And so, um, one of the things that I like is that I can write that in Markdown, and then I can get a little preview of it. I can click print from that preview and then I can print that onto a single sheet. So, you know, an example for this episode right here is this sheet of notes that I've created, um, from Gingko Writer.

[00:24:50] So, yeah, I thought that was, that was, uh, a very pleasant process.

[00:24:57] Adriano: I'm glad to hear it. Yeah, so it's, it's, it's used in many, many different areas and it's always nice to hear, you know, new use cases, new, new ways that people are doing it and, or just specifically how people are using it. So, yeah, it's good.

[00:25:11] Jared: Nice. Yeah. Um, and so... I wanted to ask you then,

[00:25:19] Challenges building Gingko Writer

[00:25:19] Jared: kind of moving, we've talked a lot about, you know, kind of the history of, Um, of your journey to Elm, and you, you got to the point where you had decided to do this rewrite, right? And, and kind of start from scratch. You said it was, you know, it took some time, but, but you did it.

[00:25:39] And, and so the, the current client is written in Elm, correct? Is there, you Were there any other, or what challenges did you encounter through that process?

[00:25:50] Adriano: well, the reason it took more time than I had hoped is because I went over in scope, essentially. Instead of just rebuilding the same thing. just in Elm, which would have been, I think, quick. Um, I decided to basically re implement Git in it so that, like, you know, it has version history and branching and you know, just like, thinking down the line, like, okay, there'd be an offline version that you can also have collaboration with and just, like, way over scoped this thing and so, like, ended up doing a lot of, a lot of the difficult part was that side of it.

[00:26:25] Um, the actual, like, front end portion was Pretty quick relative to all that other stuff. Um, so, just wanted to make a note of that.

[00:26:34] Jared: Yeah, okay. Yeah, that makes sense. And so, you kind of rebuild the existing features but then add in more, a very, I'd say a very complex feature by introducing offline versus online and, you know, I guess, kind of conflict resolution within that, right?

[00:26:52] Adriano: yeah, all of that stuff. And I think, again, so this is like, Elm is such a powerful tool and I get so much confidence from using it that my ambitions on what I can create increase. And that can be good if you have the, uh, the experience to decide like, okay, this is actually something that will be useful down the line and, or, you know, this is probably not something I should be doing.

[00:27:14] I think at the time that was probably premature to be doing that. Um, now I have more experience in making those decisions, but, it's something that like the scope of what you can accomplish increases. Like, you know, per, per hour or per number of developers, like whatever the, the, the ratio is, I think.

[00:27:33] If it's something that matches the way your developers think, it's like a, you know, multiplier, definitely.

[00:27:40] Jared: Yeah, yeah, that actually reminds me of an episode I just published with Martin Stewart, where he uses the term the network effect of, you know, the more Elm that you write, it seems like the more benefits you get from writing Elm. And I, and I find that to be true too. And it's, it's so counterintuitive if you have experience with other languages and platforms, because... For example, with JavaScript or Python or even C sharp, as the code base would grow, it would become overwhelming and it would feel like the ship was more difficult to turn.

[00:28:20] Adriano: Yeah.

[00:28:21] Jared: But with Elm, it's like I'm building out. more things that I need and only the things that I need. And maybe this is more of like following the, the mindset of, uh, of the community and, and more related to that.

[00:28:35] But when I find myself doing that, it's like, Oh, I've already built a thing for that. Here's the module. And so I can just use it now. You know, so, um, but with JavaScript, it was more of like, did I do this before? And so it seems like I would be recreating a lot of things. Um, and, or rewriting, refactoring things to fit, you know, this new problem that I'm trying to

[00:29:01] Adriano: Right.

[00:29:04] One other thing I found that, um, you know, as I develop more the, as I develop my skills more in this language, you know, obviously you go back to old code and you're like, oh, you know, I knew, I know a new pattern that would make this better. It's, it works. I could make it better. I could, you know, refactor it.

[00:29:21] And that's no longer something that feels like a negative. It's just like exciting. You're like, okay, I can change this if I want. It won't be too hard. I'm like, okay, just go do this. Like, The learning process is more fun, because when you pick something up, you don't feel like you have to start from scratch, or only apply it to some side hobby, or some other new thing.

[00:29:39] It's just like you can go back to your code and, you know, make it better with what you've learned, um, without being afraid of that breaking everything, basically.

[00:29:47] Jared: Yeah. Yeah. I like that. Yeah. It, I think it is powerful in that way and powerful in a good way. Um, that, um, that, yeah, if you can. Kind of take what you've learned and build from it. Well, and again, I guess kind of referring back to this episode that I just released, probably because it's fresh in my head from editing it.

[00:30:09] But, um, one of the things that, uh, Martin was talking about was how he had built something that kind of reminds me of your process of building a Git like, um, tool in Elm, but he was doing it for ASCII collab where, uh, there can be multiple people who are. Editing, you know, this single huge, um, blanket canvas of ASCII art. And, and handling conflicts there. But then, when, once he had built that, he was able to take that and build another game on top of that called Town Collab, which was a Lego Loco remake. And, I thought that was really neat where, you know, he was able to kind of take that core set of code and refactor a few things and, you know, and again come out with something confident and, and cool.

[00:30:58] Clear in its purpose, even though it came from somewhere else. Versus what I've found in other systems where it's like, if you try to copy something and reuse it, it seems to me like, and maybe this is just a matter of differences in my experience, maybe there are other answers to this, I'm sure there are, but one of the things is that it seems like you can always tell when something Is copied because there's a lot of waste.

[00:31:28] There's a lot of things that don't really make sense in this context and you find them kind of finding, uh, filtering in and coming into your view and you're like, Oh, I don't need that. You know, get out of here.

[00:31:39] Adriano: Yep.

[00:31:40] Jared: Um,

[00:31:43] Homeschooling & solely supporting Gingko Writer

[00:31:43] Jared: So yeah, I wanted to kind of bring up this. You mentioned homeschooling your child. And so I guess then, um, as you are, you're, Have this tool that you've built, Gingko Writer, um, that, uh, of course, I'm sure there's some maintenance, uh, required with that.

[00:32:02] I don't know if you're building new features for it or what, but if you could kind of talk about how maybe, um, that, does that come into play with your ability to homeschool or it

[00:32:13] Adriano: Yeah, I mean, um,

[00:32:16] essentially, so yes, I am slowly building out new features. I'm also working on, like, something that That will be used in Gingko, but I think can be split out to a separate product. Um, I can mention what it is. It's essentially just a, um, like a user voting app so that people can vote on features and things.

[00:32:34] But using some, um, better voting systems. So like, users would get credits based on, you know, how much they've used the app. New users shouldn't have as much sway as people using it for six years, right? So there's that. And then, um... The votes are, it's using what's called quadratic voting.

[00:32:54] So each level higher that you want to vote costs the square of how many points you have. So like, you can spread your votes thin and vote on a bunch of little things or if you really want a certain feature you have to dump a bunch of points to move it up. It's shown mathematically that it can really convey like reflect what a group of people want.

[00:33:15] So that's the idea that like just, because As I've said, I seem to struggle with what should I build sometimes. Like, you know, I want to build things, you know, that maybe aren't being asked for and then some things are asked for I don't get around to. Um, so that's something I'm building there. In terms of, like, the time investment, it is something that, like, I'm able to do this part time and homeschool my son the rest of the time and still make progress because...

[00:33:44] I think it's because of the way that Elm fits how I think and because of all the guarantees that it gives me. During the summer it's very, very slow in terms of work because he's at home 100 percent of the time. Whereas in the fall to winter he's two or three days a week. Well, it's usually two days a week he goes out to do other things.

[00:34:02] And, you know, I have those two days to work. But in the summer, you know, there might be stretches of time where I don't touch any of the Gingko code. Or if I'm working on a different project, I'll, you know, be doing that. But I can still come back to it and still make progress, as if I were working on it yesterday, you know?

[00:34:19] And I don't think that's an experience I've had with any other language, and in many other problems as well. It's just like, there's so much you need to load up in your mind to get to the point where you can get back into the thing and make progress. Uh, whereas with this, I can just leave a little note, like, next action, do this, the end.

[00:34:36] And then I come into it like, you know, maybe it could be a few weeks later and, you know, or some part of the code that I haven't touched in a while and I can still go in and, you know, make the changes that I need to do. So that's something that I think, , it's kind of allowed me , to, to have the lifestyle I, I have where I can work as much or as little as I need to take breaks as much as I need to and want to, and still come back to it and still like deliver features as, as needed.

[00:35:01] Mm

[00:35:02] Jared: Yeah, yeah, that makes a lot of sense. And thinking about that with Elm as, as, you know, requiring less working memory to bring up and to load in. I definitely feel that as well. One of the techniques that I use is to break, or maybe add in, if we're talking about kind of model first, um, data modeling driven development, um, then I will add something to the model that I know will break the compiler.

[00:35:34] Adriano: Yeah.

[00:35:35] Jared: and that is my kind of next step, you know, kind of like that, getting things done, um, kind of tool of, of saying what's the next thing that I need to do? And because I can't progress progress without doing that, then I know exactly where I need to jump in. And yeah, just because of the, the size of the language and the number of concepts, I can just jump right back in.

[00:35:59] And yeah, I definitely feel much more productive, um, in that.

[00:36:02] Adriano: Yeah, for sure. Yeah, I do that, too. I just, like, sometimes it's a to do, or sometimes I'll just, like, add the thing that needs to be done, and then just leave it at that, and then I come in and, you know, run the compiler, and I'm like, oh, yeah, okay, that's what I need to do next, and then just go from there, right?

[00:36:14] So,

[00:36:15] Yeah.

[00:36:16] It's a nice, it's a nice feeling.

[00:36:17] Jared: It is, yeah. And it's so, again, I think kind of saying the word counterintuitive makes sense because, um, when I would use the compiler like with C sharp, I would try to avoid breaking it because the error messages weren't helpful. And so, yeah. it definitely took a shift in my mind. To embrace that, um, or like with JavaScript, where if I broke something, I might not find it until I ran it, right? So, um, so definitely, yeah, that was a big change where I didn't feel like everything had to be perfect before I let go of it.

[00:36:57] Adriano: Yeah, yeah. Yeah, so, like, the compiler, they're not errors, necessarily. Mm hmm. They're like, uh, to dos, essentially. They're like, next, next actions. Yeah.

[00:37:05] Jared: Yeah. Definitely. Cool. Okay, and so...

[00:37:13] "Frequent changes of treatment"

[00:37:13] Jared: I think this kind of ties into Elm a bit, but there was a quote that you had brought up from Seneca, and you were talking about this in terms of, I think, perfectionism. I don't remember exactly, I'll have to find the link to that. But, um, the quote is, oh, I don't, no, I do remember.

[00:37:35] It was, um, a system of getting things done. I think you had, you had written about this in your blog. And the quote is, Nothing hinders a cure so much as frequent changes of treatment. A wound will not heal over if it is being made the subject of experiments with different ointments. And it's from Letter 2 of Letters from a Stoic of Seneca.

[00:37:57] So, um, did you have any kind of thoughts on that? And I think that kind of ties into Elm and what we've been talking about with

[00:38:03] Adriano: Yeah. I mean, it's amazing when I find something that just seems to, you know, from so long ago that seems to fit my day to day programming problems and things like that, but yeah, he was a wise guy. I think it's a double edged sword in the sense of, like, the ability to make the changes, to, like, move the plant around or try the different ointments, as Seneca would say. So easily means that you have to be wary of that tendency, right? Um, but on the other hand, Elm has a way of doing certain things.

[00:38:32] And that really eliminates all these, you know, frequent changes of like, you know, how do I format this? Or like, what's the, you know, I can do this pattern for showing things. But it's like, there's a way that works in many cases. And that really helps, you know, just focus on, again, What needs to be done and not how do I do it, right?

[00:38:50] So, I think those are two ways that that, uh, that plays into Elm and programming in general. Does that answer your question, or?

[00:38:59] Jared: Yeah, totally. I, again, it was just kind of open ended, so I was, I was just curious how you would, would think about that today. I agree. I think, um, you know, it kind of applies with what we're talking about with, you know, the number of features in, in Elm and how, you know, the required working memory, right, of, of, of Elm, where you don't have to kind of think, oh, what framework will I use for this?

[00:39:24] Or, um, or even the pace of changes, Right. Like Elm has been stable for years now. Um, I haven't had to do an upgrade to, uh, to Elm in several years. And if I do upgrade a package, it's pretty simple. I know how to upgrade. Actually there's a tool, elm-json, that will, um, upgrade for me if there are no breaking changes.

[00:39:50] And then it can try if there are breaking changes. So I can make those decisions. Very quickly and very easily. Um, I've been bitten before by NPM packages, uh, saying they are, you know, a non breaking change, but then finding out later that they were actually breaking and causing tons of frustration. Um, but that is, um, mostly a non concern.

[00:40:13] Um, there are a few cases where it could happen, but, um, but it's much, much less than it, and it doesn't feel like a burden.

[00:40:21] Adriano: Yeah, that's true.

[00:40:22] The number of times that I've said I'm just, oh, I just have to update this one package and then that becomes a project bigger than the actual thing I was trying to do and then it just derails me is... Large.

[00:40:33] Jared: yeah.

[00:40:34] Adriano: just having the confidence that that, you know, that's not something that I have to deal with, with, with my Elm code is, is good.

[00:40:39] I try to keep all the other stuff, the dependencies as low as possible for that, that reason. The non Elm dependencies.

[00:40:46] Jared: Right. Yeah.

[00:40:47] And I think it's even a practice in the Elm community to think about the number of dependencies that you use and to try and keep those, uh, at a minimum and, and I think there was a talk by Richard Feldman. I don't remember which one where he talked about that, where, um, you know, the, the quality of packages are really good, but also it's pretty easy to take maybe if you need, one of the big examples for me is the, um, Like, maybe extra or list extra packages.

[00:41:18] I don't typically bring those into my code base. What I'll do is if I need something, I will go look at those and maybe pull out, you know, whatever one function or two functions that I need and pull it into like a maybe custom

[00:41:32] Adriano: Mm

[00:41:32] Jared: a list custom module. And then, yeah, that's just not a dependency and I can kind of move on with my life and not have to think about that.

[00:41:40] Adriano: yeah,

[00:41:41] and you can take that out without fearing that you need something else because it's all, you know, pure function. You're like, okay, this is what I need. You know, it has the type signature that I need, and that's it. Just bring it in. Yeah.

[00:41:53] Jared: Yeah, that's a good point. I don't have to worry about, well, is it using some global value or whatever. Yeah. Oh man. I'm really glad not to have to think about that.

[00:42:07] Adriano: Yeah.

[00:42:08] Jared: It's calming me just to, just to acknowledge it.

[00:42:11] Adriano: Yeah.

[00:42:12] Jared: Um,

[00:42:13] New, 100% Elm project

[00:42:13] Jared: so tell me, Adriano, what are you excited about today?

[00:42:18] Adriano: I'm excited to get, so I actually have a, uh, so there's Gingko, right? And then I'm developing that, like, feature for it that will help me develop future features and choose on what to do. Um, that portion of it is exciting to me. But I'm also working on a, a new company with a couple friends. Um, completely separate from it.

[00:42:38] And, I can't get into too much details because we haven't sorted out some legal things. But, it's a, it's a, one of those big challenges type problems, right? And, it's been a lot of fun to work with because it's like, I'm able to make a lot of progress in a very short period of time. Um, and just feel like, you know, a good part of that team and really pushing the product forward.

[00:43:04] And, you know, 100 percent in Elm and I can decide to do that. And, yeah, that's, that's exciting.

[00:43:09] Jared: Yeah, that is exciting. Well, hopefully we'll hear more about it in the future when you

[00:43:14] Adriano: Yeah,

[00:43:14] Jared: talk about that. Awesome.

[00:43:17] Adriano: Gingko Writer will keep going and I'll keep working on it as well, so you don't have to worry about, about that

[00:43:22] Jared: Oh, good. Yeah, um, and I'm also excited to see the user voting feature. Do you think that will be a package or library in Elm, or is that more of just kind of something

[00:43:35] Adriano: No, I think I'm gonna, I haven't done too much thinking of the strategy of it, but I think it's gonna be something I wanna see if, uh, it's useful to me. And if so, I'm gonna see if I can make it available to others as a, you know, like just you create an account and download the script and, you know, so like you can embed it into your app

[00:43:52] Jared: Okay,

[00:43:53] Adriano: So like, it'll just show up as a sidebar and then you, you know, your users can vote on whatever features they want in there in your app. Right?

[00:44:01] Jared: Ah, I see.

[00:44:02] Adriano: so like, spin it off as maybe a separate product if it, if it works out, like, if I find it useful. So,

[00:44:07] Jared: Nice, okay. Look forward to that as well. Well, is there anything else that you wanted to talk about before we get to picks?

[00:44:16] Adriano: Um, I mean, you, no.

[00:44:20] Jared: Okay.

[00:44:22] Picks

[00:44:22] Jared: Well, what picks do you have for us today?

[00:44:24] Adriano: I've been using elm-watch quite a bit lately. So like every new project now I start with that and it really helps keep the feedback loop tight. I like that quite a bit. Um, what else? I can't think of anything else at the moment. Oh, um, I started using, um, I forgot the name of the package.

[00:44:42] The, the, I think, Simon Lydell with a routing. Simple. Like the URL routing. I'm not, do you remember the

[00:44:50] Jared: Is, um, I don't remember the exact name of it, but yeah, I know which one you're talking about. There was an Elm Radio episode where, um, they talked about that on there. I can add a link to that.

[00:44:59] Adriano: Yeah. Yeah. I've, I'd like that for solving that problem. Um, but, um, yeah. No other major picks. Sorry about that. Mm

[00:45:09] Jared: No, I think those are great. elm-watch is, um, a great one. That one I introduced into our code base at work. And, um, we have a lot of very small modules that are incorporated into an old AngularJS app. And... One of the things that I was doing before is, I would still compile it into a single JS file, and then, you know, just use those different entry points in different places. But what I like with elm-watch is that, of course, I get hot reloading, which is, which is, I mean, just fantastic with it. But also, it, um, is thoughtful about what it recognizes is being used, and chooses to refresh those things first. And so that is, uh, a very cool tool. For sure. Love elm-watch. I haven't tried Simon's package yet, but...

[00:46:02] Adriano: Elm already has a tight feedback loop and anything that makes it even, it's just like, Bonus, but like, yeah, it's good.

[00:46:09] Jared: Yeah. Yeah, totally. I, um, I really like that. Yeah. Feedback loop, and, um, And then, yeah, with Simon's package, I haven't tried it yet, but, um, But I, you know, I've heard about it, and it seems like it does a good job of keeping that simple. So. That's good. All right, um, for my pick today, I think I'm just gonna do one pick, and that is, um, I've always struggled with, as I'm at the computer all day long, I get, you know, um, poor posture, and I have to, you know, for one thing, tell myself to take breaks.

[00:46:47] And, um, I guess maybe that is a recommendation itself, is I use a, an app called Stretchly. Um, I think it's Mac only, but it, uh, pops up and will, uh, remind me to take breaks on a regular basis. So that's been helpful. But the other thing that I've been doing for a long time is practicing yoga. And, um, it's kind of funny.

[00:47:09] I mean, you can probably tell that I practice yoga. Uh, there was somebody that, uh, I had met one time as 17, 18 year old. Uh, and he said. You look like you, uh, meditate and do yoga. And I was like, oh, you figured me out. Um, but no, it's what I like about, um, yoga as it relates to being a programmer is that because I'm sitting here and I'm, you know, getting this poor posture as I'm doing right now, um, for one, it brings awareness to that, um, helps remind me that, oh, I sitting in a way that, um, is going to make me feel like junk later?

[00:47:49] Um, but then also it helps to kind of, um, fight against those effects. So, you know, if I do pop up with a stretchly break, maybe I will, um, you know, do a little, um, bit of yoga, just to kind of bring myself back into alignment. Um, and then,

[00:48:08] Adriano: oh, sorry, go on.

[00:48:09] Jared: ahead. I didn't really have

[00:48:11] Adriano: I was going to add another pic because I didn't realize it didn't have to be Elm related.

[00:48:14] Jared: Oh, okay, cool.

[00:48:16] Adriano: So this is when I said that I spend a lot of time thinking about what to do, I actually do most of my I used to do most of my thinking on paper and pen. But now I've got one of these like E Ink tablets.

[00:48:27] Jared: Oh, yeah.

[00:48:28] Adriano: Like, it's really wonderful for me. Like, I just, I can get away from the computer, but I still have, you know, if I need to, I can access a few things, because it's a, it's an Android tablet. But mostly it's just, you know, it's just very responsive. Like, I can move things around, I can, like, it's, it, yeah, I take it with me everywhere, because, you know, I never know when I have an idea that could be useful, and it has, you know, all of my notebooks organized, so if I'm working on a certain project, I can pull up that.

[00:48:56] Take notes. It's been excellent for that. I can send you the name of it. It's an Onyx Note Air 2.

[00:49:06] But anyway.

[00:49:07] Jared: Yeah, yeah, send us the link and I'll put that in the

[00:49:10] Adriano: If anyone likes thinking through pen and paper, that's a great alternative to try if it seems appealing to you.

[00:49:17] Jared: Yeah. Yeah, I guess kind of on that note, one of the things that, um, this kind of brings me back to Gingko Writer is that I have a physical... Uh, Commonplace Book, Note System, Note Cards, so I use index cards and, um, it's in the back here if you're watching the video, um, by that sink, um, it's just, you know, a bunch of, um, a bunch of index cards, you know, and I kind of have it categorized with different things and so if I have a little idea I can put it in there and then I can look through those cards later on. And I find that to be pretty helpful, um, and especially I do like writing things with a pen. But... Sometimes I want to have that online because I'm going to, you know, use it in whatever format. Maybe I'm going to be writing a

[00:49:59] blog post or something. Um, or, you know, like with this podcast, I'm printing out, um, these, these crib notes.

[00:50:06] And so, um, what I like about Gingko Writer is that it allows me to kind of create that commonplace book system, but I can do even more, uh, tighter levels of organization. And just like with... Or maybe even in more detail to the notecard system. If I want to move things around, if I want to kind of reorganize and drag, you know, like, Oh, this should be above or below, or it should be up a level, down a level.

[00:50:34] Like, I can do all those things very intuitively and very easily from within there. So I guess Gingko Writer kind of becomes a pick as we continue on with this conversation.

[00:50:45] Adriano: Good to hear.

[00:50:46] Jared: All right, yeah. Thanks to all the folks listening out there.

[00:50:48] Please rate and share if you're enjoying the show, and thanks, Adriano, for coming to Elm Town.

[00:50:53] Adriano: Thank you.

[00:50:54]

© 2024 Jared M. Smith