The Changelog: Software Development, Open Source - Middleman and Static Site Generators (Interview)

Episode Date: August 15, 2015

Thomas Reynolds, the creator of Middleman, joined the show to talk about the history of static site generators, how he got into open-source, his love for Go, and what's to come in Middleman v4....

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome back everyone, this is the Change Log and I'm your host, Adam Stachowiak. This is episode 169 and on today's show we're talking to Thomas Reynolds, the maker of Middleman. We've wanted to have this conversation for quite a while. We're Rubyists at our core here at the ChangeLog. We use Middleman every single week to ship ChangeLog Weekly. We built that in Middleman. We're also building another site for
Starting point is 00:00:35 BeyondCode in Middleman. Check that out at beyondcode.tv. That's our brief interview series we shoot at conferences after parties. But Rubyists at our core here at the changelog we love middleman great conversation today with Thomas we have three awesome sponsors
Starting point is 00:00:52 CodeShip, TopTile and DigitalOcean our first sponsor for the show is CodeShip they've launched a brand new feature called Organizations and I've talked to several teams who love this new feature because now you can create teams, set permissions for specific team members, and improve collaboration in your continuous delivery workflows. You can maintain centralized control of your organization's projects and teams with this brand new feature.
Starting point is 00:01:21 Save 20% off any premium plan you choose for three months by using the code THECHANGELOGEPODCAST. Again, that code is THECHANGELOGEPODCAST. You'll save 20% off any premium plan you choose for three months. Head to codeship.com slash THECHANGELOG to get started. And now on to the show. All right, we're back we got a great show lineup for you today we have been wanting to talk about middleman forever and when i say forever it's like the sandlot forever uh i've been using middleman for a long time jared how about you have you been using middleman for a
Starting point is 00:02:01 while actually my first time with middleman was when you brought me in on Change Log Weekly. Okay, so that was... Which was, you know, maybe six or seven months ago. Well, luckily it was a Ruby thing. But I've been using it a lot lately, yeah. So we got Thomas Reynolds on the line here. He is the creator of Middleman. Thomas, hey, what's up? Hey, how you doing, Al? So you're the technical director at Instrument. It's an independent digital creative agency.
Starting point is 00:02:23 Is that your thing or is that somebody else's thing? That's someone else's thing. We're a company of about 100, 110 people in Portland, Oregon. We're all centrally located. No remote workers and we just do really high-end digital marketing. Nice, man. Also the creator of Middleman
Starting point is 00:02:40 and a foodie, book nerd, writer and obviously a Rubius because you couldn't be the creator of Middleman without being a Rubyist first, right? Yeah, it doesn't happen accidentally. So for those listening, Middleman is a Ruby gem. It's a static site generator. And how long has it been around, Thomas?
Starting point is 00:02:59 In its current stable form, it's been out for three years. I just checked on GitHub. Time since first commit in the repo is just a little over seven years. Wow. I was going to say, it feels like so long. Ancient open source roots at this point. Yeah, definitely. If you get past five, it's getting into the... It's like the cart, you're suddenly a classic.
Starting point is 00:03:19 Yeah, no, it's like marriage. Like, it's just I wake up every day and I do it, and I keep doing it every single day, and it'll always probably be here with me. There you go. So before we kick off the full-on show and dive deep into Middleman, let's figure out who you are a bit. Kind of give us a bit about who you are. You already mentioned Instrument and the things you do there.
Starting point is 00:03:35 So kind of give us a bit about your history and who you are as a software developer. Yeah, so I've been in software development and mostly agency stuff for about 16 years now. I got started really young, kind of grew up with the Internet and was able to, you know, be a kid in high school and actually contribute to open source and also, you know, to just fan sites and stuff. So I got my start programming, making levels for TIE Fighter, the flight sim video game for the PC way back in the day. And then I moved from there to fan sites for that. And eventually it was like, oh, hey, I need to learn this SQL thing. Hey, I need to learn this HTML whatever, 3, or whatever it was back then.
Starting point is 00:04:17 And so, yeah, I got my start just doing super nerdy stuff on the internet. Did that for a couple of years and went off to school for a CS degree and then realized I was writing less code at school than I had been in my own free time. So I kind of dropped out, switched to a more liberal degree and just with a lot of reading, which was a lot more fun for me, and then put all my passion back into software development on the open source side. Since becoming a full-grown adult, I've been doing agency stuff now.
Starting point is 00:04:47 Oh boy, probably like eight to 10 years, pretty much nonstop. So I've never really done any product stuff. I've never really done any startup stuff. I just kind of like the heavy churn and like frequent new kinds of ideas that you have to do like in an agency lifestyle. Have you ever got the itch, the startup itch? Uh, no, not really. I moved to Portland to get away from that stuff. So I'm happy. I'm happy just, uh, I don't know. I like doing new things. I probably get a little bit bored other than middleman. I tend to like discard side projects. So, um, yeah. But,
Starting point is 00:05:25 uh, yeah. Slightly off topic since you're living in Portland. Um, I'm a huge fan of Portlandia. I absolutely love that show. Are you, do you watch the show since you sort of live it every day or do you just skip it?
Starting point is 00:05:36 I don't really watch it. Um, but people, yeah, that's like exactly the question people have. Uh, actually no, I think it's,
Starting point is 00:05:44 um, the way I try to phrase this to people is a lot of people would see those caricatures as an insult, and we take them as a point of pride, and that's just because we're weird. Like, if we could get more people on weird bikes, that would be perfectly cool for us. That's why a lot of us moved here.
Starting point is 00:05:58 Love Portland, man. Yeah, it's a great show. And they're well-meaning. And I know Carrie grew up somewhere here in the Northwest, so I'm pretty sure she's well-meaning about it all, too. I think it's the first time, Jared, on this show I heard somebody say they quit their CS degree to go and code more. Mm-hmm.
Starting point is 00:06:15 Yeah. Yeah, so I went to Arizona State, which is not necessarily known for its computer science degree. But it was cheap. They launched a rocket once to Mars and it deactivated as soon as it landed. So that pretty much tells you what you need to know about the program there.
Starting point is 00:06:31 So I think Java, Sun, or I guess it was still Sun then, poured a ton of money into the school, so I wrote two years of Java, which was not terribly exciting projects. And given your career... Sorry, Jared, go ahead. I was going to say, what turned you on originally to the
Starting point is 00:06:47 open source world? That's a good question. I'm trying to think back. It was probably... Actually, I honestly don't remember. Since I got into agency stuff after college, I did a lot of PHP,
Starting point is 00:07:04 which is always kind of like a vaguely open source community i don't know the actual structure but they were pretty open um and there was pretty uh a large amount of community involvement like as that language grew so i did a lot of that and this is all pre-github so open source was like this thing that took place on mailing lists and maybe someone hosted a site, you could download a tarball or something and install it. But it didn't feel like there was as big a community as there is now. There were IRC channels that we could communicate, but it was probably something PHP-based. One of the database wrappers or something like that I probably contributed stuff to early.
Starting point is 00:07:44 So yeah, basically did a lot of PHP for years and years. Discovered Ruby right as the great Rails explosion happened. Fell in love with it, especially since PHP was basically Perl at the time. Got to use some things from CS that I hadn't used in a little while, like objects and classes and all the core object-oriented stuff that that's in ruby and yeah it's pretty much it i started using ruby rake specifically um for a lot of tooling stuff for my front front end work so you know every time you know i was a okay agency but we did mostly email templates and it got to the point where it was like four to six email templates a day was
Starting point is 00:08:25 the job and um most of that stuff can just be automated you know like mailchimp will automate all that stuff right now you just kind of upload a couple things to them right so started using rake and started uh you know building out uh just little helpers little tooling bits for myself interesting it might make uh some sense to rewind a little bit, though. Given your agency experience, I do have a couple thoughts here, Mark, for that, getting closer to that subject. But it might make sense since the, you know, in terms of the Git history, I think you said it was seven years Git history you've got for middleman so we're definitely talking about quite a bit of space and you know and time in there in terms of the space that middleman occupies which is the static site generator space there's been lots out there in every kind of language you can think of um jared and i we both have ruby roots
Starting point is 00:09:17 so we kind of go back with with all of that but at the same time i think a lot of the at least what i can tell from my perspective is a lot of the static site generators came from the review world and sort of, you know, spread out to other languages. So what do you know of the history of these generators and where did middleman come from and what problems was it solving when it first became for you? Totally. So yeah, kind of when I was like doing that email template work, template work, the other thing you wanted to automate at the same time was HTML and CSS. And this was right about the time that Haml had come out, and so that just took a lot of the work out of doing just incredible amounts of tables
Starting point is 00:09:56 and all the stuff we had to do for emails back in the day. So I started looking around for some tools at the time. I think Nanoc existed. Yeah, I remember that one. Staticmatic existed. I'm not entirely sure if Jekyll existed publicly yet, but it was all about that time. Looking back, Jekyll looks like their initial launch was like end of 2008.
Starting point is 00:10:18 It was probably out there. Yeah, it was probably being talked about on the blogosphere or whatever we called it. Yeah, so I liked Staticmatic personally. It was already open source. You could already check out all the code, and it was pretty easy to get code back upstream with that team. So I started using Staticmatic for myself and got into the forums and kind of got involved with that community. And basically, slowly over time, I committed a larger and larger share of the pull requests until the point where the original creator didn't have the time for it as much anymore. So we basically, the 1.0 of Middleman is somewhat of a fork of Staticmatic.
Starting point is 00:11:02 So we just kind of renamed it, moved the repos, and moved a lot of the community stuff over into my name. I did not know that part, that it was sort of a fork, because I feel like Staticmatic is where it all began. And it sounds like that's what you said too, is that right? Yeah, at least for me. I mean, I know Nanak existed, and it seemed at a glance to be more complicated than I wanted to get into.
Starting point is 00:11:25 I never really went all the way down that road, so I can't actually say if that's true. But Staticmatic kind of matched up a little bit more to how I wanted to use the tool. Adam, I don't know if you remember, a little bit of my roots was in the Perl community in college. And my first kind of exposure to blogging at all was because basically my professor told us we exposure to blogging at all was because basically my
Starting point is 00:11:45 professor told us we had to blog and they gave us this Pearl thing. I think it was called like blog some, something like that. And it was a static site generator in Pearl. This is like 2005, 2006. And I thought it was super lame. And then I found WordPress and I was like,
Starting point is 00:12:04 why would I want to have static sites when I can have dynamic, changing, database-driven WordPress sites and then there's obviously reasons why you would want to have a static site we can get into all that but it was kind of funny because once Jekyll dropped and Staticmatic, I started seeing this rise of these static site generators and I was like like what is wrong
Starting point is 00:12:25 with these people like why are we like wordpressing these things are cool like static files like that's i had a similar thought when i i don't think i've ever shared this story publicly but when win and i first so when i started this show together way back in 2009 and the first time i met win was at a ruby meet up here in hou, and he was doing a presentation on something new they had done, and they had just rebuilt the Squeegee website, which was Wynn's original consultancy before he sort of went independent and then ultimately went to GitHub. He loved Static Matic, and he was giving a presentation on it, and I was like, same thing. And I was a WordPress guy at the time. I was using that stuff. Why would I learn and write Ruby only to create static sites?
Starting point is 00:13:12 I don't get it. But it was a big, big thing then. Yeah. I think, like I said, I got into it to make HTML email. There was no option other than static, right? You just throw this thing over the wire, and it's got to all be self-contained. But yeah, I think it's kind of really interesting over the years. And as middleman has gained popularity, there's something happened.
Starting point is 00:13:34 And I don't know if it was, you know, we got tired of the complexity. We got tired of like the stack churn or the security issues around like full like back end apps. But there's definitely now, you know, you see all these blog posts coming around that are just like, there's no reason not to do static. I mean, almost everything you can accomplish other than like a form and maybe
Starting point is 00:13:53 e-commerce, you know, you can do statically and then you never have to worry about, you know, any security implications. I remember my tunes started to change when I would consistently see different WordPress sites get taken down by, I think it was dig back then. Yes. Um, you know, the dig effect or something like that. And it would just crush
Starting point is 00:14:09 under a little bit of load. And that's when I started saying, okay, you know, static HTML files makes a lot of sense in that regard. Yeah. Also, I mean, just because I come from an agency background before, you know, like the modern age um that's what we deliver that's what our contracts say we deliver we deliver like this static packet of a website and if you want to throw it into a rails app or if you want to just like drag ftp it to some you know godaddy server that's up to you um so there's also a lot of that kind of work is self-contained in that way that's that's kind of leading into guess, the slightly a good segue into the next step, which is given your agency experience now at Instrument, I got to imagine that a lot of what you've done with Middleman over the years with the contributors and your core team and contributors who've helped get Middleman to where it is now today, I got to imagine a lot of that's playing back into your full time. A little bit. I pretty much do nothing but JavaScript on my day job
Starting point is 00:15:08 I manage a team of people as well but for the most part I had tried to keep the two separate I didn't want to like I made this thing therefore we should use it especially before it got enough popularity to justify that kind of stuff so I've always just kind of left it on the side if people ask about it in like slack or something i'll be like oh yeah i know how that thing works um but yeah maybe in the last year we've actually been hiring people and they've come in the door knowing it so now we do tend to use it on a lot more projects and i am a little more hands-on with like actually
Starting point is 00:15:40 adding features or you know fixing specific bugs from people in-house. So you said the original crux that was sort of, originally somewhat of a fork of staticmatic, the problems initially were HTML, email-driven. Is that when it was, that was obviously Middleman version one. How has Middleman changed over the years in terms of the problems it's been solving and the the problems it's been solving and and the evolving problem it's been solving yeah so i just looked um you know one and two were these kind of small releases that uh i don't know how many people were actually using it probably people who moved
Starting point is 00:16:15 on from static matic um there's also a period of time there where jekyll went completely unmaintained other than like the octopress work that was happening. So I think we've got a lot of people from there, but I just looked it up and we've been on the stable current stable branch since 2012. I think that's when it really kind of took off. And that's when I was also doing rail stuff on the side and I wanted to align the two kind of workflows. So rather than just being like, it's a whole separate tool,
Starting point is 00:16:45 I wanted it to be like conceptually, you could come directly over from Rails. And then, you know, you can just make a static site, or you can put a static site in your Rails if you want to like, keep, you know, one piece separate or a little more secure. So yeah, I think version three was like the big leap forward, built it on top of some of the Merb stuff, which eventually became into Rails, but I used a lot of their tooling. We still use internally for a lot of our code, the Padrino library. That's like a Sinatra alike for Rails. And then whenever we have like a discussion on API, we try to go check out Rails API and make sure we're keeping things as similar as possible so we can bring people over from the rest of the Ruby community.
Starting point is 00:17:27 Do you mean things like rendering parcels, different helpers that are available in Rails so people can essentially copy and paste views to a degree, potentially, back into a Rails app? Yeah, I mean, we still have a huge reliance on YAML for configuration. We have all the helpers like you said like your normal link helpers your localization helpers we bring over directly um most of it we
Starting point is 00:17:51 support i think every templating language that could possibly exist in some fashion so definitely all the ruby stuff most of the javascript stuff you know pretty much any language that can be you know shelled out to and come back, we support that. Very cool. So there have been tons of these tools over the years. We've mentioned a few here. I think there was one called Stasis. There's been a lot of them.
Starting point is 00:18:20 Webby was one. I think I used Webby back in the day. All Ruby tools. And yet Middleman. What's that? Serve? Serve serve i don't know that one it's it's not being maintained now but it was one that was it was one that john long had mentioned we talked about that on the octopress show with the yeah with brennan mathis very cool so middleman has stood out from the crowd it's it's kind of been more successful it's gotten more uh it's obviously been sustained longer but it has more excitement around it more people using it uh big players like
Starting point is 00:18:50 uh thought bot and um there's a couple more on your website that i can't think of off the top of my head mailchimp thank you so can you attribute that to anything in particular was it you know pure luck or is there something about middleman that stands out from the crowd? Yeah, I actually think I have a kind of different opinion about open source from the rest, or at least the modern kind of JavaScript crowd, which I don't think things should be throwaway. I think there's a responsibility attached to saying,
Starting point is 00:19:22 I want you to spend your days and hopefully not your nights coding with my thing. And that, you know, it kind of sucks when you have to maintain that for years and years and years. But that's like the bargain you're making by publicly saying, hey, go use my thing. I put it on GitHub. So I think what I contribute most of middleman success to is basically stability and like respect for people's time. So we've been at 3.0 stable for a little over three years now. The APIs are pretty much the same. If you go make a site a year ago, it's going to be exactly the same now.
Starting point is 00:19:58 Things aren't going to change under your feet, and you're just going to have a stable platform. It's not that complicated. The things we do are pretty self-contained. So we just do those things well and get out of your way as quickly as possible and we've done it for three years so you know there wasn't like oh i gotta switch i mean there will be soon but there wasn't like i gotta switch to the rails for rewrite like what am i gonna do with myself right um i'm glad you said that because that's actually an issue i've had with the static generators over the years is that i would build something let's say a one-off simple static site for somebody and then have to go back and make an update or something like that to it.
Starting point is 00:20:30 And then building it locally or something like that becomes an issue because the latest version breaks things. And then I got to spend another hour or so trying to fix things or link to helpers or just weird things that have changed in the apis of like the little things and the stability to me was a big thing for middleman because i'd gone through static matic and several others and then finally you know i'm using something like middleman you know almost every time i do something static unless it's actually really static um and and never having to deal with those those issues where i don't touch it for six months and it's still the same you I can just run it. Yeah, we want to fight that whole hype churn cycle. There's no reason for that. There are so few really revolutionary ideas. And you know what?
Starting point is 00:21:15 Maybe take the Ember community's stance on it. If they're really revolutionary, we'll fold it in and we'll do it stably, slowly over time and we'll document it well. But I'm not going to jump on the hype train and break your site from a year ago. It's great we have tools like Bundler now that can protect us from a lot of that kind of, you know, come back to a thing six months later and it's not working anymore. But, you know, you should also be able to do bundle update and not have your entire world explode. I like that.
Starting point is 00:21:41 So you have this commitment to reliability and stability, and you've been doing that over the years. That's pretty rare in open source. Very. And so I wonder, like, what, why? Like, what do you get out of it? I don't know what I get out of it. Okay. Inertia. Inertia? inertia inertia um i like doing it i um i don't know i so we have a couple community like outlets for middleman so there's like public chat channels there's a public forum um
Starting point is 00:22:14 what else is there uh i don't remember there was an email group at some point but basically i don't go there like i set up these systems for the community to self-help, and then I only respond on GitHub pull requests or Twitter harassment. I think that's also another thing. If you're just in the trenches there, managing the forum day in and day out, you get to see people telling you that you kind of ruined their weekend because you wrote some bad bug.
Starting point is 00:22:44 I think it maybe drags on you a little bit more, but I try to keep myself completely separate from that. And people in the community have stepped up and been those kind of like community leaders. And it all works out for everyone. I looked at the forum now. It's pretty active. I mean, a lot of people in there. I mean, I'm not diving into a lot of these notes here, but I'm just scrolling this endless scroll. A lot of stuff happened. Yeah, a lot of that is just holes in documentation where all of our documentation is on GitHub. It's all community contributed to. So I did a bunch
Starting point is 00:23:20 of the big chunks of initial writing, but it's all kind of maintained itself through people not quite being able to parse a sentence or, you know, I'm not making the right point that they're trying to get to, or I, you know, put something on the wrong page, but you're never going to be able to document everything. Again, kind of like the Ember model, I went with like a plain text tutorial style for my documentation, as opposed to API docs, which are a little more,
Starting point is 00:23:43 provide better coverage, but are kind of harder to understand if you don't know what's going on inside the system. So yeah, so that just leaves like narratively, like a feature missing, just because I couldn't fit it onto any of the pages. And I think the forum is really good about that. Just being like, hey, there's this thing, why isn't it documented? Well, like four people use it. But, you know, here it is on the forums for you. So if a doc needs updated, someone could go to GitHub, ForkIt, and let's say like a misspelling or something to change someone from the community, whether they're in the core team or not, could step in and help out as needed. And there's a pull request button at the bottom of every page on the documentation site. So we make that as easy as possible.
Starting point is 00:24:28 So we talked a little bit about, you know, its makeup. Can we talk a little bit about, let's say, like a file structure? You said it's a lot like the Rails view layer. Was that on purpose? Did you look at the Rails view layer and say, this is how it should be? This is how a middleman site should be structured and how it should be laid out? Is it really meant to be on a plug and play between that and Rails?
Starting point is 00:24:49 Kind of. I don't think we follow the file layout of Rails because they've got a pretty deep named structure. The way our philosophy works is you have a source directory and conceptually you look at everything in there and that's what you get on the way out. You can do some metaprogram. You can do all these fancy configuration options,
Starting point is 00:25:07 but we try to do a one-to-one from that folder to your build folder. So if I have index.html.erb, I'm going to get an index.html out. So for most people's sites, you shouldn't have all this magic happening. You should just be able to say, you know, it's a pipeline. You come in as SASH, you come out as CSS. So it matches, the structure of source but however you want to structure your code so if you want a fonts directory have at it if you want to put it inside your css that's fine with us too and the reason
Starting point is 00:25:34 why i ask is because i i think what and i could be wrong here but it's at least happened to me several times is that you know i'm a rubyist only to a certain point or i'm a back-end developer only to a certain point that i don't do it because there's people who are better than it than me at it and i may want to go buck wild on the view and build out a site but i don't have you know all the routes in place and all these different things that sort of stay in your way when you work in a rails team and it felt always a lot easier to sort of like build out something statically you know with all the urls and all these different things that i think of as a ux or designer standpoint or a front-end builder standpoint and build you know a good portion of my prototype or even my
Starting point is 00:26:15 prototypes to prove to the business team like hey we can build this or this is the direction we should go i'll build that middleman with almost zero resistance and really not a lot of Ruby knowledge beyond what the docs can easily provide in terms of middleman routing and stuff. And then give that over to my Rails team or demonstrate that and be able to take a lot of what I've done already and just pull it right into the Rails app with almost no issues. Yeah, I mean, I kind of like we map to the way it used to be on the front end. You pop open a new folder, you open Notepad or whatever, and you just start making files, your static files. You wrote all your HTML, you wrote all your CSS,
Starting point is 00:26:54 and you put 50 script tags into your HTML. And the reason we don't do some of those things now is because Sass is faster. Templating is faster. We want to compress things smaller for the end user, but none of those are changing the flow. So middleman steps in and says, I'll handle concatenating all your JavaScript. I'll handle your shortcuts in SAS. Just keep writing the same kind of straightforward, completely backend-free approach to front-end coding.
Starting point is 00:27:22 The cool thing about long-term projects is there's lots of things that change over the years, and then there's lots of things that stay the same. And it seems like when you strike a chord early on in architecture or those big decision-making, you can just kind of refine over the years. And Thomas, you recently wrote a post on your blog, which I believe is award winning Fjords which that's correct right I think the best website name
Starting point is 00:27:50 I think I've ever heard I'm pretty jealous of it I also have the Fjords Twitter account but I haven't figured out what to do with it yeah just hold on to that baby and just wait for the check there's a Norwegian hardcore band who I always get subtweeted by.
Starting point is 00:28:06 She's pretty cool. Completely off topic, but kind of related is whoever the guy who had the Alphabet account on Twitter. Yeah, I saw that. Oh, man. He's sitting on a gold mine there after Google renamed. So, yeah, maybe Fjord. Maybe someday you'll have some large company rename themselves to Fjord and you'll just be sitting on it. I like it.
Starting point is 00:28:28 But you've had – over the years, you refine your thoughts. You refine even the way you write code. And it seems like that is something that's happened to you in kind of dramatic ways. You recently published a post back in March called My Weird Ruby, where you go through kind of how you write Ruby code today and how that's way different from probably back in 2010 when you started middleman. So I'm going to tee that up. We need to take a break, hear from a sponsor. But on the other side of the sponsor break, I want to hear your thoughts on why your Ruby is weird and how that has affected middleman four so we'll be right back you've heard me talk about top towel several times on this podcast but today is different i've got a special treat for you i
Starting point is 00:29:16 went out and spoke with a listener who a year ago had never heard of top towel he listened to the show just like you're doing right here right now now, today, and heard us talk about TopTile and what they're all about. And he decided to get in touch. And now he's living the dream as a freelance software developer with TopTile. His name is Daniel Elzon. And I sat down and I talked with him. I said, hey, what is it that you love most about TopTile? Take a listen. Well, for me, the thing about TopTal, which I thought would be very hard for me personally, as I transitioned to a more consulting role, was the way I would have access to new clients and what quality those would be. So I found that I've had access to
Starting point is 00:29:59 awesome clients through TopTal and it hasn't been that hard to find because they have a lot of choice. And even more than that, there's enough choice and I can actually be a little selective about what kinds of things I want to be working on. So I use that as a way to sort of hone my skills and go towards the technologies I think are worth investing in for the future. So whether it's including new front-end frameworks or doing a little DevOps work on the side, I usually am able to find clients who have the needs of the things I want to get better at. So that's been truly useful. All right, that was Daniel LaZond, a listener of The Change Log and also a freelance software developer with TopTal. If you want to follow in Daniel's footsteps,
Starting point is 00:30:47 go to toptal.com slash developers. That's T-O-P-T-A-L dot com slash developers to learn more about what TopTal's all about and tell them the changelog sent you. All right, everybody, we're back speaking with Thomas Reynolds about Middleman. And Thomas, you've been working on Middleman 4 for a while now. You've recently published a blog post entitled My Weird Ruby, wherein you state,
Starting point is 00:31:18 Over the past year, I've been rewriting large portions of the Middleman code base to better reflect how i like to write code as opposed to the silly version of of mine oh typo typos exposed breaking news here on the change log is a typo in a blog post uh as opposed to the silly version of the old person six years ago so you've been rewriting a lot since you You've learned things. You've changed your style. And that's kind of dramatically affected the middleman code base. Can you speak to that? Yeah, totally.
Starting point is 00:31:51 So kind of like I said, I do a lot of JavaScript at work. I do Ruby for middleman. I have done Clojure. I have done Java and got into some Haskell. And I like to try as many different languages as possible.
Starting point is 00:32:04 And there's always good ideas. You can bring them all back. So I can write another post later got into some Haskell, and I like to try as many different languages as possible. There's always good ideas. You can bring them all back. I can write another post later called Migrate JavaScript because it's equally silly, but it's kind of got the same gist. When I started Middleman, Ruby was getting popular, but Ruby is also kind of a minefield of features. Some great stuff in there. There's some stuff you should never, ever use. I think Rails 2 had a bunch of these,
Starting point is 00:32:30 like just mix-ins forever, or duck typing, and all these kind of very famously Ruby features that you probably wouldn't want to use in production. Alias method changing, yeah. Alias method changing, yeah. That was a good one. Yeah, so that's how middleman
Starting point is 00:32:46 two looked like that's what middleman three pretty much looked like with some more inspiration um from rails three which has a lot more of uh it's kind of i don't know they have a completely crazy uh mix in inheritance chain thing that's still in there that i don't understand but um so that's what it looks a lot like Rails. But, you know, it's been two, three years since that stable version. I've just been making bug fixes on there, and then I spend most of my day doing other languages. So
Starting point is 00:33:13 I've just come up with a bunch of things, seen a bunch of things in other languages that I like, and I want to bring them back. So I don't, every time I would fix a bug in the stable branch of middleman, I would realize that this could have been solved. Like, I would have, if I had just used something from Haskell, if I just used something from Clojure, this would never have been a problem. So I think the biggest one for me is maturing as a developer and deciding that I actually
Starting point is 00:33:36 do like static typing. And, you know, all the loose typing of Ruby was a really big selling point when it was first coming out because people are coming out of the Java world and such. But you know what? Those things caught bugs. They caught bugs without writing tests. And I think being able to type your code, especially public code that other people are going to want to interact with as a public API is a really good approach. So I discovered this library about a year ago called Contracts, which uses a lot of metaprotogramming magic to wrap every single variable and every single method with a little wrapper,
Starting point is 00:34:14 and then you define what kind of things should go into the function and what kind of things are allowed to come out of the function, and this little wrapper will check them and throw exceptions if you're in dev mode or test mode. And so that just allows you to say, you know, there's a lot of places where in middleman and in Ruby, you say, here's a method, it's called, you know, I'm looking at one here, find, it could take a symbol, it could take a string, it could try to like turn those two into the same thing.
Starting point is 00:34:38 I could take a regex, you never know. And there's a lot of these kind of like open magical apis throughout rails in the ruby world uh i decided i didn't like that very much so i went whole hog with this contracts library and i added type information to every single um variable and definition uh inside of my middleman code and what that gave me was an insane number of uh reports that my test suite, my test suite of, you know, something like 4,200 tests didn't catch. Just like, then people were probably saying, oh yeah, like I know to put a symbol here,
Starting point is 00:35:13 they don't know to put a symbol here. And the amount of documentation they need to figure that out, it's just, they're never going to look it up. So that was like the first big refactor to Middleman 4. And it's completely, completely you know opaque to the user that's just for me so i can catch bugs earlier and so i feel a little safer when i'm working with this relatively large code base so that just begs the question uh you know you're basically adding like static type checking to ruby i guess why not just you know try a different
Starting point is 00:35:42 language yeah i mean that's just back to my stability thing. I mean, the roots are in the community. My contributors speak Ruby. The big rewrite is always a terrible idea, especially if you're switching languages. You might as well just start a whole new thing. That would have been a lot of work. It's not a tiny code base.
Starting point is 00:36:01 Doing a lot of weird stuff. I feel like if I could, I would maybe have rewritten it in Clojure, but then at the time getting Clojure up and running was kind of a pain. Nowadays, I think you can just run it right through Node, which is pretty cool. At the time, it wasn't the best
Starting point is 00:36:17 fit. There has been rumors of gradual typing being added to future versions of Ruby, so this may be a feature that I just switch to the official support if that comes down the road. I've never heard of this contracts library. Can you tell me where it's at or talk about it a bit? It's just called contracts.ruby.
Starting point is 00:36:37 It's a little hard to find, but it's, I think... It's got such a general name, it's really hard to search for. Yeah, so it's not really typing typing it's just designed by contract concept which is basically um lightly enforced types like things will still work it'll just be able to complain about it uh so i don't know where it came from but um the gentleman who runs it has started uh updating it a lot more recently and there's third-party contributors adding code to it now. So it seems like it's kind of getting a little popularity. I would never use it in production. The whole point of this thing is
Starting point is 00:37:10 it throws an exception during your test suite, not when someone's actually trying to use your code. Is this something that you've heard of, Jared? Well, I heard of it in March when I read his blog post, but I haven't heard of it elsewhere. Okay, gotcha. Yeah, so it's active. That's great.
Starting point is 00:37:26 When I was using it, it actually was inactive. It had just been like an experiment that someone had put together, so a little bit risky, but it's pretty easy to comment out. It's just every single one of these definitions starts with the word contract. It's a pretty easy search and replace to go back to the old buggy version.
Starting point is 00:37:41 I found I really enjoy it. I'm looking to decorators in JavaScript to add some more functionality on the JavaScript side so I can add some type information and have it copied to TestSuite. So Adam and I are in a bit of a unique position because we have a site which we use to generate our weekly newsletter,
Starting point is 00:38:02 Changelog Weekly, which is a Middleman 3 site. And we've also been working on a new site for our video series, Beyond Code, which is a Middleman 4 site, because I hopped on the beta because I like pain, I guess. It hasn't been too painful. A few things. And I can definitely attest to the fact
Starting point is 00:38:22 that this contracts piece is completely invisible to an end user, because I would have never even known about it had it not been for this post. One thing I have felt as an end user is you've also introduced a lot of immutable data structures. Can you speak about that? And then maybe I can give you a little bit of feedback from my perspective. Yeah, totally. Yeah, that also just comes from my experience in these kind of more functional languages. They tend to prevent a large class of bugs,
Starting point is 00:38:50 just because you're not doing weird loops and messing with your stuff. One bug we got a lot back in the day was we have this directory of data files, and there's YAML information in it. And so from the templating side, you can go ahead and say, you know, grab the first five people from this YAML file. And people would then go add another person to that array and then expect it to persist and also expect it to somehow sync back to the data side, to the actual file structure. And so one of the main reasons for going with, it's still kind of an experiment. I put in hamster, which is one of these kind of wrapper libraries. And so you talk about a hamster hash instead of like a native Ruby hash.
Starting point is 00:39:30 And what it basically does is it just doesn't give you methods to alter data that's not allowed to be altered, like this kind of static YAML data. I put like a lot of things in version four. I think I tried to refactor without touching the API to tools that I like a little bit more. That one is definitely the newest, and I've also run into surprises around it,
Starting point is 00:39:53 especially if you don't even know it's there, and suddenly it's throwing these crazy errors at you. So yeah, I would love to hear some stuff about that. I think that's trying to get people on the beta so we can flush this out, but that's going to be day one, 4.0 stable. There'll be probably 30 bug reports and try to get the messaging right around it, I think. Yeah, I think my experience is mostly around what you said when you don't even know that that's what you're working with. And it's kind
Starting point is 00:40:19 of like the uncanny valley where it's like it's almost an array or it's almost a hash until you find out that it's not. And the specific thing that I hit quite often is probably difficult to explain on air like this. But I am using the data directory. And basically what we have is a bunch of seasons of the show. And then each season has some episodes kind of nested inside of it. And in certain cases, I was trying to just flatten, so I was mapping over the seasons to get the episodes, and then flatten that into a single
Starting point is 00:40:53 array of episodes. And you can't flatten a hamster dataset, probably because it's immutable, right? Although with the flatten call column, I was trying to return a new one. Yeah, I should have just returned a new one. It really should have worked.
Starting point is 00:41:10 But yeah, that's a great callout. If it's not one-to-one with the native Ruby stuff, then that's definitely a problem. Unfortunately, the native Ruby API is expansive and editable. Yeah, so I'll take a look at that and see if they just got some missing...
Starting point is 00:41:27 It might just be an alias, right? Half the things on the Ruby hash and array libraries are aliases for three other things. It's kind of crazy. Right. Yeah, I guess it turns out we brought you on air just to bug report for you. The only thing more exciting than live coding is live bug reporting. Live bug reports everybody's here facts please yeah exactly now it has to get fixed right because it's on air yeah totally so you have okay so you got contracts um you know you're you're playing with uh
Starting point is 00:41:58 immutability and i think that's just a great point that you know when you have a beta and even yours has been in beta for a while now like you the point of a beta is for people to hop on and do the bug reporting but you actually don't get very many until you announce that you know that official release and then all of a sudden everything kind of just swarms in i wonder if there's like is there any way we can make that stuff can we fix that problem is there any way i don't know uh i don't know so uh this is kind of a tangent but there's a pretty good blog post i'll dig up the url for you later but it was you know always use uh simple tools and it kind of has this philosophy it's like you know shouldn't surprise you it should just be simple and get out of the way its way and do
Starting point is 00:42:39 its job and then you should go home so i don't know if i want to ask people to spend their weekends or their extra time sure making their work stuff work for my beta. And actually, I'm not entirely sure how smooth the upgrade process is going to be. We removed a lot of features. We removed redundant features. So we didn't remove functionality, but there might be a little bit of editing. So we'll try to figure out, you know, Ember, again, does a really great job with these upgrade guides. We're going to try to figure out a way to document and say, like, we expect this to take you an hour or two hours
Starting point is 00:43:13 so you don't just go down a rabbit hole trying to upgrade to this. So I find, just back to the conversation about kind of the weird Ruby style, and a related question around that is, you know, you have years and years of writing Ruby, you're obviously a JavaScript developer as well. And it sounds like you have some exposure to Clojure and a few other languages. So here we are, you know, mid 2015. And there's a lot of new and exciting languages kind of out there. Ones that are kind of capturing the hearts of many developers are things like Go. I think Rust is pretty exciting to a lot of people. Of course, the functional
Starting point is 00:43:50 languages like Clojure as well. Are you still bullish on Ruby after all these years, or are your eyes starting to wander into these other camps? You know, it just depends what kind of project you want to build. I would never, you know, Go and, you know, if you just want a straight, fast API to just crank out some JSON, Go is really good for that. If you want to build a web server, you know, Rust is probably really good for that. I would probably never build a web server in Ruby. That would be crazy.
Starting point is 00:44:20 So I think everything's got its place. I think Ruby still reigns supreme for mostly because of Rails. It's like I need a website. I need a traditional front and back end. And this is the most stable, most secure one you can probably get other than maybe some PHP stuff. But it's definitely the most fun to work in for that tradeoff. So I think it'll be in that space for a while. We still use it at work.
Starting point is 00:44:42 So, you know, it's not going anywhere. Yeah. All right. while um we still use it at work so you know it's not going anywhere uh yeah all right i i am i am opposite was the opposite of bullish bearish yeah i am bearish on javascript still so are you really yeah so i mean uh you know i don't i don't i dread the day when you know i just remember like you're on the plane and like the kiosk crashes with a Windows warning. I dread the day when I see JavaScript crashed and Chrome is my airplane warning. I think it's probably one of the worst languages we have to use on a reasonable basis. So I would go to Ruby for JavaScript in a lot of cases for similar tasks, like task running or exactly something like middleman.
Starting point is 00:45:28 So that leads me into the question about the front-end frameworks. So middleman seems like it could be a decent generator for an app that is an Ember or an Angular-based FAT client. Is that the case, or should you use their tools directly for these kind of things? That's a good question. I would probably just say use their tools. The Ember command line tool is really, really good. It's really, really focused.
Starting point is 00:45:57 And, you know, if you're not writing a ton of HTML, you know, we don't solve a lot of problems for you. And if you're all client-side, then we're not solving your routing or your file structure problems for you either. So probably use their tools. But where we succeed now and where we're seeing a lot of heavy usage is blogs, is large documentation sites, a lot of this kind of generated content from some other source. So you have a pile of markdown files
Starting point is 00:46:23 and you want a full localized documentation site. So people like Basho and Nest and a bunch of all these MailChimp build these large documentation portals kind of on middleman because they can just do a couple loops, do a couple templates and get these large, large sites out the side.
Starting point is 00:46:41 That said, I'm still trying to use it for my frontend work as well. So version four, probably the biggest feature that I use on a daily basis is this ability to run sub-processes inside of middleman. So basically what you say is, I want you to boot up the Ember CLI web server, and I want you to proxy from middleman to that. So if two-thirds of your site and all of your CSS is in middleman, then you at Ember return to JavaScript, and then we all just build this one cohesive whole.
Starting point is 00:47:12 So I've been using Webpack a lot, just because Webpack and Babel give me some nice tools on the front end to use modern JavaScript, and then that just fills kind of like the sprockets role in my middleman stack, and then everything else is still middleman. So we're experimenting with that. It seems to be working pretty smoothly. Any other major middleman 4 features?
Starting point is 00:47:32 I know a lot of it has been pulling out old cruft. Is there anything else that you're excited about for the new version? There's some light stuff. We switched to a Rails-style environment split. So before you just had, you know, are you building, are you devving? Now it's like, do you want to build for staging? Do you want to build for hotfix branch? Do you want to build for production?
Starting point is 00:47:54 So that gives a little bit more control for multiple environments, for testing environments, and, you know, using stuff like Travis to deploy builds that may be not ready to go into production. The other big one, I think, is moving all of our base templating stuff to GitHub. So before, you'd have to install RubyGem outside of Bundler, hope it's there globally, and then initialize it through Middleman. Now you just give it a GitHub path or any Git path,
Starting point is 00:48:21 and it'll just pull down that whole repo as your starter template for a new project, and then it'll just pull down that whole repo as your starter template for a new project, and then it'll run your custom code. So it's a lot more similar to something like Yeoman, where we let everyone manage their own stuff rather than having to go through our RubyGem pipeline. Do you think it's an issue, since you mentioned who might be using Middleman and what languages, we talked about languages and choices and whatnot.
Starting point is 00:48:47 Is the fact that Middleman is a Ruby gem, does that stop people from using it, those who care about languages? Is there competitors to Middleman and other languages that sort of make you think, man, they're stealing my thunder here? Yeah, I mean, the install setup story for Ruby has always been pretty hard. It's still really, really bad on Windows.
Starting point is 00:49:09 So, yeah, it kind of sucks. The tradeoff is this is a tool you use for work. It's important. It's going to save you time. So spend the 30 minutes necessary to get your RubyGems set up. But, yeah, that's not great. There's one in Go. What was that called, Jared?
Starting point is 00:49:29 We just talked about that. It's like a Hugo. It's like a Hugo, yeah. Yeah, big call, yeah. Super jealous of that because Go gets compiled to a single, or not single, but it compiles some multi-platform binaries. So you just drag this file on your hard drive and everything's perfect. Not going to rewrite for that, but that's a pretty cool feature.
Starting point is 00:49:46 And then now the ubiquity of Node gives something like Metalsmith or a couple of the other Node ones. It feels more natural for a front-end person to install those libraries now, or they probably already have Node installed. Because if your audience is a designer or a front-end person, then if you're coming from NPM, you're already in their world, basically. You're already in their tool set. There's no change there. I always wondered if Ruby would hurt you over time, considering that the people that are writing Rails apps typically aren't building middleman sites. I guess Jared's an anomaly, potentially, but it's typically somebody that's more of a front-end player than a back-end player. Right.
Starting point is 00:50:28 Yeah, I mean, anecdotally, I think a lot of people do come from Rails. And then we also have a lot of people who classify themselves as designers, but they can obviously code. And for them, they didn't pick a side on the language war, so they don't really care if they're installing NPM or Node or Ruby. I think just on the Windows side, I think Node's first class support for Windows from the very beginning was a huge boon for its adoption. I think that that served it really well. And I think Ruby's always had issues on Windows.
Starting point is 00:51:01 And, you know, there's been huge efforts to improve that, but it's always after the fact. It's kind of like a security practice. You can't just bolt security on afterwards onto your software. It has to be something that you think of from day one. And it seems like cross-platform support is another one of those things
Starting point is 00:51:18 that once you don't prioritize it early on, it's just really hard to get it right later. I think the Ruby community has probably suffered a bit from that. Yeah, as an aside, I just built a gaming PC for myself and I haven't been using Windows for about a decade now. I'm recently back in
Starting point is 00:51:36 the flow of everything on the Windows side. I can actually test bugs now. It's amazing. But everything sucks over here. I just try to install simple things and it's taking me like 15 clicks and I can't find the links. And like, I get why,
Starting point is 00:51:51 you know, it's just brew install. Node is so easy. And like that, unless without some support from Microsoft, that'll never be, you know, a thing you can do on windows.
Starting point is 00:52:00 So there's always going to be, I think a barrier, uh, just kind of unfortunate, but I would love to see better windows support from Ruby. That's a hard job. Sure it is, yeah. So I got some questions about the core team and
Starting point is 00:52:14 just how you formed the people that helped make Middleman possible. But to take a note from Jerry, we do have to take a quick sponsor break. So let's take that break real quick. When we come back, we'll talk a bit about the core team and start tailing into some of our closing questions which i'm sure that the internet is just dying to hear so we'll take a break we'll be right back i have yet to meet a single person who doesn't love digital ocean if you've tried
Starting point is 00:52:40 digital ocean you know how awesome it is and here at Changelog, everything we have runs on blazing fast SSD cloud servers from DigitalOcean. And I want you to use the code CHANGELOG when you sign up today to get a free month. Run a server with 1GB of RAM and 30GB of SSD drive space totally for free on DigitalOcean. Use the code CHANGELOG. Again, that code is CHANGELOG. Use that when you sign up for a new account. Head to DigitalOcean.com to sign up and tell them that Changelog sent you.
Starting point is 00:53:15 Alright, we're back with Thomas Reynolds, maker of Middleman. Been talking through quite a bit of history of static state generators, a bit of, you know, go love there where you're, I was trying to figure out a good way, you know, go love there. I was trying to figure out a good way to say that, but just like some impressedness, if that's a thing to say,
Starting point is 00:53:38 from you towards the Go community about the way they're doing things too. And I'm kind of curious on that note, before we go into the core team thoughts and whatnot but i'm curious if um if you were building a middleman today and it was ground zero what would you build it in that's a great question i would probably go is probably uh where i would build it and i actually i have some negative thoughts about go such as their dependency management requiring git which is a little weird but uh other than that, it's a really slim language, and their whole goal is to have one way of doing everything, and that kind of aligns with a lot of the frustration from Ruby of having three ways to
Starting point is 00:54:16 do everything. So I think it's a nice slim language, and its compile story to different targets is pretty nice. I also, as just a joy in coding, I really, really love Clojure. Clojure has always been this close to working on Node. I think it's actually done now. So the idea of just being able to, you know, npm install middleman or something, I get to write it in the language with the features I like.
Starting point is 00:54:39 Everyone else gets to use JavaScript for their configuration. I think that'd be pretty cool too. So I was thinking of a name while you were talking there. Go man could be kind of cool. Go man, go. Middle go. There's no good.
Starting point is 00:54:52 You're always trying to name things, Adam. I know, I know. So go man, go. I like that actually. So with a seven year history, I got to imagine that over these years, you've made some friends, those friends have become core team members, contributors. Can you talk a bit about the history or even highlight some people over the years that have helped make middleman possible that may not have gotten
Starting point is 00:55:15 recognition elsewhere? Totally. I have about four core team members now. I'm always looking for more, but it's a responsibility and it's not the funnest job to just be fielding bug reports or triaging. So Ben Hollis has been my partner for three or four years now. He is an engineer up at Amazon and his cycle basically works so that when he's on a middleman project, we're getting great support and great features and we're working together. When he's not, that's cool. I'm probably on one, so I'm also contributing features. But I don't expect year-round or even month-round contributions from people. Just having a little bit of backup and someone else to check my code and make sure I'm not making a huge mistake is completely amazing. Carl Freeman has also helped
Starting point is 00:56:00 out a lot. He's pretty big in the Node community, or sorry, not the Node community, the Ember community over in Europe as well. So he keeps me legit on making sure JavaScript doesn't get broken too badly. Let's see. Elliot Appelford has recently jumped in and he's also in the United Kingdom. He's a much better Rubyist than I. So he's able to answer with all these years back and experience a lot of my Ruby questions
Starting point is 00:56:27 to keep me again from suiting myself into foot. And he's doing a great job managing the GitHub and, you know, closing out things, reporting things as duplicates, all that kind of squishy stuff that can eat up a lot of time. And then recently we've had another contributor, Dennis Guntwig, don't test my German. He is a beast, and the pull requests coming out of him are amazing.
Starting point is 00:56:52 It's just like, holy cow, he did this in a weekend. So having actual large feature development done by someone other than me has been really, really great. And then everyone who's ever contributed to the documentation site is absolutely amazing. Let's see, there's been 113 contributors to core. And let's see, there have been... I'm not going to make this come up. There's just been hundreds and hundreds.
Starting point is 00:57:17 How many? 265 on middleman guides. Yeah, 265 people who helped with the documentation made everyone's lives easier. So they're all amazing and couldn't do it without them. So is everyone listed under org slash middleman slash people? Are all those contributors then or just only a few? Those are all people who have the commit bit. Yep.
Starting point is 00:57:40 Okay. So we don't have like, we don't have, we have a couple of email threads. We don't have like a core, you know, email group or anything like that. It's pretty light, but all those people have been making, you know, invaluable contributions over the seven years. Awesome. I want to make sure we link up to that page. So we'll, if you're listening to this, we'll link that link up as well as the
Starting point is 00:57:57 other individuals that, that Thomas has mentioned in the show notes. So the show notes would be, I think what what, changelaw.com slash 169. This is episode 169, Jared. I can't believe it, man. It's real. It's crazy, man. Believe it. But I guess, you know,
Starting point is 00:58:14 when we're talking about the people that have stepped up to help out and you'd mentioned your forum earlier to allow the community to sort of step in and you not be burnt out. You know, Jared, we've talked about sustaining open source on this show with Mike Perrin before and several other times in other episodes. But, Thomas, what kind of insights can you share that you've done over the years to guard yourself against burnout?
Starting point is 00:58:38 And maybe even a touch on that could be how you've fostered this community that's whether you've tried to or not, has come up around middleman. It's just, for me, I think just be nice to people. There was a whole raft of public GitHub spats on bug reports for
Starting point is 00:58:59 maintainers are yelling at contributors and just not. You can shut that stuff down. Same old normal people, soft skills. I get to use them. I'm a manager. I do it all day. So this is just managing random people on the internet, which is a little harder, but you know, be nice. Everyone will be nice to you. The Ruby community has always been nice. So I think that's mostly like, and once you have a, once you have this backup, once you have this community behind you, you know, you're not going to get mean emails in the middle of the night.
Starting point is 00:59:28 You're not going to feel as much stress, I think, about having to like, I don't know, constantly be working on this thing. For me, I check in like 9am first thing at work, do a little bug triaging. If there's anything horrible, I try to fix it on the spot, but then I don't think about it until the next day or until I get inspiration I find a new language feature I want to do then I'll do that on my own free time but it hasn't been 7 years of continuous
Starting point is 00:59:52 development, there's definitely these, like I said we've been stable for 3 years so it's just been little bug fixes and me exploring on my own, I think that exploring also helps me avoid getting burnt out or avoid just having this fear that I don't even want to look at my own. I think that exploring also helps me avoid getting burnt out or avoid just having this fear that I don't even want to look at my own code anymore. You have to nip that in the bud. You have to refactor
Starting point is 01:00:11 as soon as you start hating your own code. You can't just let it be there forever because it'll never go back. That's interesting. Like I said, we've talked about burnout several times on the show and it just seemed to me during the show that whether you've tried to purposefully or not, you've found something to avoid the burnout. And, Jared, we had that call on Curl, 17 years of Curl. I mean, that guy was like two hours a day, and there's a commitment there. On average. There's a commitment.
Starting point is 01:00:47 Yeah, on average, two hours a day for 17 years. That's like a long time. Yeah, it's incredible. And it seems like somehow you've found the secret to not getting burnt out. Yeah, that might just be my personality. I've also been at the same job for like almost five or six years now too just i don't know walk away you can always walk away you can come back just don't burn any bridges and just know i've always known that i intend to support this for the long term so you know again keeping myself from burning out is super important to that right
Starting point is 01:01:19 and when i said that guy meant daniel stenberg i always forget people's names i gotta go back on the list and look them up and not be offensive to people, but Daniel's pretty awesome. Shout out to Daniel. There was just that article going around by I forget what library he was a developer of, but he's giving up active development because there's no money in it
Starting point is 01:01:38 and try this evil eight. People are getting rich off his work and he's not able to work this as a full-time job. But I think it frustrates anyone at a high level in open source. So people are able to have such a crucial piece that they can monetize it through support or contracting or even these special feature levels. Kind of like Sidekick is a really good example. But yeah, so I like working. i do agency work because i like to
Starting point is 01:02:07 work so i like to be on the beach while people use middleman but i'm also probably just gonna go back to work the next weekend well now it's about the uh the time we turned it over to our super awesome ending show questions um the first question uh going to, do you want to take it or let me take it? Go for it, bro. So this is the easy one. Uh, maybe, maybe not. Easy one to answer or easy one to ask? Easy one to ask. It's always, it's always easy to ask, right?
Starting point is 01:02:35 Yeah. Uh, so Thomas, you've, you've been doing what you've been doing for quite a while. I can't imagine that over these years, you've, you've, uh, got a list of people, whether you've made it purposely or not, they're your heroes. Who out there in the programming world is your hero? Yeah, I think I mentioned, I mean, as a group, I think the Ember team has been spectacular. I think I really respect all those folks for, you know,
Starting point is 01:03:00 having a commitment to stability, having a commitment to documentation, and really guiding their community as like there's other bunch of shiny things around, just basically saying, you know, we're going to keep getting better and we're not going anywhere. Their documentation has been an example that I've tried to follow
Starting point is 01:03:18 and their community management is even way, way better than mine. So that whole team is absolutely amazing. Hudocats is a, you know, he's a Ruby master. They use middleman over there at Tilda, and I've just kindly asked that he never look at my Ruby for fear of the look of, yeah, I should probably just give up Ruby now and never do it again.
Starting point is 01:03:43 But that whole group is awesome. Very cool. Next up, we mentioned contracts. We mentioned Hamster. These are some Ruby gems that have kind of been not just on your radar, but in your toolkit lately. But if you had a free weekend and you were going to go hack on some stuff, what projects have you excited?
Starting point is 01:04:03 What's on your radar of cool open source projects that you want to check out? So I've been using Pixie.js which is a front-end library for doing 2D graphics in WebGL. I've been using that at work, been using it on the side and it's just this kind of flash-like layer that allows you to get back all kinds of amazing interaction and effects on the front end.
Starting point is 01:04:24 So I would definitely go throw together some kind of crazy 3D experiment. That whole project is open source, and that whole team is also doing a great job of moving their project forward. Very interesting. Pixie is the fastest kid in town, as they say. Yeah, it's amazing. Every single time I have to fight with a browser to animate like a square, I get super angry. I just want to throw the whole DOM and the whole browser out the window.
Starting point is 01:04:51 So if I can find refuge in WebGL or find refuge in a tool like that and pretend Flash still exists, that comforts me at night. Awesome. So for those out there that have listened to the show, you know, maybe they're like me and they've been following middleman for years or they're new and they just met you for the first time here on the show and they want to help out. They want to kind of dig in a little bit to middleman. What's what's a call to arms to the community, whether they're new to middleman or not new to middleman in ways they can step in and either look at version four or help out on the community? What are some ways to step in as the community can at version four or help out on the community? What are some ways to step in as the community can do, can do, uh, to help out middleman? Yeah. So I've always recommended, um, that people just write about it or talk about it, you know, tweet about it, write about, talk about it. Um, everyone's going to have a unique use case. They're going to have
Starting point is 01:05:38 a unique perspective and that all doesn't fit into the core documentation. So the more people, you know, I try to retweet, retweet, can't even say that word, retweet, as many blog posts as I can with these really interesting use cases. I'm always surprised. Sometimes I see like middleman extensions that I would have never ever imagined could be written. And it's really awesome to see.
Starting point is 01:05:58 So the more you can just Google your question and you get an actual answer or even like a Stack Overflow answer, the better it is for everyone. You mentioned mentioned extensions that's something we didn't really dive too deeply into the show about because this isn't a comprehensive show like here's what middleman is but maybe we could take a minute to mention the extensions the project templates and the different deployment options you you have i mean you've got tons of extensions there made by the community.
Starting point is 01:06:26 Some, I can imagine, are commissioned, some that are just there because somebody needed it. And then you can also search those extensions as well. So it's pretty easy to sort of limit down to some things you want. Like, let's say you want to deploy onto AWS, there's an extension for that. Yeah, absolutely. That was something, you know, even in the Rails days, like the ability
Starting point is 01:06:45 to have these plugins, these extensions was super powerful to take the load off the core team. So I tried to follow that example. One of my philosophies with middleman, which is pretty different from most static generators is we want you to write code. It may not be very complicated, Ruby, but at least you have all the tools and the power that code gives you to make your dreams real. We don't want to be like one of these generators that all you have is one config file or one JSON file and try to fit your entire stack, your entire pipeline to that really rigorous structure. So as part of that, we farm out as much information, as much API stuff as we can to the extension API. And that lets people do pretty much whatever they want.
Starting point is 01:07:27 They can hook into most parts of the process. They can replace parts of the process. They can hook into new project template generation. They can hook in and just, you know, add a single file to the page or to the site that doesn't exist. Like, you know, do an API request, get that bundled back, make that a static API resource here. There's all kinds of really good extensions because we've opened up as much Ruby access as possible to the extension libraries. Cool.
Starting point is 01:07:53 So yeah, some of the great ones, deploy, middleman deploy, which one of the core team members is actually the lead on. It will deploy to everything. You want to go to GitHub pages, you want to go to AWS, you want to go to any CDN, it's all built into that one package. But you don't have to worry about that. You don't even have to talk to an ops guy. You can just get your website on the line.
Starting point is 01:08:12 Very cool. I'm hoping that one's middleman4 compatible at this point. Yeah, so that's me slowly realizing that I'll go look at third-party extensions and be like, why did that break? In my mind, I made no breaking API changes. So Ruby makes it relatively hard
Starting point is 01:08:31 to keep certain things out of scope. So it's like, oh, I didn't realize that was a public method people were using. So I got to go through and either reopen a couple of those APIs for people and make them stable in public or work with the extension authors to figure out why they're not using what I see to be the canonical way to do the same thing.
Starting point is 01:08:53 Speaking of deployed, Jared, we mentioned a little earlier in the show when we were talking about Middleman 4 and, Jared, you were ranting a bit about immutable data structures and Hamster and some of the things you've hit with Middleman 4 in the efforts of building out our new site beyond code.tv um so for those out there listening now it's a brand new thing we're launching but we've been producing beyond code for a while it's a brief interview series we produce at conferences at the after parties and so the first one was at keeper be weird uh the second one was at space city js the third one was at gopher con and the first one was at Keeper Be Weird. The second one was at Space City GS.
Starting point is 01:09:26 The third one was at GopherCon. And the fourth one, Season 4, most recently was at your conference, Jared, NEGS. They're in Omaha, Nebraska, which was super awesome. So we've got four seasons in the can. We're about to launch BeyondCode.tv, which if you're listening to this right now, you can go there now, beyondcode.tv, check it out. It's probably days launched. So if there's any issues you see, report them on GitHub. It's open source on GitHub. Find a link on the site. I'm sure we'll link out to the GitHub repo because it'll be there. So if you find bugs, let us know. And as Jared mentioned also, we have been producing Chained All Weekly,
Starting point is 01:10:04 our weekly email, using Middleman for quite a while. And Thomas, you mentioned your affinity for Rake, and that's how you kind of got into Ruby early on. A lot of ChangeLog Weekly is a big old Rake task that works with the Trello API to allow us to use Trello as a CMS. So we've been using Middleman in some unique ways and obviously Reagan in some unique ways as well to boost both those sites. That's cool. But I wanted to say that before we close the show. So Thomas, thanks so much for coming on the show.
Starting point is 01:10:38 I mean, whether you know it or not, we've wanted to have you on the show for quite a while because we've had this love affair with your software for a bit. And it just would've wanted to have you on the show for quite a while because we've had this love affair with your software for a bit. It would make sense to get you on the show and talk about what you've been doing and version 4 coming out and a bit of your history in software development and open source. Is there anything that we missed, anything you want to say in closing before we wrap up the show? No, it's been great. Thanks for having me. I'm glad I haven't given you too many heartaches that's my number one fear is someone out there is cursing my name at all points in time as you
Starting point is 01:11:10 get popular so i'm glad it's been good for you guys and um hit me up if you have any main things well thomas thanks so much for joining us on the show to everyone listening thanks so much i mentioned beyondcode.tv check that out you find any bugs or anything like that let us know hit us up on get up for that uh also change law weekly that's a weekly email we ship out every saturday it it covers everything that jared and i and the rest of the team finds in open source every week everything from our latest episodes to the most cool headlines and links and repos that we find ourselves as well as our ping repo so Jared we have a ping repo as you know on github that we tell everybody to submit things
Starting point is 01:11:48 to so if you find something cool check out our ping repo it's slash the changelog slash ping submit something there to the issues we'll link it up in the weekly email and boom we'll go with the dynamite so changelog.com
Starting point is 01:12:04 slash weekly until Until next week, we will say goodbye for now, and I won't step on my foot today because not knowing who the guest is next week, I'm just not going to say it at all. We'll leave the show there. We'll say goodbye now. See ya. Thanks, Thomas.
Starting point is 01:12:21 Take care. We'll see you next time.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.