021 JSJ Weapons of Choice

by woody2shoes on July 30, 2012

Panel

Discussion

Picks

Transcript

AJ: For client side templating? I like Pure, which unlike Handlebars and Mustache uses CSS selectors instead of using what I call “stupid PHP-style bracket notation”.

CHUCK: [Chuckles]

AJ: If I wanted to use PHP I just use flippin’ PHP. But I don’t, because I hate it.

JOE: [Chuckles]

[This episode is sponsored by ComponentOne, makers of Wijmo. If you need stunning UI elements or awesome graphs and charts, then go to Wijmo.com and check them out.]

[Hosting and bandwidth provided by the Blue Box Group. Check them out at bluebox.net.]

CHUCK: Hey everybody and welcome to episode 21 of the JavaScript Jabber Show. This week on our panel, we have AJ O’Neal.

AJ: Coming at you live from the deserts of Orem, Utah.

CHUCK: Deserts? I grew up in those deserts. We also have Joe Eames.

JOE: Coming at you pre-recorded from a dirty basement.

CHUCK: Dirty basement. I like dirty basements. You should see ours; we have a “crawl space” in our house and it’s a crawl space that I can stand up in and not worry about banging my head on the ceiling.

JOE: That’s quite the crawl space.

CHUCK: Yeah exactly. [Chuckles] We’ve thought about digging it, down pouring some concrete and actually building out  a basement down there because there’s plenty of room and it wouldn’t take a ton of work.

I’m Charles Max Wood from devchat.tv and this week we are going to be talking about Weapons of Choice; just the tools that we use to manage our JavaScript — kind of wrangle it and get it in line.

So I’m a little curious, it seems like the thing that drives the most debate about weapons of choice is usually the text editor or IDE that people use. People get the most opinionated about that. What are you guys using?

AJ: So I use VIM with Syntastic and JSHint and iTerm.

CHUCK: Okay.

JOE: Wow.

CHUCK: How about you, Joe?

JOE: So, I use a lot of Notepad++ but I will occasionally because I’m working on .NET projects end up working inside of Visual Studio. In the past I’ve used WebStorm. I really liked that.

CHUCK: WebStorm? I don’t know if I’ve heard of that one.

JOE: It’s JetBrain’s web IDE. It’s really fantastic.

CHUCK: Okay. Cool.

AJ: We’d all have Tim to talk about…

CHUCK: Cloud9?

AJ: Cloud9 yeah.

CHUCK: Yeah. We should spend a whole episode on that. Oh, wait we did.

JOE: [Chuckles]

CHUCK: So, yeah I tend to use VIM. I like that Janus plugins. It’s just a set of plugins for VIM. There are few things that I’ve looked at but I haven’t really customized it all that much. I’m planning on picking up a book on VIM and just reading through it and learning all the stuff that I don’t know about it.

I started out as a sys admin and you can pretty much always count on some variant of vi being on the machine that you are on, so it just made a lot of sense for me to kind of learn it. And once I had the basics down on it, then from there it was just kind of a natural thing for me.

I do wanna point out that I have used Emacs and I actually really like Emacs, but it doesn’t… I don’t know, I just have a lot of muscle memory for VIM and so that’s kind of the way I went. But you know, Emacs is definitely a viable alternative.

AJ: So I just wanted to say that I am the slowest VIM learner ever. Every time we hire somebody new and get them started up with VIM, within a couple of days, they are teaching me stuff, right? Because there’s so much to them and everybody’s got something particular; like they wanna be able to see the line numbers or they wanted to jump ahead so many lines or they wanted to have a certain type of syntax highlighting or folding. So, like every [inaudible] something that’s most important to them and they figure out how to do that. And I found that like the very basic, basic, basic basics, just using hjkl since I’ve started doing that, which took me like 2 years of using VIM to finally do that instead of the arrow keys, but a lot better for my wrists. Just an FYI.

CHUCK: I always thought you were a little slow.

JOE: [Chuckles]

AJ: Thanks, Chuck.

CHUCK: [Chuckles] So, why don’t you talk to us a little bit, Joe, about what maybe Visual Studio or WebStorm give you that some of these basic text editors don’t and then we can talk about some of the plugins that do some of the same things or something like that.

JOE: Okay. So, one of the things that really annoys me about using Visual Studio is I have yet to find a linter that works for Visual Studio. So that’s a real big annoyance; so starting off with drawbacks. But another thing you absolutely need if you are going to do JavaScript inside of Visual Studio is one of the plugins that will handle the outlining in JavaScript. You know, that’s outlining and collapsing is just an absolute must — at least for me, when I’m working. I can’t build without it; more than a screen height of code and I need to have some outlining, so I can collapse things up and notice that. So if you are working in Visual Studio and you don’t have an outliner, it’s easy to find Google for it. It’s absolutely essential.

But the benefits I think of using Visual Studio over say just a plain Jane text editor is that Visual Studio has really made this… Visual Studio 2010 and I assume they’ll keep it up with the new versions is going to come out here soon is Intellisense that is actually looking at the JavaScript and actually giving you some fairly reasonable choices. I’d say about only 40% of the time am I annoyed by choices that don’t make any sense in the Intellisense, so just a little bit better half the time — which for me is actually worth it. And you know, it does a pretty good job looking at the JavaScript and understanding it and actually giving you choices.

And then refactoring is another nice thing where it will actually you can change variable names and you can extract variables and its really nice to have access to those sorts of features which is identical… that refactoring actually is through a ReSharper plugin. And so if you use WebStorm, you know the features there are actually really similar. So, when I went to WebStore and started using WebStorm, it felt a lot like using Visual Studio. It got a lot of Intellisense. Intellisense was really similar, and the refactoring that was available was actually really similar in WebStorm. So I really liked and felt comfortable in WebStorm when I went to it.

But I recently was watching some video of somebody doing some stuff in Angular with WebStorm. And after watching that, I realized I knew WebStorm like, not at all. This guy has his WebStorm so well configured and set up and doing things I had no idea you could do in WebStorm, so I was really impressed with that and made me want to go back and try WebStorm out again. So I was really impressed with that. So I think probably the one benefit is the Intellisense and refactoring. I guess that’s two benefits, right?

CHUCK: Yeah. A lot of the IDEs have that kind of stuff.  I know that JetBrains… Isn’t ReSharper their C# editor?

JOE: Yeah.

CHUCK: And then they have RubyMine which is their Ruby editor and it has a lot of the same JavaScript CoffeeScript stuff shipped with it.

JOE: [Laughs]

CHUCK: It has a lot of the same stuff; you know, the refactoring stuff and the Intellisense. And one thing I noticed is that in the past when I was trying to use it, it was actually a little bit slow. So if you were trying something else and decided that it needed to do the Intellisense to help you fill in whatever, your whole IDE would hang and you’d have to wait until it figured out what all the possibilities were and then it would give them to you. The nice thing is that now, they fixed that and so it’s actually reasonably fast and works pretty well most of the time. So I’ve been pretty happy with what JetBrains has put out.

JOE: It seems to me like JetBrains products are very cyclical; they come out with a version that’s really slow. ReSharper is a plugin for Visual Studio and so they came out with a version that’s really slow, really dogging down Visual Studio. And then the next minor revision of it will speed it back up again. So it seems to me like even though they produce — in my opinion — is some of the best developer tools out there, that they a problem with keeping performance up.

CHUCK: Right. But at the same time, I mean, some of the stuff that they have is just awesome.

JOE: Oh yeah. I could definitely… I would never do C# development without ReSharper — never.

CHUCK: Yeah so you kind of have that. And AJ, you mentioned that you were using some kind of lint plugin for JavaScript?

AJ: Yeah. So Syntastic is… I think you got to have Pathogen installed for it; because with VIM, pathogen is basically the module loader because whatever they built in isn’t modular enough for most people. So, Syntastic is just something on GitHub, where you basically Git clone it and then it goes into your .vim directory and automatically comes with a lot of stuff for different languages.

And for JavaScript, if you have either JSHint or JSLint already installed, then as soon as you go to :w to write save the file, it will refresh based on whatever options you have. So at the top of a file, you can put a block comment of /* JSHint or JSLint or and then things like, “eval true if you wanna allow eval” which you shouldn’t and I don’t why I even said that. Or lax comma or lax break so that you can do comma first if you do that style or you can concatenate strings with the plus operator on multiple lines, so  you’d give it somebody’s flag to tell it about your style and those are found one the JSHint and the JSLint documentation.

And then it gives you a little red squigglies, like spelling error type squiggly things underneath of whatever lines have syntax errors on them or style errors on them or in certain cases, logic errors; like if i = 0 for example would be a logic error because it needs to be, if i == or ===0. So stuff like that. And we’ve recently made a policy that’s everybody should be using one of these types of tools here because I can’t tell you how many times I’ve opened up somebody else’s code and found an error in their code that maybe hasn’t yet affected us, but it’s just a really simple error that Syntastic plus JSHint will catch pretty quickly.

CHUCK: Awesome. So you are using JSHint at work?

AJ: Yeah.

CHUCK: Now, are there different variations on the different lints or linters or whatever? The different styles that they are linting for?

AJ: JSLint is very strict… Oh, wow. The page for it just got a major update. And you know, Crockford is a very opinionated guy. That’s a great thing. It’s always good to have a leader who is a strong leader rather than a weak leader. So some of his options are called things like “stupidity”. So if you ever use a sync function, like read file sync in Node.js, if you don’t have this stupidity option checked, then it will complain at you.

The different between JSLint and JSHint is the strictness of the linter. JSLint is exactly Crockford style; if you want your whitespace differently than his style, then either you have to go and make sure that option is explicitly unchecked or last time I tried to do comma first, I couldn’t do it in JSLint and that’s why I switched to JSHint. They just have a different array of options for what’s considered bad style or bad syntax.

CHUCK: Right. And you prefer JSHint?

AJ: Right now, yeah. I can see myself going back to JSLint if he would allow comma first, because I think that JSLint is by default is very strict; whereas JSHint by default is a little more lax it seems, so some things you have to go and turn on manually. So I have a little bash file that  in kjs that I put in user local bin and every time I run that file and give it a file name, it prepopulates it with my JSHint parameters and then a function closure and then a strict statement, so that I get rid of some of that boiler plate.

CHUCK: Cool. Makes sense. So basically, its configurable stupidity? In JSHint it starts out saving from the most stupid stuff and then you can configure it from there and say, “I want these other options to enforce these other style positions or style… what you call them, style preferences.”

AJ: Yeah.

CHUCK: That makes sense. And I think I remember on the JSLint page you can actually — and I don’t know about the JSHint page — but you can actually put code in, tell it which options you really care about and then it will actually lint it on the page for you. But I like the idea of when you are try  and save it to have it lint your stuff.

AJ: Yeah. So all you have to do is NPM install dash g JSHint and or JSLint, and whichever flavor you like the most and then just make sure that every time you start a JavaScript file, just put in your standard header for what options you like on and off.

CHUCK: Right. Makes sense. So, what other tools do you guys use for your JavaScript stuff? I mean, if you are writing things on Node or anything else are there other tools that kind of give you a good feel for your code quality or help you make sure that it does what it’s supposed to do?

JOE: One of the things that I think should definitely be mentioned is important tool in the toolbox is Canary.

CHUCK: That’s Chrome Canary, right?

JOE: Yeah. Chrome Canary. Absolutely. I mean, all the additional features you get with it, the new stuff, that’s an absolute must. I’ve recently been doing a lot more in Canary and really found a lot of benefit out of it.

CHUCK: Yeah, I really like it too. It’s my browser of choice. I mean, sometimes, you get a little bit funky stuff going on but you know, it definitely works pretty well.

JOE: Yeah. I’ve been recently doing an Angular JS application and there’s an Angular plugin for Canary that makes it really nice for debugging.

CHUCK: Yeah. So, it has all the built in tools and really nice debuggers and stuff. Have you found that you’ve had to debug things in other browsers like Internet Explorer or Firefox or Safari?

JOE: At least for me, I’ll spend a little time possible in Internet Explorer. I don’t know why. It feels like Firefox is a debugger tool and Chrome… or Firefox’s is a developer tools, Chrome’s developer tools are very analogous; in one and you go to the other one, you don’t have to learn tons of new stuff. Maybe things are positioned slightly differently, but they just kind of feel like the same paradigm. The Internet Explorer, it’s like we come to that same Microsoft thing; we see that everybody else is doing, we have to do it but we have to do it really different, so they really know it’s us.

CHUCK: Yeah. I generally like if you are doing things in Firefox that you use Firebug.

JOE: Yeah.

CHUCK: I’m not sure. I’ve just used the built in tools when dealing with Internet Explorer and I’ve had to do that a few times just because there were something funny or weird with Firebug. But yeah, with Safari and Chrome, I just use whatever they have in the browser and Chrome’s tools which is amazing. They are just incredible, so.

JOE: So do you prefer Chrome over Firebug?

CHUCK: Yes. Absolutely. I mean, there’s just so much there.

JOE: I don’t know. I’m a little funny. I’ve used Firebug for a long time before I started using Chrome heavily for JavaScript development debugging and I still feel a little more comfortable with Firebug even though I don’t like how slow my Firefox gets compared to Chrome, I still feel a little more comfortable in Firebug.

CHUCK: Yeah. I can kind of see that. I mean, there are a few things where something I’ve used for a long time, the way I think about problems kind of lend themselves more to that tool, you know, moving forward even if I change tools and change approaches. I guess I could kind of see that. And there’s definitely a lot there in Firebug that you can do.

JOE: Yeah.

CHUCK: And they are consistently adding more features and making it better.

JOE: You know, there is a Fire Finder add in and it has been working for quite a while, but when it was working, I used that all the time. Especially for CSS, if I was doing any CSS work like CSS debugging and fixing, but that plugin was awesome and I haven’t seen anything analogous in Chrome or in IE.

CHUCK: Yeah. It looks like… I just looked it up, it looks like it works with Firefox 3.5 through 14.0. I’ll get a link to that in the show notes as well. Yeah, it looks really interesting. So, the other question I have — because we are talking about weapons of choice — is when you are building a webpage, what libraries do you tend to include?

AJ: So I’ve got kind of a standard set, which is probably a little bit different from what most people have. I started building a toolset called Steve tools. And I’m actually just going to… when I ran Steve in it, it just basically gives me a directory with browser server package.json in like all my common stuff already done and then some JS files already there, my JS hints and all that. And so, just a second… I’m going to look it up as package.JSON and tell you what I’ve got here.

So for Node development, most common modules that I use are Connect, a bunch of Connect  plugins for each async in sequence which I wrote. I use it all the time; they are the most useful of the asynchronous functions that I have.

Then for actually building the application, I use Jade and LESS and UglifyJS, which I’d actually like to be using Google’s closure compiler, but Uglify when first looked in the documentation which is a lot simpler and I haven’t gone back to use that instead.

And then I have a tool that is similar to Browserify called Pacmanager and so I use that as well to package all the different JSON files into one.

And let me see if there’s anything else… for client side templating, I like Pure, which unlike Handlebars and Mustache uses CSS selectors instead of using what I call “stupid PHP style bracket notation”.

CHUCK: [Chuckles]

AJ: If I wanted to use PHP, I just use flipping PHP — but I don’t, because I hate it.

JOE: [Chuckles]

CHUCK: Awesome.

AJ: And then instead of jQuery, I actually use Ender but it’s very, very similar. It’s the same API; it’s just you can get chunks of it. So if you don’t want all of jQuery, you can just get a few different parts of Ender. But I sometimes use jQuery too. They are kind of interchangeable for me.

CHUCK: Right. Interesting. How about you, Joe? If you are going to build or a website or front end, what’s your kind of attack plan?

JOE: Well, so my baseline for anything is jQuery and Underscore. I start out there, always. And then I usually am going to use some kind of… it’s a course website development, I’m going to use some kind of MVC framework. So unfortunately, I kind of feel like each of the major MVC frameworks, the most popular ones that are out there, they all have their advantages; they all have some fairly significant drawback, so I go back and forth between which of them I prefer to use.

Right now I’m doing Angular, tried Ember had some problems with that custobility, I’m starting new one on Backbone; so one of those. And then after that, I don’t know. For me, I don’t have a default set as soon as I hit that point, of course I try to usually use require, but I’m kind of plain I guess. Nothing fancy like AJ. AJ’s got all these really cool ones. He’s living on the edge.

CHUCK:  Yeah. Now, do you do much Node development?

JOE: No. I don’t do any Node development.

CHUCK: Yeah. Okay. So I’ve played with it a little, but I really haven’t done a lot either and if I’m dealing with JavaScript, usually I’m doing CoffeeScript and then I’ll pull in jQuery. Usually I’ll bring in Backbone which includes Underscore and that’s the basic level that I hit. I don’t use LESS or any JavaScript libraries for my CSS. I tend to lean more towards Sass or SCSS. And so, I like that what Twitter Bootstrap and some of the other ones give you, but I’ll just find a variation that somebody has made that fits into my CSS deal. So I’m not using JavaScript for any of that.

If I’m dealing with JavaScript templates, if I have the case for it… because sometimes, it takes way less time to just put something together in Rails and then have it kind of ship it out to the DOM or ship it up through Ajax, you know. So unless I have a really good case for it, I usually don’t use templates — JavaScript templates — but If I have like repeatable sections of code that all need events and stuff like that, then I’ll usually use Handlebars.js — which is something that I really enjoy using. It’s nice because it gets out of your way and its mostly logicless, so you just bind it to whatever you are using and then or whatever object it’s representing and then you just put it together like that. But I really want to dig in and try some of the other frameworks like Knockout and Ember; I just haven’t had the time. It’s kind of tricky to figure all that out. But Backbone is kind of my weapon of choice when it comes to the MVC frameworks.

JOE: So even though you do Backbone, are you not typically using Underscore’s templating?

CHUCK: I used it once. Those are the jst stuff, I think.

JOE: No. I’m not sure. I don’t think so. It’s just kind of an angled bracket type syntax that you can change the things I used double curly quotes if you want… or curly braces if you want. But it’s really minimal. It’s a really minimal templating language. It kind of feels like Handlebars without just paired down.

CHUCK: Huh. I’ll have to look at it. I don’t think I’ve used that then. There’s the JST which is the JavaScript Templates Engine. It felt kind of like ERB in Ruby to me. It was okay but it just… I really just didn’t feel like it gave me anything I need. I had more features that I really wanted it to have, and when I started looking at Handlebars, it just seem like the way to go because I could set up the templates and you know, it was relatively simple in the way that it allowed me to interact with my object. But I’ll have to look in the Underscore templates and see what’s there. I do really like Underscore though as far as all of the different collection functions and things like that. It’s really nice. You can get around a lot of things by doing that.

JOE: It is. Underscore is great and it’s underused; more people should definitely be using Underscore. It’s like jQuery; it makes your JavaScript just a lot nicer.

CHUCK: Yeah. Absolutely.

AJ: So, there’s actually a fork off of Underscore called lodash. Some people… they — what I feel — stupidly argue against Underscore. And I don’t use it as much as I should either, but they say, “Oh, well it has so much in it and all need is just the clock function,” which I mean a lot of times is true. And lodash actually has a build tool where you can tell it to exclude certain things or to include them, and so you can create a smaller build.

And it also… I don’t know, was it John David Dalton, I met him once at the conference. So he has got a personal vendetta something [chuckles] against the Underscore guy. And so he goes and he fixes all of the bugs — any bug that shows up in Underscore on the issues page, he fixes it. And then he puts in lodash and then marks it on his site here. And Jeremy doesn’t take any of his commits from what I understand. So if he fixes a bug, Jeremy won’t take it, just the fact that it’s him.

[Laughter]

CHUCK: Oh, funny, funny.

JOE: It’s too funny.

AJ: So it’s an interesting rivalry, but it looks like a pretty good alternative if you want something that can be a little bit lighter weight.

CHUCK: Yeah.

AJ: And it has all the bug fixes.

JOE: So coming from the .NET world, I’ve used linq for a long time, which is very similar actually to Underscore. So linq has collection manipulation DSL just like Underscore is. And one of the things that I found surprising is how many features, I feel like are missing from Underscore that are available in linq and nobody has bothered to put them in there. It’s has this first function, so you can graph the first element of a list, but it doesn’t take a filter inside of it so that you can grab the first thing that matches a particular filter.

CHUCK: Now its linq at .NET library or is it another JavaScript library?

JOE: Yeah. It’s a .NET library. So it’s only available inside .NET.

AJ: That’s the l-i-n-q?

JOE: Yeah. So, I think there’s a… I started using Underscore and I t really felt natural to me as a .NET developer because it was so similar to linq, but then I’m like, “Okay, I’m going to do a .first, I’m going to pass in a filter,” and it just didn’t work because I was so used to it in linq and I want to try and go do it in Underscore and it didn’t work. And it just felt like such analogous tools.

AJ: We’ll, couldn’t you do a .filter and then a .first?

JOE: Yeah, you can; which you can do the same thing in linq, but that’s kind of the point. In linq, it actually fits right in in the .first and it just feels very natural.

AJ: Well do this; go to the lodash page, create an issue about it. Or better yet, go to the Underscore page, create an issue about it and then see it in lodash week later.

JOE: Right.

CHUCK: Oh, wow. [Laughs] I love these programmer rivalries. So, something else you said AJ kind of brings us into another set of tools and that’s build tools, just because you mentioned that you can customize which parts of lodash go into your build so you can get a smaller build. What build tools do you guys use for your JavaScript?

AJ: So I did want to make a note that’s LESS, that’s CSS but the reason that I go with LESS is because all you have to do is take a CSS file, rename it to .less and then start progressively enhancing DSS.

JOE: So, question AJ, what about style less?

AJ: Style less, I haven’t used. I heard about it, but you know, sometimes it’s just because the tool I come up with first is the tool I end up using. But I am open to hearing about it. Tell me about it.

JOE: Well, I don’t know tons about it. It’s not available for windows development, so you can’t use it. I was looking through… we had a project that just had crazy CSS and we had to get a handle on it and so, I was looking at what alternatives are available for .NET unless its available as a… crap, I can’t remember the other one that’s really popular besides LESS.

AJ: Sass?

JOE: Sass, yeah they are both available for .NET. And so I saw Style less as I was looking around, and just read through their front-page and the documentation where they were showing some of the features and it was like, “Wow. It was like LESS plus a whole bunch of stuff,” was what little bit I got out of it and that was really impressive but it’s just not available for .NET.

AJ: This looks very similar to me to what LESS is, except that they’ve combined LESS with CoffeeScript, kind of.

CHUCK: Yeah. And to me, it looks a lot like Sass, except there are couple of minor differences.

AJ: it looks like it would be less compatible if you were doing LESS and you started using Style less, just from these examples here, if you not using any of the ninja features of LESS, which I guess is kind of why you use LESS. And the reason I actually started using LESS was just to lint the CSS — to make sure it was valid. Because if somebody get in there and add a bracket and of course the browser doesn’t tell you about an error that you have in your syntax and the CSS keeps chugging along. So originally, we used it as a lint tool for the CSS, not because of its features; and then we started using its feature, gradually.

JOE: So, something just occurred to me which is kind of a little bit about backtrack, but lodash, you know, Backbone requires Underscore. You can use lodash instead?

AJ: You should be able to. It’s API compatible.

JOE: Huh. That’s really cool.

CHUCK: Yeah. Are the two name space the same though?

JOE: They are just at the Underscore. They are all off the Underscore, so as long as they had the same API built off the Underscore, then yeah, that would work.

CHUCK: Huh, interesting. But then you would have to use either the full lodash library or at least  the functions that Backbone depends on.

JOE: Right. You have to figure out what Backbone depends on. So I actually had another question — especially for you AJ — it seems like you really like these tools. You  gravitate towards the one that will allow you to pick and choose use a build for the library and pick and choose just the features that you want. Do you ever… I’ve seen a lot of that. Back in the day, I used YUI, which had that feature into it. And I didn’t want to use it at the time, but now it seems like I might more. Do you ever feel like you are using the tool also features that you wanna use that you didn’t include in the original build going with you and rebuilding it out to include the feature that you want as just a hassle so you end up not using some little feature that you might have used. And it might happen over and over and over again, and you didn’t realize that if you’ve done it in the beginning, just grab that feature in the first time that you wanted it, do you ever get that situation?

AJ: No. I don’t really feel that it’s a problem. I mean, the build process is just something I expect. Because like a lot of people, they don’t like build processes, the more work the build process has, the worst it is. But to me, the build process is justified by the benefits primarily of linting. We don’t have any bad CSS because we use LESS. If there was a syntax error, it doesn’t build. We don’t have any HTML errors because we use Jade, which uses this CSS style syntax instead of the bracket syntax. So we use Jade that compiles to clean valid HTML, so we don’t have any errors there.

We use a JavaScript packer with two phase; one, that concatenates the file which is the thing I wrote, the Pacmanager. And then we use Uglify. So if there’s any sort of syntax error in the JavaScript that for some reason we ignore the linter as we saved and closed, again it won’t build. So I love having things not build if they don’t work. So that’s always more worth it to me than the convenience of not having to enter in another name in a array list of things to include.

JOE: So that’s actually really cool. But I actually meant to ask you  a different question.

CHUCK: [Laughs]

JOE: [Laughs] I was talking actually like tools like lodash, where you go and you get a build of lodash that only includes just the pieces that you want, right?

AJ: Yeah. So my answer still kind of the same in that, it doesn’t… like the build process doesn’t bother me.

JOE: Gotcha. If you start using lodash, you are only using a couple of features. There’s another feature you want to use and you didn’t put it in the build, you go back to lodash, you get a new build from them, it has the feature that you want. That doesn’t bother you doing that cycle?

AJ: Well, typically, because I don’t work with like gigantic sites, I don’t actually care that much about the science of things; I’m okay with it including it. But I like the idea that if I wanna optimize it later, I can. So I’ll air more on the site than including things that are don’t need.

JOE: Gotcha. That seems funny because you like lodash which there’s Underscore but you like lodash specifically because you can build to it. But you are saying that you, by default, you don’t actually take advantage of that. You just like having that feature available to you if you want it.

AJ: Yeah. And then the same thing with Ender, like I actually don’t use a lot of the features of Ender but then I just have some standard ones that I just pull in and maybe I use them and maybe I don’t, but it’s just I don’t know, it’s that mental thing.

JOE: So, this brings me to a gripe I have about the JavaScript in this development environment as a whole. I don’t know exactly how to describe… the JavaScript ecosystem. And that is that there not enough of these libraries out on CDNs, so that you can feel less guilty about including them in their full size on your sites. And by CDNs, I don’t mean some little crappy out in the corner CDN that you know, has less than one thousandth of one percent; I’m talking about like Google.

AJ: Well, I think that you are right. I also think that we kind of at the tipping point, if you will, where it’s something that’s definitely doable. NPM has gained such popularity and it will be really cool to see a CDN that just pulls in from NPM. And if your package.json specifies well enough either how you build the library or whatever, that it just yanks it in, that’s a really interesting idea. Hopefully somebody does.

JOE: Maybe my frustration or my anger really is directed specifically at Google because their CDN only has something like 10 different JavaScript libraries on there. They have jQuery and jQueryUI, which I will only use them off of Google CDN because of how widespread that is. But all there are other ones, Angular, Backbone etcetera, I feel like they should be up there on Google’s CDN and most of them aren’t.

CHUCK: So I’m going to interrupt things here really quickly. AJ said he has to leave pretty soon, so why don’t you give us your picks and then you can just drop off when you need to.

AJ: Okay. So, for picks; one, I’m listening to the Tipping Point, and it’s a pretty interesting book.

CHUCK: that’s by Malcolm Gladwell, right?

AJ: Yeah. And then I got a recommendation to read Outliers right after that or I’ll probably just get the audiobook because I can listen to it at work.

Also I’m going to pick Amazon Prime because when I chose two day shipping, I’m finding more and more often that they are getting it to me next day.

CHUCK: Yeah. I’ve noticed that too.

AJ: And when I pick next day on a few occasions and this is actually going overnight, so it comes next day in the morning. And I hear they have a secret plan like that, that the standard at some point in the near future. And then Arduino; so I started hacking a little bit in Arduino and it’s just way fun just to get blinking lights going.

Other than that, somebody on the user voice, one of the questions in the weapons of choice was what do you program to with music or headphones, and I say I like to wear headphones because it helps me be less distracted. And particularly like listening to Mario, Zelda and Final Fantasy remixes because it’s just so iconic.

JOE: [Laughs] That’s awesome.

AJ: So, I’ll listen to Spotify on that stuff and gets me in the mood, makes me more powered up, ready to program.

CHUCK: Awesome. All right. Well, let’s see… so you said that people are asking what the music and stuff that we listen to while we program?

AJ: Yeah. That was in the user voice thing; the second half of the paragraph, abstract topics like high desks, noise canceling headphones, your favorite playlist to code to.

CHUCK: Okay. So, let’s talk about music for a minute then. Joe, do you listen to music or anything while you code?

JOE: Yeah. So I’ve been contracting with Pluralsight for a couple of months and they are 100% pair shop, so actually I have been listening to music hardly at all, for the last month and a half. But when I do code on my own and listen to music, I actually took — I can’t remember who’s pick it was a couple of weeks ago — that it was Russian… waves?

CHUCK: It was probably Jamison’s pick.

JOE: Yeah. I can’t remember the name of the band now, but I really like programing to them, programming to the Star Wars soundtrack and then if it’s not that, it’s kind of like the heavy metal where I can’t hear the lyrics and can’t understand the lyrics.

CHUCK: [Laughs]

JOE: I like that too. I like stuff that’s a little bit more upbeat; so even the Star Wars sound track will be just a little bit too slow and I’ll switch over to something a little bit more upbeat.

CHUCK: It was Russian Circles.

JOE: Russian Circles, there you go.

CHUCK: It was Jamison’s pick. So I am a weirdo and I don’t actually listen to music all the time when I code. I actually listen to podcast.

JOE: That is weird.

CHUCK: Yeah, it’s kind of funny because a lot of people are like, “Well, how can you listen to a podcast and code at the same time?” I don’t know, I just do. And so a lot of times I’m not like fully engaged listening, I’m  just kind of letting it wash pass me and I just kind of pick up things as I go. But yeah, I really enjoy podcast and so there are quite a few of them that I listen t;  some of them are fun, some of them are informative, some of them are technical and so it’s just kind of my thing and that’s what I don’t when I’m listening.

And what I do is I actually have a pair of speakers that are sitting on my desk and they are like $5 speakers. They’re HP speakers; I’m not even sure where I got them. But I just plug my iPod into them and then I have my iPod plugged in to my computer and then as I listen to a podcast, I’ll just take it out of the playlist and put something else in. So yeah, I’m kind of weird there. If I’m out and about, then I’ll just use the cheap ear buds that I got from Wal-Mart, and so I just get the $10 ear buds. Because I’m pretty hard on stuff and so, if I destroy $10 ear buds, I don’t cry over it; [chuckles] I just get another pair. But sometimes I wind up going working out at a restaurant or at a café or something and when I do that, I need the headphones so that I can listen to things and manage things that way. And so that’s what I do and I have an old White MacBook that I wanna replace that I use when I’m out and about.

JOE: So I have a confession — a related confession — to make then; occasionally, I will actually watch soccer while I’m programing rather than listening to something else.

CHUCK: I could see that.

JOE: Yeah. It’s kind of the same thing; it’s not a lot of action all the time, so I just let it wash over me and when something interesting happen that can divert my attention. But I rarely do that and I only do that when I’m doing syntax programming. So, if I start getting into the zone, I’ll actually turn it off and turn music back on and really just code; but if I’m like doing configuration or something like that.

CHUCK: Yeah, did you watch that devastating soccer match on Saturday?

JOE: I did not. I was out of town. Thankfully, I didn’t have to endure it.

CHUCK: Oh, geez. Yeah it got to the point where they were like 10 or 15 minutes left in  regulation and RSO was down by five goals and I was just like, “Okay, I’m just going to skip along and if somebody scores a goal, then I’ll stop.”

JOE: [Laughs] Yeah, that was sad.

CHUCK: It was pretty sad. And I’m not going to go into my opinions on some of the things that went down during that game.

JOE: Long podcast for that.

CHUCK: Yes. But yeah, I could definitely see that. So yeah and then what were the other things that they were asking? As far as the desks go, I mean, I’ve got this  kind of… it’s basically a cubicle that I work at in my house; it’s in my house, which is kind of funny. A lot of people laugh because I really never worked in a cubicle until I was self-employed. [Chuckles] But anyway, I got a lot of desk space and stuff.

I’ve tempted to try standing desk, but I never have. We talked a lot about this on the Ruby Freelancer Show, and so if you want to kind of listen to that and hear us talk about our different configurations, you can do that. Some of the guys have standing desks and things and talked about what they like and what they don’t like about it.

JOE: Are any of them named Dwight Schrute?

CHUCK: No. [Laughs]

JOE: That seems like a Dwight Schrute thing.

CHUCK: I love the office. Oh my gosh. Yeah didn’t have like the super mega desk or something where he took the Jim’s desk and Pam’s desk and then he put his desk on top of it and was standing up working in his desk or something.

JOE: [Laughs] I remember him standing up at one point, I don’t remember the stacking the desks, but I do remember them standing up at one point.

CHUCK: Yeah. So, all of the antics on that show are just hilarious. If you’ve ever worked in an office especially a dysfunctional one, that show is so funny. I’ve worked on my share of dysfunctional ones.

AJ: So, I got to go right now. But just a note on that video game music real quick, Zelda re-orchestrated at ocr.rainwave.cc if you wanna listen to good game music.

CHUCK: Okay. Cool. We’ll get that into the show notes as well. Anyway, I don’t know that there are any other things that we have to put in here. What do you use for continuous integration, Joe?

JOE: So, I mostly use Team City. I really feel like in a windows environment it’s kind of best breed. I have one thing to say for the four .NET developers out there who are listening to JavaScript Jabber, [Chuckles] is if you are using TFS, it’s time to switch or change jobs.

CHUCK: TFS? What’s TFS?

JOE: Microsoft’s ci server/testing framework. It’s basically a super set of Visual Studio.

CHUCK: Yeah, Okay. My friends over at JetBrains will be happy to hear you say that.

JOE:  Yeah, definitely. Team City. Jenkins, works just a tiny bit with… so I don’t know too much about it. It seems like a really decent one, but I really like Team City; it’s easy to go and it’s free for projects that are small. It’s funny how big a project can be. I worked at corporations that had like 30 developers and still Team City’s free edition was actually plenty for what we needed.

CHUCK: Oh, that’s funny.

JOE: Yeah.

CHUCK: So I actually use Jenkins as my preferred ci setup. I’ve also used Cruise Control, which I’m trying to remember I think ThoughtBot or somebody put that one out. Cruise Control is fine. It kind of expects you to do a little bit more set up than say something like Jenkins. I haven’t actually used Team City, so I don’t know how to compare them, but Jenkins is pretty nice; it has a lot of plugins that allow you to do a lot of things with it and it works well with all different kinds of build setups, so if you have to build it and then test it or build it and then deploy it or anything like that, it has all that stuff built in.

Most of what I’m testing with it is Ruby and so, I just get all the Ruby plugins for Ruby and Rake and Rspec and stuff like that and just make it work that way. But, yeah it’s pretty nice, its open source. If you are on Ubuntu or Debian, you can actually get a deb package that will install it and run it on port 8080 and then you just set up your Apache to proxy over to the right port and you are good to go and all the instructions are on the website on how to do that and then you can actually set permissions for the different jobs. So for me, where I have several clients that are all using the same ci machine, I just set each client up with access to the proper project report and then my developers (my sub-contractors) get access to just the ones they are working on at the moment. So it’s got some nice access control and stuff built in to it.

I really haven’t had any problems with it. It runs on Java, which is just something to be aware of but I’ve only really had problems with Jenkins being Java when it ran out of… it basically pre-allocates memory space for itself and I’ve had it run out of memory space because I haven’t had a really large test suite or something like that, something to build process sucked more memory than Jenkins allocated to itself, and so what you do is you just give it different flags. You just use the flags to say, “Okay, well just grab twice as much memory,” or something and then it works fine. So I’ve been pretty happy with it. I’ve ran Jenkins on Mac OS and on Linux and its happy in either place. Another one that comes up sometimes is source control management. What SCM do you use?

JOE: So, Subversion or Git.

CHUCK: Subversion or Git?

JOE: Yeah.

CHUCK: I’m spoiled on Git. I can’t use Subversion anymore.

JOE: Really?

CHUCK: Yeah.

JOE: You know, been using Git really heavily for the past couple of months and I’ve asked this question several times to the other developers, especially some of the ones I pair with is like, “Okay, well we need to roll back versions. Crap, how do you do that?” And then he spends five minutes to put up command on how to roll back one particular file or something. I said to him several times, “How is it that Git got so popular?” You know? It’s a very powerful thing…

CHUCK: To roll back?

JOE: Yeah.

CHUCK: Oh, it’s not that hard. You just have to know the hash for the version you wanna roll back to.

JOE: Yeah I know. It’s a lot… the easy things… I mean, this are people that have been using Git for a while too. Easy commands, if you don’t  use them a lot, are easy to lose because it’s all command line.

CHUCK: Yeah. There are different tools out there. GitHub has a Git tool that you can get especially if you are hosting it, makes it really easy because you can manage all kinds of stuff with it.

JOE: Right. And we had that tool where we use is at and my understanding is after using it for a short while, it just didn’t cut it.

CHUCK: Yeah. It is still missing some features. I haven’t used it for a while. I’m pretty happy with the command line.

JOE: Right. It just seems like Git is very powerful. Like I actually told one of the guys that if we are comparing Git to TFS, which again if you use it… for those who are actually using TFS, you are using the wrong tool.

CHUCK: [Laughs]

JOE: TFS does source control as well. Git is like juggling chainsaws while you are nude.

CHUCK: [Laughs]

JOE: It’s very powerful…

CHUCK: You could lose an arm or something else? Is that what you are saying?

JOE: You could lose an appendix if you don’t pay attention to what you are doing. Whereas TFS was like trying to juggle while wearing a strait jacket and being trapped inside of a coffin.

CHUCK: Oh, geez.

JOE: You can’t do anything, right? You can even get your job done. So, I like Subversion. If I was just going to do a plain, simple project that didn’t have any real heavy branching requirements, I’ll probably use Subversion just because what Subversion is hard to do is do the really hard things like merging and branching, right? It’s hard there. But all the easy step is very easy and an idiot can it in 3 seconds. Git seems to be weighted the other way; it’s a little bit harder to pick up and just do the basics, but the hard stuff is actually a ton easier than it is in other tools.

CHUCK: Yeah. I don’t know. I mean, I learned Subversion first and then I moved over to Git. And Git is really my weapon of choice. I mean, just for me anyway, it just makes things a whole lot easier; but I’m branching and merging, you know, managing crap all the time and so, all of the things that Git does well, the things that I actually need on a regular basis. The other question I have for you is what software do you use to actually manage the projects, story, tasks, what have you.

JOE: So right now, we are using a tool — this is the first time I’ve used it I’ve been really impressed with –and it’s called Zen Board.

CHUCK: Zen Board?

JOE:. Yeah. Let me just pull that up and make sure I’m telling it right… yeah, Zen Board.

CHUCK: I feel the Zen.

JOE: [Laughs] Yeah. I’ll put a link for that. It’s a really cool, just very simple lists your stories and organize them. I really like using that. But in the past I’ve used Rally’s Tool.

CHUCK: What did you think of Rally’s Tool?

JOE: Sorry, when I said Zen, its Agile Zen. And so I’m going to put a link in there. What I think of Rally’s Tool?

CHUCK: Uh-huh.

JOE: I think that they were really targeting enterprises; so for small shop development, it was kind of an overloaded tool.

CHUCK: Yeah.  I looked at the Rally… I’m just going to look it up here so that I can put a link on the show notes for that as well. But for me, it was so overkill. It didn’t seem to be simple to do anything with it. [Chuckles] And so, it really turned me off that way. But I know a lot of people that use it and really like it, so I’m probably just not in their target demographic. Maybe it is more enterprise. I use Pivotal Tracker to keep track of my stuff.

JOE: Do you like that?

CHUCK: I do like that. I have a few concerns, but it’s more with the company than with the software itself. Pivotal Labs was purchased by EMC Corporation — as was one of my former employers. I wasn’t really impressed with the way they managed some of their acquisitions, and so I’m a little bit worried about where Pivotal Tracker will go as they continue to manage Pivotal Labs. And who knows? I mean, it sounds like they’ve been somewhat hands-off and so maybe things will continue to go well, I just don’t know. But acquisition is always kind of frightening a little bit when they acquire a tool that I’m using. I do know a lot of people in the Ruby community and in other areas actually, .NET and stuff use RedMine or ChiliProject — which is a branch of RedMine. And those are open source, so you can check that out at redmine.org. But yeah, so far it’s been Pivotal Tracker and I’ve been pretty happy with it.

JOE: So, to go back on what I said just a little bit, the one thing that TFS actually does pretty decent is story tracking and issue tracking. So I’ve used TFS in the past for that and they actually built a fairly decent tool around that. But I’d say, if you are shop that does onsite development, doesn’t do a lot of remote development. I think the best tool by far to use is a physical board. I think the electronic boards just don’t cut it. There’s a big difference. There’s just all the things you get out of using a physical board for tracking your stories and using physical artifacts. And a lot of people over look at because we are technologists and we look for technology to solve every problem we’ve got and, “Hey, what if I’m on the golf course and I really wanna see the status of the story?” So we need to have it in electronic format that I can access on my phone. And you know, we are kind of over… we are going after features we really don’t need. You know, I’ll be happy if I can get a spreadsheet like program like Excel — which I’ve used a lot in the past to track tasks — just to do a little bit better job at keeping track of notes.

CHUCK: Yeah.

JOE: If we can do that, I’ll use that for most of the development that I do — at least for small shop stuff. Couple of three guys, I would use something like that if I have to use electronic tools; if not, I’d use a physical artifact because it just… there isn’t a replacement for using physical boards and physical artifacts. You lose so much when you build an electronic one.

CHUCK: Right. So one other thing that I’ve used on different teams is having an IRC channel or an IRC chat or something like that. Have you used anything like that?

JOE: So I’ve used Yammer. You know, kind of similar vein at least and Yammer is actually really awesome. I’ve really enjoyed Yammer and found a lot of benefit out of using that. I think Microsoft just bought it, didn’t they?

CHUCK: Yes. They just bought it. I really like Yammer as well. Hopefully, like I said it’s the same thing with acquisitions kind of makes me worry a little bit. But you know, hopefully things stay in the right direction with Yammer.

JOE: Yeah right. And I’ve been benefit a lot from using Yammer; trying to get it in to some other shops that we are doing some off shore development to kind of increase the communication channels. So I really felt like Yammer was a big value and a big win.

CHUCK: Yeah. It was funny because I looked at it pretty early on when they are starting development and they were more of Twitter type clone and it didn’t make a ton of sense to me what they had, but I had somebody recommend it again to me more recently and I went and looked at it and they’ve really figured it out. They’ve got it nailed down. And it’s a really valuable tool for communicating with other people in your organization and maybe dispersed across different teams and stuff.

JOE: My one complain with Yammer is their pricing. I think for the small shops, sub-20 people that are also probably price sensitive, that their price offering is kind of out of whack.

CHUCK: Yeah I can see that. But I really like them. I’ve also used CampFire, which is a 37signals. It’s more of a chat thing. But it’s really kind of a cool tool and you can get bots to put in different channels and you get different information out of them and things like that. And so I know that GitHub uses one that they wrote called HuBot, that again just provides with a lot of information. And they’ve actually hooked up some Arduino boards to their office door and stuff and so you can tell HuBot opened the door and it will open the door and things like that. But you know, it’s kind of a different approach from Yammer, where Yammer is more of a social messaging and the IRC; CampFire more of a chat, more of an IM. So you know, whatever works for your organization.

JOE: Right.

CHUCK: Well, I can’t think of any other classes of tools that really affect team management or development practices or anything.

JOE: So, the one I’d like to cover really briefly, it would be training.

CHUCK: Training? Good one.

JOE: Yeah, I’ve been paying for my Pluralsight subscription for couple of years now and to me, that’s definitely a tool choice. There’s a couple of things that I feel like I can’t live without; for training for me, the big win was when I discovered Pluralsight, it really kicked on my budget on buying books. And they are pretty topical; they are drifting away from the Microsoft center now and coming out with a lot more widespread that got a lot of JavaScript courses that they are publishing. So that was a big one for me was Pluralsight — which is also a personal plug, since I work for them.

CHUCK: Yeah. I’m actually working on a course for them as well. So you know, I’ve looked through their offering and there’s a lot there. Another one that’s pretty popular, but they are more general is Lynda.com. And they have videos on programming; they have videos on all kinds of stuff.

JOE: Yeah. Lynda tends to stick more towards the introductory level stuff.

CHUCK: Right. And Pluralsight is not afraid to get into the deep grounds of things.

JOE: Right. And whenever I have to learn a new topic, like I had to pick up Angular; so one of the places I have to go is YouTube and finding videos or find videos about the topic I’m learning. I was watching Angular videos. And one of the frustrating things about YouTube is that the quality of the video varies so much. You can get one video that’s great and another one that is terrible. And the topics… you look at the video and they list what the topics are and you get in to the video, it turns out it wasn’t really at all about that.

So it’s really hard, you had to wait through a lot to find quality videos; where if you go to a service like specifically Pluralsight, you know exactly what you are getting. You know exactly what the course is about and you can see the outline and jump around. And there’s just a big difference to having that curated for content for looking at stuff.

CHUCK: Yeah, definitely. And then that’s one thing that’s really nice and is that yeah, the Pluralsight and Lynda I know both… they screen their authors and make sure that their quality is there. And as they are producing the modules for their video courses, again they are making sure that every step of the way things are up to that level. And so that’s really nice.

But there are definitely are some good videos on YouTube that are free and good places to look. And you can also just talk to you users group and people that you know that seem to have more expertise than you and find out where they get their training; where they learn certain things. And that’s been very helpful for me because then I’ve been referred to other websites that have the content that I want, that I don’t have to go hunt it down.

JOE: Absolutely. For a developers out there that, it probably wasn’t until about two years ago that I really made the shift, but for the developers out there that don’t turn to a video first, I would highly recommend that you start getting the habit when you need to learn something new, look for videos first. They are just a lot more effective than in reading articles or books.

CHUCK: Yeah. You get to see in action — which is really nice.

JOE: Absolutely.

CHUCK: All right. Well lets go ahead and wrap this up. Do you have any picks for this week?

JOE: Yeah. So a couple of picks; there’s a series of novels published — they are actually novelettes — and you can get them for I think $1 through Kindle a piece. They are Derick Storm Novels and if anybody is familiar with the show Castle, they are written by the fictional character who is the central character of the show Castle. So they’ve produced like 3 books now and these novelettes about Derick Storm. And the second one that’s just out and the third one is a trilogy that’s going to be out later on this august and they are fantastic, really good books. Kind of like Bourne Identity; very similar to Bourne Identity type stuff. And so the Derick Storm Novels, you can get on Kindle for $1.

CHUCK: Awesome.

JOE: And then the other one, my other pick is that brand new board game that just came out called Dungeon Command. It’s a D&D board game; and it’s a tactical, head to head game with miniatures but it’s not collectible miniatures, so you don’t have to spend a ton of money on it. And then if you buy the pieces, they are compatible with the Dungeons & Dragons board games that are dungeon color ones and Castle of Ravenloft and Wrath of Ashardalon. So you can actually use some of the pieces from this new Dungeon Command game in your other board games. So, those are pretty cool.

CHUCK: Sounds like fun. I played D&D way back in the day.

JOE: [Chuckles] Yeah. I’m too busy to play D&D but I’m not busy to play the board games.

CHUCK: Huh. I have to check it out. So my picks this week, since I mentioned podcast or what I listen to, I’m going to mention a few. One of them is the Wide Teams Podcast and it’s out up by Avid Grimm. He’s actually on the Ruby Rogues Podcast. And if you are a remote worker or is working on team, then Wide Teams is actually a really terrific resource.

Another one that I really enjoy is Stuff You Should Know. And that’s put out by the folks at howstuffworks.com I think. They cover all kinds of stuff; so they’ve talked about lightning and they’ve talked about… I mean all sorts of interesting stuff. The one that I have in my queue right now is how disco works, so [Chuckles] this should be interesting to listen to.

Another one that I really like is its put out by a podcast network called SQPN and that’s a network; its actually run  by a catholic priest, but he and another J. R. R. Tolkien expert, put out a weekly podcast or a semi-weekly podcast called Secrets of the Hobbit. And so they go over all of the news on the movies that are coming out and then they talk about like different aspects on the world of the Lord of The Rings. And that one is just really, really interesting; really fun to listen to. You know, it’s not really heavy on the religious stuff; he does mention sometimes, some of the principles some of the things that J. R. R. Tolkien might have been influenced by with his catholic faith, but 99% of it is just about the Hobbit and about the movies. It’s just the really fun to listen to some of the stuff that they find out there. And so they talk about pictures that they found, the videos that they found, and things like that. And so it’s a really cool one.

And then I’m  just going to plug one more it’s called PreneurCast. And I actually have their 62nd episode in my queue. They talk about things related to entrepreneurship and running a business, internet marketing — that kind of stuff. So if you are interested in any of that, then you can  go pick that up as well. Anyway, those are my picks this week.

I should plug one final thing since I really can’t move today; I did the first work out from P90X. I don’t know if you’ve heard of it. It’s 90-day workout regimen deal.

JOE: Yeah.

CHUCK: I did chest and back and now I can’t move my chest or back.

JOE: [Laughs] Awesome.

CHUCK: …or arms, for that matter. But anyway, it was quite the workout so I’ll put a link to that in the show notes as well. Beyond that, I don’t know that we have any announcements. So thanks for listening. We’ll be back next week!

2 comments

Previous post:

Next post: