Process of identifying the stages of development/deployment of computer software product, by assigning a symbolic or numeric unique identifier to each included feature or component (or package of components)
POPULARITY
Cargo Semver Checks is a Rust tool by Predrag Gruevski that is tackling the problem of broken dependencies that cost developers time when trying to upgrade dependencies. Predrag's work shows how automated checks can catch breaking changes before they're released, potentially saving projects from unexpected failures and making dependency updates less painful across the entire Rust ecosystem. The show notes and blog post for this episode can be found at https://opensourcesecurity.io/2025/2025-04-cargo-semver-checks-predrag-gruevski/
Predrag Gruevski and Chris Krycho joined the show to talk about SemVer. We explore the challenges and the advantages of semantic versioning (aka SemVer), the need for improving the tooling around SemVer, where semantic versioning really shines and where it's needed, Types and SemVer, whether or not there's a better way, and why it's not as simple as just opting out.
Predrag Gruevski and Chris Krycho joined the show to talk about SemVer. We explore the challenges and the advantages of semantic versioning (aka SemVer), the need for improving the tooling around SemVer, where semantic versioning really shines and where it's needed, Types and SemVer, whether or not there's a better way, and why it's not as simple as just opting out.
Allen Wyma talks with Predrag Gruevski about cargo-semver-checks, a linter that checks your crate's API for any semver violations. Contributing to Rustacean Station Rustacean Station is a community project; get in touch with us if you'd like to suggest an idea for an episode or offer your services as a host or audio editor! Twitter: @rustaceanfm Discord: Rustacean Station Github: @rustacean-station Email: hello@rustacean-station.org Timestamps [@00:00] - Meet Predrag Gruevski - creator & maintainer of cargo-semver-checks [@00:35] - Exploring cargo-semver-checks, a linter for preventing breaking changes and ensuring semantic versioning [@05:00] - What is Semantic versioning (semver) [@08:17] - Determining major version bumps [@10:48] - Background of the project [@18:25] - Functionality, use cases, and project details of cargo-semver-checks [@38:51] - Future plans and upcoming features [@47:28] - Closing discussion Credits Intro Theme: Aerocity Audio Editing: Plangora Hosting Infrastructure: Jon Gjengset Show Notes: Plangora Hosts: Allen Wyma
Scott and CJ dive into a potluck of developer queries, from their favorite tech reads to essential web dev fundamentals. Tune in as they dish out expert advice on migrating React projects to TypeScript, crafting precise timers for countdown apps, and navigating the world of free-tier plans. Show Notes 00:00 Welcome to Syntax! 01:20 Brought to you by Sentry.io. 02:16 What book changed your life? Whatever you think, think the opposite It's not how good you are, it's how good you want to be Crucial Conversations thanks @benvinegar 04:58 What are the web development fundamentals for beginners? Command Line Power User 08:39 What are your thoughts on Chris Coyer's post on his sale of CSS-Tricks? Chris Coyer's Post 11:51 Advice for migrating an existing React project to TypeScript. 20:38 Countdown apps, performance vs accuracy. 25:19 Are you listening to podcasts? Which ones? 31:46 With AI on the rise, will free-tier plans become a thing of the past? Coolify Syntax 730: Own Your Own Paas 35:59 What is SemVer anyway? semver.org npmjs TypeScript on Semantic Versioning 40:14 A question on ergonomics, home office aesthetics and productivity. 47:59 Do you ever stop to consider VueJS in 2024? Why or why not? unjs.io 52:12 Sick Picks + Shameless Plugs. Sick Picks Scott: Ellenos Yogurt CJ: Flat Iron Pepper Shameless Plugs Syntax.fm YouTube Hit us up on Socials! Syntax: X Instagram Tiktok LinkedIn Threads Wes: X Instagram Tiktok LinkedIn Threads Scott:X Instagram Tiktok LinkedIn Threads Randy: X Instagram YouTube Threads
Al and Codey talk about some ideas they have for new cottagecore games Timings 00:00:00: Theme Tune 00:00:30: Intro 00:05:04: What Have We Been Up To 00:13:29: News 00:27:56: Cottagecore Game Ideas 01:12:59: Outro Links Turnip Boy Robs a Bank on Steam Turnip Boy Robs a Bank on Switch Cult of the Lamb “Sins of the Flesh” Update Meetlight Alpha Info Chill Town Beta Info Rusty’s Retirement Mac Confirmation Immortal Life on Steam Contact Al on Twitter: https://twitter.com/TheScotBot Al on Mastodon: https://mastodon.scot/@TheScotBot Email Us: https://harvestseason.club/contact/ Transcript (0:00:30) Al: Hello farmers, and welcome to another episode of The Harvest Season. My name is Al, (0:00:38) Codey: And my name is Cody. (0:00:39) Al: and we are here today to talk about cartridge core games. (0:00:46) Al: Cody, it’s been so long. It’s been a whole week since we talked. (0:00:51) Codey: A whole week, yeah. And this was a surprise. I didn’t realize I was gonna be on. I was like, (0:00:58) Al: I don’t think we need to talk about the fact that who is on this podcast has changed three different times. (0:00:59) Codey: oh man, I’m not recording for a while. And now, now I… (0:01:08) Codey: I mean, it’s just, yeah, I guess it’s just the fact of my travel plans got messed up. I was supposed to be home right now. (0:01:20) Codey: But for those in the United States, you will know that there is a huge winter storm happening back to back to back. There’s much weather. (0:01:28) Al: There is weather. Weather is happening. January weather. (0:01:30) Codey: There’s so much weather. And I was like, not… my flights got canceled like three times and I was just like, ah. (0:01:38) Codey: No, I’m just gonna stop. I’m just gonna stop trying to go home now. Which ended up working out because the whole… one of the whole reasons I was trying to go was because my grandma was supposed to have shoulder surgery and I was gonna like help out. (0:01:50) Codey: But then literally the day before I left, I was supposed to leave. That got scheduled to February and it was like not when I was gonna be there. So it works out because I can now make sure that I’m there for that. (0:02:02) Codey: But it just was frustrating because I was supposed to be on vacation. (0:02:08) Codey: But such is life and… yeah. (0:02:12) Codey: How is weather where you are? (0:02:14) Al: Yeah, it’s cold, but it’s not too cold. (0:02:20) Codey: Oh man, it heckin’… it heckin’ whimdy here. (0:02:20) Al: It’s just kind of standard winter cold for here. (0:02:26) Al: Yeah, I mean, it’s all, I mean, I’m coastal, so it’s always windy here, right? (0:02:30) Al: But which I think is part of the reason why it feels colder. (0:02:30) Codey: Ma’am. (0:02:35) Al: Because it’s like, it’s only minus one Celsius here, which is… (0:02:39) Codey: It’s like 30. (0:02:40) Al: - Yeah, almost exactly, but the wind, (0:02:44) Al: the wind gets you. (0:02:45) Codey: I have a european roommate. I know how to do these conversions. (0:02:51) Al: There are a few I know off the top of my head. (0:02:53) Al: That should have been one, because of course, (0:02:55) Codey: It’s fine. (0:02:56) Al: I knew that we should have been one, (0:02:59) Al: but for some reason, my brain, not worky. (0:03:04) Al: So. (0:03:04) Codey: Oh, I also did want to mention, uh, listeners, if you have any interest in listening to (0:03:12) Codey: an episode about, uh, the best version number systems. I was talking to my partner about it the other day and he like mentioned this very specific version number system and I was like, (0:03:28) Codey: Oh my gosh, we could make a whole episode out of it. (0:03:31) Al: Well, of course we could. It doesn’t mean we need to. (0:03:34) Al: Presumably it was SemVer he was talking about, semantic questioning. (0:03:34) Codey: But yeah, he was talking about some bear. So yeah, uh, listeners, if you want to hear about that. (0:03:37) Al: Yeah. (0:03:41) Al: The problem is that SemVer only really makes sense for things with interfaces, (0:03:48) Al: which, you know, user facing software is not, and people use it for that. (0:03:51) Al: But then it doesn’t really map in the exact same way. (0:03:53) Al: So you’re like, well, at what point are we going to do this? (0:03:56) Al: Because the whole point of that is that you only change a major version number when there’s something backwards incompatible. (0:04:01) Al: It doesn’t make any sense when you’re not an interface. (0:04:02) Codey: Well, that’s why we need to devise a cottage ver. Cottage semver. (0:04:05) Al: Are we doing it? (0:04:08) Al: Are we doing it or we just or we just don’t? (0:04:11) Codey: Caught semver. (0:04:12) Al: Well, I mean, I’ve already done it, right? (0:04:14) Al: I’ve said you just have two numbers, one when you’re adding new stuff, (0:04:17) Al: one when you’re adding when you’re fixing bugs. (0:04:19) Al: That’s it done. You don’t need any more. (0:04:20) Codey: Like one for content one for patch (0:04:22) Al: Don’t. Yeah, that’s all you need. (0:04:24) Al: You don’t need any more. Two numbers. (0:04:25) Codey: Okay, but we could definitely get into this in an episode (0:04:27) Al: No, that’s it. That’s it. We’re done. (0:04:30) Codey: listeners if you really want to You [laughing] (0:04:31) Al: Transcripts for this podcast are (0:04:34) Al: available in the show notes and on the website five minutes in. (0:04:38) Al: So, you know, as useful as that is this episode, we’re going to talk about some ideas that we’ve had for what we want people to make Cottagecore games off. (0:04:48) Codey: Mm-hmm. (0:04:48) Al: So and then we’re going to argue about them, maybe. (0:04:52) Al: I don’t know. We’ll see. (0:04:54) Al: We so before that, we’ve got a bunch of news. (0:04:59) Al: I’m then first of all by. (0:05:01) Al: Not for bob, wording segways. (0:05:03) Codey: Mm-hmm. Mm-hmm. (0:05:05) Al: But first of all, Cody, what have you been up to? (0:05:08) Codey: I have been (0:05:12) Codey: Playing I’m still playing coral island (0:05:15) Codey: Still enjoying that but I was also am also playing Palia And so I was playing a lot of coral island because I was home and had my Xbox and I could play it And I knew that when I went on vacation (0:05:27) Codey: Hot I wasn’t gonna be able to play it because I don’t bring my Xbox on vacation (0:05:33) Codey: I am bringing my switch and so I was like, oh I can play so much Palia on my vacation But now vacation is kind of stalled, but I don’t know I’m still probably gonna be playing a decent amount of Palia here in the next few weeks But I’ve also been reading a lot of books. So I (0:05:52) Codey: Got into The Poppy War series by RF Kwang. I picked up some Joe Abercrombie books. These are all fantasy books I’m really trying to like pull out the fantasy (0:06:04) Codey: listeners here like come at me with your book recommendations because I freaking love them and then I (0:06:10) Codey: Finally caved and bought the second book in the fourth wing series iron flame (0:06:15) Codey: Because I read fourth wing. It was okay, but I do (0:06:24) Codey: So But there’s like a 40-week wait for my library and I found one (0:06:31) Codey: for pretty cheap, so I finally (0:06:33) Codey: just caved and bought that. So I have a giant stack of books that were for vacation. (0:06:39) Codey: So now I just have a giant stack of books waiting for when I can read them. (0:06:44) Codey: But yeah, so listeners hit me with those fantasy, fantasy wrecks on on the slack. I do love some fantasy books. (0:06:52) Al: Well, well, here’s a fun thing. (0:06:54) Al: I bet you weren’t expecting me to have some actual stuff on books. (0:06:57) Al: I don’t have not been reading, don’t worry. (0:06:59) Al: But you mentioned Iron Flame and I was like, oh, that is the book that I bought (0:07:04) Al: my sister for Christmas. So there you go. (0:07:05) Codey: Oh, yeah, there you go. (0:07:07) Al: Because it was on her wish list. (0:07:10) Codey: I mean, you might know some of the books. (0:07:12) Codey: So my partner, I’m in his apartment right now, and he has a book that was called like, (0:07:17) Codey: let me just find the picture of it, but it was really stupid. (0:07:19) Codey: And then he has another one here. (0:07:21) Codey: This is his bedside reading. (0:07:23) Codey: The Linux programming interface. (0:07:26) Al: Oh my word, what an arid. (0:07:29) Codey: Oh, and domain design. (0:07:31) Codey: But there was this one that was so funny. (0:07:36) Codey: It was… (0:07:39) Codey: Oh, I also yesterday had, I’m in New York City, (0:07:42) Codey: and I had a milkshake that had a whole ass piece of cake on top. (0:07:46) Codey: It was so goofy. (0:07:48) Codey: Made sense why it was $15. (0:07:50) Codey: Okay, the book is called Data Design for Mere Mortals. (0:07:54) Codey: Database Design for Mere Mortals. (0:07:56) Codey: So stupid. (0:07:57) Codey: Anyway, that seems like the kind of books that you would read out. (0:07:58) Al: Well, sure, in theory, like when I was in uni, I had to read a whole bunch of books like that, but I didn’t. I bought them and then I sold them. It’s just not like I don’t, (0:08:07) Codey: Okay, okay, that’s fair (0:08:13) Al: I’m not going to learn by reading paper about how these things, it’s just, it’s not how it works for me. (0:08:16) Codey: Mm-hmm. That’s fair. Yeah. Well, he said that he was going to be selling the database design from your mortals book. That wasn’t great. So don’t get that if you are a programmer. (0:08:26) Al: Well, you have reminded me just before I go on to what I’ve done, I was reminded of, (0:08:28) Codey: What about you, Al? What have you been up to? (0:08:34) Al: so you mentioned Coral Island, I had some feedback from John, listener of the podcast, (0:08:36) Codey: - Yeah. (0:08:40) Al: my brother-in-law, who we had been mentioning about the weirdness of how Coral Island kind of stops at some point, and he wanted to point out that not of the missing giant seems okay, it would be weird if they decided to add that later and had to shoehorn it in, but also I don’t think you need to resolve every single storyline, (0:08:50) Codey: Okay, yeah (0:09:10) Codey: Mm-hmm. (0:09:14) Codey: Yeah. (0:09:14) Al: which I think is a fair point. What I replied to him was, “Yeah, that’s fair. I think I’m just a bit more miffed about it because of the bug with the quest.” That in and of itself (0:09:24) Codey: Yeah. (0:09:26) Al: was quite annoying. So that’s a fair point. I take that on board. Not all storylines need to be 100% resolved. That is totally fair. (0:09:36) Codey: Mm-hmm. True. Well, okay, and now what have you been playing? (0:09:40) Al: So basically just Pokémon. There is a game I’m meant to be playing for the podcast, but we delayed that episode because I’m really bad sometimes at playing games. So it got to Friday and I’m like “I’ve played 15 minutes of this game, can we delay this episode?” (0:09:56) Al: I’ve not been playing that, I have been playing Pokemon, because the epilogue came out this week, so I’ve played that. (0:10:04) Codey: Is that sword in Scarlet the Violet? (0:10:06) Al: Yes, yeah, so it’s the kind of extra random bit of story at the end after the two DLCs. (0:10:08) Codey: OK. (0:10:14) Al: So yeah, I enjoyed it, it’s not a huge thing, if you’re paying attention, it’ll take you like an hour and a half, two hours. If you’re zooming through (0:10:24) Codey: Mm-hmm. (0:10:26) Codey: Hmm. (0:10:26) Al: it, you can get it done in like 40 minutes. But it was a fun little extra thing. So I’ve played that on both games. And now I’ve done my regular thing of remembering that my Pokemon living decks with all the forms, I’ve not completed all of the forms. So I’m doing some more of that. And I’m currently getting really annoyed trying to find an aqua Aldi and Taurus, (0:10:28) Codey: Mm-hmm. (0:10:52) Al: they’re such a small… what’s the word… (0:10:56) Codey: drop rate? Yeah. (0:10:56) Al: Spawn rate. Yeah. So anyway, that’s fun. I enjoy it. Whatever. (0:11:03) Al: And then also I have watched… so I did my regular one month of Netflix to watch everything that’s on it. (0:11:11) Codey: Okay, yep (0:11:12) Al: And so I’ve watched a bunch of things. I’ve watched Wednesday and I watched One Piece, the live action One Piece. (0:11:19) Al: And I watched the new season of Sonic Prime and there’s a couple other things I want to watch as well. (0:11:25) Al: So yeah, I’ve been in. (0:11:26) Al: Consuming a lot of that of stuff that’s come out in the last year or two. (0:11:28) Codey: Mm-hmm. (0:11:31) Al: And but I haven’t watched it because I didn’t have Netflix at the time. (0:11:34) Codey: Cool. Uh, yeah, I really liked Wednesday, um… (0:11:39) Codey: I didn’t… I’m not… I didn’t… I haven’t watched One Piece, and part of me wants to not watch the live-action because then what if I then want to get into the anime? (0:11:45) Al: What about it? (0:11:49) Codey: You know… (0:11:51) Codey: That’s a commitment. (0:11:51) Al: Well, yeah, but my point is like, I don’t… (0:11:56) Al: Oh, you mean, what if watching the live action makes you want to watch the anime? (0:11:59) Codey: Yes. (0:12:00) Al: I don’t think it will. (0:12:03) Al: And equally, I think that from what I can gather, the live action first series of the live action covers like the first 500 episodes or something insane of the anime. (0:12:12) Codey: Oh, yeah. (0:12:15) Al: Just there’s so much, like, you know what animes are like, right? (0:12:20) Al: They pad things out so much and there’s so many filler episodes. (0:12:23) Al: I might be a little bit exaggerating with 500, but certainly it was like, it was a lot of the episodes it covers with the first 10 episodes of the live action. (0:12:33) Al: So if they keep going with that, which they’ve said they’re doing a second season so far, (0:12:37) Al: it’s Netflix, so you never know. (0:12:40) Al: I suspect they would catch up pretty quickly. (0:12:44) Al: So. (0:12:45) Al: Yeah. I enjoyed it. I thought it was good fun. (0:12:49) Al: It is not at all what I expected it to be. (0:12:51) Al: I don’t know why I expected it to be, but I didn’t expect it to be Pirates. (0:12:54) Al: I didn’t know it was about… It’s about pirates. (0:12:56) Codey: You didn’t know one piece was a wildfire. (0:12:56) Al: Did you know One Piece is about pirates? (0:13:00) Al: Why would I know it was about pirates? (0:13:02) Al: I’ve never watched or read any One Piece. (0:13:04) Al: Why would I know it’s about pirates? (0:13:04) Codey: Okay, I mean I just I’ve not watched or seen any I’ve just I just have a roommate that really likes anime. (0:13:14) Al: Yeah, I have never had a conversation about One Piece that isn’t just “Oh, you’re going to watch One Piece? (0:13:21) Al: Haha, no, it’s very long.” (0:13:22) Codey: Okay, okay. Yeah, no, it’s about pirates. (0:13:28) Codey: Yeah, cool. (0:13:28) Al: So I enjoyed that. (0:13:30) Al: Shall we talk about some news? (0:13:34) Al: Turn it boy, Rob’s a bank. (0:13:36) Al: I don’t know when they announced that when this game was coming out, (0:13:39) Al: because apparently it’s coming out on Thursday. (0:13:43) Codey: - Mm-hmm, mm-hmm, the day after this comes out, right? (0:13:44) Al: No, yeah, Thursday. (0:13:46) Al: So, yes, yes. (0:13:49) Al: So I don’t know when they announced that, but apparently they did. (0:13:53) Codey: Mm-hmm. (0:13:53) Al: And I’ve pre-ordered it on Switch. (0:13:57) Al: So there we go. (0:13:58) Codey: You excited? (0:13:59) Al: Oh, yeah, loved the first game. (0:14:00) Codey: You excited to rob a bank? (0:14:01) Al: It was fantastic. (0:14:03) Al: Absolutely. (0:14:03) Al: And I mean, the first game wasn’t really cottage core and it wasn’t really farming. (0:14:08) Al: You farm like you grow plants to use as a sword, (0:14:13) Al: which is about as far as the farming goes, and it’s very much not cottage core. (0:14:18) Al: But I enjoyed it nonetheless. (0:14:19) Al: This game, even less cottage core. (0:14:22) Al: I suspect because you’re robbing a bank. (0:14:26) Al: So yeah. (0:14:28) Al: I don’t know, playing fast and loose with the term “cottage core” here. (0:14:29) Codey: Well, you still gotta cover it, ‘cause you still gotta cover it, because we gotta know. (0:14:34) Al: Absolutely. Of course. Of course. (0:14:35) Codey: We need the deets, so. (0:14:39) Al: So there we go. That’s a thing. (0:14:40) Codey: Very exciting. (0:14:42) Codey: Mm-hmm. (0:14:44) Codey: No. (0:14:45) Codey: No. (0:14:45) Al: Did you play the first? Well, the first is currently on sale on Steam. 66% off. (0:14:52) Codey: That’s crazy. Is it part of the communism? No, capitalism. (0:14:57) Al: Yeah, yeah, I saw someone. (0:14:58) Al: Post it like, “Oh, it’s capitalism sale, isn’t that just all sales?” (0:15:04) Codey: Yeah. (0:15:04) Al: Capitalism and Economy Fest, that’s what it’s called. (0:15:06) Codey: Yep. (0:15:08) Codey: Which will be done by the time the podcast comes out. (0:15:10) Codey: Sorry, y’all. (0:15:12) Codey: But I saw Parkasaurus was on it. (0:15:14) Codey: I was like, ooh. (0:15:15) Al: Park gazares. It looks like it’s also- (0:15:16) Codey: But… (0:15:18) Codey: Well, I have very little money in the world. (0:15:23) Codey: Especially because I just had to reschedule something. (0:15:26) Codey: I like… (0:15:27) Al: Turn it by. (0:15:28) Codey: Turn it boy. (0:15:30) Codey: like, uh, make planning my flights like so (0:15:34) Codey: many months in advance, so you, so it’s super, super cheap, but I am now having to reschedule to like less than a month and now I’m, I’m grumpy, but it’s fine. Turn it boy. Whoo. (0:15:36) Al: Mm. (0:15:41) Al: Stress. (0:15:46) Al: Pelt of the Lamb are releasing their Sins of the Flesh update. (0:15:54) Al: So we’re going to be nice and careful with this, (0:15:57) Al: because this is generally a family-friendly podcast. (0:16:00) Codey: Well it’s like in Pokemon when you breed, when you have eggs, because they are eggs. (0:16:01) Al: There is procreation now coming to the game. (0:16:05) Al: And, um… (0:16:06) Al: Yeah, exactly. (0:16:11) Al: Or in The Sims, where the babies happen. (0:16:14) Codey: Yeah you just, you just adopt them. (0:16:18) Codey: This is fine. (0:16:20) Codey: Yeah so you can now have that, they have this like nudity which is really cute because they they have just like a little leaf, which I thought was… (0:16:30) Codey: super cute. They have new progression systems, so some of your followers can be kind of beefier, I guess, and there’s more benefits for them. (0:16:44) Codey: One benefit in particular that I thought you were going to like, Al, is the improved automation. (0:16:49) Codey: So there’s now a janitor station and storage structures that you can build, and it allows helps so that your followers can take better care of themselves. (0:16:57) Codey: so that when you come back you’re not coming back to… (0:17:00) Codey: chaos. There’s a new gun that helps you fight heretics. You can build… I don’t remember what it was called but it’s like a… I think it’s the tailor and that allows your followers to have better fashion. And then my favorite part was on the Twitter link which will be linked in the show notes about this. (0:17:26) Codey: the Among Us Twitter responded with finally. (0:17:30) Al: Yeah, that’s just asking for them to be asked why they don’t have (0:17:31) Codey: It’s just like, why? (0:17:41) Codey: Like why, why Among Us doesn’t have nudity? (0:17:45) Codey: Okay. Are they people? (0:17:45) Al: Anyway, I noticed something funny. They have a URL shortener, their own URL shortener called cult.link. I just thought it was fun. (0:18:00) Codey: Very cute. I still really want to play this game, and I still haven’t played it yet. (0:18:06) Codey: So, have we done a second harvest on it? (0:18:10) Al: “Yes, I want to say that was me,” he says, searching. (0:18:14) Codey: Okay. (0:18:17) Codey: He says with a question mark at the end. (0:18:18) Al: Yeah, yeah, we did. Me and Bev did a second harvest on it. (0:18:22) Codey: Okay, well maybe I maybe I need (0:18:24) Al: And I think it was Kevin and Kelly who did the first. (0:18:26) Codey: Kelly. (0:18:30) Codey: Well, maybe I need to do, maybe me and Johnny will do the sins of the flesh update. (0:18:38) Al: Well, why not? I think we’re like, we’re very soon going to have our fifth episode on Stardew Valley, so. (0:18:40) Codey: Yeah. (0:18:44) Codey: Yeah. (0:18:46) Codey: It happens. (0:18:46) Codey: So, because I do really want to work with you. (0:18:49) Al: Fair enough. Meatlight, which still hate the name, they have delayed their alpha, which was meant to be coming out at the end of the year. (0:18:59) Al: It’s now coming summer 2024, with apparently the beta coming a month later. I highly doubt there’s going to be a month. (0:19:02) Codey: That’s what they said, but yeah, I also have some doubts. (0:19:08) Al: Between the alpha and the beta, that is not going to happen. But we’ll see. So that’s on Kickstarter. (0:19:19) Al: If you’re an alpha or a beta backer, you’ll get the information. (0:19:24) Codey: They also said that they’re going to reduce the amount of updates that they try and post because they want to be able to focus on development. (0:19:31) Codey: So they’re only planning to release updates every three months. (0:19:35) Codey: And they do have in this update that they have on Kickstarter right now, they have some information about new music, some information about one of the villages, some screenshots of a new room of a romance character, etc. (0:19:48) Codey: So stuff to look at to look forward to the alpha when it comes out in the summer. (0:19:56) Al: Chill Town have released their beta. (0:19:58) Al: So again, if you’re a Kickstarter of the beta level, which I’m not. (0:20:04) Al: I just did the base one because I know I’ve got too many games to play as it is. (0:20:08) Al: I don’t need to be adding on alphas and betas to that. (0:20:12) Al: Check your Kickstarter email. (0:20:13) Al: They’ll have sent you. (0:20:18) Codey: And they’re moving along. (0:20:21) Codey: They’re having a lot of stuff come out for it, which is really cool. (0:20:27) Codey: So I also hadn’t seen this game before, I don’t think. (0:20:29) Codey: And it looks very Animal Crossing. (0:20:33) Codey: But they have some wilderness that you can explore. (0:20:36) Codey: So you can choose a different type of island to go explore and just get ready. (0:20:39) Codey: resources from which is really cool and then they also added new flowers and fencing and stuff like that so it looks like they’re really active in development so good for them. (0:20:48) Al: Yup, yup, yup, yup. (0:20:49) Codey: Mm hmm. Yes. (0:20:50) Al: I’m looking forward to it. (0:20:51) Al: I think it’s an exciting game. (0:20:54) Al: One specifically for Cody, Rusty’s retirement is coming, confirmed, coming to Mac now. (0:21:00) Al: Wait, is this good or is this bad? (0:21:02) Codey: It’s good, because I wanted to play this. (0:21:03) Al: OK, right, but it’s bad because it’ll always be on your computer now. (0:21:08) Codey: That’s fine. (0:21:10) Codey: That’s fine. (0:21:11) Codey: I’ll just turn it on. I’ll just turn on the focus mode. (0:21:15) Al: OK. (0:21:16) Al: I mean, that requires like. (0:21:18) Al: Like discipline, which I’m not going to say you don’t have, that would be harsh. (0:21:22) Codey: Well, I don’t right now, but… (0:21:25) Al: But we’re very similar and I don’t have that discipline. (0:21:30) Al: So. (0:21:30) Codey: We are very similar. (0:21:32) Codey: You’re not wrong. However, I think by the time this comes out, I will have my medication. (0:21:38) Al: It’s, well, laddie dah, sorry for some. (0:21:42) Al: It’s one of these things, this is one of these things I was talking to my therapist about. (0:21:47) Al: She was like, “Oh, do you ever do these things, like positive reinforcement things?” (0:21:51) Al: And I’m like, I’m just, my brain knows I’m tricking it, right? (0:21:55) Codey: Yeah. Oh, yeah. (0:21:56) Al: It doesn’t care. (0:21:57) Al: It’s like, I can just, it’s like, oh, if I do this thing, I get a snack and it can go, (0:22:01) Al: I can just have the snack, right? (0:22:03) Codey: I can just do that. Yeah. (0:22:04) Al: I don’t, I can’t trick myself. (0:22:08) Al: I don’t know how this works. (0:22:09) Codey: Yeah, I try and like, like, they’re like, oh, just like, schedule it and impose, impose a deadline on yourself. (0:22:10) Al: So yeah. (0:22:16) Codey: And I’m like, well, yeah, but I know that I can just move the deadline so it doesn’t do anything for me. (0:22:18) Al: It’s a fake deadline! (0:22:25) Codey: And I’m hoping that when I get some type of ADHD meds, we’ll see what I get, I don’t know what they’re going to offer me, but hopefully I’ll have some built-in focus ability developed at that point. (0:22:38) Al: Look, I’m not, the deadline thing is funny, right? (0:22:41) Al: Because I’m not going to lie. (0:22:42) Codey: Uh huh. (0:22:43) Al: If you look at the the main episodes of the podcast and you look at the greenhouse (0:22:48) Al: episodes of the podcast, you could very much see the deadlines help. (0:22:52) Codey: Yeah, they do. (0:22:53) Al: Because every single episode of this podcast has come out on the day it’s meant to come out. (0:22:57) Codey: See, but that’s, that’s like, that’s a deadline that has another human, like other people. (0:23:01) Al: Yeah, no, that’s my point. (0:23:02) Al: That’s my point. Exactly. (0:23:04) Al: Like, I have a strict schedule and it works. (0:23:06) Al: it actually has done it. (0:23:08) Al: And there are some times that the episode has only come out because I say that there’s going to be an episode every Wednesday, right? (0:23:13) Codey: Exactly. (0:23:14) Al: There have been weeks where that might not have happened. (0:23:18) Codey: Yeah. (0:23:19) Al: And then you look at the greenhouse and it’s like, oh, there was nothing in April or May. (0:23:23) Al: And then there were six in June. (0:23:28) Codey: Yeah, but… (0:23:28) Al: Because it’s like, all I say about that one is, roughly two a month. (0:23:32) Codey: Yeah. (0:23:32) Al: And let me tell you, you got two a month last year, just not every. (0:23:36) Codey: Roughly. (0:23:38) Al: Every month you got an average, an average of two a month. (0:23:40) Codey: Over time. (0:23:43) Codey: Over time, you got the quantity, but they just did not release twice a month. (0:23:48) Al: There was no regularity to that. (0:23:51) Codey: Whatever people appreciate it. (0:23:52) Al: Thank you, my patrons. (0:23:55) Codey: They’d probably, I mean, TBH, the patrons probably appreciate the waiting for us to have things that we’re excited to talk about versus forcing content that we might not necessarily be as excited to talk about, so yeah. (0:24:03) Al: Well, that’s true. (0:24:06) Al: That’s true. (0:24:08) Al: Yeah. (0:24:10) Al: How many more Sonic episodes will we do? (0:24:13) Codey: Many. (0:24:13) Al: I don’t know. (0:24:16) Al: Immortal life. (0:24:18) Al: By the way, I enjoyed the Sonic Prime. (0:24:20) Al: Sonic Prime was good. (0:24:22) Al: Kevin said, “I’ve heard that it’s bad.” (0:24:25) Al: And no, I don’t think it is. (0:24:27) Al: I think it’s good. (0:24:28) Al: It is a self-contained three series arc, (0:24:31) Al: a very specific story and I think. (0:24:33) Al: It’s a really, it’s basically like multiversal Sonic, and I think it’s really fun. (0:24:38) Al: So if you’ve ever wanted to see three, four different kinds of Amy all fighting together, (0:24:44) Al: go watch Sonic Prime. (0:24:46) Codey: Mmm, okay. (0:24:46) Al: Really good. (0:24:47) Al: Immortal life. (0:24:51) Al: Join a flourishing settlement in an idyllic valley and seek a peaceful life as you search for a way to restore your recently destroyed (0:25:03) Al: Taoist clan. (0:25:05) Al: Farm, rebuild, make friends, explore and train. (0:25:08) Al: Will you find your way to immortality in this earthly paradise? (0:25:11) Al: I don’t know, will I? (0:25:14) Al: Good question. (0:25:15) Al: So I don’t think we’ve covered this game yet, despite the fact that it’s been in early access for quite a while, nearly a year. (0:25:18) Codey: - Mm-hmm. (0:25:24) Codey: And the fact that it’s coming out pretty soon. (0:25:24) Al: But yes, the 1.0 is now coming out on the 18th of January, which is the day after this episode comes out. (0:25:32) Codey: Mm-hmm (0:25:33) Al: Now we were talking about it. (0:25:35) Codey: Mm-hmm (0:25:35) Al: There we go. (0:25:36) Al: It… (0:25:38) Codey: Yeah, I mean I I like the look of it. Um (0:25:42) Codey: It the graphics kind of give me uh, okami vibes (0:25:46) Codey: Um, which I really like okami. It’s just kind of like the (0:25:50) Codey: brush stroke um look to it in the (0:25:54) Codey: Not not all of the graphics but like a lot of the background stuff looks like it was brushed on (0:26:00) Codey: um, which is really pretty (0:26:03) Codey: Uh, it to me like it looks like a stardew clone set in china (0:26:07) Codey: Um that includes some type of magical abilities to (0:26:11) Codey: Help you with farming and and the mines and stuff like that. It looks like there was some combat based magic system (0:26:14) Al: Yeah. Yeah. Yeah. I think that’s pretty fair. The stardew clone with magic set in China sounds pretty, pretty fair from what I can see, which is like, it’s one of these things where had this come out five years ago, would I be playing it? Probably like, I don’t think I’m going to spend the time to play this game because it’s like, I’m not seeing anything that really hooks me and says you must play this now. The crops look really nice. (0:26:40) Codey: Mm-hmm. Yeah, they do. I was gonna say the the crops themselves look pretty unique and pretty nice. (0:26:49) Codey: Um, yeah, I mean I’m in the same boat as you. I have too many games and too little money and too little time. So something has to have some uh a hook that’s really different and jumps out and and snags me to to make me play it. So, um, but looks cool and is gonna come out, so. (0:27:11) Codey: Yeah, check it out. (0:27:12) Al: Yeah, if it looks, if it sounds good to you, go get it. (0:27:16) Codey: Immortal life. What is it available? (0:27:18) Al: Immortal life. It is on Steam, just for Windows, as far as I can see. (0:27:26) Al: And it is coming to PS4 and Switch, but I don’t see anything about when it’s actually coming. (0:27:35) Al: It looks like they announced initially that it was coming out on PS4 and Switch, (0:27:41) Al: And then didn’t. (0:27:42) Al: See anything else about it, so maybe it’ll come out on switch. (0:27:46) Al: Maybe it won’t. (0:27:47) Al: We’ll see. (0:27:48) Al: But as of now, we only know about the Steam version releasing on the 18th of January. (0:27:48) Codey: - Okay. (0:27:52) Codey: - Woo. (0:27:53) Codey: Ooh. (0:27:53) Al: Woo, that’s the news. (0:27:57) Al: So we’re going to talk about Cottagecore game ideas is how I’m describing it. (0:28:03) Al: And basically, I mean, OK, this all comes down to I watched a show which we’re going to talk about soon, and I thought this would be fun as a Cottagecore game. (0:28:12) Al: I went, hey, let me see if I can talk about that. (0:28:15) Al: So we’ll get to that. (0:28:17) Al: But I thought there might be other ideas that we might have about games that people could make and you could take it and go make it. (0:28:26) Codey: Yeah, so devs, if you’re listening, and if you’ve been like, “Man, I don’t know what to make, but I want to make something,” get your notebooks ready, because we’re going to throw some golden nuggets out into the world. (0:28:27) Al: And there we go. (0:28:44) Al: Yeah, first of all, we’re going to chat a little bit about what Cody thinks. (0:28:52) Codey: I just thought that to have–okay, okay, come on. (0:28:54) Al: “The top three things that a cottagecore game needs”. (0:29:00) Codey: I thought that if we were going to have this type of conversation where we’re talking about here are some ideas for Cottagecore games, we should probably have some type of preliminary discussion about what we think a Cottagecore game is, because if we’re going to say, “Then don’t come at me,” just because you didn’t write your comments. (0:29:11) Al: I think that’s totally fair. (0:29:14) Al: I’m sorry, did I say something that was negative? (0:29:20) Al: I just said that these are what Cody thinks a God’s Code game needs, (0:29:23) Al: and we’re going to talk about them. (0:29:24) Codey: It’s a just it’s a discussion (0:29:25) Al: That’s all I said. (0:29:26) Al: Where’s the negative? (0:29:27) Al: And what I said, Cody? (0:29:28) Al: Always assuming the worst here. (0:29:30) Codey: It me (0:29:32) Al: What? (0:29:32) Al: Assuming the worst or the worst? (0:29:34) Codey: Yes, same same in both and yes (0:29:40) Codey: So I sat down for a super long one minute and thought about (0:29:48) Codey: Thought about like for me like what is a requirement for something to be a cottagecore game (0:29:54) Codey: and the three things that I (0:29:57) Codey: Kind of circled around is it has to have cozy vibes so it doesn’t have to have cozy vibes in every aspect of the game, but just at least in some part there has to be like a (0:30:08) Codey: Kind of an area that has a lot of plants a lot of green (0:30:11) Codey: It has to be a fairly low stakes games. Like you’re not you’re not out here like saving the world. It’s not an action game (0:30:20) Codey: It’s just about living your life like if you were in if you had a cottage and you were living (0:30:24) Codey: in a cottage. So cozy vibes and then there has to be some aspects of growing or creating things. (0:30:32) Codey: So whether that is like actually farming or like building things like if you’re mining resources and then building something from it and then there also is generally some aspect of collecting and exploring. So collecting could be something like fishing or farm or bug catching or (0:30:54) Codey: like fossils you know that kind of thing or just exploring. So you have an area a large geographic area and you explore it you explore the mines you explore the undersea area but yeah so those were those were kind of like what I fell on as something that every cottagecore game needs or the ones that we’ve discussed, like what they generally have. (0:31:24) Codey: So come at me, what do you disagree with here? (0:31:27) Al: I didn’t say I disagreed with anything. (0:31:32) Al: And now I’m going to disagree with it. (0:31:32) Codey: Heck yeah. (0:31:34) Al: So I think this is pretty fair. (0:31:39) Al: Part of me wants to say that the growing, creating things is an optional one. (0:31:44) Codey: Okay. (0:31:45) Al: Pretty common. (0:31:46) Al: Like I’m not saying it doesn’t have, like most of them, like 90% of them would have it. (0:31:50) Codey: Mm-hmm. (0:31:51) Al: But I don’t think I would say that that would be a requirement. (0:31:54) Codey: Okay. (0:31:55) Al: I think you could totally have a cozy game. (0:31:57) Al: That is focused entirely around collecting things, and have no growing or crafting or anything like that. (0:32:08) Codey: Well, so growing could also be like building I also see that as building (0:32:14) Al: OK, well, if you’re going to change what words mean, then sure. (0:32:16) Codey: Okay, I’m not changing what words mean I’m just like that’s it’s it’s like (0:32:23) Codey: Hmm cuz I would save it like bear and breakfast (0:32:26) Al: For listeners, Cody has now changed the sentence to some aspect of growing/creating/building things. (0:32:34) Al: That building was not there before. (0:32:36) Codey: No, no. So I mean, this is good because you’re helping me like become with, come up with a better just definition. We’re creating this definition together, but no. So like that was part of that is like what I thought by creating. Like I thought of like in Minecraft when you’re creating like a, when you build stuff with the crafting table. Um, but that is part of like building things. So like in Baron breakfast, for example, you don’t really grow anything but you do build (0:33:06) Codey: um you collect resources and you build like the furniture that then goes into your your hotels or your inns or your whatever you want to call them um so like that I think that that is a big part of it and even if you have some type of collection game so i’m thinking of like a game where literally all you do is go out and collect resources or collect insects or collect fish or whatever you generally like then would probably come back and build a terrarium for them or build (0:33:15) Al: Yeah, that’s fair. (0:33:33) Al: Oh yeah, generally, generally, yeah. I think it’s more just a case of like, I could absolutely, (0:33:39) Al: this is not about like, oh this game doesn’t have it, but I could totally foresee a collection-based game that is purely collection-based. And like, well no, if it’s cosy. Right? Like, I think, (0:33:44) Codey: Well then would it not be cottage court, it would just be a creature collector. (0:33:52) Codey: Okay. So it has to have two of these things. (0:33:57) Al: so if we talk like, for example, I don’t consider Pokemon generally to be Cottagecore, right? (0:33:58) Codey: Mm-mm. (0:34:02) Codey: Yeah. (0:34:03) Al: But that’s because it doesn’t have that vibe. It is, it’s about, you know, animal fights, (0:34:08) Codey: Yeah. (0:34:11) Al: right? That’s not cosy. If Pokemon didn’t have the battles, I would probably argue that many of them would be Cottagecore. And some of them have some growing aspects to them, but it’s very limited, and they haven’t done that for quite a while. So yeah. But I think most would, and I And I think that it can often– (0:34:16) Codey: Yeah. (0:34:33) Al: improve the game if they do have that. (0:34:36) Al: Because as is always common with games, you have your primary gameplay loop, (0:34:41) Al: which is doing a thing, and then you have your secondary gameplay loop, (0:34:46) Al: which uses the primary gameplay loop to do something else longer over time. (0:34:52) Al: And if you don’t have that, you don’t have your longer-term thing, (0:34:56) Al: then you get bored of the game pretty quickly. (0:34:59) Al: Um… (0:34:59) Codey: I’d say there’s also usually like a design aspect so like so you said there’s like the primary gameplay loop and then there’s the secondary one but you could do I’m one of those people where I just do those gameplay loops period end of story but a lot of games will usually also have some aspect of you can design things so like you can decorate your house or you can decorate your characters or you can decorate like all this different stuff and I think (0:35:03) Al: What do you mean by that? (0:35:29) Codey: that is also another thing at least the ability to decorate or (0:35:33) Al: Yeah, I mean, these are generally just different primary gameplay loops. (0:35:37) Codey: oh okay (0:35:38) Al: A game can have multiple of them. (0:35:39) Al: It doesn’t have to be like, there is, it doesn’t have to just be like, here’s the one thing you do, which then, as you do it lots, it unlocks other things, which then does this other thing. (0:35:49) Al: Like, it doesn’t have to be all completely interconnected. (0:35:51) Al: They can be different strands and different related things. (0:35:52) Codey: Got it. (0:35:57) Al: All right, cool. (0:35:59) Al: So let’s talk, I want to talk about my first one first, which is the one that I, (0:36:03) Al: I watched the show and I went, I want this as a game and that is Pokemon Concierge. (0:36:06) Codey: Okay. (0:36:08) Al: I want a Pokemon Concierge game. (0:36:12) Al: So for those who haven’t watched the show, (0:36:15) Al: very minor spoilers for Pokemon Concierge, but let’s be honest, (0:36:19) Al: it’s very hard to spoil that because the enjoyment of that is in watching it. (0:36:23) Al: It is about someone who escapes their life, (0:36:27) Al: their nine to five standard life to go to an island and help. (0:36:33) Al: Work at a Pokemon hotel. (0:36:35) Codey: Mm-hmm. Like a resort? (0:36:36) Al: Sounds like a cottagecore game already, doesn’t it? (0:36:40) Al: So I want that. (0:36:42) Al: Like, obviously, you could go in so many different ways with this. (0:36:47) Al: You could be in the case of the show, it’s obviously just like a worker (0:36:52) Al: and it could be just that. (0:36:53) Al: You could be a worker at the hotel doing what needs to be done. (0:36:56) Al: Or you could have it where you’re running (0:36:59) Al: hotel kind of, you know, more “better than breakfast” style. (0:37:03) Al: But it’s that, but also with Pokémon. (0:37:08) Al: I want a Pokémon cartridge core game. (0:37:10) Al: And this, I think, would work really well. (0:37:10) Codey: So I think like I like the idea of like you’re saying that you could be a worker or you could be the person running it. (0:37:13) Al: Yeah, here we go. (0:37:26) Codey: This makes me think of like the Sims where you can flip between people. (0:37:28) Al: Mm-hmm. Mmm. Ooh, yes, yes. (0:37:32) Codey: And I think that would be so cool. We’re like, if you wanted you could just you could just go be the I’m trying to think of the the Vaporeon that’s helping in the laundry. (0:37:46) Codey: And there could be like a laundry minigame that like helps you clean the sheets or something. (0:37:46) Al: I hadn’t, hadn’t even considered being the Pokemon. (0:37:52) Codey: Oh yeah, like like flipping between them. (0:37:56) Al: Hmm. (0:37:58) Codey: And I mean, maybe like you have to build up your friendship level with these Pokemon before they’ll let you be them. (0:38:06) Codey: be them? I don’t know. I don’t know. But um… (0:38:08) Al: That’s a very weird sentence, but I know what you mean. (0:38:10) Codey: Before you can inhabit their body and and control everything. (0:38:16) Al: That’s worse. (0:38:18) Al: Stop it. (0:38:20) Codey: But no, I think that would be really fun like having it where you can build your relationships with these pokemon and then you can maybe like help them with their duties. (0:38:30) Codey: So then there could be like a minigame that is laundry. A minigame that is fold the towels or make the bed, or clean the, the wall. (0:38:40) Codey: whatever, um, make the food for the, with the, gosh, what, what Pokemon would be in the kitchen? (0:38:49) Codey: A Mr. Mime? I don’t know. (0:38:50) Al: Al Kremi. (0:38:52) Codey: Well yeah, but, so like there’s, there’d be Alcrummy, there’d be, yeah. (0:38:55) Al: Thank you. (0:38:58) Codey: There’d be, there’d probably be a, a Vanillux. (0:38:58) Al: Come on, Cody. (0:39:00) Codey: Some of these don’t have hands though, like how are they going to be doing? (0:39:03) Al: But Al Kremi has hands. Come on, have you not watched the anime? (0:39:05) Codey: Okay, okay. (0:39:08) Codey: Uh, no. (0:39:10) Al: The new anime series has a lot of focus. (0:39:10) Codey: Okay. I have not. But yeah, so it would be cute to, to be able to kind of flip between the different quote unquote characters, um, and be able to kind of inhabit all aspects of running a little resort. (0:39:32) Al: Yeah, I like the addition of minigames, because that’s very much in the spirit of Pokémon side games, right? Like they quite often have lots of minigames in them, (0:39:44) Al: and also I like the idea of playing as the Pokémon. You could either do it as you’re playing just as a Pokémon, or you’re playing both as humans and as Pokémon. (0:39:53) Al: Like there’s lots of room to come up with other creative ideas within this, I think. (0:40:00) Codey: Also, in the show, are the guests of the hotel people, or are they Pokemon? (0:40:06) Al: I think they’re prime. I think I think they’re both I’m madly Pokemon (0:40:10) Codey: Because I could see like, okay, because I could see like, kind of like Baren Breakfast, (0:40:16) Codey: where some people want rooms that have more of X, and some people have rooms that have more and more Y. (0:40:24) Codey: Like, have it where you have a room that’s great for fire type Pokemon. (0:40:30) Codey: And you have a room that’s great for grass type, and like you have these rooms, or you can quickly redecorate a room to be in the style of a different Pokemon typing, (0:40:42) Codey: and you’d get like a bonus for matching those. (0:40:47) Al: Yeah, yeah, I think I would. So I think in this game, I think it would make most sense for all of the guests to be Pokemon. I think thematically that would make most sense. And also then you’re not having to create human characters that you would actually ever care about. And you have like a built in, here are a thousand Pokemon that we can use. (0:41:12) Codey: what if and what if you have it you fill a polka decks with your guests and and you can also if your room is so great and your guests say you get an IV sore coming and you give it a room that it just loves what if it evolves while it’s there, because it’s so happy. Wouldn’t that be so? (0:41:18) Al: There you go. It’s a Pokemon game. Perfect. (0:41:39) Al: What? What? Yes. This is perfect. Right, Pokemon, you can have this idea. There you go. Make a… It’d be hilarious if they ended up coming out with it, like, on Pokemon Day they announce it and it’s like, “We had the idea, seconds technically, I guess, because you’ve been developing this for a couple years now.” (0:41:42) Codey: So cute. (0:41:44) Codey: Yep. (0:41:44) Codey: Yep. (0:41:44) Codey: Yeah. Yep. (0:42:03) Codey: Watch it like comes out tomorrow. (0:42:05) Codey: And… I don’t know. That’d be funny. (0:42:08) Al: I don’t think it would come out tomorrow. (0:42:10) Al: I think if it’s going to come out, it’s being announced on Pokemon Day, right? (0:42:13) Al: No, no new Pokemon things are being announced in January. (0:42:15) Codey: That’s true. No, no, you right. You right. They have they have a day set for it. That would be really fun, though. (0:42:16) Al: But that’s not happening. (0:42:22) Codey: Though I would want this to be a more fully fleshed out game. I’d be really sad if this was like a mobile game that was bare bones. (0:42:31) Al: Yeah, I think it could work well as a both game. (0:42:36) Al: Like, you’d have to have the… (0:42:38) Al: I think you’d want the interface to be slightly different between them. (0:42:41) Al: But I think you could have it as both mobile and Switch. (0:42:41) Codey: I would want Switch. (0:42:45) Al: All right, tell me about one that you have. (0:42:47) Codey: Yeah, so I thought about games that I haven’t seen that I would like, and dived dove, dove really deep into my own life about what parts of my life are not represented in a video game that other people might also enjoy. (0:43:11) Codey: So, the first suggestion that I had was a game where you run a wildlife rehabilitation center. (0:43:19) Codey: So I have always wanted to run like a wolf sanctuary or something like that, like ever since I was a kid. (0:43:26) Codey: I don’t think I want to do that anymore, but I do really enjoy wildlife rehabilitation and I have been volunteering at a wildlife rehab for about three years now. (0:43:36) Codey: So if we, it would be really cool to make it a game where you could learn about wildlife rehabilitation, and then maybe (0:43:44) Codey: also like, some of the proceeds of the game could go to local wildlife rehabs. Because some of the stuff that they need, it’s it’s not that expensive, or it’s like, like literally dog, dog food, or cat food, or whatever. So but we also make really specific formulas anyway, so that’d be part of the game. But so it would be kind of like a business simulator or like (0:44:07) Codey: roller coaster tycoon, like that type of like management game. (0:44:10) Codey: Um… (0:44:11) Codey: Which… (0:44:13) Codey: I’m trying to think of that way. (0:44:15) Codey: Like, do we call those Cottagecore games? (0:44:17) Codey: Or do we call them something else? (0:44:19) Codey: Yeah. (0:44:20) Al: what management games. I think some of them can be. (0:44:21) Codey: Okay. (0:44:23) Codey: I think this could be, because it could be really cozy. (0:44:25) Codey: You could make it… (0:44:27) Codey: You could make it really cozy, especially if you have, like, (0:44:29) Codey: aspects where you play with the animals and stuff, which you can. (0:44:31) Codey: Um… (0:44:33) Codey: So, you could also have really exotic animals. (0:44:35) Codey: So, clearly, you know, (0:44:37) Codey: in my neck of the woods, we only have… (0:44:39) Codey: we only have (0:44:41) Codey: a lot of the native animals like squirrels, rabbits, turtles, some songbirds, things like that that come in, but in this type of game you don’t have to do that. You could have like zebras or lions or tigers or pandas or like all of these different things that come in with some form of injury or illness and then you have to to heal them. And then you could also build enclosures. (0:45:11) Codey: You would prepare all of the meals, you’d clean after them. (0:45:15) Codey: So that is just kind of everyday stuff that you do at the Wildlife Center. (0:45:20) Codey: The idea of a wildlife rehab is that you receive the animals. (0:45:26) Codey: People find an animal in the wild that is either injured or ill in some way. (0:45:31) Codey: You receive them and they need to be rehabbed so that they can be released. (0:45:37) Codey: The whole point is always for them to be released. (0:45:41) Codey: A lot of these animals you don’t want to play with. (0:45:44) Codey: You don’t want them to get used to being held and cared for by people. (0:45:50) Codey: A lot of the animals we actually don’t really interact with a ton. (0:45:54) Codey: We put them in a container, like a little cage for them, and then we give them a bunch of food. (0:46:00) Codey: We’ll take them out once or twice a day for medication depending on the severity of their injuries. (0:46:07) Codey: But there are some that are unreleasable because of, you know, if they have. (0:46:11) Codey: An injury that is too difficult for them to be able to be released. (0:46:15) Codey: Those are the types of animals that we do keep as ambassador or education animals. (0:46:19) Codey: And we’ll take those animals to shows or fairs or just different events to educate people about wildlife and wildlife rehabilitation and the importance of maintaining areas for wildlife. (0:46:33) Codey: So those animals you could play with, you could have little mini games where you play with them. (0:46:41) Codey: Build enrichment with them, kind of design their cages a little bit more spiffy because it’s a place that they’re staying for their life. (0:46:51) Codey: I think the only thing about this type of game is that it could be maybe too macabre or too gory because we do have a lot of animals that come in that are kind of beyond healing. (0:47:08) Codey: And in those situations, we usually just hear– (0:47:11) Codey: you mainly euthanize them, which is better than the alternative of them being stuck outside and just slowly passing. (0:47:20) Codey: So I don’t know if maybe there could be some form of in-game currency that’s about the fact that you’ve done some form of kindness for that animal, (0:47:31) Codey: made it so that their last– (0:47:33) Codey: or if we do try and heal them, but their illness or injury was too severe and they end up having they end up (0:47:41) Codey: Anyways, the effort was there, like there was an attempt made, you know? (0:47:47) Codey: And so I don’t know if there could be like some type of incentive system for that where it’s like you get these points that could then maybe like be used to try and heal an animal later. (0:47:58) Codey: I don’t know. (0:47:59) Codey: I’m trying to think of like how to gamify that aspect of it because it is sad, but it’s also a fact of it. (0:48:07) Codey: Like it’s just, it’s, that’s what happens. (0:48:10) Al: Yeah, I think it’s it’s interesting. I’m thinking of how to make this different from just like a standard zoo tycoon game. And like, because obviously it’s not the same thing. I’m not trying to say it is the same thing, but in terms of like gameplay, how it would be different, (0:48:10) Codey: Um… (0:48:11) Codey: Yeah, I don’t know. Do you have any thoughts about any of that? (0:48:28) Codey: Right. (0:48:31) Al: because a lot of that is very similar. Not saying that’s a bad thing. I mean, that’s that’s fine. (0:48:36) Al: Um. (0:48:37) Codey: I think the biggest thing, the biggest difference is a lot of like, so the wildlife center I
Today on Elixir Wizards, Wojtek Mach of HexPM and Amal Hussein, engineering leader and former NPM team member, join Owen Bickford to compare notes on package management in Elixir vs. JavaScript. This lively conversation covers everything from best practices for dependency management to API design, SemVer (semantic versioning), and the dark ages of web development before package managers existed. The guests debate philosophical differences between the JavaScript and Elixir communities. They highlight the JavaScript ecosystem's maturity and identify potential areas of improvement, contrasted against Elixir's emphasis on minimal dependencies. Both guests encourage engineers to publish packages, even small ones, as a learning opportunity. Topics discussed in this episode: Leveraging community packages rather than reinventing the wheel Vetting packages carefully before adopting them as dependencies Evaluating security, performance, and bundle size when assessing packages Managing transitive dependencies pulled in by packages Why semantic versioning is difficult to consistently enforce Designing APIs with extensibility and backward compatibility in mind Using tools like deprecations to avoid breaking changes in new releases JavaScript's preference for code reuse over minimization The Elixir community's minimal dependencies and avoidance of tech debt Challenges in early package management, such as global dependency Learning from tools like Ruby Gems and Bundler to improve experience How log files provide visibility into dependency management actions How lock files pin dependency versions for consistency Publishing packages democratizes access and provides learning opportunities Linting to enforce standards and prevent certain bugs Primitive-focused packages provide flexibility over highly opinionated ones Suggestions for improving documentation and guides Benefits of collaboration between programming language communities Links mentioned in this episode: Node.js https://github.com/nodejs npm JavaScript Package Manager https://github.com/npm JS Party Podcast https://changelog.com/jsparty Dashbit https://dashbit.co/ HexPM Package Manager for Erlang https://hex.pm/ HTTP Client for Elixir https://github.com/wojtekmach/req Ecto Database-Wrapper for Elixir https://github.com/elixir-ecto (Not an ORM) XState Actor-Based State Management for JavaScript https://xstate.js.org/docs/ Supply Chain Protection for JavaScript, Python, and Go https://socket.dev/ MixAudit https://github.com/mirego/mixaudit NimbleTOTP Library for 2FA https://hexdocs.pm/nimbletotp/NimbleTOTP.html Microsoft Azure https://github.com/Azure Patch Package https://www.npmjs.com/package/patch-package Ruby Bundler to manage Gem dependencies https://github.com/rubygems/bundler npm-shrinkwrap https://docs.npmjs.com/cli/v10/commands/npm-shrinkwrap SemVer Semantic Versioner for NPM https://www.npmjs.com/package/semver Spec-ulation Keynote - Rich Hickey https://www.youtube.com/watch?v=oyLBGkS5ICk Amal's favorite Linter https://eslint.org/ Elixir Mint Functional HTTP Client for Elixir https://github.com/elixir-mint Tailwind Open Source CSS Framework https://tailwindcss.com/ WebauthnComponents https://hex.pm/packages/webauthn_components Special Guests: Amal Hussein and Wojtek Mach.
Richard talks with Predrag Gruevski, author of the cargo-semver-checks tool for detecting accidental semantic versioning mistakes in Rust packages, as well as Trustfall, which is an incredibly flexible query engine. They talk about why semantic versioning is so especially tricky to get right in Rust, tradeoffs in different package managers' approaches to semver in general, and how his work on cargo-semver-checks motivated him to create a tool for querying data in just about any format.
✨ Querying Rust API and beyond ✨
Topics covered in this episode: Differentiating between writing down dependencies to use packages and for packages themselves PythonMonkey Quirks of Python package versioning bear-type Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training Python People Podcast Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org Brian: @brianokken@fosstodon.org Show: @pythonbytes@fosstodon.org Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays at 11am PT. Older video versions available there too. Brian #1: Differentiating between writing down dependencies to use packages and for packages themselves Brett Cannon Why can't we just use pyproject.toml and stop using requirements.txt? Nope. At least not yet. They're currently for different things. pyproject.toml There's project.dependencies and project.optional-dependencies.tests that kinda would work for listing dependencies for an app. But you can't say pip install -r pyproject.toml. It doesn't work. And that's weird. project is intended for packaged projects. requirements.txt for applications and other non-packaged projects It has specific versions works great with pip What then? Either we stick with requirements.txt Or we invent some other file, maybe requirements.toml? Or maybe (Brian's comment), add something like [application] and application.dependencies and application.optional-dependencies.tests to pyproject.toml Michael #2: PythonMonkey PythonMonkey is a Mozilla SpiderMonkey JavaScript engine embedded into the Python VM, using the Python engine to provide the JS host environment. This product is in an early stage, approximately 80% to MVP as of July 2023. It is under active development by Distributive. External contributions and feedback are welcome and encouraged. It will enable JavaScript libraries to be used seamlessly in Python code and vice versa — without any significant performance penalties. Call Python packages like NumPy from within a JavaScript library, or use NPM packages like [crypto-js](https://www.npmjs.com/package/crypto-js) directly from Python. Executing WebAssembly modules in Python becomes trivial using the WebAssembly API and engine from SpiderMonkey. More details in Will Pringle's article. Brian #3: Quirks of Python package versioning Seth Larson Yes, we have SemVer, 1.2.3, and CalVer, 2023.6.1, and suffixes for pre-release, 1.2.3pre1. But it gets way more fun than that, if you get creative Here's a few v is an optional prefix, like v.1.0 You can include an “Epoch” and separate it from the version with a !, like 20!1.2.3 Local versions with alphanumerics, periods, dashes, underscores, like 1.0.0+ubuntu-1. PyPI rejects those. That's probably good. Long versions. There's no max length for a version number. How about 1.2.3.4000000000000000001? Pre, post, dev aren't mutually exclusive: 1.0.0-pre0-post0-dev0 More craziness in article - Michael #4: bear-type Beartype is an open-source PEP-compliant near-real-time pure-Python runtime type-checker emphasizing efficiency, usability, and thrilling puns. Annotate @beartype-decorated classes and callables with type hints. Call those callables with valid parameters: Transparent Call those callables with invalid parameters: Boom Traceback: raise exception_cls( beartype.roar.BeartypeCallHintParamViolation: @beartyped quote_wiggum() parameter lines=[b'Oh, my God! A horrible plane crash!', b'Hey, everybody! Get a load of thi...'] violates type hint list[str], as list item 0 value b'Oh, my God! A horrible plane crash!' not str. Extras Brian: Python Testing with Pytest Course Bundle: Limited Pre-Release Beta Use code PYTHONBYTES now through Aug 31for 20% discount (discount extended through the end of the month) What's a pre-release beta? There's a video. Check out the link. Error-tolerant pytest discovery in VSCode Finally! But you gotta turn it on. Also, I gotta talk to them about the proper non-capitalization of pytest. We're at RC1 for Python 3.12.0 Hard to believe it's that time of year again Michael: PyPI hires a Safety & Security Engineer, welcome Mike Fiedler PackagingCon October 26-28 Cloud Builders: Python Conf (born in Ukraine): September 6, 2023 | online Joke: Learning JavaScript
We're back for 2023 with Kito, Danno, and special guest Andres Almiray, Senior Principal Product Manager, Database group, to talk about the latest versions of Andres' JReleaser tool, building CLIs in Java (picocli, JCommander, JCommander, Spring Boot, Quarkus, Micronaut), jban,, Jarviz, AI, whether or not Java is over the hill, http4s, and much more. We Thank DataDog for sponsoring this podcast! https://www.pubhouse.net/datadog Overview Server Side Java – Accelerate Your Lambda Functions with Lambda SnapStart (https://aws.amazon.com/blogs/aws/new-accelerate-your-lambda-functions-with-lambda-snapstart/) - Quarkus support for AWS Lambda SnapStart (https://quarkus.io/blog/quarkus-support-for-aws-lambda-snapstart/) IDEs and Tools - JBang (https://www.jbang.dev/) - Writing CLIs in Java () - picocli (https://github.com/remkop/picocli) - JCommander (https://jcommander.org/) - Frameworks that you can use to create CLIs - Spring Boot Console Apps (https://www.appsdeveloperblog.com/spring-boot-console-application/) - Quarkus Command Mode Apps (https://quarkus.io/guides/command-mode-reference) - Micronaut Command Line Applications (https://docs.micronaut.io/1.0.0.M4/guide/index.html#picocli) - Command Line Interface Guidelines (https://clig.dev/) AI - Microsoft, GitHub, and OpenAI ask court to throw out AI copyright lawsuit (https://www.theverge.com/2023/1/28/23575919/microsoft-openai-github-dismiss-copilot-ai-copyright-lawsuit) JReleaser - v1.4.0 released on Dec 29 2022 - Improved Maven deployment support - New FLAT_BINARY distribution - Threaded messages in Mastodon - Buildx support in Docker packager - New java-archiver - v1.5.0 (upcoming) - Environment variables and System properties support - New Linkedin announcer - New winget packager for NATIVE_PACKAGE distribution - Updates and deprecations to CLI flags Jarvis (https://github.com/kordamp/jarviz) - Jarviz is a JAR file analyzer tool. You can obtain metadata from a JAR such as its manifest, manifest entries, bytecode versions, declarative services, and more. Other - Github changes checksum algorithm for source archives (https://github.blog/changelog/2023-01-30-git-archive-checksums-may-change/) - http4s (https://http4s.org/) - Versioning schemes: - ChronVer - Calver - SemVer - Java-Module / Java-Version - Tmux (https://github.com/tmux/tmux/wiki) - Charm.sh (https://charm.sh/) - GitHub - shyiko/jabba: (cross-platform) Java Version Manager (https://github.com/shyiko/jabba) - Snapcraft (https://snapcraft.io/) - OpenFein (https://github.com/OpenFeign/feign) Picks - NixOS (https://nixos.org/) - Neovim (https://neovim.io/) - Toot (https://toot.readthedocs.io/en/latest/usage.html) Other Pubhouse Network podcasts - Breaking into Open Source (https://www.pubhouse.net/breaking-into-open-source) - OffHeap (https://www.javaoffheap.com/) - Java Pubhouse (https://www.javapubhouse.com/) Events - DevNexus 2023 - April 4-6, Atlanta, GA, USA (https://devnexus.com/call-for-papers) - JCON EUROPE 2023 - June 20-23, Cologne Köln, Germany (https://jcon.one/) - Gateway Software Symposium Mar 31 - Apr 1, 2023 (https://nofluffjuststuff.com/stlouis) - Pacific Northwest Software Symposium April 14 - 15, 2023 (https://nofluffjuststuff.com/seattle) - JPrime - May 30-31st, Sofia, Bulgaria (https://jprime.io/) - Central Iowa Software Symposium June 9 - 10, 2023 (https://nofluffjuststuff.com/desmoines) - Lone Star Software Symposium: Austin July 14 - 15, 2023 (https://nofluffjuststuff.com/austin) - ÜberConf July 18 - 21, 2023 (https://uberconf.com/)
Microsoft sunsets OneNote, only to expand OneNote, and the .NET Compiler has a bit of chaos inside of it. Let's get to it.⛔✅ David Fowler, member of the .NET team, writes that “null checking in C# has gotten out of hand”. David's right, of course, and a follow up tweet in that thread narrows it down to merely three methods to checking for null. Another day, another chance to tap the sign: Just because you can doesn't mean you should. It's felt like that ever since C# was de-coupled from the .NET Framework, the language has exploded with new syntax; and yes, while newly divorced people sometimes do go through a sowing phase, you reap what you sow.
Sponsored by Datadog: pythonbytes.fm/datadog Special guest: Sebastián Ramírez Live stream Watch on YouTube Brian #1: Python Developers Survey 2020 Results Using Python for? Lots of reductions in percentages. Increases in Education, Desktop, Games, Mobile, and Other Python 3 vs 2 94% Python3 vs 90% last year Python 3.8 has 44% of Python 3 usage, 3.5 or lower down to 3% environment isolation 54% virtualenv (I assume that includes venv) 32% Docker 22% Conda Web frameworks 46% Flask 43% Django 12% FastAPI … 2% Pyramid :( … Unit testing 49% pytest 28% unittest 13% mock OS 68% Linux, 48% Windows, 29% Mac, 2% BSD, 1% other CI: Gitlab, Jenkins, Travis, CircleCI … (Where’s GH Actions?) Editors: PyCharm, VS Code, Vim, … Lots of other great stuff in there Michael #2: Django Ninja - Fast Django REST Framework via Marcus Sharp and Adam Parkin (Codependent Codr) independently Django Ninja is a web framework for building APIs with Django and Python 3.6+ type hints. This project was heavily inspired by FastAPI (developed by Sebastián Ramírez) Key features: Easy: Designed to be easy to use and intuitive. FAST execution: Very high performance thanks to Pydantic and async support. Fast to code: Type hints and automatic docs lets you focus only on business logic. Standards-based: Based on the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema. Django friendly: (obviously) has good integration with the Django core and ORM. Production ready: Used by multiple companies on live projects. Benchmarks are interesting Example api = NinjaAPI() @api.get("/add") def add(request, a: int, b: int): return {"result": a + b} Sebastian #3: Pydantic 1.8 Hypothesis plugin (for property-based testing). Support for [NamedTuple](https://pydantic-docs.helpmanual.io/usage/types/#namedtuple) and [TypedDict](https://pydantic-docs.helpmanual.io/usage/types/#typeddict) in models. Support for [Annotated](https://pydantic-docs.helpmanual.io/usage/schema/#typingannotated-fields) types, e.g.: def some_func(name: Annotated[str, Field(max_length=256)] = 'Bar'): pass Annotated makes default and required values more “correct” in terms of types. E.g. the editor won't assume that a function's parameter is optional because it has a default value of Field(``'``Bar``'``, max_length=256), this will be especially useful for FastAPI dependency functions that could be called directly in other places in the code. Michael #4: Google, Microsoft back Python and Rust programming languages Partially via Will Shanks Google and Microsoft join and strengthen forces with the foundations behind the Python and Rust programming languages The companies will get to help shape their future. Microsoft has joined Mozilla, AWS, Huawei and Google as founding members of the Rust Foundation. Google donated $350,000 to the Python Software Foundation (PSF), making the company the organization's first visionary sponsor. Google is investing in improved PyPI malware detection, better foundational Python tools and services, and hiring a CPython Developer-in-Residence for 2021. Other PSF sponsors include Salesforce, a sustainability sponsor contributing $90,000. Microsoft, Fastly, Bloomberg and Capital One are maintaining sponsors contributing $60,000 apiece. You’ll find Talk Python Training over at the PSF Sponsors as well. Microsoft has shown an interest in Rust, particularly for writing secure code: “Rust programming changes the game when it comes to writing safe systems software” Microsoft is forming a Rust programming team to contribute engineering efforts to the language's ecosystem, focusing on the compiler, core tooling, documentation and more. Brian #5: Semantic Versioning Will Not Save You Hynek Schlawack Version numbers are usually 3 decimals separated by dots. SemVer is Major.Minor.Micro Implied promise is that if you depend on something and anything other than the Major version changes, your code won’t break. In practice, you have to be proactive Have tests with good coverage Pin your dependencies Regularly try to update your dependencies and retest If they pass, pin new versions If not, notify the maintainer of a bug or fix your code Block the versions that don’t work Consequences: ZeroVer Version conflicts mayhem Consider CalVer Sebastian #6: OpenAPI 3.1.0 It was released on February. Now the OpenAPI schemas are in sync and based on the latest version of JSON Schema. That improves compatibility with other tools. E.g. frontend components auto-generated from JSON Schema. Very small details to adjust in Pydantic and FastAPI, but they are actually more “strictly compatible” with OpenAPI 3.1.0, as they were made with the most recent JSON Schema available at the moment. The differences are mainly in one or two very specific corner cases. Note: OpenAPI 3.1.0 might not be Python-specific enough, so, in that case, I have an alternative topic: IDOM, which is more or less React in Python on the server with live syncing with the browser. Extras Michael Installing Python - training.talkpython.fm/installing-python boto3 types update (via Dean Langsam) - seems like boto type annotations is not maintained anymore, and the rabbit hole of github links sends you to *mypy_boto3_builder *(they have a gif example). Traverse up from the cwd to look for [HTML_REMOVED].venv[HTML_REMOVED] virtual environments #75 [](https://github.com/brettcannon/python-launcher/issues/75)[CLOSED](https://github.com/brettcannon/python-launcher/issues/75)[] Talk Python: AMA 2021 Episode Brian Thanks to Matthew Casari and NOAA for the great shirts. Joke More code comments jokes try { } finally { // should never happen } /* You may think you know what the following code does. * But you dont. Trust me. * Fiddle with it, and you'll spend many a sleepless * night cursing the moment you thought youd be clever * enough to "optimize" the code below. * Now close this file and go play with something else. */ const int TEN=10; // As if the value of 10 will fluctuate... // I am not responsible for this code. // They made me write it, against my will. // If this code works, it was written by Paul DiLascia. // If not, we don't know who wrote it options.BatchSize = 300; //Madness? THIS IS SPARTA!
Bruce and James have struggled with Gradle for years and Bruce this week blogged about some of his gripes: The Problem with Gradle. This prompted a lengthy response from Cédric Champeau. James has mostly stuck to Java 8 and Bruce is exploring Java 11. Finally, James rants about SemVer for the 3.1.4'th time. Discuss this episode: https://discord.gg/nPa76qF
This conversation begins with explainable machine learning, then goes into semantic versioning, comparing Ruby and Python's package manager, then ends with a discussion on the implications of Quantum Data Teleporation.
In this Hasty Treat, Scott and Wes talk about a system for writing good commit messages. Sentry - Sponsor If you want to know what’s happening with your errors, track them with Sentry. Sentry is open-source error tracking that helps developers monitor and fix crashes in real time. Cut your time on error resolution from five hours to five minutes. It works with any language and integrates with dozens of other services. Syntax listeners can get two months for free by visiting Sentry.io and using the coupon code “tastytreat”. Show Notes 03:46 - What are conventional commits? https://www.conventionalcommits.org/en/v1.0.0/ 04:55 - How do you keep track of all the details? https://commitizen-tools.github.io/commitizen/ https://github.com/commitizen/cz-cli https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits 07:42 - How does it relate to SemVer? Links https://github.com/conventional-changelog/conventional-changelog https://github.com/netflix/unleash Deno Tweet us your tasty treats! Scott’s Instagram LevelUpTutorials Instagram Wes’ Instagram Wes’ Twitter Wes’ Facebook Scott’s Twitter Make sure to include @SyntaxFM in your tweets
Brad and Gavin host this weeks episode. They discuss Lucee's newest Release Candidate and how Brad's QoQ code was merged into Lucee 5.3.8. They discuss Online CF Meetup for this week, and the one you might have missed last week. They remind you about this week's Ortus Webinar, presented by Gavin on Modern ColdFusion - no more copy and paste. They give you an update on CFCasts Content Updates. They discuss the next 2 Into the Box workshops coming in October, ColdBox Zero to Hero and Hero to SuperHero, and maybe a Quick Workshop coming up soon as well. They discuss jconf.dev going online in September. They discuss how the Adobe ColdFusion Certification is now online and remind you that Adobe's CF Summit Conference, being changed to a Online conference, now with dates, November 17-19, call for speakers is closed and speakers are starting to be listed on the site. They spotlight a lot of great blog posts, tweets, videos and podcasts, too many to list, so listen to the show. They announce some jobs from getCfmlJobs.com, as well as a Senior CFML position available at Ortus Solutions. They show off the ForgeBox module of the Week, Semver by Seth Boland, SEMVER A custom module that allows updating the version of a package and committing to git repo. This week's VS Code Tip of the week is Hero Icons by Afzal, Hero Icons for VS Code. Search and paste icons into you code as SVG or JSX for your web projects For the show notes - visit the website https://cfmlnews.modernizeordie.io/episodes/modernize-or-die-cfml-news-for-september-22nd-2020-episode-71 Music from this podcast used under Royalty Free license from SoundDotCom https://www.soundotcom.com/ and BlueTreeAudio https://bluetreeaudio.com
Sponsored by us! Support our work through: Our courses at Talk Python Training Brian’s pytest book Brian #1: LEGO Mindstorms Robot Inventor supports Python Past NXT 2006 NXT 2.0 2009 EV3 2013 (plus, weird post apocalypse thing going on) Robot Inventor will be available Autumn 2020 (not sure what that means). Controllable with both Scratch and Python Great updates to help with STEM education Instructions for 5 different robots interesting: 5x5 LED matrix 6 input/output ports for connecting a variety of sensors and motors. 6 axis gyro/accelerometer color sensor distance sensor and Python! Can be programmed with Windows & Mac, of course. But also iOS & Android tablets and phones and even some FireOS devices. Related: MicroscoPy - IBM open source, motorized, modular microscope built using LEGO bricks, Arduino, Raspberry Pi and 3D printing. Michael #2: Step-by-step guide to contributing on GitHub by Kevin Markham Want to contribute to an open source project? Follow this detailed visual guide to make your first contribution TODAY Although there are other guides like it out there, mine is (1) up-to-date with the latest GitHub interface, (2) much more detailed, and (3) highly visual. Includes 16 annotated screenshots + 2 workflow diagrams. The only prerequisite is that the reader has a tiny bit of Git knowledge. They don't even have to be a great coder, because what I suggest is that they start by fixing a typo or broken link in the documentation. That way they can focus on learning the contribution workflow! Steps: choose a project to contribute to fork the project clone your fork locally load your local copy in an editor make sure you have an "origin" remote add the project repository as the "upstream" remote pull the latest changes from upstream into your local repository create a new branch make changes in your local repository commit your changes push your changes to your fork create the pull request review the pull request add more commits to your pull request discuss the pull request delete your branch from your fork synchronize your fork with the project repository Nice Tips for contributing code section too. Brian #3: sneklang Snek: A Python-inspired Language for Embedded Devices An even smaller footprint than MicroPython or CircuitPython Can’t wait for Robot Inventor? Snek supports Lego EV3. “Snek is a tiny embeddable language targeting processors with only a few kB of flash and ram. … These processors are too small to run MicroPython.” Can develop using Mu editor Custom Snekboard runs either Snek or CircuitPython. Or run Snek on Lego EV3. Smaller language than Python, but intended to have all learning of Snek transferable to later development with Python. “The goals of the Snek language are: Text-based. A text-based language offers a richer environment for people comfortable with using a keyboard. It is more representative of real-world programming than building software using icons and a mouse. Forward-looking. Skills developed while learning Snek should be transferable to other development environments. Small. This is not just to fit in smaller devices: the Snek language should be small enough to teach in a few hours to people with limited exposure to software. Snek is Python-inspired, but it is not Python. It is possible to write Snek programs that run under a full Python system, but most Python programs will not run under Snek.” Michael #4: Oh sh*t git via Andrew Simon, by Julia Evans Does cost $10, no affiliations This zine explains git fundamentals (what’s a SHA?) How to fix a lot of common git mistakes (I committed to the wrong branch!!). Fundamentals Mistakes and how to fix them Merge conflicts Committed the wrong file Going back in time Brian #5: Why I don't like SemVer anymore Brett Cannon Interesting thoughts on SemVer SemVer isn't as straightforward as it sounds; we don't all agree on what a major, minor, or micro change really is. Is adding a depreciation warning a bug fix? or a major interface break? What if projects depending on your project have CI with warnings as errors? Your version number represents your branching strategy, so you choose a versioning scheme that's appropriate your branching and release strategy. While maintaining multiple branches, x.y.z might make sense: x - current release x.y - current development x.y.z - bug fixes x+1 - crazy new stuff If you aren’t maintaining 3+ branches at all times, that might be overkill Maybe x.y is enough Maybe just x is enough Rely on CI, potentially on a cron job, to detect when a project breaks for you instead of leaving it up to the project to try and make that call based on their interpretation of SemVer; will inevitably disagree Remember to pin your dependencies in your apps if you really don't want to have to worry about a dependency breaking you unexpectedly Libraries/packages should be setting a floor, and if necessary excluding known buggy versions, but otherwise don't cap the maximum version as you can't predict future compatibility Michael #6: git fame via Björn Olsson Pretty-print git repository collaborators sorted by contributions. Install via pip: pip install --user git-fame Register with git: git config --global alias.fame "!python -m gitfame``" Run in a repo directory: git fame Get a table of contributors including: Author, Lines of Code, Files, Distribution (stats), sorted by most contributions. Extras: Patreon Shoutout: We have 26 supporters at https://www.patreon.com/pythonbytes Many donate $1 a month, and that’s awesome. A few go above and beyond with more than that: Special shout out to those above a buck: Brent Kincer Brian Cochrane Bert Raeymaekers Richard Stonehouse Jeff Keifer Thank you Michael: __pypackages__ follow up from Kushal Das Joke: https://www.commitstrip.com/en/2017/02/28/definitely-not-lazy/
On this week's episode, Steph shares a keyboard confession and interest in migrating to a split keyboard layout. Chris dives into creating static error pages that are independent of the app while still leveraging the app's CSS framework. They also respond to a listener question about Conventional Commits and discuss when automation tooling feels helpful vs harmful. ErgoDox EZ Keyboard (https://ergodox-ez.com/) Keyboardio Atreus (https://www.kickstarter.com/projects/keyboardio/atreus) Tailwind CSS (https://tailwindcss.com/) PurgeCSS (https://purgecss.com/) CSS Used Chrome Extension (https://chrome.google.com/webstore/detail/css-used/cdopjfddjlonogibjahpnmjpoangjfff?hl=en) Conventional Commits (https://www.conventionalcommits.org/en/v1.0.0-beta.2/) SemVer (https://semver.org/) semantic-release (https://github.com/semantic-release/semantic-release) husky (https://github.com/typicode/husky) GitHub Issue and Pull Request Templates (https://help.github.com/en/github/building-a-strong-community/about-issue-and-pull-request-templates)
What is an Elm Package?Elm package repositoryElm packages enforce SemVer for the public package APIThe SemVer (Semantic Versioning) SpecInteresting note: the SemVer spec says breaking changes only refers to the public API. But a core contributor clarifies that breaking changes can come from changes to the public contract that you intend users to depend on. See this GitHub thread.list-extra packagedict-extra packageMinimize dependencies in your package to make it easier for users to manage their dependencies"Vendoring" elm packages (using a local copy instead of doing elm install author/package-name) can be useful in some cases to remove a dependency from your packageShould you publish a package?The Elm package ecosystem has a high signal to noise ratioElm packages always start at version 1.0.0SemVer has different semantics before 1.0.0 (patch releases can be breaking before 1) - see SemVer spec item 4Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.Elm package philosophy is to do an alpha phase before publishing packageKeep yourself honest about solving meaningful problemsStart by asking "What problem are you solving? Who are you solving it for?"Scratch your own itchelm-graphqlservant-elm (for Haskell servant)Keep yourself honest about solving problems by starting with an examples/ folderEarly elm-graphql commits started with examples before anything elseWrite meaningful test cases with elm-testelm-verify-examplesHave a clear visionAsk people for feedbackLet ease of explanation guide you to refine core conceptsMake it easy for people to understand your package goals and philosophyInclude code examples in readme and docs to make it easier for people to get startedelm-review live stream videoUse meaningful examples solving concrete problems (images/screenshots are good, too)Richard Feldman's Exploring elm-spa-example talkLuke's elm-http-builder packageelm-spa-example's custom http request builder moduleInstead of writing a package, in some cases it could make sense to publish a blog post to share a patternPorting libraries vs. Coming Up With an Idiomatic Solution for ElmInstead of moment js ported to Elm, have an API built for a typed contextRyan's date-format packageHow to design an Elm package APIDefine your constraints/guarantees, make impossible states impossibleCharlie Koster's Advanced Types in Elm blog post seriesAvoid exposing internals of your dataElm Radio episode 002: Intro to Opaque TypesPay attention to how other packages solve problemsRichard Feldman's talk The Design Evolution of elm-css and elm-testBrian Hicks' talk Let's publish nice packagesLook at prior art, including in other ecosystemsLook at github issues and blog posts from projects in other ecosystemsPick your constraints instead of trying to solve every problemHelps you choose between tradeoffsHaving clear project goals explicitly in your Readme makes it easier to discuss tradeoffs with users and set expectationsIdiomatic elm package guide has lots of info on basic mechanics and best practices for publishing Elm packagesThe mechanics of publishing an elm packageelm make --docs docs.json will tell you if you're missing docs or if there are documentation validation errorselm-doc-previewCan use elm-doc-preview site to share documentation of branches, or packages that haven't been published yetSet up a CIDillon's CI script for dillonkearns/elm-markdown packageDillon's elm-publish-action GitHub Action will publish package versions when you increment the version in your elm.json - nice because it runs CI checks before finalizing a new package releaseelm publish will walk you through the steps you need before publishing the first version of your Elm package#packages channel on the Elm slack shows a feed of packages as they're published#api-design channel on the Elm slack is a good place to ask for feedback on your API design and package ideaContinue the ConversationShare your package ideas with us @elmradiopodcast on Twitter!
This time Johan Abildskov, a Senior Consultant with Praqma/Eficode, joins us to talk about SemVer (Semantic Versioning), and we finally get to hear what Julien has to say about it. We get to explore different options regarding versioning and how it helps humans communicate. At the end of the podcast, everyone gets to share their approach and recommendations for versioning things.
Sponsored by DigitalOcean: pythonbytes.fm/digitalocean Brian #1: iterators, generators, coroutines Cool quick read article by Mark McDonnell. Starts with an attempt at a gentle introduction to the iterator protocol (why does everyone think that users need to start with this info?) Muscle through this part or just skim it. Should be an appendix. Generators (start here): functions that use yield Unbound generators: they don’t stop Generator Expressions: Like for v in ("foo" for i in range(5)): … Use parens instead of brackets, otherwise they are like list comprehensions. Specifically: (expression for item in collection if condition) Generators using generators / nested generators : yield from Given bar() and baz() are generators, this works: def foo(): yield from bar() yield from baz() Coroutines are an extension of generators “Generators use the yield keyword to return a value at some point in time within a function, but with coroutines the yield directive can also be used on the right-hand side of an = operator to signify it will accept a value at that point in time.” Then….. coroutine example, some asyncio stuff, … honestly I got lost. Bottom line: I’m still looking for a great tutorial on coroutines that doesn’t explain the iterator protocol (boring!) shows an example NOT using asyncio and NOT a REPL example I want to know how I can make use of coroutines in an actual program (toy ok) where the use of coroutines actually helps the structure and makes it more maintainable, etc. Michael #2: requests-toolbelt A toolbelt of useful classes and functions to be used with requests multipart/form-data encoder - The main attraction is a streaming multipart form-data object, MultipartEncoder. User-Agent constructor - You can easily construct a requests-style User-Agent string SSLAdapter - Allows the user to choose one of the SSL protocols made available in Python's ssl module for outgoing HTTPS connections ForgetfulCookieJar - prevents a particular requests session from storing cookies Brian #3: Pandas Validation We covered Bulwark in episode 162 There are other approaches and projects looking at the same problem. pandas-validation Suggested by Lance “… pandas-validation lets you create a template of what your pandas dataframe should look like and it'll validate the entire dataframe against that template. So if you have a dataframe with first column being strings second column being dates and the third being address, you can use a mixture of built in validate types to ensure your data conforms to that. It will even let you set up some regex and make sure that the data in a column conforms to that regex.” - Lance supports dates, timestamps, numeric values, strings pandera “pandera provides a flexible and expressive API for performing data validation on tidy (long-form) and wide data to make data processing pipelines more readable and robust." “pandas data structures contain information that pandera explicitly validates at runtime. This is useful in production-critical or reproducible research settings. “pandera enables users to: Check the types and properties of columns in a DataFrame or values in a Series. Perform more complex statistical validation. Seamlessly integrate with existing data analysis/processing pipelines via function decorators.” A few different approaches. I can’t really tell from the outside if there is a clear winner or solution that’s working better for most cases. I’d like to hear from listeners which they use, if any. Or if we missed the obvious validation method most people are using. Michael #4: qtpy I have been inspired to check out Qt again, but the libraries and versions a confusing. Provides an uniform layer to support PyQt5, PySide2, PyQt4 and PySide with a single codebase Basically, you can write your code as if you were using PySide2 but import Qt modules from qtpy instead of PySide2 (or PyQt5). Brian #5: pylightxl Viktor Kis submission “A light weight, zero dependency, minimal functionality excel read/writer python library” Well. Reader right now. Writing coming soon. :) Some cool examples in the docs to get you started grabbing data from spreadsheets right away. Features: Zero non-standard library dependencies Single source code that supports both Python37 and Python27. The light weight library is only 3 source files that can be easily copied directly into a project for those that have installation/download restrictions. In addition the library’s size and zero dependency makes pyinstaller compilation small and easy! 100% test-driven development for highest reliability/maintainability with 100% coverage on all supported versions API aimed to be user friendly, intuitive and to the point with no bells and whistles. Structure: database > worksheet > indexing example: db.ws('Sheet1').index(row=1,col=2) or db.ws('Sheet1').address(address='B1') Read excel files (.xlsx, .xlsm), all sheets or selective few for speed/memory management Index cells data by row/col number or address Calling an entire row/col of data returns an easy to use list output: db.ws('Sheet1').row(1) or db.ws('Sheet1').rows Worksheet data size is consistent for each row/col. Any data that is empty will return a ‘’ Michael #6: python-ranges via Aiden Price Continuous Range, RangeSet, and RangeDict data structures for Python Best understood as an example: tax_info = RangeDict({ Range(0, 9701): (0, 0.10, 0), Range(9701, 39476): (970, 0.12, 9700), ... }) income = int(input("What is your income? $")) base, marginal_rate, bracket_floor = tax_info[income] Range and RangeSet objects are mutually compatible for things like union(), intersection(), difference(), and symmetric_difference() Extras: Brian: pytest-check works with pytest-rerunfailures - with other plugins, it may not. - known incompatibility with flaky and retry Michael: Pandas goes 1.0 (via Jeremy Schendel). Just put out a release candidate for 1.0, and will be using SemVer going forward. PyCharm security from Anthony Shaw. Video for Python for Decision Makers webcast is out. Joke: Optimist: The glass is half full. Pessimist: The glass is half empty. Engineer: The glass is twice as large as it needs to be.
Jake and Michael discuss all the latest Laravel releases, tutorials, and happenings in the community.
Fue martes y nuestros cerebros no estaban bien conectados, así que hablamos sobre más editores de texto, ETAs, SEMVER, y el Bus Factor.Si te gusta El Podcast DEV, has aprendido algo con nosotros, o simplemente te caemos bien, ¡ahora nos puedes apoyar en Patreon! Al hacerlo, cada semana recibirás un episodio extra de El Podcast DEV a la semana, tendrás acceso a una comunidad privada, y nos ayudarás a poder dedicarle más tiempo a la producción del podcast — todos ganamos.
Mike North is the Ember guy at Frontend Masters and LinkedIn’s web developer trainer. Today the panel is talking about the upcoming Ember update, which Mike calls a total reinvention of the way you build with Ember. Finally, they are letting go of the cruft and stuff they had to hold on to in order to support IE8 and using modern interface The panel talks about some of the issues with IE8, and agree that the reason Ember felt its age because it was built for IE8. Ember 314 is moving from the past into the present, a sleek modern way to build apps. Mike talks about how easy the new Ember is to use. Mike talks about the excitement in the Ember community because the new build is focused on stability and seamlessness. Charles talks about his less seamless experience with the Angular community. For context, Mike North’s first frontend masters course was recorded in 2014, and he’s only had to change two lines of code. Ember is the only framework that has managed to go all the way from IE7/IE8 to today without a major gap,breaks, or rewrites. They transition to talking about what keeps Ember going. There is an effort to make sure things are decentralized and not tied to any specific company, although Apple, Netflix, Nasa, and PlaysStation all use it. LinkedIn has also been hiring Ember core member to continue working on it, and sponsoring open source work. Next, they talk about how Ember works with TypeScript. You can install an Ember add on with one terminal command that will enable TypeScript in an Ember app.There are some issues that could cause misalignment with JavaScript and TypeScript, but Ember has designed things around it. MIke talks about the major change in the learning curve with using Ember and how far Vanilla JS will take you. Overall, it is a lot more approachable than it used to be. They move on to talk about the availability of third party solutions with Ember. Mike assures them that Ember has add-ons, and parts of the framework are opening up to allow experimentation with components. There are lots of ways to make Ember your own without running the risk of diverging, giving more flexibility than ever while maintaining the happy path. Testing within Ember is also a priority, and they want the code to be as readable as possible. The last topic discussed in this show is the importance of developer education. LinkedIn looks at employment numbers and the rate at which new jobs open, and software engineering is growing like crazy and will likely continue to grow.The rate at which new people are graduating with computer science and programming degrees, as well as those from unconventional backgrounds, is not keeping up with the number of jobs. This means that there will be fewer senior people spread across bigger groups of developers with less experience. The panel agrees that it is the responsibility of people who have been around or learned something period to pass on the knowledge because the more knowledge is passed on, the more stable things will remain as seniors become more scarce. It is also important for companies to level up junior developers. They conclude by talking about tools available for people who want to learn more about Ember Octane, and Mike makes an open request to the JS community. Panelists Charles Max Wood Steve Emmerich Chris Ferdinandi Aimee Knight AJ O’Neal Christopher Buecheler With special guest: Mike North Sponsors React Native Radio Sentry use the code “devchat” for 2 months free on Sentry’s small plan Dev Ed Podcast Links Ember Frontend Masters IE8 Ember Octane Sprout Core TypeScript ES6 Lodash Mocha Backstop.js Semver https://twitter.com/thefalken/status/1177483501777473537 Follow DevChatTV on Facebook and Twitter Picks Chris Ferdinandi: Vanilla JS Academy, get 30% off with code ‘jsjabber’ leanweb.dev Steve Emmerich: 123 Magic RGDK Aimee Knight: Recursion blog post Wholesome Provisions Protein Cereal AJ O’Neal: Carby V2 by Insurrection Industries GameCube Mods Charles Max Wood: Nikon D5600 Rode Newsshooter Viltrox light panel Quest Nutrition pumpkin bars Christopher Buecheler: Tool’s Fear Inoculum on Apple Music, Spotify, and Google Play Mike North: Github Universe Github Tracer Bench Follow Mike @mike-north on Github, @northm on LinkedIn, and @michaellnorth on Twitter
Mike North is the Ember guy at Frontend Masters and LinkedIn’s web developer trainer. Today the panel is talking about the upcoming Ember update, which Mike calls a total reinvention of the way you build with Ember. Finally, they are letting go of the cruft and stuff they had to hold on to in order to support IE8 and using modern interface The panel talks about some of the issues with IE8, and agree that the reason Ember felt its age because it was built for IE8. Ember 314 is moving from the past into the present, a sleek modern way to build apps. Mike talks about how easy the new Ember is to use. Mike talks about the excitement in the Ember community because the new build is focused on stability and seamlessness. Charles talks about his less seamless experience with the Angular community. For context, Mike North’s first frontend masters course was recorded in 2014, and he’s only had to change two lines of code. Ember is the only framework that has managed to go all the way from IE7/IE8 to today without a major gap,breaks, or rewrites. They transition to talking about what keeps Ember going. There is an effort to make sure things are decentralized and not tied to any specific company, although Apple, Netflix, Nasa, and PlaysStation all use it. LinkedIn has also been hiring Ember core member to continue working on it, and sponsoring open source work. Next, they talk about how Ember works with TypeScript. You can install an Ember add on with one terminal command that will enable TypeScript in an Ember app.There are some issues that could cause misalignment with JavaScript and TypeScript, but Ember has designed things around it. MIke talks about the major change in the learning curve with using Ember and how far Vanilla JS will take you. Overall, it is a lot more approachable than it used to be. They move on to talk about the availability of third party solutions with Ember. Mike assures them that Ember has add-ons, and parts of the framework are opening up to allow experimentation with components. There are lots of ways to make Ember your own without running the risk of diverging, giving more flexibility than ever while maintaining the happy path. Testing within Ember is also a priority, and they want the code to be as readable as possible. The last topic discussed in this show is the importance of developer education. LinkedIn looks at employment numbers and the rate at which new jobs open, and software engineering is growing like crazy and will likely continue to grow.The rate at which new people are graduating with computer science and programming degrees, as well as those from unconventional backgrounds, is not keeping up with the number of jobs. This means that there will be fewer senior people spread across bigger groups of developers with less experience. The panel agrees that it is the responsibility of people who have been around or learned something period to pass on the knowledge because the more knowledge is passed on, the more stable things will remain as seniors become more scarce. It is also important for companies to level up junior developers. They conclude by talking about tools available for people who want to learn more about Ember Octane, and Mike makes an open request to the JS community. Panelists Charles Max Wood Steve Emmerich Chris Ferdinandi Aimee Knight AJ O’Neal Christopher Buecheler With special guest: Mike North Sponsors React Native Radio Sentry use the code “devchat” for 2 months free on Sentry’s small plan Dev Ed Podcast Links Ember Frontend Masters IE8 Ember Octane Sprout Core TypeScript ES6 Lodash Mocha Backstop.js Semver https://twitter.com/thefalken/status/1177483501777473537 Follow DevChatTV on Facebook and Twitter Picks Chris Ferdinandi: Vanilla JS Academy, get 30% off with code ‘jsjabber’ leanweb.dev Steve Emmerich: 123 Magic RGDK Aimee Knight: Recursion blog post Wholesome Provisions Protein Cereal AJ O’Neal: Carby V2 by Insurrection Industries GameCube Mods Charles Max Wood: Nikon D5600 Rode Newsshooter Viltrox light panel Quest Nutrition pumpkin bars Christopher Buecheler: Tool’s Fear Inoculum on Apple Music, Spotify, and Google Play Mike North: Github Universe Github Tracer Bench Follow Mike @mike-north on Github, @northm on LinkedIn, and @michaellnorth on Twitter
Mike North is the Ember guy at Frontend Masters and LinkedIn’s web developer trainer. Today the panel is talking about the upcoming Ember update, which Mike calls a total reinvention of the way you build with Ember. Finally, they are letting go of the cruft and stuff they had to hold on to in order to support IE8 and using modern interface The panel talks about some of the issues with IE8, and agree that the reason Ember felt its age because it was built for IE8. Ember 314 is moving from the past into the present, a sleek modern way to build apps. Mike talks about how easy the new Ember is to use. Mike talks about the excitement in the Ember community because the new build is focused on stability and seamlessness. Charles talks about his less seamless experience with the Angular community. For context, Mike North’s first frontend masters course was recorded in 2014, and he’s only had to change two lines of code. Ember is the only framework that has managed to go all the way from IE7/IE8 to today without a major gap,breaks, or rewrites. They transition to talking about what keeps Ember going. There is an effort to make sure things are decentralized and not tied to any specific company, although Apple, Netflix, Nasa, and PlaysStation all use it. LinkedIn has also been hiring Ember core member to continue working on it, and sponsoring open source work. Next, they talk about how Ember works with TypeScript. You can install an Ember add on with one terminal command that will enable TypeScript in an Ember app.There are some issues that could cause misalignment with JavaScript and TypeScript, but Ember has designed things around it. MIke talks about the major change in the learning curve with using Ember and how far Vanilla JS will take you. Overall, it is a lot more approachable than it used to be. They move on to talk about the availability of third party solutions with Ember. Mike assures them that Ember has add-ons, and parts of the framework are opening up to allow experimentation with components. There are lots of ways to make Ember your own without running the risk of diverging, giving more flexibility than ever while maintaining the happy path. Testing within Ember is also a priority, and they want the code to be as readable as possible. The last topic discussed in this show is the importance of developer education. LinkedIn looks at employment numbers and the rate at which new jobs open, and software engineering is growing like crazy and will likely continue to grow.The rate at which new people are graduating with computer science and programming degrees, as well as those from unconventional backgrounds, is not keeping up with the number of jobs. This means that there will be fewer senior people spread across bigger groups of developers with less experience. The panel agrees that it is the responsibility of people who have been around or learned something period to pass on the knowledge because the more knowledge is passed on, the more stable things will remain as seniors become more scarce. It is also important for companies to level up junior developers. They conclude by talking about tools available for people who want to learn more about Ember Octane, and Mike makes an open request to the JS community. Panelists Charles Max Wood Steve Emmerich Chris Ferdinandi Aimee Knight AJ O’Neal Christopher Buecheler With special guest: Mike North Sponsors React Native Radio Sentry use the code “devchat” for 2 months free on Sentry’s small plan Dev Ed Podcast Links Ember Frontend Masters IE8 Ember Octane Sprout Core TypeScript ES6 Lodash Mocha Backstop.js Semver https://twitter.com/thefalken/status/1177483501777473537 Follow DevChatTV on Facebook and Twitter Picks Chris Ferdinandi: Vanilla JS Academy, get 30% off with code ‘jsjabber’ leanweb.dev Steve Emmerich: 123 Magic RGDK Aimee Knight: Recursion blog post Wholesome Provisions Protein Cereal AJ O’Neal: Carby V2 by Insurrection Industries GameCube Mods Charles Max Wood: Nikon D5600 Rode Newsshooter Viltrox light panel Quest Nutrition pumpkin bars Christopher Buecheler: Tool’s Fear Inoculum on Apple Music, Spotify, and Google Play Mike North: Github Universe Github Tracer Bench Follow Mike @mike-north on Github, @northm on LinkedIn, and @michaellnorth on Twitter
With the jumping off point of KBall’s question: “What are best practices for organizing a Node project?” Mikeal and Feross drop an incredible amount of wisdom about Node, organizing using modules, release management, deployment approaches, how to adopt change, and more.
With the jumping off point of KBall’s question: “What are best practices for organizing a Node project?” Mikeal and Feross drop an incredible amount of wisdom about Node, organizing using modules, release management, deployment approaches, how to adopt change, and more.
We're back and going crazy about Crystal, a statically typed language that's as fast as C and as slick as ruby. Plus an update on Rails 6, Intel's growing adoption of Rust, and the challenge of making breaking changes.
Con tantos números de versión y nomenclaturas raras de desarrolladores a veces nos cuesta un poco ver dónde estamos. Repasamos en este episodio qué on los números de versión en el sofware y qué significa eso de Alfa, Beta, Release Candidate... Y contamos un poco de la historia de Joomla ¡Escucha ahora el episodio! ¿Conocías estas partes de la historia de Joomla? ¿Se te ocurre un buen nombre para las futuras versiones? ¡Déjanos un comentario en el artículo de este episodio https://mastermindweb.es/56-como-funcionan-las-versiones-en-joomla
Con tantos números de versión y nomenclaturas raras de desarrolladores a veces nos cuesta un poco ver dónde estamos. Repasamos en este episodio qué on los números de versión en el sofware y qué significa eso de Alfa, Beta, Release Candidate... Y contamos un poco de la historia de Joomla ¡Escucha ahora el episodio! ¿Conocías estas partes de la historia de Joomla? ¿Se te ocurre un buen nombre para las futuras versiones? ¡Déjanos un comentario en el artículo de este episodio https://mastermindjoomla.com/56-como-funcionan-las-versiones-en-joomla!
Luke Melia, Aaron Chambers, and Mattia Gheda john Taras and Charles to discuss all things deployment! Luke Melia: Luke has been working with Ember since it was under early development as Sproutcore 2.0. Ember.js powers a SaaS company he co-founded, Yapp, and they funded their business for a couple of years doing Ember consulting under the Yapp Labs moniker. They're full-time on product now, and his engineering team at Yapp (currently 3 people) maintains around 6 Ember apps. Luke helps to maintain a bunch of popular addons, including ember-cli-deploy, ember-modal-dialog, ember-wormhole, ember-tether, and more. He started the Ember NYC meetup in 2012 and continues to co-organize it today. Aaron Chambers: Aaron Chambers: Aaron is the co-author of EmberCLI Deploy and is currently an Engineer at Phorest Salon Software, helping them move their desktop product to the web platform. He's been using Ember for 5 years and maintains a number of plugins in the EmberCLI Deploy ecosystem. Aaron loves trying to work out how we can ship JS apps faster, more reliably and with more confidence. Mattia Gheda: Mattia is a Software Engineer, Ember hacker, Ruby lover and Elixir aficionado. Currently he works as Director of Development for Precision Nutrition where Ember, Ruby and Elixir power several applications. He loves meetups, organizes Ember.js Toronto and co-organizes Elixir Toronto. Resource: Immutable Web Apps Please join us in these conversations! If you or someone you know would be a perfect guest, please get in touch with us at contact@frontside.io. Our goal is to get people thinking on the platform level which includes tooling, internalization, state management, routing, upgrade, and the data layer. This show was produced by Mandy Moore, aka @therubyrep of DevReps, LLC. Transcript: CHARLES: Hello and welcome to The Frontside Podcast, a place where we talk about user interfaces and everything that you need to know to build them right. My name is Charles Lowell, a developer here at the Frontside. With me also co-hosting today is Taras Mankovsky. Hey, Taras. TARAS: Hello, everyone. CHARLES: Today, we have three special guests that we're going to be talking to. We have Aaron Chambers, Luke Melia, and Mattia Gheda who originally met collaborating on fantastic open source library that we, at the Frontside, have used many, many times that saved us countless hours, saved our clients hundreds of thousands of dollars, if not more. ember-cli-deploy. We're gonna be talking not about that library in particular but around the operations that happen around UI. So, welcome you all. LUKE: Thanks, it's great to be here. CHARLES: Like I said, I actually am really excited to have you all on because when we talk about the platform that you develop your UI on, something that often gets short shrift in communities outside of the Ember community is how do I actually deliver that application into users' hands. Because obviously, we don't want it to be working just on our laptop. We want it to be delivered to our users and there are myriad ways that that can happen and it's only gotten more complex since the last time we talked which must have been like three or four years ago. I kind of just have to ask, I think that what you all were talking about then was cutting edge is still cutting edge now but there must have been some pretty incredible developments like in the last three or four years. What have been kind of the new insights that you all have? LUKE: I think that what we realized as we got started with ember-cli-deploy and a project kind of came together as a combination of a few different open source efforts, something that Aaron was working on, something that our collaborator Mike was working on. We decided to come together under one umbrella, joined forces. And what we realized pretty soon is that deployment needs vary a ton between companies. And so, we are coming from this background in Ember community where we had this attitude where nobody is a special snowflake. We all kind of have the same needs for 90% of what we do. And that's true. I really believe in a lot of that Ember [ethos]. But when it comes to deployment, you know what? A lot of companies are special snowflakes or it's at least is much more fragmented than kind of our needs around on the JavaScript side. And so, what we decided to do was to try to evolve ember-cli-deploy into a platform essentially, an ecosystem that could let people mix and match plug-ins to do in their organization without locking them into an opinion that might simply be a non-starter in their org. CHARLES: It's hard enough to have opinions just around the way that your JavaScript code is structured but when it comes to rolling out your app, it really does encompass the entire scope of your application. So, it has to take account of your server. It has to take account of your user base. It has to take account of all the different processes that might be running all over, distributed around the Internet. Maybe somewhere on AWS, maybe somewhere on Legacy servers but it has to consider that in its entirety. So, it's having opinions that span that scope is particularly difficult. LUKE: Yes. And so, you mentioned a bunch of technical details which are absolutely forcing factors for a lot of words in how they do their deployments but what we found in talking to people that there are also people in political aspects to deployment in many cases. Engineers kind of own the JavaScript code that's running within their app, more or less. But when it comes to pushing the app into the world and a lot of companies, that means they're interacting with sysadmins, ops folks, people who have very strong opinions about what is an allowable and supportable way to get those deployments done and to have that stuff exist in production. And so, we needed to come up with an architecture that was going to support all these kind of varied use cases. And so, we came up with this system of essentially a deployment pipeline and plugins that can work at various stages of that pipeline. And that ecosystem has now grown quite a bit. It's actually, I don't know Aaron if you and Mattia would agree but I think it's probably the best decision that we made in this project because that ecosystem has grown and evolved without us needing to do a ton of work in maintenance. And it's been really great. I think Mattia, you pulled some of the current numbers there. MATTIA: Yeah. I pulled some numbers just yesterday and we have currently 150 different plugins attached to themselves, to different parts of the pipeline. So some of them are about how to build the assets, some of them are about how to compress them, some of them are about shipping. And they allow people to ship it with different ways like we are seeing [inaudible] with just simply Amazon APIs or Azure APIs and some of them even are about just how to visualize data about your deployments or how to give feedback to the user about what was deployed and represent the information. And then this is kind of a bit more detail, probably specific to us but we also added this idea of plugin packs. So, in order to help people define their deployment story, we created this ideal of plugin packs. Plugin packs are simply group of plugins. So, plugins grouped together. As a user, if you want to implement what we call a deploy strategy, you can simply install a plugin pack and that will give you all the plugins that allow you to deploy in a specific way. And that's kind of like an optimization that we added just to make it easier for people to share deployment strategies, share ways of deploying applications. CHARLES: Right. It's almost like an application within the framework. MATTIA: Yeah, exactly. But to stay on the community side, I think that the interesting part about what Luke was saying which was a great success for us is that all we maintain as the core team for this project is the core infrastructure, so the pipeline and a thousand of plugins. Everything else is community-based. And often, even in my day-to-day work, I end up using plugins that I didn't write and that I don't even maintain. But because the underpinning of it were designed especially by Luke and I are flexible enough. It just like has been very, very stable and very, very reliable for many years. So, I will say definitely the idea of like in the spirit of what Ember is, I guess, creating a shared ecosystem where people can add what they want and extend what was provided has been the one single biggest win of this project. CHARLES: One of the things that I'm curious about is we've talked about how you're allowing for and kind of embracing the fragmentation that happens in people's kind of the topology of their infrastructure. What do you see is the common threads that really bind every single good deployment strategy together? MATTIA: My biggest thing here, and we actually have some shared notes about this, but my biggest thing about this is the idea that building and deploying an application for me is divided into three parts. There's building part where you have to decide how to compile your JavaScript application and how to produce some sort of artifact. There is the shipping part where it's about deciding where you're going to put the artifact. And then there is the serving part which is how you show it and deliver it to your users. I think that these three are the underpinnings of any deploy strategy. What we did with this project is just acknowledging that and give each one of these a place. And so, the entirety of what we do in what Luke defined as a pipeline is simply give you a way to customize how you build, customize how you ship, and then customize how you serve. So yeah, I think that that's kind of the root. And the question that everybody that wants to deploy a modern JavaScript application have to ask themselves is how do I want to build it, how do I want to ship it, and how will I serve it to my users. And these things are completely independent one from the order in the sense that you can have something build it, something ship it and something serve it, and that's what we end up doing in most of our deployments, I find. CHARLES: It's good to think about those things as soon as you possibly can and make sure that you have all three of those bases covered really before you start adding a whole ton of features. TARAS: Sprint 0, right? LUKE: In Agile, we call Sprint 0 the phase the thing you do right in the beginning. You've got a skeleton of an app and then you get the deployment infrastructure going, you have the test infrastructure going, so that there is no task within your actual feature development where you have to do those things. And I think that can be a valuable concept to embrace. I would just add to Mattia's three points that for deployments, to me, some very simple qualities of a good deployments are repeatability. You need to be able to reliably and consistently run your deployment process. Sounds simple but there's plenty of operations that have run up way too long on manual deployments. So, we don't want to see those rollback capabilities if you have a deployment that you realize was a mistake right after it gets into production. I'm sure none of us have ever experienced that. CHARLES: That never happens to me. LUKE: You want to have a method to roll that code back. That's something that can be remarkably complex to do. And so, having some guardrails and some support mechanisms to do that like ember-cli-deploy provides can be really useful. But whatever your approach is, I think that's a necessary quality. And then I think we start to step into kind of more advanced capabilities that a good deployment architecture can provide when we start to think about things like personalization, A/B testing, feature flags, these kinds of things. And that requires more sophistication, but you cannot build that on a deployment foundation that's not solid. AARON: I think for me, one of the things I've been really thinking about a lot lately, it's a bit of a mindset shift, I think, to get to where the things Mattia was talking about separating those different parts of deployment. And so, I really start to realize the traditional mindset around deployments like I build some stuff and I ship it to the server and then the users get it. But if we can actually stop and actually split our understanding of deployment into two separate phases. One is the building and the physical shipping of the files; and the other one's actually making them available to people. You open up this whole world of our features that you wouldn't normally have. So to be able to actually physically put stuff in production but not yet have it active, as in users don't see it yet but you can preview those versions in production against production databases. And then at some point after the fact, decide, "Okay, I'm now going to route all my users to this new thing," And to be able to do that really easily is massively, massively powerful. And so, to me, the thing I've been thinking about lately is it is a small mindset shift away from packaging everything up and pushing and overwriting what's currently there to being something, again like Luke said, immutable deployments where everything we build and ship sits next to all the other versions and we just decide which one we want to use to look at it any time which leads into then, I guess, A/B testing, feature flags and things. So I guess deployment really is not so much about the physical shipping, that's one part of it. To me, deployment now is shipping of stuff, as in physical deployment and then the releasing it or enabling it or activating it to users. CHARLES: Or routing it. Sounds like what you're describing is an extraordinarily lightweight process. AARON: It is, yeah. CHARLES: To actually route traffic to those files. AARON: It is. It's incredibly lightweight. That's the amazing thing about it. When you think about it, you're building a few JavaScript files and CSS files and images and putting them on a CDN, and then you just need a tiny web server that basically decides which version of the app you want to serve to people. There's not much to it at all, really. CHARLES: I mean that's absolutely fascinating, though the capability that you have when you have the ability to have these versions, the same versions or different versions of your application sitting along next to each other and being able to route traffic. But it also seems to me like it introduces a little bit of complexity around version matching because only certain versions are going to be compatible with certain versions of your API. You have different versions of your API talking to the -- so the simplicity of having kind of mutable deployments, so to speak, is that everything is in sync and you don't have to worry about those version mismatches. Is that a problem or this could just be me worrying about nothing? But that's kind of the thing that just immediately jumps out to me is like are there any strategies to manage that complexity? LUKE: To me, what you're describing, I kind of think of as a feature not a bug. And what I mean by that is that it is very simple to have a mental model of, "Oh, I have a version of my JavaScript code that works with this version of my API." And as long as I kind of deploy those changes together, I'm good to go. The reality is that that's impossible. The JavaScript apps that we write today, people are using anywhere from two seconds at a time to two days at a time. It's not uncommon these days to have some of these dashboard apps. People literally live-in for their job eight hours a day, nine hours a day, keep the browser tab open and come in the next morning and continue. And so, obviously there are some mechanisms we could use to force them to reload that kind of thing. But at some point in most apps, you're going to have a slightly older version of your JavaScript app talking to a slightly newer version of your API for either the span of a minute or perhaps longer depending on their strategies. So to me, the process of thinking about that and at least being aware of that as an engineer thinking about how your code is going to get from your laptop into the world, I think it's an important step that we not paper over that complexity and that we kind of embrace it and say, "Hey, this is part of life." And so, we need to think about just like we need to think about how your database migrations get into production. That's not something that you can paper over and just have a process that it's going to take care of for you. It requires thought. And I think that this, in the same token, how different versions of your JavaScript app are going to interact with your API requires thought. An exact parallel also had different versions of a native mobile app that go into the app store. How did those interact with different versions of your API? So, I think you're right. There's complexity there. There's ways that we can try to mitigate... CHARLES: Keep repeating ourselves if we think that that [inaudible] actually doesn't exist even in the simple case? MATTIA: Yeah. I think that that's to reiterate what Luke is saying. That's exactly the point. You can pretend it's not there but it is and you have no way to avoid it. Once you ship something to a browser, you have no control over it anymore. And so, you have to assume that somebody is going to be using it. LUKE: Aaron, I think you too, I don't know if you can share it. But you recently told us some stories about kind of what you encountered in your work about this and of how long people were using versions and stuff. AARON: Yeah. Something that we hadn't sort of put a lot of thought into. But the last place I worked at, we had quite a long lived app and we're using feature flags and we're using launch [inaudible] something and it gives you a list of flags and when they were last requested. And there were also flags that we removed from the code and it was just a matter of waiting until all the users had the most current version of the app and weren't requesting the flag anymore. But this one flag just kept getting requested for months and we just could not work out why. It really sort of opened my eyes up to this exact problem that these long lived apps set in the browser and if you have someone that just doesn't reload the browser or restart the machine or anything, your app can live a lot longer than maybe you actually realize it is. So we're shipping bug fixes, we're shipping new features, and we're all patting ourselves in the back. We fixed this bug but have we really? If your users haven't reloaded the app and gotten the latest version, then you haven't actually fixed the bug for some number of people. And it's really hard to tell them as you think about this and put things in place, really hard to tell what versions are out in the world, how many people are using this buggy version still. CHARLES: Yeah, that's an excellent point. I haven't even thought about that. I mean, what is the countermeasure? AARON: We hadn't made it until we came across [crosstalk]. CHARLES: It's nothing quite like getting smacked in the face of the problem to make you aware of it. AARON: That's right. CHARLES: So, what's the strategy to deal with that? AARON: I guess for me, my learnings from that would be from very early on thinking about how we're going to encourage people to reload, to start with, and maybe even have the ability to force a reload and what that means but then that has gotchas as well. You don't want to just reload something when a user is in the middle of writing a big essay or something like that. But definitely thinking about it from the start is one of the things you've got to think about from the start. But I guess something that I'd like to implement and I've kind of thought through but not really explored yet, but the ability to see what versions are out there in the world and there are things I've been thinking about in terms of this little server that serves different versions. Maybe we can start having that kind of tracking what versions are out there and who's using what and being able to see because it would be great to be out to see a live chart or a dashboard or something that sort of shows what versions are out there, which ones we need to be aware of that are still there and even what users are using and what versions they can maybe even move them on, if we need to. But there's definitely a bunch of things that aren't immediately obvious. And I don't know how many people actually think about this early on, but it's critical to actually think about it early on. MATTIA: Yeah. I was going to share what we do which is very similar to what Aaron said just maybe for the listeners to have some context. The first thing you can do is basically what Gmail does, which is every time a web app sends a request, an [inaudible], it will send the version of the app with the request and the backend can check. And the backend can check if you are sending a request from the same version that is the most recent deployed version. And if it's not, this sends back a header and the same way that Gmail does, it will display a pop up that is like, "Hey, we have a new version if you want reload." And on top of that [inaudible] is that we have a dead man's switch. So if we accidentally deploy a broken version, a part of this process, the frontend application tracks in the headers. And if a special header is sent, it force reloads, which is not nice for the user but it's better and sometimes is critical to do so. CHARLES: Right. I remember that was that case where Gmail released something. They were doing something with broken service workers and the app got completely and totally borked. I remember that my Twitter blew up, I don't know, about a year ago I think, and one of the problems I don't think they had was they did not have that capability. MATTIA: I mean, you learned this the hard way sadly. But I think these two things are definitely crucial. And the third one, [inaudible]. I thought, Luke, you had the ability that Aaron was talking about like tracking versions in the world. And I think that's more useful for stats so that you know how often your users update. And then you can make the design decisions based on that and based on how much you want to support in the past. LUKE: Yeah. We haven't implemented that but it reminds me whenever there's a new iOS version, we do a bunch of mobile work in the app and we're always looking at that adoption curve that's published. A few different analytic services publish it and say, "OK. How fast is iOS 12 adoption? How fast are people leaving behind the old versions?" And that helps to inform how much time you're spending doing bug fixes on old version versus just telling people, "Hey, this is fixed in the new OS. Go get it." But if you are able to see that for your own JavaScript apps, I think that would be pretty hot. CHARLES: Yeah. Crazy thought here but it almost makes me wonder if there's something to learn from the Erlang community because this is kind of a similar problem. They solved 20 years ago where you have these very, very long running processes. Some of them there's some telephone servers in Sweden. They've been running for over a decade without the process ever coming down. And yet they're even upgrading the version of Erlang that the VM is running. And they have the capability to even upgrade a function like a recursive function as it's running. And there's just a lot of -- I don't know what the specific lessons are but I wonder if that's an area for study because if there's any community that has locked in on hot upgrade, I feel like it's that one. LUKE: That's a terrific analogy. I bet we could learn a ton. Just hearing that kind of makes me think about how kind of coursed our mental model is about updates to our JavaScript apps. We talked to Aaron, we're talking about kind of this idea of a mutable apps and you have different versions side by side. But the idea of being able to kind of hot upgrade a version with running code in a browser, now that's an ambitious idea. That's something I'd say, "Wow! That kind of thing would be a game changer." CHARLES: Yeah. AARON: Makes me feel like we got a whole bunch of work to do. CHARLES: We welcome them. I'm always happy to give people plenty more work to do. No, but how they manage even being able to do migrations on the memory that's running. I don't know if it's something that's going to be achievable but it sounds kind of like that's the direction that we're heading. LUKE: It does, as these apps get more complex and they continue to live longer. The idea, the work arounds that Mattia mentioned about kind of showing a message and having a dead man's switch, these are all certainly useful. And today, I would say even like the best practice but they were not what you would want to do if you could magically design any system. If you're taking a magical approach, the app will just be upgraded seamlessly as a user was using it. And they would be none the wiser, the bugs would be fixed. End of story. There's no interruption to their workflow. At least for me personally, I don't really think about that as a possibility but I love the Erlang story and analogy and to say maybe that is a possibility, what would it take? I would obviously take a collaboration across your JavaScript framework, perhaps even JavaScript language features and browser runtime features as well as your backend and deployment mechanism. But I think it's a great avenue for some creative thinking. CHARLES: I'm curious because when we're talking about this, I'm imagining the perfect evergreen app but there's also feels like there's maybe even a tension that arises because one of the core principles of good UI is you don't yank the rug out from underneath the user. They need to, at some point and we've all been there when the application does something of its own agency, that feels bad. It feels like, "Nope, this is my workspace. I need to be in control of it." The only way that something should move from one place to the other without me being involved is if it's part of some repeatable process that I kicked off. But obviously, things like upgrading the color of a button or fixing a layout bug, those are things that I'm just going to want to have happen automatically. I'm not going to worry about it. But there is this kind of a gradation of features and at what point do you say, "You know what? Upgrading needs to be something that the user explicitly requires," versus, "This is something that we're just going to push. We're going to make that decision for them." LUKE: Yeah, it's a great question. One of the things that I'm curious what you all think is when you think about the mental model that our users have of working in a browser app, do you think that there is a mental model of, "Oh, when I refresh, I might get a new version." Do people even think about that? Or are they just like your example about a button color changing as kind of a minor thing. I don't even know if I could endure stack. We've all been I think in situations where you do a minor redesign and all of a sudden, all hell breaks loose and users are in revolt. Take the slack icon. So, I think it's a fascinating question. CHARLES: I don't know. What's the answer? Do you always ask for an upgrade just observing? I don't have any data other than observing people around me who use web applications who don't understand how they actually work under the covers. I don't think it's the expectation that this code, this application is living and changing underneath their feet. I think the general perception is that the analogy to the desktop application where you've got the bundled binary and that's the one you're running is that's the perception. AARON: I'd say the difference there is that, and with all these new ways of deploying, we're shipping small things faster in multiple, multiple times a day or even an hour. So it's not the sort of thing you really want time to use. There has been an update, need to upgrade as well. And that's the difference between the desktop mentality. And if that's the mentality they have, it sits quite a bit of a shift, I guess. MATTIA: It makes me think that one of the tools that the users -- if you take a look at the general public, there's probably one tool that everybody can relate to which is Facebook. So, I think if there is a way to say what do people generally expect. There is a business user which I think we are often most familiar with but the general public, probably what they're most familiar with is what happens in Facebook. And I don't use Facebook almost. I haven't used it for a couple of years but I wonder how much of what people experience in Facebook actually impacts the expectations around how applications should behave. LUKE: I think that's a really good question. I do think your underlying point of you have to know your own users I think is an important one also. Obviously, some folks are going to be more technical than others or some audiences will be more technical than others. But I would even question, Charles, your suggestion that people think of it kind of as like a binary that it stays the same until you refresh. I think people have an idea that web apps improve over time or sometimes they get bugs but hopefully that they improve and change over time, and that there is a tradeoff there that means sometimes there's something new to learn but at the same time, you get new features. But I don't know that people necessarily associate that with and it happens when I hit reload or it only happens when I open a new browser, like I don't know that it's that clear for people in their head. CHARLES: Right. I can see that. But the question is if the evolution is too stark, I think people tend to get annoyed. If they're in the middle of a workflow or in the middle of a use case and something changes, then it gives it a feeling of instability and non-determinism which I think can be unsettling. LUKE: Definitely. We all value, as engineers, we value getting into that flow state so much of like, "Oh man, I'm being productive. I don't have any distractions." And you kind of owe that to your users also to be able to let them get into that state with your app and not be throwing up, "Hey, there's new stuff. Reload." "I'm in the middle of something. Sorry." CHARLES: Yeah. I definitely do the same thing. Sometimes, I let iOS be bugging me to upgrade for a month until I finally start to feel guilty about security and actually do the upgrade. LUKE: Right. CHARLES: Although once they started doing it at night, it actually made it a lot better. LUKE: That's an interesting idea, too. I think there's a natural tension between the lower integration risk that we have as the engineering teams of shipping very frequently. Aaron mentioned shipping a dozen times a day. We certainly have been there and done that as well. I would say on average, we ship a few times a day. But the reason that we do that is because we know the faster we get code into production, the faster we can trust it. So it passes all your tests, it passes your [inaudible], but you don't really know if you're being honest. You don't really know until there's thousands of people using it in production. And yet, this conversation makes me think about there is a tension between how frequently you do that versus your users' kind of comfort level and expectations. CHARLES: And maybe there is a thing where you can kind of analyze on a per user basis how often they're active in the application and try to push updates on times that are customized to them. LUKE: Like when a user has been idle for 30 minutes or something like that. CHARLES: Yep. Or even like track trends over months and see when they're most likely to be idle and schedule it for them. LUKE: Good point. CHARLES: Something like that. TARAS: I have an idea. We should introduce screen savers into web apps. And so when the user stops using the app, just turn on screen saver and do the upgrade. LUKE: I can see the VC patch. It's after dark but for the web. CHARLES: Enter install flying toaster. AARON: It does that to open up the idea as well of that automated checking that things are okay well after the fact because it's all right to sit there maybe activate something and sit there even for an hour and make sure there's no bug request coming in. But if no one's actually received your app, then of course it's not going to come in. And it's very easy to kind of move onto the next thing and forget about that. I guess it's not something that I've ever put a lot of time in and I haven't worked anywhere that's had really great automated checking to see is everything still okay. And I guess it's an interesting thing to start thinking about as well an important thing. CHARLES: Like actually bundling in diagnostics in with your application to get really fine grained information about kind of status and availability inside the actual app. AARON: I'm not exactly sure, really. I guess I maybe wasn't thinking about inside the app but I don't know what it looks like exactly. But there is that element of shipping fast and getting stuff out there. But are we really making sure it all works later on when everyone's actually using it. LUKE: Yeah. This by the way, I just wanted to say when we were talking earlier what are the essential qualities around deploying an app. And this reminds me that one thing that we didn't mention but is very simple is your app should have a version. And it should be unique and traceable back to what was the GitHub, git commit that was the origin of that code. It's just a very simple idea but if you're going to be analyzing errors in production when you have multiple different versions of your JavaScript app running, you're going to need to know what version caused this error and then how do I trace it back and make sure that the code that I'm trying to debug is actually the code that was running when this error happened. CHARLES: Do you only use just [inaudible] or do you assign like a build number or using SemVer? What's a good strategy? LUKE: In our case, we use git tags. And so, our CI deployment process for our Ember apps basically looks like this is we work on a PR, we'll merge it to master. If it builds, the master gets deployed into our QA environment automatically using ember-cli-deploy from our CI server. And then once we're happy with how things are on QA, we do git tag or actually I use an ember addon called ember release that does that tagging for me and I'll tag it either in patch minor or major, roughly [inaudible] although it doesn't matter that much in the case of apps. When there is a new tag that builds green on CI, that gets deployed automatically into production by ember-cli-deploy. And so, that's kind of a basic flow. That tagging, just to be clear, the SemVer tag is just going to be number.number.number. You can get more sophisticated than that and I think both Aaron and Mattia have a system where even in the PR stage, there's automatic deployments happening. So maybe one of you want to mention that. AARON: We're slightly different. Every time we push the pull request, that gets deployed to production. We're able to preview up pull requests in production before we even merge into master which we find super useful to send out links to stakeholders and maybe people that have raised bugs just to get them to verify things are fixed. And then at the point that it's all Google merged, the pull request to master which will automatically do another deploy which is the thing we'll ultimately activate, we activate it manually after the fact. We just do a little bit of sanity checking but we could automatically activate that on merge to master as well. But yeah, the being able to preview a pull request in production is super powerful for us. CHARLES: That is definitely a nice capability. It's hard. It's one of those certain workflows or patterns or tools that you remember life before them and then after them and it's very hard to go back to life before. I would definitely say kind of the whole concept of preview applications is one of those. AARON: Absolutely. It's a daunting concept if you're not there, previewing something that's essentially a work in progress and production. And there are some things you want to be careful with, obviously. But for the most part, it's a super valuable thing. As you say, it's a world where once you're there, it's very hard to step back and not be there again. CHARLES: So I had a question about, we talked about I think it was 162 plugins around the ember-cli-deploy community. What for you all has been the most surprising and delightful plugin to arrive that you never imagined? MATTIA: That is a good one. I'm pulling up the list. What I can tell you, for me, it's not about a specific plugin. The surprising part was the sheer amount of different strategies that people use for the shipping part. At least, I found that the build part is similar for most people, like most people want to do the things that you're supposed to do. So, you want to build your application and then you want a minify it in some way. And there's a bunch of options there from gzip to more recent technologies. But the way people deliver it to servers and the difference in the solutions, that I think for me has been the biggest thing, where people that ship [inaudible] are people that ship directly to Fastly, people that use FTP files, people that use old FTP, people that use our sync, people that do it over SSH. We have people that ship stuff directly to a database because some databases actually have great support for large files. So we even use it as a storage. We have people that do it in MySequel, people that do it in [inaudible]. CHARLES: It's actually storing the build artifacts inside of a database? MATTIA: Yes, I've seen them in that. It's kind of interesting like the solutions that people ended up using. And so for me, I think that that's been the most fascinating part. Because as we were saying at the beginning, I'm just seeing now, we even have one for ZooKeeper. I don't have an idea what this does but it's probably related to some sort of registration around the seven-day index. That, to me, I think has been the biggest surprise. Everybody ends up working in a different environment. And so, that flexibility that users need has been by far the most surprising one. AARON: I think that's also been one of the challenging things, one of the enlightening things for me. I think in the Ember ecosystem, addons and even just Ember itself, it's all about convention of configuration and doing a lot of the stuff that you do for you. I think people expect them to see a lot of point to do the same thing. But the key thing here is it just really automates all the things you would do manually and you need to understand exactly what you want your deployment strategy to be before use them to see a lot of [inaudible] could do for you. You need to decide do I want to install my assets on a CDN and do I want to install my index in Redis or in console or in S3 bucket. You need to know all these things and have decided on all these things and then ember-cli-deploy will make that really easy for you. And this is one of the educational things, I think we still haven't even nailed because there are always people that want to know why this doesn't work. But deployments are complex thing and as what you were saying Mattia, there are so many different variables and variations on doing this that there's no sensible configuration ember-cli-deploy could really provide out of the box, I guess. And so, that's why we ended up with a pipeline that gives you the tools to be flexible enough to support your strategy. LUKE: I think the closest that we come to the convention is that if any app is using ember-cli-deploy, you can run ember deployment targets or ember deploy prod and ember deploy QA and you can expect that that's going to work. What you don't know is how has it happened to be configured in this project. Charles, your question about kind of the most surprising thing that's come out of the ecosystem. For me, I would say -- Mattia mentioned plugin packs earlier which are groups of plugins that kind work together well. And so, we've seen some plugin packs like you might expect, like an AWS pack for deploying to AWS. But the more interesting ones to me that we've seen a lot of, companies open source their plugin packs. So what you naturally fall into as a company that's adopting ember-cli-deploy that has multiple ember apps is that you are going to develop your own plugin pack for internal use because generally speaking, companies follow the same deployment pattern for each of their apps. There's usually not any reason to vary that. So then the new thing that happen on top of that is people said, "Why don't I make this open source so other people can kind of see how we do it?" And that's been a really delightful part of the process to kind of get a peek into how other organizations are orchestrating their deployments. And if people are curious about kind of looking at that themselves, you can go on NPM and look for keyword ember-cli-deploy-plugin-pack and pull up all of those. And you can kind of poke around and see what different companies have open source there. CHARLES: I actually love all three of those answers because it really is for me when you have a constellation of people around a particular problem, it's the surprising solutions that emerge that are some of the most exciting that would have lain hidden otherwise. It would have been kind of buried beneath the source of company A or company B or company C but actually having it all out in the open so that you can inspect it and say, "Wow, where has this solution been all my life?" Something that you have never imagined yourself. LUKE: It's so funny that you mentioned that because that actually is the origin story way back, I'm talking like 2013 probably when we were very early Ember adopters and we were trying to figure out how do we deploy this thing. We're deploying it with our Rails app, like literally deploying the Ruby code and the JavaScript code together which took forever which is a disaster. And I heard through the grapevine, just exactly what you're saying Charles, where the good ideas are kind of hidden inside of a company. I heard through the grapevine that Square had this approach that they were using where they would deploy their JavaScript assets and then deploy their index HTML file, the contents of that file, into a database, it's Redis in their case, and serve then it out of there. And it empowered all of these interesting situations of like having multiple versions, being able to preview the release, et cetera. And so we then set out to copy that idea because there was nothing open source. So we had to create it ourselves which we did in Ruby which we made it inaccessible to many JavaScript shops in the first place. Then the evolution of that kind of over time and of Mattia and Aaron and Mike and the rest of the community kind of talking together has now moved this into the open source sphere where these ideas are more accessible and we've created an ecosystem encouraging these ideas to stay out in the open. It's so true that there's just gems of ideas that have been created by really brilliant engineers inside of companies that could be benefiting so many people, they just haven't seen the light of day yet. CHARLES: Yeah, that leads me to my next question. I would say most of the ideas that we've been talking about today really, except for the build part, how Ember specific are they? Obviously, the ember-cli is a great resource and has a lot of great opinions for actually building the JavaScript assets themselves. But the second two phases of the pipeline really can vary freely, if I understand correctly. And so, have you all ever thought about trying to maybe kind of abstract these processes and these plugins so that these same ideas don't remain not just inside of a company but inside a community that spans a set of companies so that it's available for a wider audience? How integrated is it with Ember and what kind of effort would that be? LUKE: That's a great question. Aaron or Mattia, one of you guys wanna talk a little bit about the history here? MATTIA: Yeah, sure. We've been thinking about this as well. In the past, a guy on the ember-cli-deploy team, Pepin, has actually started this effort and it kind of prototyped this very idea of separating the ember-cli-deploy part from Ember CLI itself and make it a bit more generic. And he started a project called Deploy JS which I can give you a link for the show notes later. I don't think that the project is currently maintained but definitely the start of the effort is there. And the funny thing is that it was surprisingly easy. I think that we didn't get there mostly because we just all use Ember at work. As you know, open source is mostly motivated by the needs that an individual or a group of people have. But if any of the listeners were very interested in this, I think they should definitely get in touch and we will be happy to talk to them and see what can be done here. AARON: And also if you look, there's actually a plugin called ember-cli-deploy-create-react-app and there's also ember-cli-build-view. So it can and is being used to deploy non-Ember apps which I think is super interesting because the only real Ember part of it is just using the CLI to discover the addons and plugins. And from then on, it's really out of the hands of Ember. But it sort of leads into a little bit, Luke mentioned this concept of immutable web apps. And I've been thinking a lot about this lately because a deployment strategy that ember-cli-deploy use as an example a lot and it's kind of become [inaudible] ember-cli-deploy in ways, the lightning approach which is this whole idea of splitting or putting your assets in CDN and your index HTML separately maybe in Redis and serving that. I've been trying to work out how I can talk about this to the wider JavaScript community in a non-Ember way and knowing full well that the concept of lightning deployment means nothing to anyone outside of Ember. Just by chance, I was just talking to some people and this terminology of immutable deployments kind of rose. I started searching around and I come across a website called ImmutableWebApps.org which was just scarily the same as what we've been talking about for the last three or four years with ember-cli-deploy. And a way to boil down at a framework-agnostic level, what are the key points that you need to consider when building a JavaScript web app to make it immutable. And it was just really amazing seeing it. This website was put up 3 weeks before I did my Google search coincidentally. And it's basically word for word what we have been talking about the last three or four years, So, someone else in the other side of the world's been coming up with the same ideas in their company like you were talking about earlier and we've reached out to him. I guess that, to me, is sort of the way forward that I want to sort of pursue to try and get these ideas out in a framework-agnostic way to the rest of community and say, "Hey, we thought about deployment in this way. Have you thought about building your app in this way to give you these sorts of capabilities?" CHARLES: I think the wider community could definitely benefit from that because most of the blog posts and talks I've seen that concern themselves with deployment of single page applications, it's still much more of the tutorial phase. Like, "This is how I achieve getting this deployment strategy." Not, "This is how I repeatedly encode it as a program," and leverage it that way. And so, definitely getting that message out to a wider audience, I think it's a -- what's the word? It's an underserved market. LUKE: Yeah. I really like this idea also. I think about this ImmutableWebApps.org, if you look at it. It's sort of a manifesto with conceptual description of what are the qualities that your app has to have to qualify as an immutable web app which I think is kind of a funny idea but one that people can start to get their heads around and compare that description to their own apps and say how do I hit this or fall short. And it reminds me a lot of kind of the idea of Twelve-Factor App which is an idea that I think came out of Heroku originally. And it's an idea of a backend app that is portable to be able to easily move across different hosts and easily be scalable to different instances of [inaudible] if your app obeys all of these things then it's going to do well under those circumstances, that will satisfy those needs. So, I think it's a great way of thinking and probably maybe even a better entree into the conversation with the wider community than a library, this is certainly a library called ember-cli-deploy. CHARLES: This is a fantastic discussion. It's definitely reminded me of some of the best practices that I haven't thought about in a long time and definitely opened my eyes to some new ones and some new developments. So often, we can be focused on how our apps work internally, like how the JavaScript code works that we can just kind of -- what's the saying -- lose sight of the forest through the trees or I can't remember. It's like too busy looking down the end of your nose to see past your face. I've probably mangled both of those adages, but maybe 60% of two mangled adages is at least equal to one. This is something that we need to be thinking about more, that everybody needs to be thinking about more. This is actually a very exciting, very useful problem space and I'm just really grateful that you guys came on to talk to us about it. So, thank you, Mattia. Thank you, Luke. Thank you, Aaron. MATTIA: Thank you so much. It was a great time. AARON: It was a pleasure. Thanks for having us. LUKE: Thanks so much. CHARLES: Thank you for listening. If you or someone you know has something to say about building user interfaces that simply must be heard, please get in touch with us. We can be found on Twitter at @TheFrontside or over just plain old email at contact@frontside.io. Thanks and see you next time.
In Folge 123 ist Flo aka The Compiler zu Gast und stellt uns seinen qutebrowser vor. Dabei kommen auch die beiden Crowdfunding Kampagnen und welche Fallstricke es da gibt zur Sprache. Trackliste Andrea Baroni – Super Stardust Special Mission 1 Headrush – Without You Mutetus – Turbo Imploder 4.0 Luke McQueen – R-Type Main Theme YM2151 Arrangement qutebrowser :: qutebrowser Webseite Darum! :: Warum denn ein weiterer Browser? Mausknubbel :: Wie nennt man den Trackpoint auch noch? dwb :: dwb Browser (outdated) Conkeror :: Conkeror mit C Luakit :: Luakit Vimperator :: Vimperator Plug-In fuer Firefox (alt) Pentadactyl :: Pentadactyl Plug-In fuer Firefox uzbl :: The usable browser PyQt :: Qt Framework fuer Python Occupyflash :: Flash! Aaaaaahhh....! SemVer :: Semantic Versioning 2.0.0 git-annex Kampagne :: Kickstarter Kampagne fuer git-annex magit Kampagne :: Kickstarter Kampagne fuer magit Patreon :: Spendenhut-Service, nicht nur fuer Medienschaffende Steady :: Spendenhut-Service Flattr :: Die Mutter aller Spendenhut-Services Bountysource :: "Kopfgelder" fuer fehlende Open Source Software/Features qutebrowser Blog :: Das qutebrowser Blog File Download (148:16 min / 148 MB)
In Folge 123 ist Flo aka The Compiler zu Gast und stellt uns seinen qutebrowser vor. Dabei kommen auch die beiden Crowdfunding Kampagnen und welche Fallstricke es da gibt zur Sprache. Trackliste Andrea Baroni – Super Stardust Special Mission 1 Headrush – Without You Mutetus – Turbo Imploder 4.0 Luke McQueen – R-Type Main Theme YM2151 Arrangement qutebrowser :: qutebrowser Webseite Darum! :: Warum denn ein weiterer Browser? Mausknubbel :: Wie nennt man den Trackpoint auch noch? dwb :: dwb Browser (outdated) Conkeror :: Conkeror mit C Luakit :: Luakit Vimperator :: Vimperator Plug-In fuer Firefox (alt) Pentadactyl :: Pentadactyl Plug-In fuer Firefox uzbl :: The usable browser PyQt :: Qt Framework fuer Python Occupyflash :: Flash! Aaaaaahhh....! SemVer :: Semantic Versioning 2.0.0 git-annex Kampagne :: Kickstarter Kampagne fuer git-annex magit Kampagne :: Kickstarter Kampagne fuer magit Patreon :: Spendenhut-Service, nicht nur fuer Medienschaffende Steady :: Spendenhut-Service Flattr :: Die Mutter aller Spendenhut-Services Bountysource :: "Kopfgelder" fuer fehlende Open Source Software/Features qutebrowser Blog :: Das qutebrowser Blog File Download (148:16 min / 148 MB)
We have way too many open source projects and NuGet libraries which are used by thousands of developers, which is awesome, but means we get really scared when we change anything! We discuss when and how we decide when to push that release out. Frank discusses the drama behind SQLite-net and the most recent 1.5 update and James discusses his trials and tribulation with the Geolcoator plugin. SUPPORT US ON PATREON: patreon.com/mergeconflictfm Follow Us Frank: Twitter, Blog, GitHub James: Twitter, Blog, GitHub Merge Conflict: Twitter, Facebook, Website Music : Amethyst Seer - Citrine by Adventureface Proudly recorded on Zencastr Special Thanks Thank you so much for our new Patreon supporters: Stefan, Dennis, Derek, Simon, & Dan
We have way too many open source projects and NuGet libraries which are used by thousands of developers, which is awesome, but means we get really scared when we change anything! We discuss when and how we decide when to push that release out. Frank discusses the drama behind SQLite-net and the most recent 1.5 update and James discusses his trials and tribulation with the Geolcoator plugin. SUPPORT US ON PATREON: patreon.com/mergeconflictfm Follow Us Frank: Twitter, Blog, GitHub James: Twitter, Blog, GitHub Merge Conflict: Twitter, Facebook, Website Music : Amethyst Seer - Citrine by Adventureface Proudly recorded on Zencastr Special Thanks Thank you so much for our new Patreon supporters: Stefan, Dennis, Derek, Simon, & Dan
This is an answer to this question on my AMA (https://github.com/kentcdodds/ama/issues/328). Links: - Why semver ranges are literally the worst (https://blog.kentcdodds.com/why-semver-ranges-are-literally-the-worst-817cdcb09277) - semver.npmjs.com (https://semver.npmjs.com/)
In this episode, we are joined by Laurie Voss, the COO and former CTO at npm. Npm, also known as Node Package Manager has been an important tool in the JavaScript community and has helped engineers share their code. In today’s episode, we’ll be discussing how we leverage npm and find out what we can expect from npm 5. Laurie also teaches us some cool tricks that exist in the npm cli. Items mentioned in the episode: Node, npm, Ruby, Python, Java, Back End Happy Hour, CommonJS, CocoaPods, Stack Overflow, Github, Babel, Webpack, Closure Compiler, Rollup, Browserify, Yarn, npm Enterprise, Left-pad, Express, Google, Monster Cable, Gold Apple Watch, I am rich, Semver.org Guests: Laurie Voss - @seldo Panelists: Ryan Burgess - @burgessdryan Augustus Yuan - @augburto Jem Young - @JemYoung Derrick Showers - @derrickshowers Mars Jullian - @marsjosephine Picks: Laurie Voss - npm 5 Laurie Voss - Slides.com Laurie Voss - Next.js Ryan Burgess - Moment Lens Ryan Burgess - Lin Clark - A Cartoon into Fiber - React Conf 2017 Ryan Burgess - The Founder Augustus Yuan - Deco IDE Augustus Yuan - Mocktails Mixer by Deeplocal Jem Young - Aviation Jem Young - Music to Draw To: Satellite Derrick Showers - How I built this podcast Derrick Showers - Containers podcast Derrick Showers - Jackbox TV Mars Jullian - Spotify Mood playlists Mars Jullian - SkyGuru
Sam Boyer joined the show to talk about dependency management, building community consensus, and other interesting Go projects and news.
Sam Boyer joined the show to talk about dependency management, building community consensus, and other interesting Go projects and news.
Sam Boyer joined the show to talk about dependency management, building community consensus, and other interesting Go projects and news.
The impact of codes of conduct on community behavior, shipping a mobile app written in Elm, and yet more to say on SemVer. Diesel 0.9 Change Default Primary Keys to BIGINT The Rust Code of Conduct Ruby Code of Conduct issue Rails Code of Conduct thoughtbot Code of Conduct Disabling submit on invalid forms without JavaScript Purple Train Elm Native React Native Our earlier episode on Purple Train and React Native Homebrew SemVer issue
Kenneth and Kevin have the first of our Segfault instalments, a monthly banter about things that we find noteworthy but that might not fill an episode (yet). Here are the links to the (majority of the) topics we covered: * Rubyfuza 2016 - http://www.rubyfuza.org/ * DevConf ZA 2016, covered on #23 - http://www.devconf.co.za * Go 1.6 release, specifically transparent HTTP/2 support in net/http - https://golang.org/doc/go1.6#http2 * Rust 1.6 release, specifically Crates.io not allowing wildcards in dependencies in favour of SemVer - http://blog.rust-lang.org/2016/01/21/Rust-1.6.html * Semantic Versioning - http://semver.org * Tom's Obvious, Minimal Language - https://github.com/toml-lang/toml * IntermezzOS is a teaching operating systems, especially focused on introducing systems programming concepts to experienced developers from other areas of programming - http://intermezzos.github.io * Steve Klabnik - https://github.com/steveklabnik, https://twitter.com/steveklabnik, http://www.steveklabnik.com * MIT Unix xv6 OS - https://github.com/mit-pdos/xv6-public * A Skeleton Key on Unknown Strength, article regaring CVE-2015-7574, the glibc resolver bug - http://dankaminsky.com/2016/02/20/skeleton/ * CoreOS is Linux for Massive Server Deployments - https://coreos.com * Apache Mesos, a distributed systems kernel for your data center - http://mesos.apache.org/ * The Post Amazon Challenge and The New Stack - http://thenewstack.io/post-amazon-challenge-new-stack-model/ * Visual Transistor-level Simulation of the 6502 CPU - http://www.visual6502.org/JSSim/ Thanks for listening! Stay in touch: * Socialize - https://twitter.com/zadevchat & http://facebook.com/ZADevChat/ * Suggestions and feedback - https://github.com/zadevchat/ping * Subscribe and rate in iTunes - https://itunes.apple.com/za/podcast/zadevchat-podcast/id1057372777
Sean has shipped early versions of Diesel, an ORM for Rust! We discuss its semantic versioning, the ergonomics of use versus the complexities of implementation, early issues with the API and the road to Diesel 1.0. Diesel Semantic Versioning SemVer for Library Maintainers by Richard Schneeman Rust RFC 1122 - Language SemVer Lobsters API hole in diesel updates Implementing IS NULL and IS NOT NULL for Diesel Diesel issue for migrations Crates.io PR for using Database behavior
Comenzamos un nuevo capítulo de nuestro podcast, La Tecnología para todos. Si la semana pasada vimos Bootstrap, esta semana le toca el turno a una herramienta que debe ser indispensable en nuestros desarrollos, Bower, gestor de paquetes para el desarrollo web. Esta herramienta nos facilitará la gestión de todas las librerías y frameworks de código abierto que utilizemos (Bootstrap, jQuery, AngularJs, BackboneJs, etc...), permitiendo añadir, actualizar y modificar las referencias a nuestro proyecto. Todo se gestiona a través de la línea de comandos en MS-DOS, si trabajamos con Windows o Shell, si trabajamos con Mac o Linux.Recuerda que queda muy poco para que finalice el plazo para inscribirte en el sorteo de un kit de Arduino. Solo tienes que suscribirte a nuestra lista de correo para recibir toda la información que vamos publicando y algún que otro contenido extra.Estamos intentando recabar información para saber en qué podemos ayudarte. Te pedimos, por favor, que rellenes la encuesta sin ningún compromiso. La utilizaremos para obtener información y saber cómo podemos ayudarte. Te llevará como mucho 20 segundos, muchas gracias.Encuesta déjanos ayudarteComo ya te hemos dicho, Bower es un gestor de paquetes de código abierto para el desarrollo web (front-end). Fue creado por dos miembros del equipo de Twitter y su principal misión es hacernos la vida un poco más fácil a los desarrolladores. Gracias a esta herramienta podrás descargar tus librerías y frameworks sin tener que visitar ninguna web oficial o no oficial, mantenerlas actualizadas y comprobar si ha versiones nuevas.InstalaciónBower depende de tres herramientas para poder ser instalado en tu máquina. Por un lado necesitas tener NodeJS. Ya hemos hablado de este servidor web en el capítulo donde vimos un ranking frameworks de JavaScript. Es una aplicación que se ejecuta del lado del servidor y corre bajo el motor o compilador JavaScript V8, desarrollado en el proyecto Chromium y que es el que utiliza Google Chrome.Otra utilidad que tienes que instalar es Git, el famoso control de versiones utilizado por GitHub, de donde precisamente Bower obtiene la gran mayoría de las librerías y frameworks.Dentro de NodeJS hay un gestor de módulos que se llama npm. A través de la línea de comandos puedes instalar, fácilmente, Bower. Una vez que tenegas instalado NodeJS y Git solo debes escribir npm install -g bower y se instalará Bower de forma global en tu máquina.Instalación de paquetesBueno, pues ya tienes todo lo necesario para empezar a utilizar Bower. Lo primero sería buscar el paquete que quieres instalar. Para ello debes acceder, a través de la línea de comandos, al directorio raíz de tu proyecto. Ejecuta el comando bower search bootstrap. Esto hará una búsqueda de todas las librerías que tengan como palabra clave Bootstrap. Como ya te habrás dado cuenta, para ejecutar cualquier comando debes poner primero la palabra bower, luego el comando y por último los parámetros. Si quieres ver la lista de comandos disponibles puedes hacer bower --help. También puedes ir a la página de referencia de la web oficial donde te explica cada comando en detalle.El comando search te mostrará un listado como este. bower search bootstrap Aquí es donde tienes que localizar el framework o librería que quieres incorporar a tu proyecto. En nuestro caso, Bootstrap, es la primera opción. Lo que aparece en azul verdoso, es el nombre único dentro del respositorio de Bower y es con lo que te tienes que quedar. Ahora que tienes localizado el paquete vamos a obtener más información. Escribe en la línea de comandos bower info bootstrap. bower info bootstrap Como puedes observar nos da la información sobre donde está alojado, el archivo bower.json, hablaremos luego de él, y las diferentes versiones disponibles que tenemos del framework.Ahora solo te queda elegir que versión quieres instalar. Puedes instalar la última versión haciendo bower install bootstrap o elegir una versión específica con bower install bootstrap#3.3.2. En el primer caso te instalará la versión 3.3.5 ya que, la versión 4.0.0 es una versión alpha. Si quieres saber más sobre como se numeran las versiones, te recomendamos que visites la página de Semver , donde te explican el versionamiento semántico.bower.jsonYa te hemos hablado de este archivo y has visto un ejemplo, el que se incluye dentro de Bootstrap. bower.json es el manifiesto y contiene información vital de nuestro proyecto. Es muy importante si lo que estás desarrollando, lo vas a compartir a través del repositorio de Bower. Si simplemente lo que quieres es poder manejar tus dependencias de forma semi-automática, solo tienes que crearlo.Si ejecutas el comando bower init, lanza el proceso de configuración del archivo bower.json, donde te preguntará un montón de cosas innecesarias si no vas a publicar en su repositorio. Otra opción es crear el archivo sin ningún contenido, siempre dentro del directorio raíz de tu proyecto. Lo puedes hacer manualmente. Dentro de todas las propiedades que tiene este archivo nos vamos a fijar en dependencies y devDependencies. La primera propiedad nos dirá las dependencias de nuestro proyecto. Es muy importante, todas las librerías que sean añadidas a esta propiedad podrán ser manejadas por Bower. La segunda propiedad son las dependencias necesarias en la fase de desarrollo, lo típico son librerías para hacer test o control de depuración.¿Cómo podemos añadir las dependencias a este archivo? Si ejecutas el comando bower install bootstrap, descargará el framework a tu máquina sin modificar el archivo bower.json. Para obligar a que esto sucede tenemos que añadir al final -save, quedando de la siguiente manera el comando, bower install bootstrap -save. Esto añadirá el framework a la propiedad dependencies y podrás gestionar mediante los comandos de Bower, su actualización, modificación o eliminación..bowerrcEn el archivo .bowerrc configurarás tu proyecto. Al igual que bower.json, tiene muchas propiedades que puedes ver en la web oficial. Si este archivo no existe en el raíz de tu proyecto, Bower utilizará los valores por defecto. De todos las propiedades de configuración, vamos a hablarte de tres propiedades importantes.La propiedad analytics indica si queremos mandar datos estadísticos de uso a Bower, por defecto es true (verdadero). Estos datos son anónimos y permiten computar los comandos más utilizados, saber el número de usuarios por país o los paquetes más instalados. La información, o parte de ella es pública, a través de la web oficial. Estas estadísticas nos pueden dar una idea de cuales son los paquetes más utilizados, algo muy importante a la hora de decidir si usar uno u otro.Otra propiedad importante es cwd (Current Working Directory o directorio de trabajo principal). Nos indica dónde está el directorio raíz de nuestro proyecto. A partir de él se obtienen el resto de rutas. Si no estás seguro te aconsejo que lo dejes por defecto y cogerá el directorio donde esta el archivo .bowerrc.Por último y quizás la más importante es directory. Indica donde queremos guardar los paquetes que descargamos, por defecto los almacenará en bower_components. Si quieres cambiar a otra carpeta solo tienes que dar valor a esta propiedad. No es tan importante así que puedes cambiarla pero mucho ojo, las referencias que se hacen en el código HTML deben guardar concordancia con esta propiedad.ConclusionesA nuestro modo de ver la programación, Bower es una herramienta muy interesante. Creemos que tener un gestor de paquetes es indispensable en los proyectos web. Si en tu día a día desarrollas aplicaciones web, este tipo de herramientas pueden ahorrarte mucho tiempo al final de año.Bower o npm pueden ser dos herramientas que se complementen o que se solapen, dependiendo de tu rol en la programación. Seguramente si eres un desarrollador front-end, la opción sea Bower, en cambio si eres un desarrollador full-stack, deberás pensar si utilizar Bower te aporta algo más de lo que puedes hacer con npm. Al final siempre el desarrollador decide, nunca hay una solución única y no hay soluciones mejores o peores.Además de los explicado aquí, estos enlaces puede que te resulten interesantes.Maven, gestor de paquetes para JavaNuget, gestor de paquetes para .NETRecurso del díaMaterial Design IconsMaterial Design Icons es una web donde podemos encontrar un sinfín de iconos para nuestras aplicaciones. Mantenida por la propia comunidad, ofrece la versión Community-led Iconography totalmente gratuita. Encontramos versiones para Windows con XAML, Webfonts para desarrollo web, Android e IOS. Este paquete se puede instalar con Bower y npm. Prueba este magnífico complemento en tus desarrollos para potenciar el diseño de tus proyectos.Muchas gracias a todos por los comentarios y valoraciones que nos hacéis en iVoox, iTunes y en Spreaker, nos dan mucho ánimo para seguir con este proyecto.
Brian, Brandon and Ryan discuss iOS9, Amazon's new tablet and refreshed TV devices, a little story about Marco and blocking ads, tracking and more.
The 10-minute Apple event summary. Henning introduces Fido - the thing that fetches iTunes reviews. Node 4 is out! An explanation of what Semantic Versioning is. Kahlil provides an update on the Gittens project by the Reactivists. The podcast also has a recipe repo now! We discuss the RockBot illustration by me-stevens. Recap of the NightlyBuild conf. What we do to balance our work with the rest of life.
Part 2 of an on-going series on open source. We discuss a number of open source topics including what the expectations are for support of an open source project. We also discuss how to use SemVer to successfully maintain an open source package and what we can do when SemVer is not an option. And finally we take a look at licensing and discuss why we need to be concerned with it.