Category Archives: JavaScript

Chatbot with Microsoft Azure

In lieu of SleepScore Labs newest sleep solution, SleepScore App, our Customer Service team wanted to create a chat alternative to support this product launch.

Over the course of three furious weeks (one to vet out the needs, and two to build), I worked one-on-one with our Customer Service Manager on outlining the bare minimum of what we’d really want in this type of feature.

It’s safe to say, that you can get trapped inside of a rabbit hole fairly quickly with ideas but after easing in a bit our solution was to design an FAQ (Frequently Asked Questions) Chatbot.

We took as much existing data we could from previous customer service engagements, organized them a bit and indexed them within a Web Service called QnA Maker. I connected that dot to a Microsoft Azure Bot Service as a NodeJS Web App and published it to a channel called Live Assist.

A NodeJS chatbot powered by QnA Maker, Microsoft Azure and channel, Live Assist.

Housed entirely inside of Microsoft products, I was for the most part impressed on how straightforward it was to put all three together to build out something real customers could actually engage with. There was no additional coding on my part and getting to the finish line on time was in itself a win.

If you ever wanted to try building this out yourself here’s the bare minimum you’d need:

  • QnA Maker: which will index your questions and answers and open an end-point for your web app (chatbot) to consume.
  • Azure Bot Service: which is actually how you create the chatbot.

The optional requirement here is the channel. Building out a chatbot requires you to point your chatbot to a channel. In our case it was Live Assist because that was the requirement. But this could easily ship to other channels like Facebook, SLACK, etc.

I’ll be making a follow-up post to this for the most part as a retrospective to outline the journey and its gaps to this implementation in hopes that one day I have the opportunity to make more improvements at this first pass on building out a chatbot.

Thanks to, Microsoft Developer US for getting me started.

Differences between constructor vs ngOnInit() method

Constructor ngOnInit
Typescript feature nothing to do with Angular One of the Angular life cycle hook method
constructor is transformed to function with the same name as class created ngOnInit being added to prototype of the class created
Called by Javascript Engine Called by Angular
Constructor is automaticlly called at the time of creating object of the class Invoked by Angular when everything in the component is ready
Used for Injecting dependencies Actual business logic performed here
Not everything in component is initialized at the time of invocation Everything is ready at the time of invocation

 

Thanks to, Angular js Wiki

SleepScore Labs Data Dashboard in Angular 2

In April of 2017, I was tasked with design and development of a data visualization dashboard for new customers of SleepScore Max, a non-contact sleep improvement system. Designed for both iOS and Android users, my role was to build a web application which would compliment this sleep solution experience by connecting the dots between sleep data and pragmatic advice in a more robust fashion.

I took it upon myself to go head first into Angular (granted my previous experience with AngularJS) but I got a first-hand view of how different both JavaScript frameworks were.

SleepScore Max login page written in Angular.

SleepScore Max login page written in Angular.

I kickstarted this project prior to the full standardization of Angular CLI so I was pretty much left to my own devices on how to properly build and deploy this application into a cloud instance.

I credit PluralSight author Deborah Kurata as the initial key to making this project work. Specifically, her course in Angular: Getting Started was a jaw-dropping course on Angular’s moving parts. Needless to say, now that I have both AngularJS and Angular perspectives, my best assessment on distinguishing between AngularJS and Angular is that while AngularJS thinks of drafting features from controllers and scope, with Angular you need to abstract those things via components.

To dumb it down for me, I’ve come to think of a component as simply a web page (the overall object), while the super powers you write inside of that web page act as the methods and properties of that web page. Coming to that conclusion wasn’t linear. I needed to dive into TypeScript since it is the driving force in authoring modern Angular apps.

I’m still tinkering with TypeScript and have a long way to go to understand its full value but I definitely became a fan simply because it makes a JavaScript author a bit less error prone. Let’s face it, web browsers are still running JavaScript in ES5 and not ES6. Having that superset above JavaScript to reinforce little things like the data-type of an object is awesome and learning how to write a component in TypeScript helped reinforce how I’ve dumbed down the difference between AngularJS and Angular.

A splash of jQuery animation for the sleep score petals, CSS styling to chart out the breakdown all inside of an Angular dashboard.

A splash of jQuery animation for the sleep score petals, CSS styling to chart out the breakdown all inside of an Angular dashboard.

Yes, this dashboard is also responsive.

Yes, this dashboard is also responsive.

What’s next? I’m already thinking about the upgrade path into Angular version 5, smoothening out continuous integration and making Angular CLI the gold standard for facilitating all portions of this project.

 

Back to Basics: Scoping And Hoisting

So, fellow JavaScript developers, my name is Fox Reymann, and tonight I’m going to present a talk, Ace JavaScript Interviews, Scoping and Hoisting. If any of you think the talk is too simple, let me start with a quiz. I have some code here, and as you can see, there’s a function. I’m running the function. I could…yeah, okay. So, we have an anonymous function. Okay, I have a function. I’m running the function, and I’m console logging x. So, what is going to be console log when I run this program? You have 10 seconds to look at the code and think. Okay, who’s for 10? Okay. Okay. Who’s 1? Undefined? Gs? Okay, so, yes, it’s 10, so no. Yes and no. It’s not Gs, not 1, not undefined. It’s 10. If you don’t know why, you will understand after the talk. If you listen carefully, yes. So, scope is a visibility of variables defined in one part of the program to another part of the program. So, if you have a variable A, can you use it above in the code, below in some function in a class, anywhere. So, here in my program, I’m defining a variable a. What would be the scope of this variable? Yes, it’s global. Now, there’s a function B, variable B. What is going to be a scope of this variable? – [Men] [Crosstalk] – Function scope, correct. This will be visible everywhere in this function, here, here, and also here. Yes, perfect. Boom, boom, boom. Function c, we are defining a variable with “let” and the constant with “const.” What is going to be a scope of these two, of this variable and this constant? – [Crosstalk] – A statement scope, you don’t call it a statement. Yes, please? – [Inaudible: 00:02:49] – Block, yes. Do you know why they change this [inaudible 00:02:54], and now it’s a block scope? – [Inaudible: 00:02:57] – I don’t know, but I think they tried to make it just more similar to other programs, I think, just so guys from Java C# can…they can think that…they can understand JavaScript. They don’t understand it anyway, because you need to understand JavaScript to understand the JavaScript, but they tried to make some attempt to make JavaScript more like Java? Stupid idea, and yes, so, now there’s another example. Function D, I’m running function D, and I’m console logging D. What is going to be console logged? – [inaudible 00:03:37] – Error, reference error, correct. Let me just prove it to you. I need to just comment out this console log before, so, where’s the function D? Blah, blah, blah, blah, blah. Function D. Reference error D is not defined, yes. Sorry, guys, my F function doesn’t work. Enter my bash profile. Okay, so, I’m going to comment this statement. What is going to be console log now? – [Crosstalk] – Undefined, yes. Most people say it’s undefined, yes. That’s correct. Do you know why? – [Inaudible 00:04:31] – No, no, no. I… I’m giving the talk. I will explain. This is because of hoisting, behavior specific to JavaScript, which means moving declarations of variables to the top of their scope. So, in this case, declaration of definition, declarations of this variable is here, because this variable has a function scope. And here in the code, the [inaudible 000:05:04] is defined with 10. So, when you declare a variable, it’s declared, but it’s undefined. You console logged it. It’s undefined in here, so now when I will run the program, it will say undefined. You can see it here. Okay, let me just comment it out. Next, boom, boom, boom, boom, boom. What’s going to be console logged? What’s going to happen? – [Inaudible 00:05:38] – Correct, because this function is also hoisted. So, in program languages without hoisting, you do B in error, but here this function is moved to the top of the current scope, so, to the top of the program even before the title of the talk. Now a function FF. – Undefined. – Undefined, you say. – [Crosstalk] – Yes, I got you. Nobody knows, okay. Yeah. – [Crosstalk] – No, the function is the closest answer. Yes, I will show you FF is not a function type error, yes, because this variable is declared at the top of the program, somewhere at the top. And here the function is being assigned to this variable. Here it’s undefined. You try to run undefined as a function, and you have a type error. Oh, nothing else, almost the end of the talk. Now I will explain you why this is 10. Now all of you should understand why this is 10, even guys that thought it’s 1 or Gs. So, in this code, this variable, X, is a function scope. New to hoisting, it’s being declared in here. After declaration it’s being undefined. Now give this statement which says if not X, so, if not undefined, which is equal to true. So, each statement is being executed. X is 10, and now when I console log, yes, it’s 10. Thank you, guys.

Back to basics of JavaScript.

Importing CSS Breakpoints Into Javascript

A quick and easy solution to this problem is to have your JS import the breakpoints directly from the CSS values in the DOM. This solution brings the current breakpoint variable into your JS in a way that’s:

  • Simple & Lightweight
  • DRY
  • Compatible with all browsers that support media queries (IE9+)


See Lullabot article, Importing CSS Breakpoints Into Javascript

4 Keys to a Clean Angular Implementation

tldr

  1. Modify all model properties in the controller rather than the view; let the view have access to the capability via controller functions.
  2. Keep all magic values (if you must have them at all) in the controller accessing them in the view via controller functions.
  3. Evaluate all comparison, computation, and logical expressions in the controller, giving the view access to them via controller functions.
  4. Pass to a controller function only what it does not already know: the loop parameter if in a loop, or no parameters at all if outside of a loop.

4 Keys to a Clean Angular Implementation

The Friendship Algorithm in JavaScript

I’m a big fan of The Big Bang Theory and I couldn’t resist playing around with Sheldon’s friendship algorithm. It’s pretty much one object represented as Sheldon guided by the module pattern (thanks to Addy Osmani).

I encourage you to fork this code and get some zen coding in. Since the logic is “safely” protected by Sheldon, you should be able to integrate any boilerplate of your choice for some fun interfaces. Also, feel free to refactor the logic when needed. It could always be better. That said, kudos to Wolowitz for plotting out the loop counter and escape.

The Friendship Algorithm

You can also view the demo here, here.