JOE: Let’s see.
CHUCK: Ignoring it.
AJ: Yo, yo, yo, coming at you live from a west-facing basement in Provo, Utah.
CHUCK: Aimee Knight.
CHUCK: Joe Eames.
JOE: What’s up?
CHUCK: Jamison Dance.
JAMISON: Hi friends.
JOE: No, not according to Douglas Crockford.
CHUCK: That’s right. We should just make everybody feel dumb if they struggle with it.
JOE: [Chuckles] The answer is nothing and then it’s 30 minutes of silence while everybody that listens to the podcast is like, “Aww.”
AIMEE: [Chuckles] Aww.
JAMISON: This is what I’m doing in my head right now, is like, “Aww. I struggle.”
CHUCK: So, does anyone have anything they want to start off with talking about?
AIMEE: So, that feeling doesn’t go away.
JOE: No. This is 20 years in and it only gets worse. You do more things. As time goes by you start doing more things. And people expect you to know more stuff.
JOE: I will say that I met this guy who was an architect once, and he didn’t know who Martin Fowler was. And I got kind of upset.
JOE: So, if you’ve been in the industry for 20 years and you’ve been an architect, although I think it’s a stupid title, and you don’t know who Martin Fowler is, then I think it’s okay to be ashamed.
AIMEE: Wait, was I listening to, maybe it was Adventures in Angular, where you were saying that you feel that you should at least understand a little bit of the history? Or was that a different podcast?
JOE: I have said that.
JOE: A couple of times, probably on this one or that one.
JOE: So, sorry I just bogarted into an entirely different subject.
JOE: Jamison, what were you going to say?
JOE: Yeah, I’ll bet that’s 60…
JAMISON: Grunt and Gulp and Node.
JOE: 60 items.
JAMISON: Yeah, and IO and Angular and Ember and…
JAMISON: Bower and Webpack and Browserify and Sass. And there are just eight million billion things that you need to learn.
AJ: Jamison, you’re making it too complex. It’s just IO.js, Bower, and LESS.
JOE: Wow, what an arbitrary list.
JAMISON: Yeah. That’s…
JAMISON: You’re now number 21 on that list.
CHUCK: Okay, go build an app. Those are the only tools you get. Go ahead.
JOE: This is the exact opposite of an episode we had where we talked about the things you should know.
JOE: To be considered a senior developer. Remember that episode?
JAMISON: Yeah. Well, I want to go back in time and just scold myself and say, “You should know that you don’t have to know all the things that we say you have to know.”
JAMISON: That’s the main thing that you should know, that you can become an amazing developer by knowing only a handful of things that everyone is talking about, or that it seems like everyone is talking about.
CHUCK: I felt like we set the bar high for a senior developer. It’s like, look if you’re going to be a complete well rounded expert… but yeah.
JAMISON: But how many people really are well rounded experts in every frontend technology? There might be some.
CHUCK: No one?
JAMISON: Well, almost everyone that I know, even if they’re fantastic developers, are still very specialized in some specific technology. They just pick up new ones faster than other people. But they still are very focused on the ones that they’re using right then.
JOE: It’s really just Merrick Christensen. That’s the only one.
JAMISON: Yeah, yeah. He’s in a class of his own.
JOE: He’s [really the worst].
JAMISON: He knows everything about everything.
JOE: [Chuckles] Yes.
JAMISON: But I don’t. I know React. I used to know some other stuff and learning React pushed all the stuff I used to know out of my brain.
AJ: [Those were all] important.
JOE: The Sherlock Holmes brain theory. It’s an attic.
JAMISON: Yeah, yeah.
CHUCK: You would use a function. And you would get the wrong answer. And I don’t remember exactly how it went. But do you guys know what I’m talking about? It seems like it’s this classic example.
AIMEE: Yeah, I remember that.
AIMEE: Or it’s like the classic example of attaching a click handler.
AJ: I don’t know that example.
JAMISON: Yeah. You end up attaching…
JAMISON: You end up closing over the wrong data or something like that.
CHUCK: Yeah. And I know that it took me a while to really get my head around closures. Because most people come from sort of a more classical object-oriented or procedural language where functions aren’t a first-class language feature. And they don’t, they just don’t behave the way that you expect them to because you’re thinking, “Okay, this is a code block or an executable block.” Or you don’t realize that it’s actually doing that. And the funny thing is that in the other languages that I work in like Ruby and Swift, they are closures and they close over stuff. It’s just that for some reason, it’s not as dangerous.
JOE: Now, that just makes me feel dumb, this whole list. Because I know what an object-oriented language is and a procedural language and a functional language. But when you say an event-oriented language, I don’t get it.
JOE: Isn’t that like every UI technology like C# Windows forms and Java UI forms? And they’re all truly event… you load up and then you just sit around and wait for the user to tell you to do something.
AJ: I guess…
JAMISON: I think that’s more of a platform than the language.
CHUCK: Yeah, I was going to say. I’ve done event-centric programming with an event loop in several languages.
CHUCK: Yeah, but classes in that case are a way of managing basically data instantiation and managing behavior. And so, it’s just another place to put stuff.
JOE: You’re getting way meta on me.
AJ: That would be a great pattern. That is a good pattern to use. I’m AJ O’Neal and I approve of that pattern.
CHUCK: Yeah, but then you serialize and deserialize by extracting the data and then using the same prototype to rehydrate.
AJ: Yes, that sounds good. Yes.
JOE: Okay, time. I want to go back to closures. Aimee.
AIMEE: Well actually, I was just going to say from a new person’s perspective, that’s a very popular junior interview question. And prepping for my interview it seems there’s so many very technical answers to that question. And I feel like the best way to explain it or to understand it as someone new is to actually use it for information hiding. And that’s the best way that I was able to explain it, is by actually having a practical example.
JOE: Well, that’s the solution to everything, right?
JAMISON: Yeah, I guess yeah.
JAMISON: I guess Aimee solved it. Podcast is over.
JOE: Podcast over.
JOE: Besides, I think it’s way better than just present a whole bunch of problems and no solutions.
CHUCK: That’s right.
JAMISON: I do that at work all the time. It’s great.
CHUCK: No, it’s ugly because it has all that punctuation in it.
CHUCK: Says the Ruby guy.
AJ: I think that it is…
JOE: Hello, CoffeeScript.
AJ: A beautiful language. But it does have parts that are definitely [inaudible].
JOE: It’s one of those…
AJ: Hey, there’s nothing wrong with doing it in an efficient way that works.
JOE: [Chuckles] Well, jQuery is a great abstraction over the DOM. There’s no doubt about it. But there is value in knowing and understanding the DOM. And just having to constantly get onto the MDN and look up the DOM functions when I’m trying to do some DOM work, it just drives me insane. It makes me feel like an idiot.
CHUCK: Well, the issue that I have with the DOM is that if you look at the HTML, that’s what it derives the DOM from initially. But it’s actually another layer on top of that. It’s an object that, well it’s a document object mapping, is what I think it stands for.
CHUCK: Model. But basically what it is, is it’s an in-memory representation of what the HTML told it to be until something else told it to be something different. And so…
JOE: Yes. Angular 2…
CHUCK: So, it’s this abstract thing. You don’t actually… you know, yeah. And so, it’s not something that you can actually look at and quantify well. Even the developer tools aren’t perfect at telling you what’s there.
JOE: Right. So, Angular 2 is doing this thing where it’s embracing the actual DOM. And in your HTML you reference the DOM properties and not the HTML attributes, which I think is actually really cool. Because just even screwing around with it a little bit I’m learning more about the DOM than I would have known otherwise, just screwing around with Angular 2. Even though I’ve been working in the frontend for a long time and dealt a lot with the DOM. So, one of the really cool features I like about Angular 2 is you’re actually starting to work directly with the DOM in Angular 2 rather than the HTML representation of it.
JOE: Well, it’s not a performance… in this particular case it’s not a performance reason you do it. It’s binding. And the DOM is definitely slow. But I’m not… go watch Dave Smith’s talk about Angular and React. Angular 2 and React are pretty comparable on performance. But that’s, it really has nothing to do with the DOM, which is funny. It’s all about data binding that’s the reason that it’s slow.
CHUCK: The thing that’s interesting about it is that you’re then working at the abstraction layer that the browser is working at, as opposed to the markup which… anyway.
JAMISON: So, on the one hand you could say, “Well, why do you even have to know the DOM if stuff like jQuery or now libraries like Angular that…”
AJ: Or Node.
JAMISON: Yeah, well if you only do Node, then you probably don’t [need to know it].
JAMISON: But if you do frontend stuff, at some point something is touching the DOM. Otherwise nothing’s happening on your page. And it can be really useful to know what the abstractions you’re using use underneath. Because it can help you reason about what’s going on in weird situations. I think if you’re on the happy path and everything is working fine, and you’re not finding bugs because you’re the best and you didn’t make any, then you can get away with just using jQuery. But if weird stuff is going on, then sometimes it helps to be able to if not use the code, at least model what it’s doing in your head underneath.
So, I don’t know. I don’t think it’s the worst to not now the DOM APIs very well. But it can be helpful to learn them. I actually like it for doing demos that don’t depend on anything. If you’re just showing someone how to code a button or something, it’s really nice to not have to go to jQuery. You just add an event listener to a button. That’s neat.
AIMEE: I agree.
JAMISON: Me, too.
CHUCK: You’re talking specifically about the floating point stuff, right?
AJ: Yeah, just the inconsistency where you can add one to something and then it’ll actually not increment if it’s in that specific range of values that don’t increment above 32 bits. And floating point where if you subtract numbers you don’t get the mathematical value that you expect.
JOE: I just try to avoid using numbers in my coding. And then everything’s okay.
JAMISON: Yeah. [Inaudible], everyone.
AJ: I try to convert back and forth to integers.
JAMISON: I just type them out in English.
AJ: So, [inaudible]
CHUCK: I use Greek letters.
AJ: That’s an interesting idea for a big int library.
AJ: One hundred minus one…
JAMISON: Yeah, it’s like you’re writing a check.
AJ: That’s good.
JOE: Every time I have to do math, I make a REST call to a server I wrote in C and do the math there and then return the result.
JAMISON: That sounds real safe.
AJ: Is C actually any better at math?
JOE: I have no idea. [Laughs]
JAMISON: It’s faster.
JOE: It’s faster at math, that’s true.
AJ: Especially with the REST call. That’s an optimization technique.
JOE: I do all my math through bit shifting.
JAMISON: I do it all through HTTP calls. [It has] better speed.
JOE: For speed.
AJ: Not through bit shifting.
AJ: Not through bit shifting.
JAMISON: Is anyone going to talk about prototypes?
JOE: Why? They’re easy.
CHUCK: [Laughs] Yeah, sure.
JAMISON: Well, yeah. Yeah, I mean, that’s…
JOE: That’s what you meant?
JAMISON: [Inaudible] other version of it. So, the prototype chain is fairly straightforward. There are weird things with the magic underscore, underscore proto stuff.
AJ: Yeah, don’t touch that.
JAMISON: That’s different from the prototype that you use to create classes and I don’t know. Especially if you come from other languages, it can be a big hang-up for people. But it turns out you can get a lot of stuff done without knowing in depth all the ins and outs of prototypes.
CHUCK: So, here’s part of it that gets me hung up is the new keyword. I don’t quite understand what it’s doing when it’s assigning the prototype off of another function.
AIMEE: I have a blogpost that I used to learn this stuff. And of all the ones I read, I’ll have to link it in the show notes, it was incredible. So, I’d have to try to dig it out.
JAMISON: I remember one time I had to, I couldn’t call new on something but I had to fake like I did. And I can’t remember why. But that was the only time I knew in my head word for word what new actually did. I kind of forgot it now. But I knew it at one point, so that counts, right?
AJ: Have you ever had to add an asynchronous something or other into a constructor?
AJ: And then you have to rewrite the object and all the code around it because you can’t call new on it anymore.
JAMISON: Why not?
AJ: Because you can’t return the object because it doesn’t exist yet.
JAMISON: Oh, yeah you can. You just change it.
AJ: Well, but then you start using it and the async call hasn’t finished so it’s not initialized.
JAMISON: Yeah, you just have, I don’t know. I think it’s pretty common to have libraries that have, like when you create connections or something there’s a callback. And those might be using constructors underneath but they’re not returning to the callback outside of that until stuff is fully initialized. I think there are ways you can get around that.
AJ: Well yeah. Yeah, there’s definitely ways you can get around it. What I’m saying is if you have an object where initially for whatever reason it’s not, there’s nothing asynchronous about it but then for some reason you need to add some async call. And you were doing that logic in the constructor. You have to then move it out to an initialize function and then you have to return a promise or a callback or whatever on that initialize function, which then means that you have to change more code up the scope, [up the chain].
JAMISON: I think that applies to anytime you introduce asynchronicity where it didn’t use to exist though. It always bubbles up.
AJ: Yeah. So, I think the solution there is just always assume that every function’s going to be asynchronous. Then you never have a problem.
CHUCK: Speaking of asynchronous stuff, one thing that’s hung me up in the past is debugging it. So, just figuring out where something broke because it doesn’t bubble up the same way all the time.
AJ: A call stack?
CHUCK: And give you a stack trace that you can follow. Yeah.
AJ: JQuery, line 1.
AJ: Column 10,836.
CHUCK: Yeah, exactly.
AJ: Ajax return [inaudible] error.
CHUCK: Or even better, it’s on line 3 because it minified it.
AJ: No, it’s on line 1. You missed that. It’s line 1, column 13,002.
JAMISON: So, some of these things are still definitely problems. But they can be less of problems as tooling has gotten better. Chrome supports asynchronous call stacks if you check a little box in the dev tools. It’ll…
AJ: I need to check that box right now. [Chuckles]
JAMISON: Yeah, it keeps track. It still fails sometimes but I don’t know what causes it exactly. But it seems like it’s helped a lot in keeping track of the call stack.
AJ: Is it a performance issue? Is that why it’s an optional checkbox?
JAMISON: Yeah, yeah. They have to… I think it uses more memory because they have to keep track of more stuff. If you’re using source maps as well, then oftentimes the locations in code of the stack traces will be a lot more specific and easier to understand. If you use promises everywhere, then those can give you better stack traces as well. But also then you have to use promises everywhere. So, there are…
AJ: Which is good. That’s a bonus.
JAMISON: It’s a double-edged sword. So yeah, there are some solutions to that. But I still find times where either I don’t have access to any of those things or for some reason they didn’t work. And I don’t understand why. And then I just sit and think about what I’ve done and get sad. This is my punishment for creating a bug. I just have to sit here.
JAMISON: Try and debug it in my brain. [Chuckles] I don’t know. Yeah, so debugging asynchronous stuff, I think the way you get better at that is you use tools that help that, that make that easier.
CHUCK: I thought you were going to say, do more of it like we [inaudible] before.
JAMISON: Yeah, there are skills you can develop at it. But I think those skills apply to any kind of debugging. And the tools might be more helpful than the skills. Maybe not though. I don’t know.
AIMEE: Someone once gave me a really, and I think I read it on Stack Overflow, a really good example of, or a really good analogy for understanding that. And they explained it as you go into a restaurant and you don’t have a waiter who is servicing one table. The waiter takes your order and then he puts it into the kitchen and then he goes about doing other things. So, he’s just doing multiple things at once. I don’t know. That analogy really helped it stick for me.
JAMISON: Yeah, I like that one a lot.
AJ: So, I’m going to link in the show notes the canonical example of that which is the article ‘Your Coffee Shop Doesn’t Use Two-Phase Commits’. Yeah.
JAMISON: So, we’ve kind of moved onto talking about asynchronicity in general. Not just debugging it, but understanding it. I agree that that’s a huge hang-up for people new to programming and also people new to the asynchronous… wow, that’s a tautology. Asynchronous programming is hard for people new to asynchronous programming.
JAMISON: I don’t know. If you’re language blocked by default then it will throw you for a loop when you send off stuff to be done and then your code will happily continue on without waiting for it to finish.
AJ: I guess one of the things that helped me with the asynchronous stuff is the way that I came into it. I was working in Ruby when I discovered jQuery. And so, I did make rookie mistakes in jQuery with asynchronous stuff. But I was also, that was probably at the time that Event Machine was coming out and event loops in general were catching on all across the board. Python’s Twisted, Ruby’s Event Machine, whatever. Every language was getting one.
JAMISON: Doesn’t everyone in Ruby hate Event Machine though?
CHUCK: No. It’s not a tool that a lot of people use. But no, they don’t hate it.
CHUCK: They just don’t use it.
JAMISON: If you’re new to asynchronous programming, how do you learn it?
AJ: So, first…
JAMISON: Pain. [Chuckles]
AJ: Do an echo chat server tutorial in Python. Then don’t shoot yourself.
JAMISON: I don’t know. I think it can be valuable to do it the hard way. You can even say you should drop down to kqueue or epoll or whatever and do it in C. I don’t think you have to do it that way to learn it. And some people might be much better off by just learning it the easy way instead of having to learn it the hard way first.
AJ: So, you’re saying just jump straight into the Node example. Don’t look at…
JAMISON: Sure. Yeah, I don’t know.
AJ: Yeah. I don’t know. Sometimes people ask ‘why is this better?’ It’s so confusing for some people to learn how to do something the easy way when they don’t understand what the problem is. Does that make sense?
JAMISON: That makes a ton of sense. I felt that a lot lately, actually. I did SQL at the very beginning of my programming career but before I really knew what was going on. And I’ve been doing NoSQL for most of the time. And I’m coming back to SQL and it’s really…
JAMISON: It makes me appreciate the things NoSQL does and also makes me appreciate SQL a lot better. Because I know what the tradeoffs are in a way I didn’t before. And so, just yeah, you just stick a document in the store. You know why people wanted to do that and why some people hate it, too. I don’t know. I understand why people rage against NoSQL.
AJ: Well, it’s really a right tool for the right job kind of thing. NoSQL is the best tool for some jobs and SQL is the best tool for some jobs.
JAMISON: Anyway, sorry. That was a digression. It made me think of that, your points about learning stuff the easy way can sometimes shortcut some understanding about why it is the easy way.
JAMISON: We all want to do it the Java way.
CHUCK: That is the better way.
JAMISON: It is.
CHUCK: I know, right?
JAMISON: I wonder if people will ever not make that joke. I hope it continues forever.
AJ: Oh, it’s kind of frustrating.
JAMISON: It’s like comfortable now, a comfy joke.
JAMISON: Yeah. It’s really exciting but it’s also kind of exhausting. Because there’s cool stuff happening.
AIMEE: Yeah, yeah.
JAMISON: But also because I’m always, I just have this fear in the back of my mind…
JAMISON: That I’m trying to learn the wrong thing.
JAMISON: Or that I miss something cool. Or I don’t know.
JAMISON: It’s good and bad.
AIMEE: It is. it is. It’s totally good and kind of bad at the same time. I’m the same way. I’m just so excited to learn all the stuff. But then again, I need to have a little bit of a balanced life too. And it’s hard. [Chuckles]
JAMISON: [Chuckles] Yup.
CHUCK: I have another one I’m going to jump on, and that is Node in general, is kind of this… I’ve played with it. I’ve used it in my workflows. I’ve tried writing apps in Express. Not… I haven’t tried very hard. The thing that really gets me though is that I try and include an npm module and I guess I’m just used to Ruby gems. But npm, there’s a lot of stuff going on there that I just don’t completely get. And then on top of that, I think part of it’s because it’s both from the Ruby [inaudible] both Bundler and RubyGems in the same.
CHUCK: So, you can npm install and it pulls everything in, including the dependencies. But I’ve gone through dependency hell with it. And the other thing is that sometimes it pulls in libraries in Node that are browser-specific. And so, then I need some kind of virtual DOM or it just doesn’t work. Or it’s like, “No, this really was designed to run in the browser.” And I’ve gotten confused with that before, too.
JAMISON: So, I believe that that’s a problem. I’ve heard other people talk about it, too. I’ve never encountered this specific problem of using things in Node that are supposed to be used in the browser.
AJ: Yeah, I haven’t…
JAMISON: I’d love to talk to you more about that sometime.
CHUCK: Yeah, I haven’t run into it for a while. So, it might have gotten cleared up. But npm confused me for a long time before I kind of, “Okay. I think I know what’s going on here now.”
AJ: The nesting of the modules was a poor choice.
JAMISON: Those fighting words.
AJ: Well, no. I mean, a much clearer solution would have been root level, XYZ at 1.5, not six levels deep XYZ without a version number. That’s where the version hell is introduced. It solves part of Ruby version hell. But then it introduces a new type of Node version hell.
CHUCK: There are tradeoffs.
AJ: I think that we could have a perfect system. It’s just… eh. It didn’t work out that way.
CHUCK: Yeah. I mean, the nesting is problematic for some things. But knowing that I’m just going to use the version of whatever library that I included and knowing that it’s going to work instead of worrying about what version is installed globally, there are definite tradeoffs there.
AJ: Yeah. One of the things I don’t like about the nesting is memory consumption. And a lot of people don’t think about that, because they’re like, “Oh, it’s a server. I can just…”
AJ: “Fire up something with 64 gigs of RAM,” except for when you’re running on a Raspberry Pi. And then it’s actually important that you don’t have 54 different versions of the my_module
JAMISON: Man, I feel like I’ve just complained a lot in this episode.
AIMEE: You stole the words out of my mouth.
AJ: [Inaudible] It feels good to get out.
AIMEE: No context switching is awesome.
CHUCK: See, I haven’t found that to be a huge barrier for me. But…
CHUCK: I actually want to agree and just point out that when I tried playing with MEAN stack I went in with the expectation that Express was going to look at lot like Angular because people were saying, “Oh yeah, the frontend and the backend, they’re like the same.”
JOE: It’s so not.
CHUCK: No. It doesn’t work that way. And the other thing is it’s not straight vanilla Express from what I gathered. They do add a few more conventions so that it plays nicely with the frontend. And vice versa with the backend. So yeah, there was still a learning curve and there was definitely still context switching between the two.
JAMISON: You can’t argue with fun.
JAMISON: You can argue about technical stuff. But if you’re just enjoying it, I don’t know. No one can tell you, you don’t enjoy it.
JOE: Yeah. There are challenges but I like the challenges. And I like the fact that it feels a little bit like the Wild West. So many unsolved problems that you can solve. And it’s just fun to be here. It’s cool new things happening and I like that everybody was doing Gulp and Grunt and Browserify. And now a whole bunch of people are saying, doing Webpack and saying “This is the new cool thing.” And I just like that rapid change of pace. It makes me feel…
AJ: It definitely is a lot of iteration.
JOE: Yeah. It sure is.
AJ: And there’s a lot of good that comes out of that.
JOE: Yeah. This could be funny because somebody’s going to listen to this podcast in three weeks and be like, “Webpack? Oh my gosh, that was so long ago.”
JAMISON: I wonder if I’m just going to get fed up and be like, “I’m taking Webpack to my grave.”
JOE: That’s it. I’m going to learn Fortran.
JAMISON: I’m just an old fuddy-duddy now.
JOE: And I’m sticking with that.
JOE: I’m just going to stick with Fortran.
JAMISON: ES 7 for life. Who needs this ES 19 stuff?
AJ: No. Seriously, I’m sticking with ES 5. I’m taking a couple of things.
JAMISON: But yeah, that’s… yeah, we have one of those among us.
JOE: I’m going to do ES 5, HTML 4 and CSS. And forget the rest of it.
JAMISON: No, yeah. Okay, no, all the numbers have to go down. So, ES 5, HTML 4, CSS 3.
JAMISON: I think there’s a DOM 2. And then we need something with a 1 in it.
JAMISON: Yeah, yeah. Go [inaudible].
JOE: Backbone 1.0?
JAMISON: Backbone 1.0. That’s…
CHUCK: There you go.
JAMISON: And then we need a cool name for that stack and then it’ll catch on like wildfire.
AJ: It does seem to be a lot more about the name of the stack than the technology sometimes.
AIMEE: How is that…
JAMISON: Marketing’s important. I don’t know. That’s not bad.
JOE: Yeah, I was trying to think of some good acronyms for using RethinkDB instead of Mongo for some things that Mongo’s in the acronym like MEAN. And REAN…
JAMISON: What even is that?
JOE: RethinkDB, Express, Angular, and Node.
JOE: I don’t know.
JAMISON: I didn’t understand your question, so…
AJ: So, I have this…
JAMISON: [Inaudible] problem.
AJ: I type in var str = “I feel great today”. I want to turn that into an array buffer or a buffer binary or a uint16. I just want to get it to be some sort of binary. And I want to be able to take some sort of binary and turn it into a string. And more importantly, it can’t just be that string. It has to be a string that has a four-byte UTF8 character in it like the radioactive snowman.
JOE: [Laughs] Wait, you left me.
CHUCK: I’m lost.
JOE: I’m lost.
JAMISON: I think we’ll appeal to the audience to answer that one.
AJ: Back and forth between string and binary. That’s the question.
JOE: No idea. I don’t know.
JAMISON: I don’t know.
JOE: Avoid that situation.
AJ: Never had to do that?
JOE: Avoid it.
CHUCK: I’ve had to do it in Ruby.
JOE: Don’t do it.
JAMISON: [Chuckles] Just don’t do it.
AJ: Yeah, in Ruby you can do it, right?
JOE: Go to a real language and do it.
JOE: RPC call to a Java instance and do it there.
AJ: Well, sure. But how do I transmit the data over? Because I’d have to get it…
JOE: UTF… no, you encode it.
AJ: Like, do the backslash thing with the backslash ‘x’?
JOE: [Laughs] Just throwing out random crap now.
JOE: Alright. I want to…
CHUCK: You light it on fire.
JOE: I want to talk about something new. I want to talk about Jamison’s stack. Tell us what your stack is at your workplace, Jamison.
CHUCK: There’s a left turn.
JAMISON: Well, for now (who knows what it’ll be next week when new cool stuff comes out?), right now we’re using React. We’re using Koa, the Node framework. We’re using RethinkDB on the backend.
JOE: Okay. This is April of 2015. So, this is only valid for this week and next week.
JOE: But that is so the cool kids stack.
JOE: Like, we’re cooler than you stack. [Chuckles]
JAMISON: I think that’s how it was chosen.
JOE: This is like the stack that we chose this so we can look down our noses at everybody else.
JOE: Without looking down. We can just say, “Oh, well I’m doing Rethink, Koa, and React.” And everybody will be like “[gasps] Wow.”
JAMISON: It gets weirder.
JAMISON: So, we’re using Flow. And we’re using IO.js, not normal Node.
JOE: Of course.
JAMISON: Because it’s too [inaudible].
JOE: Are you using Webpack?
JAMISON: We are using Webpack.
JOE: Yes, yes. You restored my faith.
JAMISON: Yeah, we check all the current boxes.
JOE: That is so exactly what that is.
AJ: I’m pretty sure that Node is synonymous with IO.js now because you can’t get a current version of Node. So, it’s either IO.js or some two-year-old version of Node.
CHUCK: Wow, you’re just going to keep going after them for that. Aren’t you?
AJ: No, I just… IO.js is not weird or new. It’s just… we call it Node but it’s IO.js and that’s okay, kind of. I don’t know.
CHUCK: Alrighty. Well, let’s go ahead and do some picks. Aimee, do you want to start us with picks?
AIMEE: Yes. So, the first one that I was going to pick, there was a guy at the bootcamp that I went to who worked for Mozilla. And he would come and do talks. And he was absolutely awesome. And I just saw that he has an ES 6 blogpost series out. So, I know there’s tons of other information out there on this. But I just know firsthand that he was really good. So, I wanted to pick that one. So, I’ll include a link.
And then the second one, because we talked earlier in the show and I had talked to Jamison about this a couple of weeks ago. My second pick is cat strollers.
AIMEE: Because I am not a mom to a human being, I am a mom to a cat. And I absolutely love my cat. And I think my husband bought this as more of a joke. So, it’s a cat stroller. And the best thing about it is you can just go walking through your neighborhood and everyone comes over and says, “Oh, let me see your baby.” And lo and behold it is not a…
JOE: Wait, is it made to look like an actual stroller?
AIMEE: Yes, yes, yes.
JOE: Like fake people out, make them think it’s an actual baby?
AIMEE: Yeah. Yes, that is the best part of it.
JAMISON: That’s amazing.
AIMEE: Everybody gets so excited that they’re coming over to see your baby. And it’s a cat.
JOE: Does your cat stay?
AIMEE: Yes, he likes it.
JOE: There’s a net in there, right, that keeps the cat in?
AIMEE: Yes, yes, yes, yes. There is a net. And we actually have a jogging stroller because I like to run so much.
AIMEE: Okay. And then I just have to add one more thing. The best part of it too is, because this is more of a joke, not for real. We live in Baltimore and there are all these pigeon birds out all the time. And we live right by the water. So, we will take the cat in the stroller down by the water with some bread and [chuckles] put the bread on the bench. [Chuckles] And put the stroller up in front of the bench and then just walk back and wait for the birds to come in and watch [inaudible] reaction.
AIMEE: It’s priceless.
AIMEE: So, everyone…
JAMISON: That’s cruel.
AIMEE: [Laughs] Well, the cat can’t get… I guess it’s cruel for the cat.
JAMISON: Yeah, it’s cruel for the cat. I don’t know.
AIMEE: Because [inaudible] exercise his instincts and he can’t…
JAMISON: That’s fine. You can tell I’m a cat person because I’m like, “Who cares about those stupid birds?”
AIMEE: Anyway, so my pick is cat strollers. And if you have a cat, you should get a cat stroller. And that’s it.
JAMISON: That’s amazing.
CHUCK: I can just imagine somebody coming up, “You don’t even look like you were pregnant.”
AIMEE: Oh, that’s exactly it. People, you bring it out for spring and they’re like, “Oh, you had a baby.” I’m like, “No.”
JOE: I had no idea.
AIMEE: This is our furry son.
JOE: Did you adopt?
CHUCK: Yeah. And Aimee and I torture our kids. I get it.
JOE: I highly recommend that everybody listening google cat stroller pictures and just look at them.
CHUCK: Oh, no.
AIMEE: Oh, I have a link. I have a link.
JOE: It’s kind of like cheeseburger.
AIMEE: I have a link to Amazon for this, to the exact one we ordered.
CHUCK: I want to see what the Amazon reviews are for these things.
CHUCK: Alright. Joe, what are your picks?
JOE: Alright. I got two picks today. The first one is StarCraft II’s Legacy of the Void is in its beta phases and soon will be out. And I love StarCraft II as an e-sport. There was this player named Stephano who was a Zerg player and he was the most well achieved non-Korean player ever in StarCraft II. He retired a couple of years ago. And he’ll come back just a little bit. And so, he’s planning some StarCraft II Legacy of the Void videos. So, my pick is this double pick of Stephano and Legacy of the Void because Legacy of the Void’s awesome. And it’s bringing back lurkers which I think is totally cool. And Stephano is freaking awesome. So, that’s my first pick.
My second pick is because I just spent the weekend in New York for my wife’s birthday, we went to four Broadway shows while we were there. And the one that I saw that I really just absolutely loved was called ‘A Gentleman’s Guide to Love and Murder’. And if you ever have the opportunity to see it, I highly recommend it. I was laughing my head off the entire time. Great show. And so, that’ll be my second and final pick.
CHUCK: Alright. AJ, what are your picks?
AJ: Alright. So today, I’ve got good ones. So, first of all we mentioned a little bit there’s that article ‘Your Coffee Shop Doesn’t Use Two-Phase Commit’. I think it succinctly describes the issue of asynchronous programming and why event-oriented programming or whatever you want to call it because I don’t know if it has a legit name, is and why. Because computer in theory operate in-memory, but in reality we’re operating on things that are happening at times that we don’t know when they’re happening. And so, in-memory just doesn’t cut it. And that’s the article, explains the analogy of the coffee shop.
And OpenWest. OpenWest has been a pretty local Utah conference but then they changed the name to OpenWest. And they’re trying to get more people to come in to it, too. And it’s a conference that has 500,000 different tracks to it. So, there’s something for everyone. And it’s three days long. And if you just google OpenWest and get a ticket and come out and say hi to me, that’d be cool.
And I’m also going to pick another Utah thing, 801 Labs. They have this… and I’m sure there’s hackerspaces in other areas that do this, but they just have a couple of free classes a month. And then they have a day where you can just come in and work from the hackerspace. And so, I was just burnt out from the work I was working on. And so, I went in to the hackerspace and did stuff that was just not really super productive. But it was fun. And this other guy, we were working together reverse-engineering something. And it was just fun. It was a nice break. So, if you have a hackerspace in your area that does some sort of casual Friday or casual Monday or whatever and you can work from there, try it out sometime.
And then lastly I will pick Stack Overflow Careers, because sometimes people ask you for a resume and you’re like, “Ugh. It’s the GitHub age, duh.” And so, instead of actually keeping up a resume I just use Stack Overflow Careers. And occasionally I update that. And if they want the pdf because they must have a pdf, they can just click the button and then it’ll give them the pdf. And I don’t have to do anything. And I like that.
CHUCK: Alright. Jamison, what are your picks?
JAMISON: I have two picks. My first pick is I play a lot of Dota 2. When the new Dota 2 patches come out it’s like a whole new game. And people get really weird. It’s a changelog, right? You see software changelogs all the time. But it affects the game in all these minute ways. So, new patches come out and then people spend hours trying to digest them to figure out what it means and what the new secret powerful combination of heroes and items is and stuff. So, my first pick is the new 6.82 patch.
My second pick is a podcast called Beats, Rye & Types. It’s by a couple of people that do a lot of stuff with distributed systems. But it’s not about distributed systems. It’s kind of about the intersection between some kind of humanities topics and computing. They talk a lot about, for example they had an episode about learning. And they talked about learning to cook and learning to code, and the intersection between those two and how their experiences crossed over. They had an episode with the CTO of Rent the Runway Camille something, I forgot her name. And she’s an expert on this distributed system that does this thing called Consensus which makes different computers agree on stuff basically. But she’s a manager too, so they talked about the computing idea of consensus and also the idea of consensus in teams. And how you get teams to agree on things and do things together. And it’s really well done. It’s kind of short but it’s also from a perspective I haven’t seen a lot before.
So, just another reminder that React Rally is happening in August. It’s a React.js conference. It’s going to be in Salt Lake, August 20-something. If you go to ReactRally.com then there will be either a landing page or a website describing the conference depending on when you go there. So, sign up for the mailing list to get more info or check out the site to get more info as well.
JAMISON: Those are my picks.
CHUCK: Alright. I’ve got a couple of picks. The first one is JS Remote Conf talks are up and public. They’re on YouTube. I’ll put a link in the show notes for the playlist that has all the talks in it. So, go check them out. Each talk is about an hour long. And they were awesome. I will warn you. If you go look at the schedule, I haven’t updated it. If you look on the JS Remote Conf site, so one of the talks is me instead of whoever was supposed to be there because they didn’t show. But yeah, they were great talks. We had everything from marketing yourself with John Sonmez. We talked to him a week or two ago. I did an intro to freelancing. Jessica Kerr talked about complexity being outside the code. And then we had a whole bunch of fun ones. We actually had a Q&A with the Angular Remote team. We had Craig McKeachie talking about MV* frameworks. Brad Midgley showed off his cars where he used Firefox phones to drive them around. Aaron came and talked to us about ES 6. So, just a lot of stuff, WebRTC which I need to go watch again. So yeah, so come check it out.
And then the other pick I have this week is Workflowy. I’ve been trying all kinds of different to-do lists. I used OmniFocus for a long time. And then I just faded off of it. And so, I’ve been playing with some other things. Workflowy is kind of an outline/to-do list. And so, you can actually mark things off in your little to-do list. You can collapse them and show them and stuff. And I’m really enjoying it. I think the pro version actually allows you to share parts of your outline with other people. So anyway, go check it out. It’s workflowy.com. And yeah, that’s all I’ve got for picks.
That was a lot of fun, guys.
JAMISON: Yeah, thanks.
CHUCK: Let’s wrap it up and we’ll catch everyone next week.
[This episode is sponsored by MadGlory. You’ve been building software for a long time and sometimes it’s get a little overwhelming. Work piles up, hiring sucks, and it’s hard to get projects out the door. Check out MadGlory. They’re a small shop with experience shipping big products. They’re smart, dedicated, will augment your team and work as hard as you do. Find them online at MadGlory.com or on Twitter at MadGlory.]
[Hosting and bandwidth provided by the Blue Box Group. Check them out at Bluebox.net.]
[Bandwidth for this segment is provided by CacheFly, the world’s fastest CDN. Deliver your content fast with CacheFly. Visit CacheFly.com to learn more.]