rip

JSJ 331: “An Overview of JavaScript Testing in 2018” with Vitali Zaidman

Panel:

Special Guests: Vitali Zaidman

In this episode, the panel talks with programmer, Vitali Zaidman, who is working with Software Solutions Company. He researches technologies and starts new projects all the time, and looks at these new technologies within the market. The panel talks about testing JavaScript in 2018 and Jest.

Show Topics:

1:32 – Chuck: Let’s talk about testing JavaScript in 2018.

1:53 – Vitali talks about solving problems in JavaScript.

2:46 – Chuck asks Vitali a question.

3:03 – Vitali’s answer.

3:30 – Why Jest? Why not Mocha or these other programs?

3:49 – Jest is the best interruption of what testing should look like and the best practice nowadays. There are different options, they can be better, but Jest has this great support from their community. There are great new features.

4:31 – Chuck to Joe: What are you using for testing nowadays?

4:43 – Joe: I use Angular, primarily.

6:01 – Like life, it’s sometimes easier to use things that make things very valuable.

7:55 – Aimee: I have heard great things about Cypress, but at work we are using another program.

8:22 – Vitali: Check out my article.

8:51 – Aimee: There are too many problems with the program that we use at work.

9:39 – Panelist to Vitali: I read your article, and I am a fan. Why do you pick Test Café over Cypress, and how familiar are you with Cypress? What about Selenium and other programs?

10:12 – Vitali: “Test Café and Cypress are competing head-to-head.”

Listen to Vitali’s suggestions and comments per the panelists’ question at this timestamp.

11:25 – Chuck: I see that you use sign-on...

12:29 – Aimee: Can you talk about Puppeteer? It seems promising.

12:45 – Vitali: Yes, Puppeteer is promising. It’s developed by Google and by Chrome. You don’t want to use all of your tests in Puppeteer, because it will be really hard to do in other browsers.

13:26: Panelist: “...5, 6, 7, years ago it was important of any kind of JavaScript testing you had no idea if it worked in one browser and it not necessarily works in another browser. That was 10 years ago. Is multiple browsers testing as important then as it is now?

14:51: Vitali answers the above question.

15:30 – Aimee: If it is more JavaScript heavy then it could possibly cause more problems.

15:56 – Panelist: I agree with this.

16:02 – Vitali continues this conversation with additional comments.

16:17 – Aimee: “I see that Safari is the new Internet Explorer.”

16:23: Chuck: “Yes, you have to know your audience. Are they using older browsers? What is the compatibility?”

17:01 – Vitali: There are issues with the security. Firefox has a feature of tracking protection; something like that.

17:33 – Question to Vitali by Panelist.

17:55 – Vitali answers the question.

18:30 – Panelist makes additional comments.

18:43 – If you use Safari, you reap what you sow.

18:49 – Chuck: I use Chrome on my iPhone. (Aimee does, too.) Sometimes I wind up in Safari by accident.

19:38 – Panelist makes comments.

19:52 – Vitali tells a funny story that relates to this topic.

20:45 – There are too many standards out there.

21:05 – Aimee makes comments.

21:08 – Brutalist Web Design. Some guy has this site – Brutalist Web Design – where he says use basic stuff and stop being so custom. Stop using the web as some crazy platform, and if your site is a website that can be scrolled through, that’s great. It needs to be just enough for people to see your content.

22:16 – Aimee makes additional comments about this topic of Brutalist Web Design.

22:35 – Panelist: I like it when people go out and say things like that.

22:45 – Here is the point, though. There is a difference between a website and a web application. Really the purpose is to read an article.

23:37 – Vitali chimes in.

24:01 – Back to the topic of content on websites.

25:17 – Panelist: Medium is very minimal. Medium doesn’t feel like an application.

26:10 – Is the website easy enough for the user to scroll through and get the content like they want to?

26:19 – Advertisement.

27:22 – See how far off the topic we got?

27:31 – These are my favorite conversations to have.

27:39 – Vitali: Let’s talk about how my article got so popular. It’s an interesting thing, I started researching “testing” for my company. We wanted to implement one of the testing tools. Instead of creating a presentation, I would write first about it in Medium to get feedback from the community as well. It was a great decision, because I got a lot of comments back. I enjoyed the experience, too. Just write about your problem in Medium to see what people say.

28:48 – Panelist: You put a ton of time and energy in this article. There are tons of links. Did you really go through all of those articles?

29:10 – Yes, what are the most permanent tools? I was just reading through a lot of comments and feedback from people. I tested the tools myself, too!

29:37 – Panelist: You broke down the article, and it’s a 22-minute read.

30:09 – Vitali: I wrote the article for my company, and they ad to read it.

30:24 – Panelist: Spending so much time – you probably felt like it was apart of your job.

30:39 – Vitali: I really like creating and writing. It was rally amazing for me and a great experience. I feel like I am talented in this area because I write well and fast. I wanted to express myself.

31:17 – Did you edit and review?

31:23 – Vitali: I wrote it by myself and some friends read it. There were serious mistakes, and that’s okay I am not afraid of mistakes. This way you get feedback.

32:10 – Chuck: “Some people see testing in JavaScript, and people look at this and say there are so much here. Is there a place where people can start, so that way they don’t’ get too overwhelmed? Is there a way to ease into this and take a bite-size at a time?”

32:52 – Vitali: “Find something that works for them. Read the article and start writing code.”

He continues this conversation from here on out.

34:03 – Chuck continues to ask questions and add other comments.

34:16 – Vitali chimes-in. 

34:38 – Chuck. 

34:46 – Vitali piggybacks off of Chuck’s comments.

36:14 – Panelist: Let’s go back to Jest. There is a very common occurrence where we see lots of turn and we see ideas like this has become the dominant or the standard, a lot of people talk about stuff within this community. Then we get this idea that ‘this is the only thing that is happening.’ Transition to jQuery to React to... With that context do you feel like Jest will be a dominant program? Are we going to see Jest used just as common as Mocha and other popular programs?

38:15 – Vitali comments on the panelist’s question.

38:50 – Panelist: New features. Are the features in Jest (over Jasmine, Mocha, etc.) so important that it will drive people to it by itself?

40:30 – Vitali comments on this great question.

40:58 – Panelist asks questions about features about Jest.

41:29 – Vitali talks about this topic.

42:14 – Let’s go to picks!

42:14 – Advertisement.

Links:

Sponsors:

Picks:

AJ O’Neal

Joe Eames

Aimee Knight

Chuck

Vitali




rip

JSJ 332: “You Learned JavaScript, Now What?” with Chris Heilmann

Panel:

Special Guests: Chris Heilmann

In this episode, the panel talks with programmer, Chris Heilmann. He has written books about JavaScript, in addition to writing a blog about it and is an educator about this program.  He currently resides in Berlin, Germany. Let’s welcome our special guest and listen to today’s episode!

Show Topics:

2:19 – Chuck talks.

2:41 – Chris: He has talked about JavaScript in Berlin upon an invitation. You can get five different suggestions about how to use JavaScript. The best practices, I have found, are on the projects I am on now. JavaScript was built in ten days. My goal is to help people navigate through JavaScript and help them feel not disenfranchised. 

5:47 – Aimee: The overall theme is...

5:54 – Panelist: I really like what you said about helping people not feeling disenfranchised.

6:47 – Chris: There is a lot of peer pressure at peer conferences

7:30 – Aimee chimes in with some comments.

7:50: Chris: I think we need to hunt the person down that put...

8:03 – Panelist: A good point to that is, I try to avoid comments like, “Well, like we ALL know...”

8:27 – Chris: There are things NOT to say on stage. It happens, but we don’t want to say certain things while we are teaching people. We are building products with different groups, so keep that in mind.

9:40 – Aimee: My experience in doing this is that I have found it very rewarding to share embarrassing experiences that I’ve had. My advice would to tell people to let their guard down. It’s encouraging for me.

10:26 – Chris: It helps to show that you are vulnerable and show that you are still learning, too. We are all learning together. 90% of our job is communicating with others.

11:05 – Chuck: Now, I do want to ask this...

11:35 – Chris answers.

12:24 – What makes you say that? (Question to Chris)

12:25 – Chris answers.

13:55 – Chuck: The different systems out there are either widely distributed or...

You will have to work with other people. There is no way that people can make that on their own. If you can’t work with other people, then you are a hindrance.

14:31 – Aimee chimes in.

14:53 – Chris: They have to be very self-assured. I want to do things that are at the next level. Each developer has his or her own story. I want to move up the chain, so I want to make sure these developers are self-assured.

16:07 – Chris: Back to the article...

18:26 – Chuck: Yes, I agree. Why go and fight creating a whole system when it exists.

18:54 – Chris chimes in with some comments.

19:38 – Panelist: I still use console logs.

19:48 – Chris: We all do, but we have to...

19:55 – Aimee: In the past year, I can’t tell you how much I rely on this. Do I use Angular? Do I learn Vue? All those things that you can focus on – tools.

10:21 – Chris: We are talking about the ethics of interfaces. Good code is about accessibility, privacy and maintainability, among others. Everything else is sugar on top. We are building products for other people.

22:10 – Chuck: That is the interesting message in your post, and that you are saying: having a deep, solid knowledge of React (that is sort of a status thing...). It is other things that really do matter. It’s the impact we are having. It’s those things that will make the difference. Those things people will want to work with and solves their problems.

23:00 – Chris adds his comments. He talks about Flash.

24:05 – Chris: The librarian motto: “I don’t know everything, but I can look “here” to find the answer.” We don’t know everything.

24:31 – Aimee: Learn how to learn.

24:50 – Chris: There is a big gap in the market. Scratch is a cool tool and it’s these puzzle pieces you put together. It was hard for me to use that system. No, I don’t want to do that. But if you teach the kids these tools then that’s good. 

24:56 – Chuck: Here is the link, and all I had to do was write React components.

26:12 – Chris: My first laptop was 5x more heavy then this one is. Having access to the Internet is a blessing.

27:24 – Advertisement

28:21 – Chuck: Let’s bring this back around. If someone has gone through boot camp, you are recommending that they get use to know their editor, debugging, etc.

Chris: 28:47 – Chris: Yes, get involved within your community. GitHub. This is a community effort. You can help. Writing code from scratch is not that necessary anymore. Why rebuild something if it works. Why fix it if it’s not broken?

31:00 – Chuck talks about his experience.

31:13 – Chris continues his thoughts.

Chris: Start growing a community.

32:01 – Chuck: What ways can people get involved within their community?

32:13 – Chris: Meetup. There are a lot of opportunities out there. Just going online and seeing where the conferences

34:08 – Chris: It’s interesting when I coach people on public speaking. Sharing your knowledge and learning experience is great!

34:50 – Chuck: If they are learning how to code then...by interacting with people you can get closer to what you need/want.

35:30 – Chris continues this conversation.

35:49 – Chris: You can be the person that helps with x, y, z. Just by getting your name known then you can get a job offer.

36:23 – Chuck: How do you find out what is really good content – what’s worth your time vs. what’s not worth your time?

36:36 –Chris says, “That’s tricky!” Chris answers the question.

37:19: Chris: The best things out there right now is...

38:45 – Chuck: Anything else that people want to bring up?

39:00 – Chris continues to talk.

42:26 – Aimee adds in her thoughts.

Aimee: I would encourage people to...

43:00 – Chris continues the conversation.

Chris: Each project is different, when I build a web app is different then when I build a...

45:07 – Panelist: I agree. You talked about abstractions that don’t go away. You use abstractions in what you use. At some point, it’s safe to rly on this abstraction, but not this one. People may ask themselves: maybe CoffeeScript wasn’t the best thing for me.

46:11 – Chris comments and refers to jQuery.

48:58 – Chris continues the conversation.

Chris: I used to work on eight different projects and they worked on different interfaces. I learned about these different environments. This is the project we are now using, and this will like it for the end of time. This is where abstractions are the weird thing. What was the use of the abstraction if it doesn’t have longevity? I think we are building things too soon and too fast.

51:04 – Chris: When I work in browsers and come up with brand new stuff.

52:21 – Panelist: Your points are great, but there are some additional things we need to talk about. Let’s take jQuery as an example. There is a strong argument that if you misuse the browser...

53:45 – Chris: The main issue I have with jQuery is that people get an immediate satisfaction. What do we do besides this?

55:58 – Panelist asks Chris further questions.

56:25 – Chris answers.

Chris: There are highly frequent websites that aren’t being maintained and they aren’t maintainable anymore.

57:09 – Panelist: Prototypes were invented because...

57:51 – Chris: It’s a 20/20 thing.

58:04 – Panelist: Same thing can be said about the Y2K.

58:20 – Panelist: Yes, they had to solve that problem that day. The reality is...

58:44 – Chris: We learned from that whole experience.

1:00:51 – Chris: There was a lot of fluff around it.

1:01:35 – Panelist: Being able to see the future would be a very helpful thing.

1:01:43 – Chris continues the conversation.

1:02:44 – Chuck: How do people get ahold of you?

1:03:04 – Twitter is probably the best way.

1:03:32 – Let’s go to picks!

1:03:36 - Advertisement

Links:

Sponsors:

Picks :

Amiee

AJ

Joe

Charles

Chris




rip

JSJ 333: “JavaScript 2018: Things You Need to Know, and a Few You Can Skip” with Ethan Brown

Panel:

Special Guests: Ethan Brown

In this episode, the panel talks with Ethan Brown who is a technological director at a small company. They write software to facilitate large public organizations and help make projects more effective, such as: rehabilitation of large construction projects, among others. There is a lot of government work through the endeavors they encounter. Today, the panel talks about his article he wrote, and other topics such as Flex, Redux, Ruby, Vue.js, Automerge, block chain, and Elm. Enjoy!

Show Topics:

2:38 – Chuck: We are here to talk about the software side of things.

Let’s dive into what you are looking at mid-year what we need to know for 2018. You wrote this.

3:25 – Ethan: I start off saying that doing this podcast now, how quickly things change. One thing I didn’t think people needed to know was symbols, and now that’s changed. I had a hard time with bundling and other things. I didn’t think the troubles were worth it. And now a couple of moths ago (an open source project) someone submitted a PR and said: maybe we should be using symbols? I told them I’ve had problems in the past. They said: are you crazy?!

It’s funny to see how I things have changed.

4:47 – Panel: Could you talk about symbols?

4:58 – Aimee: Are they comparable to Ruby?

5:05 – Ethan talks about what symbols are and what they do!

5:52 – Chuck: That’s pretty close to how that’s used in Ruby, too.

6:04 – Aimee: I haven’t used them in JavaScript, yet. When have you used them recently?

6:15 – Ethan answers the question.

7:17 – Panelist chimes in.

7:27 – Ethan continues his answer. The topic of “symbols” continues. Ethan talks about Automerge.

11:18 – Chuck: I want to dive-into what you SHOULD know in 2018 – does this come from your experience? Or how did you drive this list?

11:40 – Ethan: I realize that this is a local business, and I try to hear what people are and are not using. I read blogs. I think I am staying on top of these topics being discussed.

12:25 – Chuck: Most of these things are what people are talking.

12:47 – Aimee: Web Assembly. Why is this on the list?

12:58 – Ethan: I put on the list, because I heard lots of people talk about this. What I was hearing the echoes of the JavaScript haters. They have gone through a renaissance. Along with Node, and React (among others) people did get on board. There are a lot of people that are poisoned by that. I think the excitement has died down. If I were to tell a story today – I would

14:23 – Would you put block chain on there? And AI?

14:34 – Panel: I think it’s something you should be aware of in regards to web assembly. I think it will be aware of. I don’t know if there is anything functional that I could use it with.

15:18 – Chuck: I haven’t really played with it...

15:27 – Panel: If you wrote this today would you put machine learning on there?

15:37 – Ethan: Machine Learning...

16:44 – Chuck: Back to Web Assembly. I don’t think you were wrong, I think you were early. Web Assembly isn’t design just to be a ... It’s designed to be highly optimized for...

17:45 – Ethan: Well-said. Most of the work I do today we are hardly taxing the devices we are using on.

18:18 – Chuck and panel chime in.

18:39 – Chuck: I did think the next two you have on here makes sense.

18:54 – Panel: Functional programming?

19:02 – Ethan: I have a lot of thoughts on functional programming and they are mixed. I was exposed to this in the late 90’s. It was around by 20-30 years. These aren’t new. I do credit JavaScript to bring these to the masses. It’s the first language I see the masses clinging to. 10 years ago you didn’t see that. I think that’s great for the programming community in general. I would liken it to a way that Ruby on Rails really changed the way we do web developing with strong tooling. It was never really my favorite language but I can appreciate what it did for web programming. With that said...(Ethan continues the conversation.)

Ethan: I love Elm.

21:49 – Panelists talks about Elm.

*The topic diverts slightly.

22:23 – Panel: Here’s a counter-argument. Want to stir the pot a little bit.

I want to take the side of someone who does NOT like functional programming.

24:08 – Ethan: I don’t disagree with you. There are some things I agree with and things I do disagree with. Let’s talk about Data Structures. I feel like I use this everyday. Maybe it’s the common ones. The computer science background definitely helps out.

If there was one data structure, it would be TREES. I think STACKS and QUEUES are important, too. Don’t use 200-300 hours, but here are the most important ones. For algorithms that maybe you should know and bust out by heart.

27:48 – Advertisement for Chuck’s E-book Course: Get A Coder Job

28:30 – Chuck: Functional programming – people talk bout why they hate it, and people go all the way down and they say: You have to do it this way....

What pay things will pay off for me, and which things won’t pay off for me? For a lot of the easy wins it has already been discussed. I can’t remember all the principles behind it. You are looking at real tradeoffs.  You have to approach it in another way. I like the IDEA that you should know in 2018, get to know X, Y, or Z, this year. You are helping the person guide them through the process.

30:18 – Ethan: Having the right tools in your toolbox.

30:45 – Panel: I agree with everything you said, I was on board, until you said: Get Merge Conflicts.

I think as developers we are being dragged in...

33:55 – Panelist: Is this the RIGHT tool to use in this situation?

34:06 – Aimee: If you are ever feeling super imposed about something then make sure you give it a fair shot, first.

34:28 – That’s the only reason why I keep watching DC movies.

34:41 – Chuck: Functional programming and...

I see people react because of the hype cycle. It doesn’t fit into my current paradigm. Is it super popular for a few months or...?

35:10 – Aimee: I would love for someone to point out a way those pure functions that wouldn’t make their code more testable.

35:42 – Ethan: Give things a fair shake. This is going back a few years when React was starting to gain popularity. I had young programmers all about React. I tried it and mixing it with JavaScript and...I thought it was gross. Everyone went on board and I had to make technically decisions. A Friend told me that you have to try it 3 times and give up 3 times for you to get it. That was exactly it – don’t know if that was prophecy or something. This was one of my bigger professional mistakes because team wanted to use it and I didn’t at first. At the time we went with Vue (old dog like me). I cost us 80,000 lines of code and how many man hours because I wasn’t keeping an open-mind?

37:54 – Chuck: We can all say that with someone we’ve done.

38:04 – Panel shares a personal story.

38:32 – Panel: I sympathize because I had the same feeling as automated testing. That first time, that automated test saved me 3 hours. Oh My Gosh! What have I been missing!

39:12 – Ethan: Why should you do automated testing? Here is why...

You have to not be afraid of testing. Not afraid of breaking things and getting messy.

39:51 – Panel: Immutability?

40:00 – Ethan talks about this topic.

42:58 – Chuck: You have summed up my experience with it.

43:10 – Panel: Yep. I agree. This is stupid why would I make a copy of a huge structure, when...

44:03 – Chuck: To Joe’s point – but it wasn’t just “this was a dumb way” – it was also trivial, too. I am doing all of these operations and look my memory doesn’t go through the roof. They you see it pay off. If you don’t see how it’s saving you effort, at first, then you really understand later.

44:58 – Aimee: Going back to it being a functional concept and making things more testable and let it being clearly separate things makes working in code a better experience.

As I am working in a system that is NOT a pleasure.

45:31 – Chuck: It’s called legacy code...

45:38 – What is the code year? What constitutes a legacy application?

45:55 – Panel: 7 times – good rule.

46:10 – Aimee: I am not trolling. Serious conversation I was having with them this year.

46:27 – Just like cars.

46:34 – Chuck chimes in with his rule of thumb.

46:244 – Panel and Chuck go back-and-forth with this topic.

47:14 – Dilbert cartoons – check it out.

47:55 – GREAT QUOTE about life lessons.

48:09 – Chuck: I wish I knew then what I know now.

Data binding. Flux and Redux. Lots of this came out of stuff around both data stores and shadow domes. How do you tease this out with the stuff that came out around the same time?

48:51 – Ethan answers question.

51:17 – Panel chimes in.

52:01 – Picks!

Links:

Sponsors:

Picks:

Aimee

Joe

Charles

Ethan




rip

JSJ 337: Microstates.js – Composable State Primitives for JavaScript with Charles Lowell & Taras Mankovski

Panel:

  • Aimee Knight
  • Charles Max Wood
  • Joe Eames
  • AJ O’Neil
  • Chris Ferdinandi 

Special Guests: Charles Lowell (New Mexico) & Taras Mankovski (Toronto)

In this episode, the panel talks with two special guests Charles and Taras. Charles Lowell is a principle engineer at Frontside, and he loves to code. Taras works with Charles and joined Frontside, because of Charles’ love for coding. There are great personalities at Frontside, which are quite diverse. Check out this episode to hear about microstates, microstates with react, Redux, and much more!

Show Topics:

1:20 – Chuck: Let’s talk about microstates – what is that?

1:32 – Guest: My mind is focused on the how and not the what. I will zoom my mind out and let’s talk about the purposes of microstates. It means a few things. 1.) It’s going to work no matter what framework you are using. 2.) You shouldn’t have to be constantly reinventing the wheel. React Roundup – I talked about it there at this conference. 

Finally, it really needs to feel JavaScript. We didn’t want you to feel like you weren’t using JavaScript. It uses computer properties off of those models. It doesn’t feel like there is anything special that you are doing. There are just a few simple rules. You can’t mutate the state in place. If you work with JavaScript you can use it very easily. Is that a high-level view?

7:13 – Panel: There are a lot of pieces. If I spoke on a few specific things I would say that it enables programming with state machines.

7:42 – Panel: We wanted it to fell like JavaScript – that’s what I heard.

7:49 – Aimee: I heard that, too.

7:59 – Guest.

8:15 – Aimee: Redux feels like JavaScript to me.

8:25 – Guest: It’s actually – a tool – that it feels natural so it’s not contrived. It’s all JavaScript.

8:49 – Panel.

9:28 – Guest: Idiomatic Ember for example. Idiomatic in the sense that it gives you object for you to work with, which are simple objects.

10:12 – Guest: You have your reducers and your...we could do those things but ultimately it’s powerful – and not action names – we use method names; the name of the method.

11:20 – Panel: I was digging through docs, and it feels like NORMAL JavaScript. It doesn’t seem like it’s tied to a certain framework or library platform?

11:45 – Guest: Yes, we felt a lot of time designing the interfaces the API and the implementation. We wanted it to feel natural but a tool that people reach for.

(Guest continues to talk about WHY they created microstates.)

Guest: We wanted to scale very well what you need when your needs to change.

13:39 – Chuck: I have a lot of friends who get into React and then they put in Redux then they realize they have to do a lot of work – and that makes sense to do less is more.

14:17 – Guest: To define these microstates and build them up incrementally...building smaller microstates out of larger ones.

Guest continued: Will we be able to people can distribute React components a sweet array of components ready for me to use – would I be able to do the same for a small piece of state? We call them state machines, but ultimately we have some state that is driving it. Would we be able to distribute and share?

16:15 – Panel: I understand that this is tiny – but why wouldn’t I just use the native features in specific the immutability component to it?

16:42 – Guest: I’m glad you asked that question. We wanted to answer the question...

Guest: With microstates you can have strict control and it gives you the benefit of doing sophisticated things very easily.

18:33 – Guest: You mentioned immutability that’s good that you did. It’s important to capture – and capturing the naturalness of JavaScript. It’s easy to build complex structures – and there is an appeal to that. We are building these graphs and these building up these trees. You brought up immutability – why through it away b/c it’s the essence of being a developer. If you have 3-4-5 levels of nesting you have to de-structure – get to the piece of data – change it – and in your state transition 80% of your code is navigating to the change and only 20% to actually make the change. You don’t have to make that tradeoff.

21:25 – Aimee: The one thing I like about the immutability b/c of the way you test it.

21:45 – Guest: There a few things you can test. 

23:01 – Aimee: You did a good job of explaining it.

23:15 – Guest: It makes the things usually hard  easy! With immutability you can loose control, and if that happens you can get so confused. You don’t have a way to have a way to navigate to clarity. That’s what this does is make it less confusing. It gives you order and structure. It gives you a very clear path to do things you need to do. If there is a property on your object, and if there is a way to change it...

25:29 – Guest: The only constant is change no matter what framework you are working on.

24:46 – Chuck: We are talking about the benefits and philosophy. What if I have an app – and I realize I need state management – how do I put microstates into my app? It’s using Angular or React – how do I get my data into microstates?

26:35 – Guest: I can tell you what the integration looks like for any framework. You take a type and you passed that type and some value to the create function so what you get is a microstate.

(The Guest continues diving into his answer.)

28:18 – Guest: That story is very similar to Redux, basically an event emitter. The state changes on the store.

Maybe this is a good time to talk about the stability benefits and the lazy benefits because microstates is both of those things.

Stability – if I invoke a transition and the result is unchanged – same microstate – it doesn’t emit an event. It recognizes it internally. It will recognize that it’s the same item. Using that in Ember or Redux you’d have to be doing thousands of actions and doing all that computation, but stability at that level.

Also, stability in the sense of a tree. If I change one object then that changes it won’t change an element that it doesn’t need to change.

31:33 – Advertisement: Sentry.io

32:29 – Guest: I want to go back to your question, Chuck. Did we answer it?

32:40 – Chuck: Kind of.

32:50 – Guest.

32:59 – Guest: In Angular for example you can essentially turn a microstate...

33:51 – Guest: You could implement a connect, too. Because the primitive is small – there is no limit.

34:18 – Chuck summarizes their answers into his own words.

34:42 – Guest: If you were using a vanilla React component – this dot – I will bind this. You bind all of these features and then you pass them into your template. You can take it as a property...those are those handlers. They will perform the transition, update and what needs to be updated will happen.

35:55 – Chuck: Data and transitions are 2 separate things but you melded them together to feel like 1 thing. This way it keeps clean and fast.

36:16 – Guest: Every framework helps you in each way.

Microstates let’s you do a few things: the quality of your data all in one place and you can share.

38:12 – Guest: He made and integrated Microstates with Redux tools.

38:28 – Guest talks about paths, microstates to trees.

39:22 – Chuck.

39:25 – Panel: When I think about state machines I have been half listening / half going through the docs. When I think of state machines I think about discreet operations like a literal machine. Like a robot of many steps it can step through. We have been talking about frontend frameworks like React - is this applicable to the more traditional systems like mechanical control or is it geared towards Vue layered applications?

40:23 – Guest: Absolutely. We have BIG TEST and it has a Vue component.

41:15 – Guest: when you create a microstate from a type you are creating an object that you can work with.

42:11 – Guest: Joe, I know you have experience with Angular I would love to get your insight.

42:33 – Joe: I feel like I have less experience with RX.js. A lot of what we are talking about and I am a traditionalist, and I would like you to introduce you guys to this topic. From my perspective, where would someone start if they haven’t been doing Flux pattern and I hear this podcast. I think this is a great solution – where do I get started? The official documents? Or is it the right solution to that person?

43:50 – Guest: Draw out the state machine that you want to represent in your Vue. These are the states that this can be in and this is the data that is required to get from one thing to the other. It’s a rope process. The arrow corresponds to the method, and...

44:49 – Panel: It reminds me back in the day of rational rows.

44:56 – Guest: My first job we were using rational rows.

45:22 – Panelist: Think through the state transitions – interesting that you are saying that. What about that I am in the middle – do you stop and think through it or no?

46:06 – Guest: I think it’s a Trojan horse in some ways. I think what’s interesting you start to realize how you implement your state transitions.

48:00 – (Guest continues.)

48:45 – Panel: That’s interesting. Do you have that in the docs to that process of stopping and thinking through your state transitions and putting into the microstate?

49:05 – Guest: I talked about this back in 2016. I outlined that process. When this project was in the Ember community.

49:16 – Guest: The next step for us is to make this information accessible. We’ve been shedding a few topics and saying this is how to use microstates in your project. We need to write up those guides to help them benefit in their applications.

50:00 – Chuck: What’s the future look like?

50:03 – Guest: We are working on performance profiling.

Essentially you can hook up microstates to a fire hose.

The next thing is settling on a pattern for modeling side effects inside microstates. Microstates are STATE and it’s immutable.

52:12 – Guest: Getting documentation. We have good README but we need traditional docs, too.

52:20 – Chuck: Anything else?

52:28 – Guest: If you need help email us and gives us a shot-out.

53:03 – Chuck: Let’s do some picks!

53:05 – Advertisement for Charles Max Wood’s course!

Links:

Sponsors:

Picks:

Aimee

Taras

Charles Lowell

Chris

Joe

AJ

Charles

  • Podwrench.com -  beta
  • getacoderjob.com




rip

JSJ 340: JavaScript Docker with Julian Fahrer

Panel:

  • Aimee Knight
  • AJ O’Neal
  • Joe Eames
  • Charles Max Wood
  • Chris Ferdinandi

Special Guest: Julian Fahrer

In this episode, the panel talks with Julian Fahrer who is an online educator and software engineer in San Francisco, California (USA). The panel and the guest talk about containers, tooling, Docker, Kubernetes, and more. Check out today’s episode!

Show Topics:

0:00 – Advertisement: KENDO UI

1:00 – Chuck: We have today Julian. Julian, please tell us why you are famous?

1:10 – Julian (Guest): I am a software engineer in San Francisco.

1:35 – Chuck: We had you on Elixir Mix before – so here you are! Give us a brief introduction – tell us about the

1:56 – Julian: About 11 hours. You can get it done in about 1 week. It’s a lot to learn. It’s a new paradigm, and I think that’s why people like it.

2:22 – Aimee: How did you dive into Docker? I feel that is like backend space?

2:35 – Julian: I am a full stack engineer and I have been in backend, too.

3:10 – Aimee: I know that someone has been in-charge of our Dev Ops process until the first job I’ve had. When there is a problem in the deployment, I want to unblock myself and not wait for someone else. I think it’s a valuable topic. Why Docker over the other options?

3:58 – Julian: Let’s talk about what Docker is first?

4:12 – Chuck.

4:23 – Julian: Containers are a technology for us to run applications in isolation from each other.

Julian talks in-detail about what contains are, what they do, he gives examples, and more. Check it out here!

5:27 – Chuck: Makes sense to me. I think it’s interesting that you are talking about the dependencies. Because of the way the Docker works it’s consistent across all of your applications.

5:59 – Julian. Yes, exactly.

Julian talks about containers some more!

6:56 – Chuck asks a question about the container, Docker, and others.

7:03 – Guest: You don’t have to worry about your company’s running operating system, and what you want to use – basically everything runs in the container...

7:30 – Chuck: This short-circuits a lot of it.

7:46 – Guest.

8:00 – Chuck: People will use Docker if your employer mandates it. Is there a learning curve and how do you adapt it within the person’s company?

8:25 – Guest.

8:52 – Aimee: We are using it, too.

8:57 – Guest: Awesome!

9:03 – Aimee: The only downfall is that if you have people who are NOT familiar with it – then it’s a black box for us. We can’t troubleshoot it ourselves. I want to be able to unblock from our end w/o having to go to someone else. That’s my only issue I’ve been having.

10:03 – Guest: I want to see that tooling to be honest.

10:12 – Aimee: Can you talk about how Civil and Docker work together?

10:19 – Guest: Yes!

Julian answers the question.

10:56 – Chuck: How much work it is to get a Docker file to get up and running? How much work would it take?

11:18 – Guest: For the development side in about an hour or two – this is if you understand it already. Putting it into production that’s a different story b/c there is a million different ways to do it. It’s hard to put a time on that.

12:24 – Chuck: Let’s assume they have the basic knowledge (they get how server setup takes place) is this something you could figure out in a day or so?

12:47 – Guest: If you have touched Docker then you can do it in a day; if never then not really.

13:02 – Guest: There might be some stones you will fall over.

13:39 – Panel: The part of the learning curve would be...

13:52 – Guest: The idea behind the container is that the container should be disposable. You could throw it away and then start a new one and it’s fresh and clean.

Guest continues with his answer.

15:20 – Chuck: I have seen people do this with their database engine. If you need to upgrade your database then they grab their container...

15:55 – Guest: You don’t have to worry about setting it up - its provided in the container and...

16:09 – Chuck asks a question.

16:17 – Guest: For production, I would go with a hosted database like RJS, Azure, or other options.

Guest continues.

17:13 – Chuck.

17:20 – Guest: If it dies then you need to...

17:30 – Chuck: We talked about an idea of these containers being something you can hand around in your development team.

Chuck asks a question.

17:50 – Guest answers the question. He talks about tooling, containers, web frontend, and more.

18:48 – Guest asks Aimee a question: Are you using Compost?

18:50 – Aimee: I don’t know b/c that is a black box for us. I don’t know much about our Docker setup.

19:00 – Guest to Aimee: Can I ask you some questions?

19:14 – Guest is giving Aimee some hypothetical situations and asks what their process is like.

19:32 – Aimee answers the question.

20:11 – Guest: You have customizing tooling to be able to do x, y, and z.

20:25 – Aimee: They have hit a wall, but it’s frustrating. Our frontend and our backend are different. We are getting 500’s and it’s a black box for us. It’s the way that ops have it setup. I hate having to go to them for them to unblock us.

21:07 – Chuck: I have been hearing about Kubernetes. When will you start to see that it pays off to use it?

21:20 – Guest answers the question.

22:17 – If I have a simple app on a few different machines and front end and job servers I may not need Kubernetes. But if I have a lot of things that it depends on then I will need it?

22:35 – Guest: Yes.

22:40 – Chuck: What are the steps to using it?

22:45 – Guest: Step #1 you install it.

The guest goes through the different steps to use Docker.

25:23 – Aimee: It makes sense that your UI and your database don’t live in the same container, but what about your API and your database should that be separate?

25:40 – Guest: Yes they should be separate.

26:09 – Chuck: What has your experience been with Docker – AJ or Chris?

26:17 – Panel: I have used a little bit at work and so far it’s been a black box for me. I like the IDEA of it, but I probably need to take Julian’s course to learn more about it! (Aimee agrees!)

One thing I would love (from your perspective, Julian) – if I wanted to get started with this (and say I have not worked with containers before) where would I start?

28:22 – Advertisement – Sentry.io

29:20 – Guest: Good question. You don’t have to be an expert (to use Docker), but you have to be comfortable with the command line, though.

30:17 – Panel: Is there a dummy practice within your course?

30:27 – Julian: We run our own web server and...

30:44 – Panel: I need to check out your course!

31:04 – Guest: It is some time investment, but it’s saved me so much time already so it makes it really worth it.

31:38 – Panel: You are a version behind on Ruby.

31:46 – Guest: ...I just want to make code and not worry about that.

32:04 – Chuck: Updating your server – you would update Ruby and reinstall your gems and hope that they were all up-to-date. Now you don’t have to do it that way anymore.

32:37 – Guest: You know it will behave the same way.

32:48 – Guest: I have some experience with Docker. I understand its value. I guess I will share my frustrations. Not in Docker itself, but the fact that there is a need for Docker...

35:06 – Chuck.

35:12 – Panel: We need someone to come up with...

35:40 – Panel: It’s not standard JavaScript.

35:51 – Chuck: One question: How do you setup multiple stages of Docker?

36:12 – Guest: The recommended way is to have the same Docker file used in the development sate and through to production. So that way it’s the same image.

37:00 – Panel: ...you must do your entire configuration via the environmental variables.

37:29 – Chuck asks a question.

37:36 – Panel: If you are using Heroku or Circle CI...there is a page...

38:11 – Guest and Chuck go back-and-forth.

39:17 – Chuck: Gottcha.

39:18 – Guest.

39:52 – Chuck: I have seen systems that have hyberized things like using Chef Solo and...

You do your basic setup then use Chef Solo – that doesn’t’ make sense to me. Have you seen people use this setup before?

40:20 – Guest: I guess I wouldn’t do it.

40:30 – Chuck.

40:36 – Guest: Only reason I would do that is that it works across many different platforms. If it makes your setup easier then go for it.

41:14 – Chuck: Docker Hub – I want to mention that. How robust is that? Can you put private images up there?

41:38 – Guest: You can go TOTALLY nuts with it. You could have private and public images. Also, your own version. Under the hood it’s called container registry. Yeah, you can change images, too.

42:22 – Chuck: Should I use container registry or a CI system to build the Docker system and use it somewhere else?

42:35 – Guest.

43:24 – Chuck: Where can people find your Docker course?

43:30 – Guest: LEARN DOCKER ONLINE! We are restructuring the prices. Make sure to check it out.

44:05 – Chuck: Picks! Where can people find you online?

44:14 – Guest: Twitter! eBook – Rails and Docker! Code Tails IO!

Links:

Sponsors:

Picks:

AJ

Aimee

Chris

Joe

Charles

Julian




rip

JSJ 341: Testing in JavaScript with Gil Tayar

Panel:

  • Aimee Knight
  • AJ O’Neal
  • Charles Max Wood

Special Guest: Gil Tayar

In this episode, the panel talks with Gil Tayar who is currently residing in Tel Aviv and is a software engineer. He is currently the Senior Architect at Applitools in Israel. The panel and the guest talk about the different types of tests and when/how one is to use a certain test in a particular situation. They also mention Node, React, Selenium, Puppeteer, and much more!

Show Topics:

0:00 – Advertisement: KENDO UI

0:35 – Chuck: Our panel is AJ, Aimee, myself – and our special guest is Gil Tayar. Tell us why you are famous!

1:13 – Gil talks about where he resides and his background. 

2:27 – Chuck: What is the landscape like now with testing and testing tools now?

2:39 – Guest: There is a huge renaissance with the JavaScript community. Testing has moved forward in the frontend and backend. Today we have lots of testing tools.  We can do frontend testing that wasn’t possible 5 years ago. The major change was React.

The guest talks about Node, React, tools, and more!

4:17 – Aimee: I advocate for tests and testing. There is a grey area though...how do you treat that? If you have to get something into production, but it’s not THE thing to get into production, does that fall into product or...what?

5:02 – Guest: We decided to test everything in the beginning. We actually cam through and did that and since then I don’t think I can use the right code without testing. There are a lot of different situations, though, to consider.

The guest gives hypothetical situations that people could face.

6:27 – Aimee.

6:32 – Guest: The horror to changing code without tests, I don’t know, I haven’t done that for a while. You write with fear in your heart. Your design is driven by fear, and not what you think is right. In the beginning don’t write those tests, but...

7:22 – Aimee: I totally agree and I could go on and on and on.

7:42 – Panel: I want to do tests when I know they will create value. I don’t want to do it b/c it’s a mundane thing. Secondly, I find that some times I am in a situation where I cannot write the test b/c I would have to know the business logic is correct. I am in this discovery mode of what is the business logic? I am not just building your app.

I guess I just need advice in this area, I guess.

8:55 – Guest gives advice to panelist’s question. He mentions how there are two schools of thought.

10:20 – Guest: Don’t mock too much.

10:54 – Panel: Are unit tests the easiest? I just reach for unit testing b/c it helps me code faster. But 90% of my code is NOT that.

11:18 – Guest: Exactly! Most of our test is glue – gluing together a bunch of different stuff! Those are best tested as a medium-sized integration suite.

12:39 – Panel: That seems like a lot of work, though! I loathe the database stuff b/c they don’t map cleanly. I hate this database stuff.

13:06 – Guest: I agree, but don’t knock the database, but knock the level above the database.

13:49 – Guest: Yes, it takes time! Building the script and the testing tools, but when you have it then adding to it is zero time. Once you are in the air it’s smooth sailing.

14:17 – Panel: I guess I can see that. I like to do the dumb-way the first time. I am not clear on the transition.

14:47 – Guest: Write the code, and then write the tests.

The guest gives a hypothetical situation on how/when to test in a certain situation.

16:25 – Panel: Can you talk about that more, please?

16:50 – Guest: Don’t have the same unit – do browser and business logic stuff separated. The real business logic stuff needs to be above that level. First principle is separation of concerns.

18:04 – Panel talks about dependency interjection and asks a question.

18:27 – Guest: What I am talking about very, very light inter-dependency interjection.

19:19 – Panel: You have a main function and you are doing requires in the main function. You are passing the pieces of that into the components that need it.

19:44 – Guest: I only do it when it’s necessary; it’s not a religion for me. I do it only for those layers that I know will need to be mocked; like database layers, etc.

20:09 – Panel.

20:19 – Guest: It’s taken me 80 years to figure out, but I have made plenty of mistakes a long the way. A test should run for 2-5 minutes max for package.

20:53 – Panel: What if you have a really messy legacy system? How do you recommend going into that? Do you write tests for things that you think needs to get tested?

21:39 – Guest answers the question and mentions Selenium!

24:27 – Panel: I like that approach.

24:35 – Chuck: When you say integration test what do you mean?

24:44 – Guest: Integration tests aren’t usually talked about. For most people it’s tests that test the database level against the database. For me, the integration tests are taking a set of classes as they are in the application and testing them together w/o the...so they can run in millisecond time.

26:54 – Advertisement – Sentry.io

27:52 – Chuck: How much do the tools matter?

28:01 – Guest: The revolutions matter. Whether you use Jasmine or Mocha or whatever I don’t think it matters. The tests matter not the tools.

28:39 – Aimee: Yes and no. I think some tools are outdated.

28:50 – Guest: I got a lot of flack about my blog where I talk about Cypress versus Selenium. I will never use Jasmine. In the end it’s the

29:29 – Aimee: I am curious would you be willing to expand on what the Selenium folks were saying about Puppeteer and others may not provide?

29:54 – Guest: Cypress was built for frontend developers. They don’t care about cross browser, and they tested in Chrome. Most browsers are typically the same. Selenium was built with the QA mindset – end to end tests that we need to do cross browser.

The guest continues with this topic.

30:54 – Aimee mentions Cypress.

31:08 – Guest: My guessing is that their priority is not there. I kind of agree with them.

31:21 – Aimee: I think they are focusing on mobile more.

31:24 – Guest: I think cross browser testing is less of an issue now. There is one area that is important it’s the visual area! It’s important to test visually across these different browsers.

32:32 – Guest: Selenium is a Swiss knife – it can do everything.

33:32 – Chuck: I am thinking about different topics to talk about. I haven’t used Puppeteer. What’s that about?

33:49 – Guest: Puppeteer is much more like Selenium. The reason why it’s great is b/c Puppeteer will always be Google Chrome.

35:42 – Chuck: When should you be running your tests? I like to use some unit tests when I am doing my development but how do you break that down?

36:06 – Guest.

38:30 – Chuck: You run tests against production?

38:45 – Guest: Don’t run tests against production...let me clarify!

39:14 – Chuck.

39:21 – Guest: When I am talking about integration testing in the backend...

40:37 – Chuck asks a question.

40:47 – Guest: I am constantly running between frontend and backend.

I didn’t know how to run tests for frontend. I had to invent a new thing and I “invented” the package JS DONG. It’s an implementation of Dong in Node. I found out that I wasn’t the only one and that there were others out there, too.

43:14 – Chuck: Nice! You talked in the prep docs that you urged a new frontend developer to not run the app in the browser for 2 months?

43:25 – Guest: Yeah, I found out that she was running the application...she said she knew how to write tests. I wanted her to see it my way and it probably was a radical train-of-thought, and that was this...

44:40 – Guest: Frontend is so visual.

45:12 – Chuck: What are you working on now?

45:16 – Guest: I am working with Applitools and I was impressed with what they were doing.

The guest goes into further detail.

46:08 – Guest: Those screenshots are never the same.

48:36 – Panel: It’s...comparing the output to the static site to the...

48:50 – Guest: Yes, that static site – if you have 30 pages in your app – most of those are the same. We have this trick where we don’t upload it again and again. Uploading the whole static site is usually very quick. The second thing is we don’t wait for the results. We don’t wait for the whole rendering and we continue with the tests.

50:28 – Guest: I am working mostly (right now) in backend.

50:40 – Chuck: Anything else? Picks!

50:57 – Advertisement: Get A Coder Job!

END – Advertisement: CacheFly!

Links:

Sponsors:

Picks:

Aimee

AJ

Charles

Gil




rip

JSJ 350: JavaScript Jabber Celebrates Episode 350!

Sponsors

Panel:

  • Charles Max Wood
  • AJ O’Neal
  • Aimee Knight
  • Aaron Frost
  • Chris Ferdinandi
  • Joe Eames
  • Tim Caswell

Notes:

This episode of JavaScript Jabber has the panelists reminiscing on the past. First, they discuss the projects they’re working on. Tim has joined MagicLeap doing JavaScript and C++. Aaron Frost is one of the founders of HeroDevs. AJ works at Big Squid, a company that takes spreadsheets and turns them into business actions, and is expecting a daughter. Aimee has been exploring developer advocacy, but wants to focus primarily on engineering. She is currently working at MPM. Joe has taken over the CEO position for thinkster.io, a company for learning web development online. Chris switched from being a general web developer specializing in JavaScript and has started blogging daily rather than once a week, and has seen an increase in sales of his vanilla JavaScript educational products. Charles discusses his long term goal for Devchat.tv. He wants to help people feel free in programming, and help people find opportunities though the Devchat.tv through empowering content.

Next, the panelists discuss their favorite episodes. Some of the most highly recommended episodes are

JSJ 124: The Origin of Javascript with Brendan Eich (1:44:07)

JSJ 161: Rust with David Herman (1:05:05)

JSJ 336: “The Origin of ESLint with Nicholas Zakas” (1:08:01)

JSJ 338: It’s Supposed To Hurt, Get Outside of Your Comfort Zone to Master Your Craft with Christopher Buecheler (43:36)

JSJ 218: Ember.js with Yehuda Katz (42:47)

Last, the panelists discuss what they do to unwind. Activities include working out, reading, playing Zelda and Mario Kart, studying other sciences like physics, painting miniatures, and Dungeons and Dragons.

Picks:

Charles Max Wood

Joe Eames

AJ O’Neal

Aimee Knight

Aaron Frost

Chris Ferdinandi

Tim Caswell




rip

JSJ 352: Caffeinated Style Sheets: Supporting High Level CSS with JavaScript with Tommy Hodgins

Sponsors

 

Episode Summary  

In this episode of JavaScript Jabber, the panelists talk with Tommy Hodgins who specializes in responsive web design. He starts with explaining to listeners what it means by a responsive web layout and goes on to discuss the techniques in using JavaScript in CSS in depth.

He elaborates on dynamic styling of components, event-driven stylesheet templating, performance and timing characteristics of these techniques and describes different kinds of observers – interception, resize and mutation, and their support for various browsers. He also talks about how to go about enabling certain features by extending CSS, comparison to tools such as the CSS preprocessor and Media Queries, pros and cons of having this approach while citing relevant examples, exciting new features coming up in CSS, ways of testing the methods, caffeinated stylesheets, along with Qaffeine and Deqaf tools.

Links

 

Picks

Joe

Aimee

Chris

Charles

Tommy




rip

JSJ 368: TypeScript - Good or Bad

Sponsors

Panel

  • Joe Eames

  • AJ O’Neal

Episode Summary

In this episode of JavaScript Jabber, Joe Eames and AJ O’Neal talk about what TypeScript is, and their background and experiences with it. They discuss the different kinds of typed languages such as dynamic vs static, strong vs weak, implicit vs explicit casting and the reasons for selecting one type over the other. AJ shares his opinion on not preferring TypeScript in general, while Joe offers a counter perspective on liking it, and both give a number of reasons to support each argument. They talk about some final good and bad points about TypeScript and move on to picks.

Links

Follow JavaScript Jabber on Devchat.tv, Facebook and Twitter.

Picks

Joe Eames:

AJ O’Neal:

 




rip

JSJ 377: Bringing Maps and Location Into Your Apps with the ArcGIS API for JavaScript with Rene Rubalcava

Sponsors

Panel

  • Aimee Knight

  • AJ O’Neal

  • Charles Max Wood

With Special Guest: Rene Rubalcava

Episode Summary

Rene is a software developer for ESRI and works in spatial and mapping software. ESRI has been around since 1969 and has seen their work explode since they shifted to providing address and location services. Rene talks about how he thinks about location and mapping when building software around it and things that he has to approach in unique ways. The panel discusses some of their past experiences with location software. Some of the most difficult aspects of this software is changing time zones for data and actually mapping the Earth, since it is not flat nor a perfect sphere. Rene talks about the different models used for mapping the Earth.

Most mapping systems use the same algorithm as Google maps, so Rene talks about some of the specific features of ArcGIS, including the ability to finding a point within a polygon. Rene talks about what routing is, its importance, and how it is being optimized with ArcGIS, such as being able to add private streets into a regular street network.

The panel discusses how the prevalence of smartphones has changed mapping and GPS and some of their concerns with privacy and location mapping. One thing ESRI is very careful about is not storing private information. Rene talks about the kinds of things he has seen people doing with the mapping and location data provided by ArcGIS, including a Smart Mapping feature for developers, mapping planets, indoor routing, and 3D models. 

Links

Follow DevChat on Facebook and Twitter

Picks

Rene Rubalcava:

AJ O’Neal:

Aimee Knight:

Charles Max Wood:




rip

JSJ 383: What is JavaScript?

Sponsors

Panel

  • Charles Max Wood

  • Christopher Beucheler

  • Aimee Knight

Episode Summary

Today’s episode is an exploration of the question “What is JavaScript?”. Each of the panelists describes what they think JavaScript is, giving a definition for both technical and non-technical people. They talk about how the different layers of JavaScript tie into their definitions. They agree that it’s incorrect to call JavaScript one of the ‘easy’ programming languages and some of the challenges unique to JavaScript, such as the necessity of backwards compatibility and that it is used in tandem with CSS and HTML, which require a different thinking method. They discuss the disdain that some developers from other languages hold for JavaScript and where it stems from. They discuss methods to level up from beginner to mid level JavaScript programmer, which can be tricky because it is a rapidly evolving language. They revisit the original question, “What is Java Script?”, and talk about how their definition of JavaScript has changed after this discussion. They finish by talking about the story they want to tell with JavaScript, why they chose JavaScript, and what is it they are trying to do, create, become through using the language. They invite listeners to share their answers in the comments. 

Links

Follow DevChat on Facebook and Twitter

Picks

Charles Max Wood:

Aimee Knight:

Christopher Beucheler:




rip

JSJ 385: What Can You Build with JavaScript?

Sponsors

Panel

  • Charles Max Wood

  • Christopher Beucheler

Episode Summary

Today Charles and Christopher discuss what can you do with JavaScript. They talk about the kinds of things they have used JavaScript to build. They discuss non-traditional ways that people might get into JavaScript and what first drew them to the language. They talk about the some of the non-traditional JavaScript options that are worth looking into. Christopher and Charles talk about some of the fascinating things that have been done with JavaScript, such as Amazon Alexa capabilities, virtual reality, and games. They spend some time talking about JavaScript usage in game creation and building AI. They talk about how they’ve seen JavaScript change and progress during their time as developers. They talk about areas besides web that they would be interested in learning more about and what kinds of things they would like to build in that area. They finish by discussing areas that they are excited to see improve and gain new capabilites. 

Links

Follow DevChat on Facebook and Twitter

Picks

Charles Max Wood:

Christopher Beucheler:




rip

JSJ 392: The Murky Past and Misty Future of JavaScript with Douglas Crockford

Episode Summary

Douglas is a language architect and helped with the development of JavaScript. He started working with JavaScript in 2000. He talks about his journey with the language, including his initial confusion and struggles, which led him to write his book JavaScript: The Good Parts.

Douglas’ take on JavaScript is unique because he not only talks about what he likes, but what he doesn’t like. Charles and Douglas discuss some of the bad parts of JavaScript, many of which were mistakes because the language was designed and released in too little time. Other mistakes were copied intentionally from other languages because people are emotionally attached to the way things “have always been done”, even if there is a better way.

Doug takes a minimalist approach to programming. They talk about his opinions on pairing back the standard library and bringing in what’s needed. Douglas believes that using every feature of the language in everything you make is going to get you into trouble. Charles and Douglas talk about how to identify what parts are useful and what parts are not.

Douglas delves into some of the issues with the ‘this’ variable. He has experimented with getting rid of ‘this’ and found that it made things easier and programs smaller. More pointers on how to do functional programming can be found in his book How JavaScript Works 

Charles and Douglas talk about how he decided which parts were good and bad. Douglas talks about how automatic semicolon insertion and ++ programming are terrible, and his experiments with getting rid of them. He explains the origin of JS Lint. After all, most of our time is not spent coding, it’s spent debugging and maintaining, so there’s no point in optimizing keystrokes.

Douglas talks about his experience on the ECMAScript development committee and developing JavaScript. He believes that the most important features in ES6 were modules and proper tail calls. They discuss whether or not progression or digression is occurring within JavaScript. Douglas disagrees with all the ‘clutter’ that is being added and the prevalent logical fallacy that if more complexity is added in the language then the program will be simpler. 

Charles asks Douglas about his plans for the future. His current priority is the next language. He talks about the things that JavaScript got right, but does not believe that it should not be the last language. He shares how he thinks that languages should progress. There should be a focus on security, and security should be factored into the language. 

Douglas is working on an implementation for a new language he calls Misty. He talks about where he sees Misty being implemented. He talks about his Frontend Masters course on functional programming and other projects he’s working on. The show concludes with Douglas talking about the importance of teaching history in programming. 

Panelists

  • Charles Max Wood

With special guest: Douglas Crockford

Sponsors

Links

Follow DevChatTV on Facebook and Twitter

Picks

Charles Max Wood:

Douglas Crockford:




rip

JSJ 400: The Influence of JavaScript Jabber

JavaScript Jabber celebrates its 400th episode with former host Dave Smith and some other familiar voices. Each of the panelists talks about what they’ve been up to. Dave hasn’t been on the show for 3 years, but he and Jameson Dance have started a podcast called Soft Skills Engineering where they answer questions about the non-technical side of engineering. When he left the show he was the director of engineering on Hire View, and currently he works for Amazon on Alexa. 

Christopher Buecheler has been on several JSJ, RRU, and MJS episodes. His time is divided between contracting for startups and his own company closebrace.com, a tutorial and resource site for JavaScript developers.  Dan Shapir has also been on JSJ as a guest, and is currently works for Wix doing performance tech. He enjoys speaking at conferences, such as JS Camp in Bucharest, Romania and the YGLF conference. Steve Edwards was previously on MJS 078. He started on Drupal in the PHP world, switched to JavaScript, and then a few years ago he started looking at Vue. Now he does Vue fulltime for ImageWare Systems.

As for Charles, his primary focus is the podcasts, since DevChat.tv produces around 20 episodes per week. 5 new shows were started in July, and he talks about some of the challenges that that brought. One of his most popular shows recently was JSJ 389: What makes a 10x Engineer? This helped him realize that he wants to help teach people how to be a successful engineer, so he’s working on launching a new show about it. 

The panelists share some of their favorite JSJ episodes. They discuss the tendency of JSJ to get early access to these fascinating people when the conversation was just beginning, such as the inventor of Redux Dan Abramov, before their rise to stardom. The talk about the rise in popularity of podcasting in general. They agree that even though JavaScript is evolving and changing quickly, it’s still helpful to listen to old episodes. 

Charles talks about the influence JavaScript Jabber has had on other podcasts. It has spawned several spinoffs, including My JavaScript Story. He’s had several hosts start their own DevChat.tv shows based off JavaScript Jabber, including Adventures in Angular and The DevEd Podcast. JavaScript Jabber has also been the inspiration for other podcasts that aren’t part of DevChat.tv. There aren’t many podcast companies that produce as many shows as they do and they’re developing their own tools. DevChat.tv moved off of WordPress and is in the process of moving over to Podwrench. Charles talks about all the new shows that have been launched, and his view on ‘competing’ podcasts. Charles is also considering doing an audio drama that happens in a programming office, so if you would like to write and/or voice that  show, he invites you to contact him. 

The show concludes with the panel talking about the projects they’ve been working on that they want listeners to check out. Christopher invites listeners to check out closebrace.com. He also has plans to write a short ebook on unit testing with jest, considered doing his own podcast, and invites people to check out his fiction books on his website. Dan talks about his involvement with Wix, a drag and drop website service, that recently released a technology called Corvid which lets you write JS into the website you build with Wix. This means you can design your user interface using Wix, but then automate it, add events functionality, etc. Dan is also going to be at the Chrome Dev Summit conference. Dave invites listeners to check out the Soft Skills Engineering podcast, and Charles invites listeners to subscribe to his new site maxcoders.io. 

Panelists

  • Dan Shapir

  • Christopher Buecheler

  • Steve Edwards

  • Dave Smith

  • Charles Max Wood

Sponsors

Links

Follow DevChatTV on Facebook and Twitter

Picks

Steve Edwards:

Christopher Buecheler:

Charles Max Wood:

Dan Shapir:

Dave Smith:




rip

JSJ 407: Reactive JavaScript and Storybook with Dean Radcliffe

Dean is a developer from Chicago and was previously on React Round Up 083. Today he has come over to JavaScript Jabber to talk about reactive programming and Storybook. Reactive programming is the opposite of imperative programming, where it will change exactly when needed instead of change only when told to. Reactivity existed long before React, and Dean talks about his history with reactive programming. He illustrates this difference by talking about Trello and Jira. In Trello, as you move cards from swimlane to another swimlane, everyone on the board sees those changes right away. In Jira,  if you have 11 tabs open, and you update data in one tab, probably 10 of your tabs are stale now and you might have to refresh. Reactive programming is the difference between Trello and Jira.

The panel discusses why reactive JavaScript is not more widely used. People now tend to look for more focused tools to solve a particular part of the problem than an all in one tool like Meteor.js. Dean talks about the problems that Storybook solves. Storybook has hot reloading environments in frontend components, so you don’t need the backend to run. Storybook also allows you to create a catalogue of UI states. JC and Dean talk about how Storybook could create opportunities for collaboration between engineers and designers. They discuss some causes of breakage that automation could help solve, such as styles not being applied properly and internationalization issues. Dean shares how to solve some network issues, such as having operators in RxJs. RxJs is useful for overlapping calls because it was built with cancelability from the beginning. 

Dean talks about his tool Storybook Animate, which allows you to see what the user sees. Storybook is an actively updated product, and Dean talks about how to get started with it. The show concludes with Dean talking about some things coming down the pipe and how he is actively involved in looking for good general solutions to help people write bulletproof code. 

Panelists

  • JC Hiatt

With special guest: Dean Radcliffe

Sponsors

________________________________________________________________________________________________________________________

"The MaxCoders Guide to Finding Your Dream Developer Job" by Charles Max Wood will be out on November 20th on Amazon.  Get your copy on that date only for $1.

________________________________________________________________________________________________________________________

Links

Follow DevChatTV on Facebook and Twitter

Picks

JC Hiatt:

Dean Radcliffe: 




rip

JSJ 413: JavaScript Jabber at RxJs Live

In this episode of JavaScript Jabber Charles Max Wood does interviews at RxJS Live. His first interview is with Hannah Howard at RxJS Live about her talk. Hannah is really enthusiastic about RxJS especially when it comes to frontend development. Her talk is about how to architect full-scale apps with RxJS. Hannah gives a brief summary of her talk. Charles having met Hanna previously at Code Beam asks her how functional programming and reactive programming work together in her mind. Hannah describes how she sees programming. 

 

Charles’s next interview is with Ben Lesh, a core team member of RxJS. Ben has been working on RxJS for the last four years. In his talk, he shares the future of RxJs, the timeline for versions 7 and 8. With Charles, he discusses his work on RxJS and the adoption of RxJS. 

 

Next, Charles interviews Sam Julien and Kim Maida. They gave a talk together covering the common problems developers have when learning RxJS. In the talk, they share tips for those learning RxJS. Charles wonders what inspired them to give this talk. Both share experiences where they encouraged someone to use RxJS but the learning curve was to steep. They discuss the future of RxJS adoptions and resources. 

 

Finally, Charles interviews Kim alone about her second talk about RxJS and state management. She explains to Charles that many state management libraries are built on RxJS and that it is possible to roll out your own state management solution with RxJS. They discuss why there are so many different state management libraries. Kim shares advice for those looking to roll out their own solutions.

Panelists

  • Charles Max Wood

Guests

  • Hannah Howard

  • Ben Lesch

  • Sam Julien

  • Kim Maida

Sponsors

Links




rip

JSJ 414: JavaScript Jabber Still at RxJs Live

In this episode of JavaScript Jabber Charles Max Wood continues interviewing speakers at RxJS Live. First, he interviews Mike Ryan and Sam Julien. They gave a talk about Groupby, a little known operator. They overview the common problems other mapping operators have and how Groupby addresses these problems. The discuss with Charles where these types of operators are most commonly used and use an analogy to explain the different mapping operators. 

 

Next, Charles talks to Tracy Lee. Her talk defines and explains the top twenty operators people should use. In her talk, she shows real-world use cases and warns against gotchas. Tracy and Charles explain that you don’t need to know all 60 operators, most people only need about 5-10 to function. She advises people to know the difference between the different types of operators. Tracy ends her interview by explaining her desire to inspire women and people of minority groups. She and Charles share their passion for diversity and giving everyone the chance to do what they love.

 

Dean Radcliffe speaks with Charles next and discusses his talk about making React Forms reactive. They discuss binding observables in React and how Dean used this in his business. He shares how he got inspired for this talk and how he uses RxJS in his everyday work.  

 

The final interview is with Joe Eames, CEO of Thinkster. Joe spoke about error handling. He explains how he struggled with this as did many others so he did a deep dive to find answers to share. In his talk, he covers what error handling is and what it is used for. Joe outlines where most people get lost when it comes to error handling. He also shares the three strategies used in error handling, Retry, Catch and Rethrow and, Catch and Replace. Charles shares his admiration for the Thinkster teaching approach. Joe explains what Thinkster is about and what makes them special. He also talks about The DevEd podcast. 

Panelists

  • Charles Max Wood

Guests

  • Mike Ryan 

  • Sam Julien

  • Tracy Lee

  • Dean Radcliffe

  • Joe Eames

Sponsors

____________________________________________________________
"The MaxCoders Guide to Finding Your Dream Developer Job" by Charles Max Wood is now available on Amazon. Get Your Copy Today!
___________________________________________________________

Links




rip

JSJ 419: Google App Script with Ben Collins

Today’s guest is Ben Collins, who creates online courses, writes tutorials, and teaches workshops around G Suite and App Script. Apps Script is a scripting platform developed by Google for light-weight application development in the G Suite platform. It is an implementation of JavaScript with the express purpose of extending Google apps. App Script was started 10 years ago as a side project, and it eventually took on its own life. Ben talks about some of the different things that App Script can do and where things are stored. They discuss different ways you can get into the script and how to import external scripts from a CDN. Ben gives two examples, one simple and one sophisticated, that you might build from App Script. He talks about event triggers and how authentication is handled. He goes over the three deployment options, namely web app, app executable, sheets add-on, and deploying from the manifest. Ben talks about how triggers are managed in App Script and options for debugging. There is also the option to develop locally as well as in the browser. The show ends with him talking about how to build using HTML in App Script.

Panelists

  • Aimee Knight

  • Steve Edwards

  • Dan Shapir

Guest

  • Ben Collins

Sponsors

____________________________

"The MaxCoders Guide to Finding Your Dream Developer Job" by Charles Max Wood is now available on Amazon. Get Your Copy Today!

____________________________________________________________

Links

Picks

Steve Edwards:

Aimee Knight:

Dan Shapir:

AJ O’Neal:

Bem Collins:




rip

JSJ 425: The Evolution of JavaScript

Dan Shappir takes the lead and walks the panel through the history of JavaScript and a discussion on ES6, TypeScript, the direction and future of JavaScript, and what features to be looking at and looking for in the current iteration of JavaScript.

Panel

  • AJ O’Neal
  • Aimee Knight
  • Charles Max Wood
  • Steve Edwards
  • Dan Shappir

Sponsors

  • Taiko - free and open source browser test automation
  • Split

____________________________________________________________

"The MaxCoders Guide to Finding Your Dream Developer Job" by Charles Max Wood is now available on Amazon. Get Your Copy Today!

____________________________________________________________

Links

Picks

AJ O’Neal:

Aimee Knight:

Charles Max Wood:

Steve Edwards:

Dan Shappir:

Follow JavaScript Jabber on Twitter > @JSJabber




rip

JSJ 430: Learning JavaScript in 2020 with Matt Crook

JavaScript Remote Conf 2020

May 13th to 15th - register now!

Matt Crook joins the conversation to talk with the JavaScript Jabber panel to talk about his experience going through Nashville Software School. The panel discusses and asks questions about getting into programming, working through the bootcamp, and what prospects are for bootcamp graduates.

Panel

  • AJ O’Neal
  • Aimee Knight
  • Charles Max Wood
  • Steve Edwards
  • Dan Shappir

Guest

  • Matt Crook

Sponsors

"The MaxCoders Guide to Finding Your Dream Developer Job" by Charles Max Wood is now available on Amazon. Get Your Copy Today!

 

Picks

AJ O’Neal:

Aimee Knight:

Charles Max Wood:

Steve Edwards:

Dan Shappir:

Matt Crook:

Follow JavaScript Jabber on Twitter > @JSJabber




rip

In the grip of cup fever: This year in Brazil isn't the first time, the game has always provoked passions and violence

On the face of it the Fifa World Cup is all about quality football, generally recognised as the greatest sporting showpiece on earth.




rip

The functionality of riparian zones in flat sandy catchments / Peter Martin O'Toole

O'Toole, Peter Martin, author




rip

An exocyclic π-system extension of the phenanthriporphyrin framework: towards azaaceneporphyrinoids

Org. Chem. Front., 2020, Advance Article
DOI: 10.1039/D0QO00436G, Research Article
Bartosz Szyszko, Damian Dróżdż, Aleksandra Sarwa, Sebastian G. Mucha, Agata Białońska, Michał J. Białek, Katarzyna Matczyszyn, Lechosław Latos-Grażyński
An exocyclic π-extension of phenanthriporphyrin reduces the macrocyclic antiaromaticity of the formed expanded carbaporphyrinoids.
To cite this article before page numbers are assigned, use the DOI form of citation above.
The content of this RSS Feed (c) The Royal Society of Chemistry




rip

Fossil energy: a volume in the Encyclopedia of sustainability science and technology, second edition / Ripudaman Malhotra, editor

Online Resource




rip

According to the scriptures : the death of Christ in the Old Testament and the New / David Allen

Allen, David M., 1972- author




rip

Matthew's new David at the end of exile : a socio-rhetorical study of Scriptural quotations / by Nicholas G. Piotrowski

Piotrowski, Nicholas G., author




rip

Introducing medieval biblical interpretation : the senses of scripture in premodern exegesis / Ian Christopher Levy

Levy, Ian Christopher, author




rip

Scripture and resistance / edited by Jione Havea ; foreword by Collin Cowan




rip

Scripture, texts, and tracings in 1 Corinthians / edited by Linda L. Belleville and B. J. Oropeza ; afterword by Christopher D. Stanley




rip

Liquid scripture : the Bible in a digital world / Jeffrey S. Siker

Siker, Jeffrey S., author




rip

A pentecostal hermeneutic : spirit, scripture, and community / Kenneth J. Archer

Archer, Kenneth J., author




rip

The governor and the king : irony, hidden transcripts, and negotiating empire in the Fourth Gospel / Arthur M. Wright Jr. ; foreword by Frances Taylor Gench

Wright, Arthur M., author




rip

Theoretical study of D–A'–π–A/D–π–A'–π–A triphenylamine and quinoline derivatives as sensitizers for dye-sensitized solar cells

RSC Adv., 2020, 10,17255-17265
DOI: 10.1039/D0RA01040E, Paper
Open Access
  This article is licensed under a Creative Commons Attribution 3.0 Unported Licence.
Ying Zhang, Ji Cheng, Wang Deng, Bin Sun, Zhixin Liu, Lei Yan, Xueye Wang, Baomin Xu, Xingzhu Wang
We have designed four dyes based on D–A'–π–A/D–π–A'–π–A triphenylamine and quinoline derivatives for DSSCs and studied their optoelectronic properties as well as the effects of the introduction of alkoxy groups and thiophene group on the properties.
The content of this RSS Feed (c) The Royal Society of Chemistry




rip

Correction: Insects (Thrips hawaiiensis (Morgan)) change the stereochemical configuration of 1-phenylethanol emitted from tea (Camellia sinensis) flowers

RSC Adv., 2020, 10,17058-17060
DOI: 10.1039/D0RA90047H, Correction
Open Access
  This article is licensed under a Creative Commons Attribution 3.0 Unported Licence.
Ying Zhou, Lanting Zeng, Yinyin Liao, Fang Dong, Qiyuan Peng, Jianlong Li, Jinchi Tang, Naoharu Watanabe, Ziyin Yang
The content of this RSS Feed (c) The Royal Society of Chemistry




rip

Copper–tripeptides (cuzymes) with peroxidase-mimetic activity

RSC Adv., 2020, 10,17408-17415
DOI: 10.1039/D0RA02472D, Paper
Open Access
Le Truc Nguyen, Wing Fat Ho, Kun-Lin Yang
Copper–tripeptide complexs (cuzyme) exhibited peroxidase-like activities that use hydrogen peroxide to oxidize substrates such as 2,2-azino-bis(3-ethylbenzothiazoline-6-sulfonic acid) (ATBS) and trypan blue dye.
The content of this RSS Feed (c) The Royal Society of Chemistry




rip

Coronavirus | Tripura State Rifles men risk infection from BSF soldiers

State health officials are planning extensive tests




rip

The triple constraints in project management [electronic resource] / Michael S. Dobson

Dobson, Michael Singer, author




rip

Troubleshooting Sharepoint [electronic resource] : the complete guide to tools, best practices, powershell one-liners, and scripts / Stacy Simpkins

Simpkins, Stacy, author




rip

JAMA Internal Medicine : Analysis of Proposed Medicare Reforms on Prescription Drug Total Spending and Patient Cost-Sharing

Interview with Aaron Kesselheim, author of Analysis of Proposed Medicare Part B to Part D Shift With Associated Changes in Total Spending and Patient Cost-Sharing for Prescription Drugs, and Francis J. Crosson, M.D., author of Managing the Cost of Medicare Part B Drugs: Implications for the Program and Beneficiaries





rip

The Dentist's Drug and Prescription Guide, 2nd Edition


 

The updated and authoritative reference to medications used in dental practice 

The revised and updated second edition of The Dentist's Drug and Prescription Guide offers a practical and quick reference to medications commonly prescribed in dental practice.  With contributions from experts on the topic, this comprehensive book takes an accessible question-and-answer format, providing answers to common questions dentists ask about drugs. The most updated



Read More...




rip

Comment on “Investigation on the structure and thermoelectric properties of CuxTe binary compounds” by Shriparna Mukherjee et al., Dalton Trans., 2019, 48, 1040

Dalton Trans., 2020, 49,5736-5737
DOI: 10.1039/C9DT03607E, Comment
Aarón H. Barajas-Aguilar, A. M. Garay-Tapia, Sergio J. Jiménez-Sandoval
Copper telluride sensitivity to laser power: effect on the Raman spectra.
The content of this RSS Feed (c) The Royal Society of Chemistry




rip

Metal–metal bond formation of triplatinum cores with a silver(I) ion affording a heptanuclear cluster bearing four Pt–Ag bonds

Dalton Trans., 2020, Advance Article
DOI: 10.1039/D0DT01227K, Communication
Natsuki Yabune, Hiroshi Nakajima, Takanori Nishioka
A triplatinum complex with chelating NHC ligands reacts with Ag(I) and affords a heptanuclear cluster bearing four Ag–Pt bonds.
To cite this article before page numbers are assigned, use the DOI form of citation above.
The content of this RSS Feed (c) The Royal Society of Chemistry




rip

Photophysical, photodynamical, redox properties and BSA-interactions of novel isomeric tetra-cationic peripheral palladium(II)-bipyridyl porphyrins

Dalton Trans., 2020, Accepted Manuscript
DOI: 10.1039/D0DT01063D, Paper
Fabiano S Santos, Carolina H. da Silveira, Fabio Souza Nunes, Daniele Ferreira, Henrique Victória, Klaus Krambrock, Otávio Augusto Chaves, Fabiano Severo Rodembusch, Bernardo Almeida Iglesias
New isomeric tetra-cationic porphyrins containing peripheral [Pd(bpy)Cl]+ units attached at pyridyl substituents were synthetized and fully characterized. The porphyrins present an intense Soret band located in the blue spectral region...
The content of this RSS Feed (c) The Royal Society of Chemistry




rip

ACT For Dummies, 6e (1-Year Online Subscription)


Read More...




rip

[ASAP] Parallel Metabolomic and Transcriptomic Analysis Reveals Key Factors for Quality Improvement of Tea Plants

Journal of Agricultural and Food Chemistry
DOI: 10.1021/acs.jafc.0c00434




rip

[ASAP] Transcriptome Analysis Reveals Candidate Genes for Petroselinic Acid Biosynthesis in Fruits of <italic toggle="yes">Coriandrum sativum</italic> L.

Journal of Agricultural and Food Chemistry
DOI: 10.1021/acs.jafc.0c01487




rip

1,001 Geometry Practice Problems For Dummies (1-Year Online Subscription)


Does geometry have you running around in circles? Feeling boxed in?

Fear not, help is here. Your one-year, renewable, online subscription to 1,001 Geometry Practice Problems For Dummiesgives you 1,001 opportunities to practice solving all the geometry problems that you’ll encounter in your Geometry course. You start with some basics like lines, angles, and planes, move on to volume, circumferences, area, pi, and much more. Every practice problem includes



Read More...




rip

Amy Ripka on being a CEO: &#8216;Nobody ever got anywhere by listening to no'

Lucy Therapeutics founder is taking an atypical approach to finding drugs for central nervous system diseases




rip

Oxea triples European &lt;i&gt;n&lt;/i&gt;-propyl alcohol output for sanitizer and printing ink