In 2017, James C. Davis moved to Charlottesville, Virginia to work at a non-profit tech company that used Ember in their original Saas platform. While James had dabbled in Ember previously, an ask to reimplement the front-end in Ember, this time using TypeScript, proved challenging.
At the time, a few engineers were using TypeScript in Ember, but the open source framework James worked on became the de-facto reference point for projects in Ember types. And the unofficial group of engineers collaborating on the project has become the official Ember TypeScript Core Team.
Today, James works at e-commerce company Salsify with a front-end all in Ember TypeScript. Although setting the standard for using TypeScript in Ember, James believes there’s a time and a place for types. Plus, he may have a solution for Robbie’s monorepo grievances.
In this episode, James talks with Chuck and Robbie about his struggles and triumphs perfecting Ember TypeScript, his real thoughts on monorepos and functional programming, keeping APIs private, and why developing Glint was a type checking necessity.
[19:38] - “Basically at this point, the only really useful thing that you need inside ember-cli-typescript is its blueprint which is different from the blueprints that generate components and Ember things.” ~ @jamscdavis
[21:53] - “The bigger and more complex your project is, the more that [TypeScript] helps you.” ~ @jamscdavis
Connect with our hosts
Subscribe and stay in touch
Top-Tier, Full-Stack Software Consultants
This show is brought to you by Ship Shape. Ship Shape’s software consultants solve complex software and app development problems with top-tier coding expertise, superior service, and speed. In a sea of choices, our senior-level development crew rises above the rest by delivering the best solutions for fintech, cybersecurity, and other fast-growing industries. Check us out at shipshape.io.
Robbie Wagner: [00:09] What's going on, everybody? Welcome to Whiskey Web and Whatnot with myself, Robbie Wagner, my cohost, as always, Charles William Carpenter, the third. And our guest today, James C. Davis, who I believe is a jazz musicianist. Is that correct?
Charles Carpenter: [00:25] Not Miles Davis. Not to be confused with.
James C. Davis: [00:28] I'm not a jazz musicianist.
Robbie Wagner: [00:30] I was saying the Twitter person that is actually James C. Davis.
James C. Davis: [00:34] Oh, yes, yes, yes, yea. On Twitter, I'm Jams C. Davis, and I tried to convince them. I said, jams like you're a musician. We could switch handles, but he wouldn't.
Robbie Wagner: [00:46] He was like, uh no, I'm out.
James C. Davis: [00:48] Yes, I'm James C. Davis. GitHub in most places, but Twitter, whatever. Twitter is going to die anyway, right? Elon's trying to buy it, and we'll see what happens there.
Robbie Wagner: [00:59] Yeah. He still needs to give me some Internet. I need that Starlink.
James C. Davis: [01:02] Yeah.
Charles Carpenter: [01:04] Put some more money into satellites, buddy.
James C. Davis: [01:07] Right.
Robbie Wagner: [01:08] So, Chuck, did you actually get your two truths and a lie ready? Are you going to make some up or are you not playing?
Charles Carpenter: [01:14] I don't know, I'll make it up.
Robbie Wagner: [01:15] Okay.
Charles Carpenter: [01:16] We'll figure it out. I don't know.
Robbie Wagner: [01:18] Well, since James and I were prepared, we'll go first, and then you can go after us.
Charles Carpenter: [01:24] So we have to do that before we do. Before we drink. Okay.
Robbie Wagner: [01:28] It's usually the icebreaker, but we can drink first if you want. I don't care. I'm always down to pour some whiskey and do that first.
Charles Carpenter: [01:34] Yeah. And that's called buying time.
Robbie Wagner: [01:37] This one is not loud.
Charles Carpenter: [01:39] No, it wasn't. It was a little.
Robbie Wagner: [01:41] There we go.
Charles Carpenter: [01:41] Oh, no, I got something out of that. So today we are having the Ragged Branch Wheated bourbon. It's a Virginia straight bourbon whiskey, which is. Look at that. Trying to do a little marketing there. Let's see, what else do we know about this thing? Was this double gold at the world spirits competition?
Charles Carpenter: [02:04] Okay.
Charles Carpenter: [02:05] Yeah. Who sponsors that? I don't know anything about it. Mash bill is 66% corn, 17% wheat, 17% malted barley. It's a 90 proof, so it's a little lower than my tastes usually prefer, but it's probably better for me. It's only 2 o'clock for me. Still have to do things.
Robbie Wagner: [02:24] Smells good.
James C. Davis: [02:25] This distillery is actually just up the road from me. It's like, literally on my road.
Robbie Wagner: [02:30] Oh, wow.
James C. Davis: [02:30] And I've never actually gone there, and I've never tried any of their whiskey, so I thought we should do that.
Robbie Wagner: [02:35] Oh, Charlottesville,
James C. Davis: [02:37] I don't know if it's any good at all. It's literally on my road.
Charles Carpenter: [02:40] It's a pretty place. Been to a few wineries there. Definitely getting the corn.
Robbie Wagner: [02:47] Yeah.
Charles Carpenter: [02:48] Feels young. How old is it?
Robbie Wagner: [02:50] I think it's four.
James C. Davis: [02:51] I think it claimed four.
Charles Carpenter: [02:53] I think that's what it has to be. Minimum in order. Yeah. There you go. For over four years, so at least four. It kind of tastes young to me, which gets a lot of corn forward in it. The smell was a little more citrus with that mix to me. But now that I tasted it feels really young.
Robbie Wagner: [03:09] Yeah. The smell is interesting. I like the smell a lot. It's got a lot going on. I feel like less is going on in the taste.
Charles Carpenter: [03:16] Yea. It has hints of mellow corn to me. I don't know if you've ever had that.
Robbie Wagner: [03:22] Yeah. I feel like it's like a very because the proof is a little lower and the flavors aren't overpowering. It's a very easy sipping whiskey. Yeah. I mean, Chuck has descriptors usually, but I taste a lot of typical stuff like wood and alcohol.
Charles Carpenter: [03:41] It's got a little warmth to it. Yeah. It's a little like slightly bitter to me. Almost like a citrus rind or something. And I was smelling that, but I'm not really tasting that. I'm just getting some of that bitterness from it. For me, it's a little too young.
Robbie Wagner: [03:57] Yeah. I'm getting the tannic nature like a little bit of pucker. I could say something citrusy-like.
Charles Carpenter: [04:04] I could see where it might make an interesting cocktail. Like if you did Boulevardier or something with it, or a Gold Rush, which is like a Bee's knees. But instead of a gin has bourbon, I could see that being very interesting tied in there. But as far as straight sipper. I guess it's easy to drink, but. Yeah, the bitterness and a little too much corn for me. So, if they have any that are older, I would probably try that. Not sure. This one's for me. It's not like horrible, though. In case they want to send you some free whiskey you know I don't want to ruin it. So, we normally rate on a scale of one to eight, it's very scientific. We just make it up every single episode. So, I'm going to go three on this one.
Robbie Wagner: [04:52] So a little bit of background. I think we said in one of the previous episodes that it's not really terrible unless it's a one or two. So, you're saying that's not the worst, but I'm just not a big fan.
Charles Carpenter: [05:03] Yeah, I'm just not a big fan. It's not like this is disgusting. Like pancake whiskey that we had, but I can tell where it has potential. It's just a little young for me.
Robbie Wagner: [05:16] I'm going to go a little higher. I'm going to say like four and a half. I'm going to do a half tentacle there because I don't think it quite is as good as some fives I've given out, but I don't dislike it. So pretty good. What do you think, James?
James C. Davis: [05:30] I'll give it a five, probably because it's up the road. Their place is really pretty. I'm also not a whiskey drinker or connoisseur at all. Yeah, it's all right. I've had better.
Charles Carpenter: [05:42] Well, there you go. But you got to support the home team. So, I get that.
James C. Davis: [05:46] It'll be great in a cocktail. I think you're right.
Charles Carpenter: [05:48] All right. Two truths and a lie. Who wants to go first?
Robbie Wagner: [05:51] You want to go first James? Do you want me to? I don't care.
James C. Davis: [05:54] I can go first sure.
Robbie Wagner: [05:55] All right. Lay it on us.
James C. Davis: [05:57] All right. Two truths and a lie. I raced sailboats in college, have a PhD in physics, and own more than ten different stringed instruments.
Robbie Wagner: [06:11] So I don't want to cheat. I could probably look at LinkedIn and see if you have a PhD in physics.
Charles Carpenter: [06:16] Don't cheat.
James C. Davis: [06:17] I might not put it on there. I might not write about it.
Robbie Wagner: [06:19] True.
Charles Carpenter: [06:19] Yeah. It's not pertinent. Right.
Robbie Wagner: [06:21] True.
Charles Carpenter: [06:21] Who wouldn't talk about that?
Robbie Wagner: [06:23] I feel like you've talked about before that you have ten string instruments. I think that's true. What was the first one again?
James C. Davis: [06:29] I raced sailboats in college.
Robbie Wagner: [06:32] Okay. Because physics is very hard. I'm going to say not that you're dumb or anything, but you don't have a PhD in physics. Chuck, you have a guess?
Charles Carpenter: [06:43] That's what I was going to go for.
Robbie Wagner: [06:44] Okay.
James C. Davis: [06:45] All right yea you got me. I have a master's degree in environmental science, but I didn't.
Robbie Wagner: [06:53] Physics was really hard for me. I only took one year and would not have passed without lots of help.
James C. Davis: [07:00] I was in an engineering program. Not computer engineering. Well, it was computer designing hardware. And the physics I had to take was basically why I got out of that and did computer science instead. But I did. I was at UT Austin. I raced on the UT Austin sailing team, got to travel all over and do that. And that was super fun. And then I do have a problem with string instruments. If you ask my wife, it's actually ten different string instruments. I actually own more. Somewhere between 15 and 20 actual instruments, I think.
Robbie Wagner: [07:41] Yeah. That was going to be my follow up. Is it three guitars or is it like ten different?
James C. Davis: [07:46] No, it's different.
Robbie Wagner: [07:47] Okay. Wow.
James C. Davis: [07:48] I wrote them down. So, I have an acoustic guitar, electric guitar, standup bass. Electric bass. A mandolin, violin, a banjo, a dobro. I have a mountain dulcimer? I actually have three of them, if you know what that is. A hammered dulcimer. And this right now, this thing, it's a pie box guitar. It's not really a guitar. I don't know what to call it.
Charles Carpenter: [08:13] Have you ever seen the beginning of or have you ever seen the documentary? It might get loud.
James C. Davis: [08:17] I don't know that I have.
Charles Carpenter: [08:19] So it's like Jack White, Jimmy Page and The Edge. The intro was awesome. It just starts with, like, Jack White. He's pounding like a nail into a piece of wood and putting like a metal string there and then puts like a Coke bottle on it and then adds a pickup in there and then plays something on it. And he's like, who says you need a guitar? Because he's awesome.
James C. Davis: [08:44] Yeah.
Charles Carpenter: [08:44] Anyway, highly recommended. I'm going to go next. Robbie, I think.
Robbie Wagner: [08:47] All right.
Charles Carpenter: [08:48] Before I forget, all three are lies first of all. All right, I'm going to take a cue from James. Let's see if you can figure out which is a lie. I have a photography Bachelor of arts and photography. I am left-handed and I have done five-foot airs on half pipes. On a half-pipe skateboard.
Robbie Wagner: [09:12] 5Ft past the end of the...
Charles Carpenter: [09:15] Yeah five-foot airs.
Robbie Wagner: [09:17] This is hard. I feel like I should know you better.
Charles Carpenter: [09:20] Yeah.
Robbie Wagner: [09:22] Are you left-handed is something I should have noticed ever.
Charles Carpenter: [09:26] Yup.
Robbie Wagner: [09:29] I'm going to say the photography degree is false.
Charles Carpenter: [09:35] Okay James you don't know anything about me. They all could be lies.
James C. Davis: [09:40] I'm going to say you're not left hand. I just watched you drink with your right hand.
Charles Carpenter: [09:43] Right.
Charles Carpenter: [09:44] Well then technically they all could be lies because yeah, I'm ambidextrous but I am left-handed and I used to skateboard as a kid so I've definitely done the half pipe thing and I've been watching a bunch of old skate things recently like gleaming the cube. I have no idea why so yeah. The lie is the photography degree. The fun fact is, I quit College, so I have no degree. I have taken a lot of classes and given a bunch of money to colleges. Started as an architecture major and digital design later and a bunch of art history, and then continued to pay them for photography classes for a while. So, I had dark room space, and then I went to film school for a year, too. For fun.
Robbie Wagner: [10:24] Yes. Colleges need more money, so very good of you to give them more.
Charles Carpenter: [10:28] Yeah, but they never called me as an alumni for a donation. They just call my wife, and they're like, you got your donation in those four years? We're good.
James C. Davis: [10:37] Yeah, I did that, too, in graduate school, for some reason. I changed my major, like, several times in graduate school, which is weird. I almost became a teacher. I almost did a CS graduate program, and then I ended up doing environmental science. I have a bachelor's in CS. The school needed more money.
Robbie Wagner: [10:56] Yeah, for sure. We're doing our part for the community.
James C. Davis: [11:00] Right.
Charles Carpenter: [11:00] All right, Robbie.
Robbie Wagner: [11:01] Let me bring up mine here. All right. I once met James Avery. I can do a kick flip on a skateboard. I once got a fortune cookie saying, you will move to a new place, and my family moved a few months later.
Charles Carpenter: [11:16] I think the kick flip is the lie. You don't seem that coordinated to me.
James C. Davis: [11:21] Yeah, I'm going to have to go with the kickflip.
Robbie Wagner: [11:22] Yeah. I never got past Ali's. I could barely even do that. But I skated a lot. I just couldn't figure out how to make the board do things.
Charles Carpenter: [11:35] Interesting. That's so funny. We both had skateboard things in our past. Yeah, I was really good at it for a long time. And then, I don't know, I just wanted to be cooler and have a chance at prettier girls. So, I stopped skating. Just play soccer.
Robbie Wagner: [11:52] Sounds like you're making a stereotypical assessment there of certain types of people that might skate.
Charles Carpenter: [11:59] Yeah, I know. I'm just talking about what my options were. I didn't live in California. I didn't grow up in California.
Robbie Wagner: [12:05] Yeah, the skate scene where you grew up, I can imagine, would be a little trashier than in California.
James C. Davis: [12:13] Where did you grow up, Chuck?
Charles Carpenter: [12:14] Northern Kentucky. So, skate around there and go over to Cincinnati. Skate there some, too. But, yeah, it wasn't the California Beach scene by any means.
Robbie Wagner: [12:27] Cool.
Charles Carpenter: [12:28] All right, let me talk about serious things.
Robbie Wagner: [12:30] We can, I guess.
Charles Carpenter: [12:32] All right.
Robbie Wagner: [12:33] Yeah. So, we just have a few notes for those that follow along with every episode. I'm trying to think. Did we do one? Yeah, we did one in between. So, you won't be right after Chris Krycho, but there may be some overlap because you guys are both part of the new Ember TypeScript team. Well, the team's not new, but the core team designation is new.
James C. Davis: [12:52] We're official now.
Robbie Wagner: [12:53] So, yeah, I guess we can just start a little bit on the path to that. Like, how did you get into Ember and open source? And what brought you here?
James C. Davis: [13:03] What did bring me here? Yeah. So, I got into Ember. I went to work out here in Charlottesville for an organization. It's actually pretty interesting. They're a nonprofit tech company, which is kind of different. Right. And it's called the center for Open Science. They make something called the Open Science Framework. And so, the whole idea there of open science is like show your work instead of just like, here's a paper, believe me, document the whole scientific process. And so, they have this SaaS platform that the center for Open Sciences created for that, and it's funded as an Ember. So, I came to work there and had dabbled with Ember, but not really used it professionally at all. And shortly after I got there, there was this project to sort of re implement the front end. And the director of engineering at the time said, we're going to keep it an Ember, but we want to use TypeScript this time he was very into TypeScript. And so, I was like, okay, cool, how do you do that? And found that there were some people doing TypeScript in Ember. It was fairly masoned at the time. And there was a thing called Ember CLI TypeScript that would set things up for you. So, we tried it out then it worked pretty good. There were definitely rough edges need for documentation. The blueprints weren't very good. Things like that. I had done some open-source contributions before in my previous jobs, just a little bit. Not much, but I did end up contributing to this project. So, an interesting thing about the Open Science Framework is it's also all open source, so it's nonprofit and all of the code is open source and there have been people who have forked it and done some stuff with it or whatnot. So, through my work there, I was contributing more and more. I can't remember which happened first exactly. But basically, that project for a while became the sort of de facto reference for how to do TypeScript in Ember because it was a real project that was done in TypeScript. There was this team that had formed as an unofficial team, but basically people working on this TypeScript. And Chris Krycho, you listen to his podcast, he talks a little bit about that. And they asked me to get involved officially because I was doing a lot of contribution. And it kind of just steamrolled from there I now work a company called Salsify. The core of it is basically product information management and e commerce thing. So, our customers are brand manufacturers. So, anybody who makes stuff and we manage all of their product information for them and then also syndicate it to E-retailers, the Amazons and the Walmart.com, and that's all the way down the list. And our front ends are all Ember and TypeScript. So, Dan Freeman, who is one of the three, along with Chris Krycho and I that make up the Text Script core team. He's how I got this also. And yeah, so that's where I am now. And then at some point we decided to try to make TypeScript more official and push for that. And now we're an official core team.
Robbie Wagner: [16:28] Nice. Tell me a little bit about how it works. I think I touched on this with Chris, and I don't remember the answer honestly, but like the .EmberCLI file is TypeScript project flagged now or something like that. What does that do? Like, do we not have to install Ember CLI TypeScript anymore, if that's on or what is that for?
Robbie Wagner: [18:41] They say that now.
Robbie Wagner: [19:17] Got you.
James C. Davis:[19:18] So the interesting thing is then we have those in Ember and we are actually working towards killing Ember CLI type script. So this thing that we've had for a long time, we actually ultimately don't need and I'll actually be opening RFC hopefully later this month for that. So basically, at this point the only useful thing that you really need inside Ember CLI type script is its blueprint, which is different from the blueprints to generate components and Ember things. It actually is a blueprint that sets up the TS config and file pass. And it basically sets up TypeScript for you. But you don't need it to do TypeScript. You can just run the TypeScript compiler on its own. It currently has things that can hook it into the build so that when there's a type error your Ember build stops and refuses to build. But that stuff is actually not that important to most people. In fact, some people hate it.
Robbie Wagner: [20:22] Yeah, I turn that off.
James C. Davis: [20:23] Right. And then we tell them you can turn that off. Right. You don't actually do that. So that's going to be the plan is to actually extract out the blueprint that's part of Ember CLI TypeScript and basically deprecate it, we'll support it for a while and make it so that you can just, if you want to type Ember TypeScript app, you just run the TypeScript blueprint to set things up and
Robbie Wagner: [20:45] Nice.
James C. Davis: [20:45] And then voila.
Robbie Wagner: [20:46] I think we covered how to get around this and crisis. But the problem I have with build failing is if someone else's add on type is wrong. Well, I guess I could go in and override the types, but I'm not going to do that. So, I just turned it off so that it's like cool with those being wrong.
James C. Davis: [21:05] Yeah, I think you mentioned like skip Lib check and stuff like that. But then if you're actually importing something from the add on and using it and the types don't match up, right, yeah, it can definitely be an issue. So that's the idea that it's great and can help you, but doesn't necessarily need to be mandatory. And if something's broken to me, it's fine to put in a CS ignore and say okay, like the types are messed up here we'll come back to it.
Charles Carpenter: [21:32] It's kind of like a test coverage, right. It doesn't have to be types don't necessarily have to be 100%. Right. All the time. It's like most of the time and all the important places is where it really matters. And then again and then kind of comes back to the whole right tool for the job. Right. Like TypeScript is appropriate for some projects, but not necessarily all projects.
James C. Davis: [21:51] Totally. Yeah. I think the bigger and more complex your project is the more that it helps you.
Charles Carpenter: [21:56] Right. I'd agree with that.
Robbie Wagner: [21:57] That's what I was going to lead into. I was going to say, do you have recommendations on when it's not a good idea? I mean, obviously the benefits have been covered extensively, but has there ever been a time where you've wasted tons and tons of time just trying to get a type right? Or under what conditions would you say, don't type this?
James C. Davis: [22:20] I wouldn't say never type it when you're doing rapid prototyping because it could help depending. But there's definitely been times when I've chosen to, not just because it could be a little quicker, not having to worry about types and setting it up and checking things there. I think it is important for complex code and especially like library code in your application. It depends. I've seen a lot of benefits and I caught a bug today. In TypeScript actually. Yeah, depends.
Robbie Wagner: [22:53] Okay. I just thought it was something else for all the imports from like you want to say this is the store service or whatever from the types. I forget what stuff lived here, but there is a private directory of Ember and I've had a lot of trouble finding the types for that because it's private. So, it's not like giving you the types. Right?
James C. Davis: [23:15] Right.
Robbie Wagner: [23:15] Are there plans to expose more of those types or should we not be using that stuff?
James C. Davis: [23:21] There are actually. It's funny because we were just chatting about this earlier today about an RFC needing to come. There are a few things that are currently in the private namespace that you end up needing for type reasons. We were talking about the need to describe that public API and document it, because that's kind of been our rule mostly. Like if it's not documented as public API, we're not going to type it. People have tried to open PRs to Definitely Typed where the Ember types are currently maintained for things that are not documented publicly. And we say, okay, well, if you think this should be public, the first step is to go and lobby for that. Go to the core team, say, okay, this is a thing that should be public. Why is it not? Let's get it documented and get that done and then come back and we'll look at typing it because we don't want to type a bunch of private or intimate API.
Robbie Wagner: [24:16] Fair enough.
Robbie Wagner: [25:27] Yeah, definitely
Charles Carpenter: [25:27] The risk you take, Robbie.
Robbie Wagner: [25:29] No, I'm still going to use the thing I'm not supposed to use, so I don't do that often. But I'm not scared of doing it because sometimes you have to use it for certain things.
James C. Davis: [25:39] That's fair.
Robbie Wagner: [25:40] Chuck, pick a topic.
Charles Carpenter: [25:42] Okay, James, let's talk about monorepos and functional programming in general. How do you feel about that? These things?
James C. Davis: [25:52] Two hot topics.
Charles Carpenter: [25:55] Hot topics. Yes. Syntax folks just talked about monorepos on Friday.
James C. Davis: [26:00] Yeah. I like monorepos personally. I've had good luck with them. I can see Robbie smiling. I listen to the podcast. I do listen to the show. They have served me well, I guess.
Charles Carpenter: [26:18] I think it's like TypeScript if it's the right tool for your project and you have a project that has multiple services and packages and they share concerns and it just kind of makes sense. The orchestration tools are challenging, but when you get it right and it works well, it's nice, right? It takes some upfront planning, like trying to patch that stuff on later on or trying to adopt it to an existing project can be pretty difficult. Yes. But if you do it out of the box, then it's kind of nice.
Robbie Wagner: [26:49] Yeah. I think my big problem with any of the things that I've complained about endlessly on this podcast is that like, most of it is over engineered. Someone's like, oh monorepo. Okay, I got to use a monorepo and I have like 75 packages that I export. Okay. What are you building? Oh, just an app.
James C. Davis: [27:06] Yeah.
Robbie Wagner: [27:06] Then what is all that you didn't need that some people just want to overengineer stuff or use the low level of tools. Like I'm going to get React and then I want to bolt on 50 other packages and build it off like a bespoke framework all in house because I don't like NextJS or whatever. And I'm just like, well, for the most people, unless you're a huge engineering org that really has some good talent that can do better than these frameworks, use the frameworks, they're there for a reason. So, yeah, I think monorepos served their purpose. But relating it back to Ember, I am not thrilled with the add on V2 format that requires, well, you know, aren't required, but like 99% of the examples are monorepos. And so, they're probably all going to end up being monorepos. And I'm not excited.
Charles Carpenter: [27:53] Right. About the add on is a monorepo. So, like, you're creating a new add on and so everything okay? Interesting, I guess.
Robbie Wagner: [28:03] I think it's so you can have like a documentation and a test, different directory that are like different apps or packages or whatever. I'm not really sure it's something to do with working better with Embroider and tree shaking and whatever. There's a reason for the madness. But everyone has abandoned most of their add-ons except for, like, the handful of us that maintain the thousands of add-ons. And so, I'm going to be the one that has to change like 100 add-ons to the new format. And I'm just not about that to be seen.
Charles Carpenter: [28:36] Yeah.
James C. Davis: [28:37] It can certainly be abused, monorepos, but it's worked out well for me and my usage of it and things that I've done. Like Glance, I'm sure we'll talk about at some point we use them on a monorepo because there are several very tightly coupled packages and it works out well.
Robbie Wagner: [28:56] Yeah. Okay. So, follow up question to that to lead us into that. So, if one of those packages you want to change just one of them and you want to link that change to a repo that's consuming Glint. How do you do that with a monorepo? Because that's one of my big problems.
James C. Davis: [29:13] If you want to link, it like. Yarn Link or something.
Robbie Wagner: [29:16] Yeah. Because usually when you have ten packages in a mono repo and you want to change one, you have to do the whole build. You can't Yarn link that package. You got to build the whole thing.
James C. Davis: [29:27] For all my link, I use a tool called Yalc. Are you familiar with this tool? Y-A-L-C so much better than Yarn Link because it actually. Yeah, just check it out.
Robbie Wagner: [29:39] Okay.
James C. Davis: [29:39] Trust me.
Robbie Wagner: [29:41] So it fixes this problem.
James C. Davis: [29:43] It fixes so many problems with linking packages.
Charles Carpenter: [29:45] It's also fun to say
James C. Davis: [29:47] It's Yalc. Yeah. It's fun to say it actually publishes to a local repository. Basically, it's like a little local repository, and then you install Yalc install where you want it, and then you can run through publish and push and it ends up much better. Yeah. I've had tons of problems with Yarn Link, and once I switched to Yalc, I actually wrote a blog post about it, which I can send to you all we can put in the show notes.
Robbie Wagner: [30:13] Yeah. Don't even send it to us. The people that edit this will find it. And if they don't.
James C. Davis: [30:17] Okay, cool.
Robbie Wagner: [30:17] You can send it to us.
James C. Davis: [30:18] Okay.
Robbie Wagner: [30:19] I like giving them challenges. They get all the links. It's crazy.
James C. Davis: [30:22] Okay, cool. All right.
Charles Carpenter: [30:23] Yalc.
James C. Davis: [30:25] Yalc.
Charles Carpenter: [30:25] Yeah, I like this. Yalc. I just want to say they need a cool logo, though.
James C. Davis: [30:29] They do.
Charles Carpenter: [30:29] Yak. But it's Yalc.
James C. Davis: [30:31] Yalc.
Robbie Wagner: [30:32] I mean, that's half the battle in open sources. If your logo is not cool, then why should I use your framework?
Charles Carpenter: [30:38] You might lose. Side note, technically isn't Shepherd a monorepo because the site is also in the repo.
Robbie Wagner: [30:45] No, because it's not separate packages that I need to build separately. Like, I can link Shepherd somewhere and use that. I don't have to use Lerna or anything to build it. It just builds. It just builds.
Charles Carpenter: [30:57] Not all builds.
Robbie Wagner: [30:58] Like having separate packages is fine. Like a component library, for example, you might have 50 components, but you don't need to publish them as 50 different packages. Some of them are probably related, and maybe you have a few packages, but they don't need to all be separate. You know what I'm saying?
Charles Carpenter: [31:13] Yeah, I do. You've referenced this before. This is basically the crux of your challenge is that you came across a component library where each button and table and each little thing was a separate published thing.
Robbie Wagner: [31:28] Yeah. And all of a sudden, I want to run Post CSS, so I have to do that 50 times. I can't just run it at the root. Anyway, tell us about Glint.
James C. Davis: [31:36] That sounds like madness. Okay. And I dodged the question on functional programming, but yes, functional programming is good. I'm not a purist that's basically. So, it's Object. Like you can use them both.
Robbie Wagner: [31:47] Voila.
James C. Davis: [31:48] That's my hot take.
Robbie Wagner: [31:49] I like it.
James C. Davis: [31:50] Glint. Yeah. So, I think it was Ember conf 2019. Don't quote me on that, but.
Robbie Wagner: [31:58] Were we there in person or not?
Charles Carpenter: [36:42] Yeah. It seems to be kind of fun to create a CLI tool, something interesting like that, like approaching the problem of converting the template language into something that can be parsed and compared and then read back.
James C. Davis: [36:57] Yeah, it's a really interesting problem. Dan Freeman did a lot of the initial work on the mapping stuff, and I've done some work on that. A lot of the work I did was around the language server, which was interesting, basically. Then we had the CLI tool that could do it. But part of the real value of it is to be able to actually have all the tools that TypeScript gives you in your editor. To be able to hover on a component and say, where is this component to find, what are its arguments, all these kind of things, and then have the red squiggles that we all love or hate.
Charles Carpenter: [37:33] Depends on how many there are in the editor.
James C. Davis: [37:36] I got to learn a lot about how that works and actually create a language server implementation that could take this information that we're getting from Glint and present it in a way that different editors could understand.
Charles Carpenter: [37:50] Information to act on.
James C. Davis: [38:05] It's all on the component site. So, yeah, you don't have to do anything different in templates. Honestly, it will work. We were able to make it backwards compatible so that things will work with just a regular ARGs signature where we just pass ARGs in.
Robbie Wagner: [38:21] Okay.
James C. Davis: [38:21] It's just that it's incomplete. And so, if you try to have something that yields blocks, like you're going to get type errors that said there are no blocks because you didn't define any, for example, even just a regular yield it'll say, well, there's no default block, so you have to go in and add that. I think it's fairly straightforward, but we'll see how it goes. We've been doing a lot of work on documentation recently.
Robbie Wagner: [38:46] Yeah. So, I'll drop this into Swatch sometime. Swatch is all in TypeScript and Ember, and we'll see how it works.
James C. Davis: [38:54] Cool.
Charles Carpenter: [38:54] Now you must assimilate Robbie.
James C. Davis: [38:59] It'll help you; I promise.
Robbie Wagner: [39:01] Yeah. Something has to.
James C. Davis: [39:03] We have a little bit of time left, so let's move into some whatnot tell us about, other than how many 15 to 20 string instruments you have, what are you into? What do you and the family get up to in Charlottesville area.
James C. Davis: [39:19] Yeah. So, we moved out here, I guess it's been about five years ago. We moved from Texas, from the coast of Texas. So, like flat as a pancake and on the water from Corpus Christi to the mountains. So, I can actually see the Blue Ridge, well, the trees are something, but I can kind of see the Blue Ridge Mountains out my window right here. Yeah. So, I have two kids. They are ten and six and tons of fun. Oh, by the way, Robbie congratulations in person, I guess I congratulated you over chat so welcome to Fatherhood. Yeah, I heard your show when you were talking about the kid just sleeping. Is that still the case? Are we still just sleeping?
Robbie Wagner: [40:03] No, we're doing a lot of yelling now. It's weird because 90% of the time the yelling means I want food, right?
James C. Davis: [40:11] Sure.
Robbie Wagner: [40:12] We try to feed him and then sometimes that's not the case and then he just yells at everything. So, like, I mean, some people say it's like maybe colic or whatever, but like, he's gotten to the point where he yells at a lot of stuff. But if you go to feed him and that's what he wanted, he won't even finish the bottle. He'll just drink a couple of sips and pass out because he's like happy now. So that's a struggle, too, to get him to eat all the food. And it's definitely getting different. And he's been awake a lot more and still not all that interactive yet, but getting there.
James C. Davis: [40:47] Yeah. It's always a challenge when they can't tell you what they need. You're like, is it this? Yeah. Sometimes it feels like trying to debug type errors. Is it this?
Charles Carpenter: [41:02] You just throw everything at it you can.
Robbie Wagner: [41:03] You can you can't put an any on there, right.
James C. Davis: [41:06] Exactly. Just ignore it. Right.
Charles Carpenter: [41:10] It's all type unknown, right?
James C. Davis: [41:12] Pretty much. Pretty much.
Charles Carpenter: [41:15] Not any, unknown.
James C. Davis: [41:16] Yeah. We try to get outside a lot. The weather is beautiful here's here in Virginia. It's miserably hot in Texas already, so it's great here a lot of the year. We have a little camper, little tow behind travel trailer that we take. We're actually going to a little state park in North Carolina. Two weeks, I think.
Charles Carpenter: [41:39] Did you get that pre or post pandemic or mid pan?
James C. Davis: [41:42] We got a pre, yes.
Charles Carpenter: [41:44] You're OG.
James C. Davis: [41:45] Yeah. Just like a year before we were just like we knew.
Charles Carpenter: [41:49] Yeah. Before it was cool. Before they were twice as expensive.
James C. Davis: [41:54] It was great over the pandemic. We did all kinds of vacationing when no one else could.
Robbie Wagner: [41:59] Yeah.
James C. Davis: [42:01] It was great. Self-contained.
Robbie Wagner: [42:03] Yeah. Chuck tried, but didn't go well for him.
Charles Carpenter: [42:08] Yeah. We have to shoot for the stars. So, we got like a 27-footer and we decided we were going to drive cross country to see family and friends in Florida. It was horrible. Yeah. For various reasons, though, because it was huge and we were driving into tropical storms and it was a little much for our car. We have like a Q7. So, I think it has like seven 7700-hundred-pound tow capacity or whatever. This was like 6500. So, it took our gas mileage down to like 8 miles per gallon. So, then we're stopping and my kids were two and five or maybe, I don't know, was it last year? Year before it's hard for me to understand any more. I don't know where I am and what my name is. So young kids and they're in the car for what we thought. Oh, we'll drive 6 hours every day. Just kidding. Because we can't go anywhere. It's going to take a minimum of 8 hours to get to any of our stopping points and some even longer than that. And so, it was just bad, actually. Funny thing is we were stopped in Austin. We were like outside of Austin at some farm and that was kind of cool. But it was a little off the grid and we just decided to pull the plug and we stored it in Austin, drove the rest of the way, did hotels because we were just like, we will kill each other if we don't get Covid. It doesn't matter. And then just picked it up on the way back and kind of like plowed through on the way back.
James C. Davis: [43:36] But yeah, not for everybody.
Charles Carpenter: [43:38] Well, yeah. And I think I would do it again in the sense of like a have a smaller one that's just for sleeping predominantly like this, had just too much space, which my wife thought would be great and happy for the kids and space to stretch out and a door, you can close the door to the bedroom and all that kind of stuff. So, I would do a smaller one and I would just like go somewhere like, oh, we're going to the Grand Canyon or up to Zion or something like that. It's drivable in less than a day.
James C. Davis: [44:07] Yeah. Most of our trips are shorter and ours is 20ft long. Weighs just a hair over 3000 pounds. So, like much more.
Charles Carpenter: [44:15] Right.
James C. Davis: [44:16] We actually bought it in Wisconsin, which is interesting. That's another story. We had a big road trip and then my wife is actually from Iowa and sometime over the pandemic we actually drove it out there and stayed in it for a full month.
Charles Carpenter: [44:31] Oh, wow.
James C. Davis: [44:31] With the four of us. Which is interesting.
Charles Carpenter: [44:33] Yeah.
James C. Davis: [44:33] And we didn't kill each other.
Charles Carpenter: [44:35] There you go.
Charles Carpenter: [44:37] You could survive in a tiny house.
James C. Davis: [44:39] Yeah. It was like a tiny house.
Charles Carpenter: [44:40] Yeah. Maybe you have a calmer disposition than I do or something. I don't know. We need space.
James C. Davis: [44:46] I don't know.
Charles Carpenter: [44:48] Are you from Texas?
James C. Davis: [44:50] I am, yes. I actually grew up in Austin area and I lived in Corpus Christi for like 20 years.
Charles Carpenter: [44:58] You don't fit my mental stereotype for people from Texas at all.
James C. Davis: [45:01] Yeah, I get that a lot.
Charles Carpenter: [45:02] But Austin is kind of different yes.
James C. Davis: [45:05] Then I'm like, I'm from Austin. Like, okay, you're from Austin.
Charles Carpenter: [45:07] Okay. Yeah, we got it.
James C. Davis: [45:08] Yeah. They're like, Where's your accent? Where's your horse?
Charles Carpenter: [45:12] Yeah. When I say Kentucky, people have that thought, too. And actually, it was a very urban area where I grew up, so right across the river from Cincinnati and basically like an extension of, I wear shoes. Only dated a couple of cousins, but they were like third cousins, so I think that's not a problem. Not illegal at all. Oh, man.
Robbie Wagner: [45:36] Oh, boy.
Charles Carpenter: [45:37] Yeah. There you go. There's your what not in humor.
James C. Davis: [45:42] There it is.
Charles Carpenter: [45:43] Other than camper and stuff. Is there stuff in Charlottesville you're a big fan of?
James C. Davis: [45:48] Yeah.
Charles Carpenter: [45:49] Former President's Winery.
James C. Davis: [45:51] Yes. There's actually three former Presidents homes, all in the area.
Speaker 2 [46:00] Obviously Jefferson.
Robbie Wagner: [46:01] And the Rock lives there.
James C. Davis: [46:02] The Rock lives here.
Charles Carpenter: [46:04] Really?
James C. Davis: [46:05] Yeah. I've heard there's a lot of famous people that have homes in the area.
Charles Carpenter: [46:11] It's a pretty area. I'm a fan. You can take the Amtrak up to DC, too, if you want.
James C. Davis: [46:16] Yeah. I've taken as far as Baltimore so far, but I'm going to keep going. I will go the other way, too, because that's really pretty goes to the Valley and I think West Virginia or out that way.
Charles Carpenter: [46:30] That would be interesting. Yeah. I mean, I used to take the Acela up to New York for work sometimes. That's kind of fun.
James C. Davis: [46:37] Yeah.
Charles Carpenter: [46:37] I never went any further than that, but it was easier than driving and not dealing with a car to get into the city anyway. So, you'd rather. Yeah.
Robbie Wagner: [46:44] And it takes like half the time of driving somehow. It's magic.
Charles Carpenter: [46:48] Yeah. It's like two and a half hours or something. Well, it's not really any stops or traffic. Just going.
Robbie Wagner: [46:55] Yeah. It takes me like 5 hours to drive to Philly, depending on the day. So, getting to New York that quick is I mean, it's supposed to be like two and a half hours to Philly, but it's not.
Charles Carpenter: [47:04] I was going to say, like, the train is even shorter than 2 hours to Philly, if I recall. I only took the train once. Yeah.
Robbie Wagner: [47:10] But have you ever tried to drive there?
Charles Carpenter: [47:11] No. Why would I do that?
Robbie Wagner: [47:13] You put it in the GPS and it's like two and a half hours and you're like, liar.
Charles Carpenter: [47:19] Never going to happen. Yeah. I've only been in Philly a couple of times and we never drove. We just took the train. It was so easy and I don't want to deal with parking in the city, all that stuff.
James C. Davis: [47:29] Oh, yeah. Yeah. I like the train. I wish it was more like Europe where we could just take the train everywhere.
Charles Carpenter: [47:36] Yeah.
Robbie Wagner: [47:37] We loved that. When we were in Italy, it was just like go anywhere on the train, even if it's a place you think the train won't go to. You ask Chuck and he was like, yeah, you take this train to this bus and you can get everywhere.
James C. Davis: [47:48] Oh, yeah. You can get anywhere, like rural nowhere land. Was I actually helpful to you? Is that what that was?
Robbie Wagner: [47:55] Yeah, you were.
Charles Carpenter: [47:58] There you go. It's pretty great. But you also got to think about the size, right? Like, okay, Italy is the size of what, West Virginia or something. It's like, not that big.
Robbie Wagner: [48:09] Not huge. Yeah.
James C. Davis: [48:10] It's always amazing to me how small Europe really is.
Charles Carpenter: [48:14] Yeah. And it's a very dense population over a few hundred years longer than we've been here. So, there's that, too.
James C. Davis: [48:22] Just a bit.
Robbie Wagner: [48:24] We did get to one place when we went to Montalcino. There's no way to get into town from the train stop, which we didn't really plan ahead for. I think there's a bus, like once a day or maybe twice a day or something. We were just kind of stuck when we got there.
James C. Davis: [48:41] How far is it? You could walk for sure.
Robbie Wagner: [48:43] No, it was.
James C. Davis: [48:44] You could just walk.
Robbie Wagner: [48:45] No.
Charles Carpenter: [48:46] So what did you do? Get on the train and go back or what?
Robbie Wagner: [48:49] So we were going to a hotel and we just called them and we were like, guys, we messed up. Can you come pick us up? And they're like, yeah, so they like, sent a shuttle and picked us up.
Charles Carpenter: [48:59] Well, there you go. See? Yeah, they're pretty nice in that way, too. They weren't going to be like, oh, no walk here, jerks. Yeah.
Robbie Wagner: [49:06] Especially a hotel. You're paying to stay there. They're going to accommodate.
Charles Carpenter: [49:10] Yeah, that's funny. So not every place, but lots of places. Especially, like when going to hotels and whatnot. There you go. Have you been to Europe, James?
James C. Davis: [49:20] I have not been to Europe. It's on my list.
Charles Carpenter: [49:23] Can't take your caravan.
James C. Davis: [49:25] Yeah. Can rent one, though.
Charles Carpenter: [49:28] You could? Yeah. A lot of people do that in Australia, actually. I don't know.
James C. Davis: [49:31] Do they?
Charles Carpenter: [49:32] Yeah. The big thing to RV around Australia because there's just like such massive stretches where there's nothing this way. You need to bring a bathroom with you.
James C. Davis: [49:41] Have you been Australia?
Charles Carpenter: [49:43] No, I haven't. Ship Shape or treat? Sure. Yeah. There we go. That's what I'm talking about. So, I'm not a big beer person. I guess it's like pretty in some parts. There's a lot of stuff that will kill you there.
Robbie Wagner: [49:54] Oh, yeah. Bring a machete and a gun.
Charles Carpenter: [49:57] Yeah. A lot of my travels are inspired by food, and I don't know what the food inspiration is for there. I mean, I hear New Zealand is beautiful. I'm not that much of a Hobbit fan. And again, what's the food? Right, right. That's the draw for me most of the time.
Robbie Wagner: [50:12] Shrimp on the Barbie, right?
Charles Carpenter: [50:14] Yeah.
James C. Davis: [50:15] I saw a thing, supposedly. Charlottesville. Speaking of Charlottesville, the tiny little hamlet is like the next great food city or something like that. I don't know. Some magazine did a thing, which maybe.
Charles Carpenter: [50:30] I don't know. I mean, Southern food is good.
Robbie Wagner: [50:32] There's a lot of wine.
Charles Carpenter: [50:33] Yeah, there's a lot of wine.
James C. Davis: [50:34] There's a lot of wine. There's a lot of wine.
Charles Carpenter: [50:36] Dave Matthews has a winery there.
James C. Davis: [50:37] Dave Matthews does.
Charles Carpenter: [50:39] His is pretty good. That one I like Blenheim. I think it was. Yeah. So, food. I'm driven very much by food. Yes. Southern food is good. Big fan of that. I really want to go to Tokyo because it's like some weird epicenter of all these crazy things. And then I used to work for National Geographic, and one of the trips you could do was you go and fly in and out of Tokyo, and then you basically do this big photography tour around the island. So, you get this crazy urban experience, and then you go out and see all the rural areas of Japan, and that would be like awesome. That's the retreat.
James C. Davis: [51:17] That sounds pretty amazing. Yeah.
Charles Carpenter: [51:19] I want to go eat noodles all over the place.
Robbie Wagner: [51:23] Noodles and just like a whole octopus in your bowl, right?
Charles Carpenter: [51:27] Yeah.
Robbie Wagner: [51:28] Weird stuff.
Charles Carpenter: [51:29] Have you eaten octopus? Because I have.
Robbie Wagner: [51:32] I have not. I am a little kid that is picky with food at heart. I will eat some things, but I think I would do octopus, but it would need to be prepared well, I don't want literally just a whole octopus in my bowl. Like maybe peel it a little or cook it well or whatever.
Charles Carpenter: [51:48] Yeah.
Robbie Wagner: [51:49] Don't they have a thing where it'll be alive still when they give it to you and you have to kill it and eat it?
Charles Carpenter: [51:55] I'm sure there's that kind of thing. I don't want to murder anything. This is why I pay money, right? Like, I'm not a Hunter. Fishing is okay, but I don't keep them and cut them up or whatever. Yes. I'm not in the murder.
Robbie Wagner: [52:06] Just for fun.
Charles Carpenter: [52:07] Yeah. Just for fun. Because we have all these modern conveniences and someone else has already killed some things. I better eat that so it doesn't go to waste. Yeah, those are my thoughts.
Robbie Wagner: [52:17] On a related note, I don't know if we've talked about this ever, but you know how they get steaks and they age them for like 90 days a year, whatever, and then you buy it at the store and it goes bad in three days. What's up with that?
Charles Carpenter: [52:31] So it's very specific to the storage, though. So, when they're doing that, like dry aging or whatever, it's at a particular temperature and there's particular humidity and like salt content and stuff to the air. And so that's what's happening. And it actually develops a little bit of a crust and then they'll like shave it off. So, this crust has protected the meat. Got you. So, there's a process there. I think I'm trying to remember. I don't know. I watched some cooking shows because it's fun. And then I can't remember. I feel like it was on some cooking show that I saw this. It's like a famous New York Steakhouse and that's basically what they do is they just do steaks and they age all these different cuts and they have this crazy giant warehouse that's all controlled in that same way.
Robbie Wagner: [53:20] Yeah. Okay. Yeah. This has always bothered me.
Charles Carpenter: [53:23] Yeah. Why is it these things? Well, I mean, have you ever salt grind your steaks?
Robbie Wagner: [53:29] No.
Charles Carpenter: [53:30] So when you're doing that, you actually take it out and you put it on a little rack or whatever and you put salt on top and you put it in the freezer. Is it the freezer? Or maybe it's the fridge. I can't remember. I did it one time. You got to put it in cold, though. It might have been just the fridge Because freezer wouldn't make sense because it would freeze at all. But yes, it draws the moisture out and then you kind of like wipe that off and then it'll soak back in, like super soak back in and then it makes it extra tender.
Robbie Wagner: [53:55] Interesting. Yeah. I tend to just bring steak home from the store, leave it on the counter for, like, a few hours and then Cook it. I don't do anything fancy.
Charles Carpenter: [54:05] Sous vide is like the jam. I used to reverse sear.
Robbie Wagner: [54:07] I tried that. It didn't go well. It was good, but it wasn't like, wow, this is so much better than if I just pan fried this steak. I do a fine enough job just pan frying it. I guess.
Charles Carpenter: [54:21] I used to reverse sear, so I'd let it go at low temperature in the oven for, like, an hour, get within about ten degrees and then super-hot crusted up. Now I just sous vide And then do that super-hot crusted up.
Robbie Wagner: [54:33] Well, we'll end the steak cast here. They're wasting a lot of time Talking.
Charles Carpenter: [54:38] About this Whiskey Web and Steak.
Robbie Wagner: [54:40] Yeah. Thanks, everybody, for listening. If you liked it, please subscribe, leave us some ratings, Et cetera, and we'll catch you guys next time.
Charles Carpenter: [54:51] Thanks for listening to Whisky Web and Whatnot this podcast is brought to you by Ship Shape and produced by Podcast Royale. If you like this episode, consider sharing it with a friend or two and leave us a rating. Maybe a review. As long as it's good.
Robbie Wagner: [55:06] You can subscribe to future episodes on Apple Spotify or wherever you get your podcast. For more info about Ship Shape in this show, Check out our website at Shipshape.io.