Bash on Ubuntu on Windows. The creators update and what we can do with this neat feature.

Installation Guide

Uninstall it and start anew

How to run Linux GUI apps with Bash on Windows

Update: New distro’s coming to Bash/WSL via Windows Store

April 11th passed and now we have another big update of Windows 10 called the Creators update. It adds a lot of new features but the most interesting one from a developer point of view is the Bash console.

Before the Creators update we had bash but it was at an early stage. People that wanted to play with it early had to register for Insiders update of their OS. Now all of us have the latest features with an official stable update.

The new linux subsystem now comes with Ubuntu 16.04 LTS which gives us a lot of new things and also the updated allows a lot more linux software to run.

My favorite update is the one that allows the file watchers to work. What that means is that nodejs apps like grunt, gulp and friends now just work. Of course there are other updates and fixes that allow a full development environment to be set using only the bash console. You don’t need to install the Windows alternatives of the apps you need. Just use bash and run apt-get install xxxx. Software like git, nodejs/npm, php, ruby can be ran under bash now.

One thing that needs improvement for me now is when I use browser sync, it cannot open the browser and I want it to open the default browser I set under Windows. However you can still open you browser and go to http://localhost:3000 and it works.

We’ll see in the near future how many console apps we can use. I personally want bash to be my default shell in every shell program and IDE I have and to run without problems with paths or environment: just like if using bash.exe for windows. I also need to check how mysql, mongodb, docker and similar software behaves. Still having everything that I use for web development under the bash console is way better than using ported to Windows software or a slow virtual machine.

My advice for you is to start using bash on Windows today, set up your own environment and report any error you have on their Github issues pages.

What Do the Popular JavaScript Tools Depend On? -Telerik Developer Network

Cody Lindley explores the dependencies of popular JavaScript tools and frameworks including Angular, React, jQuery, Aurelia and more.

See what famous JS libraries like Angular and React use as their dependencies.

Source: What Do the Popular JavaScript Tools Depend On? -Telerik Developer Network

StrongLoop | Moving toward Express 5

Express 5 is not very different from Express 4: The changes to the API are not as significant as from 3.0 to 4.0. Although the basic API remains the same, there are still breaking changes; in other words an existing Express 4 program may not work if you update it to use Express 5.

Source: StrongLoop | Moving toward Express 5

Node.js adds long-term enterprise support version | ITworld

Version 4.2.0 of the open source JavaScript tool addresses enterprises’ stability needs and support despite incremental updates

Source: Node.js adds long-term enterprise support version | ITworld

The Node.js guys are doing a good job and everything is moving as promised!

Node.js Tutorial by Udemy

Source: Node.js Tutorial

An enormous tutorial covering from the beginning to the end of what you need to know about how to use Node.js, Express.js, MongoDB and Angular.js or the whole MEAN stack for short.

Installing of all tools and servers is covered, project structure, creating an API, etc. From here you will already have a good idea where to go next.

Enjoy!

Node.js v4.0.0 is here!

So we lived to see it. Node.js version 4 is here which means we have the latest V8, ES6 support and the latest security patches for our favorite tool! Well the previous statement cannot describe how much good things just happened. From the creation of Node.js, through the fork of IO.js, until finally the latest version and the merger happened and now the community has the word how Node.js will be shaped from now on.

I am personally very excited about that and I am currently going to test and update one of my Docker apps that installs and uses Node.js through NVM.

I am also expecting a lot of work on this major version and the patches and new features are coming sooner than later which makes it very interesting to use Node.js these days!

Enjoy!

Handling Sync Tasks with Gulp JS | cameronspear.com

Source: Handling Sync Tasks with Gulp JS

Today I really needed some order of execution of the grunt tasks I defined for my latest project. At the same time I wanted these smaller tasks to be separated, not just a single huge pipe or nested functions. Well I was in luck because on this article above everything is explained with a great examples.

JavaScript: from callback hell through then-hell to generators+promises

Lately I’ve been refactoring and then refactoring and then some one of my JS apps every time I find a better way to handle the asynchronicity of the language. The app is a MEAN stack app but I am working mostly on the back-end built for Node.js with the intention to do the same for the front-end when I am satisfied with the back-end code.

So I started writing a Node.js code using the callbacks everywhere even some of my custom functions(in other apps) were made to receive and call callbacks. I was very happy how the callbacks looked like and I was writing them as the second parameter of the functions without thinking: callAsync(params, function(err, data)) all the way!

However little by little I started to add new and more complicated features and the need to nest multiple callbacks did arise. Add to that the checking for error on every callback first line and the code started to be hard to read.

At some time I discovered Promises. I decided to use the bluebird Promises package. It follows the standard and also provides additional functions that at some time are really needed. I was in love and probably still am with the then-chaining, calling async functions, attaching then() to them, returning a new async call that provides a Promise and checking the result in the next then, adding a catch() function to handle any error in the promises chain and avoiding the need to check for an error in every then(). The code was beautiful again and no pyramid of doom existed anymore.

However Promises and then-chaining created a little overhead where every then() needs a callback function and also this callback doesn’t have access to variables in the previous callback – only the result from the previous promise call. There was a need to declare helper variables in the outer scope: the function where the Promise chain is.

Then I discovered generator functions. Their basic usage doesn’t show that you can use them in place of callbacks or Promises but the fact that yield can receive a Promise makes them very interesting. Of course there is a need of a wrapper function to call the generator’s .next() and check its .done status. I decided to use the co package for that.

After all of this the code I use is similar to this one:

co(function* () {

  let user = yield User.findOneAsync({ _id: 12345678 });
  console.log('user', user);

  let user2 = yield User.findOneAsync({ _id: 112233 });
  console.log('user2', user2);

}).catch(function (err) {
  console.error(err);
});

The code above will execute synchronously. Pretty cool, huh?
User.findOneAsync() returns a Promise. yield-ing a Promise will make this type of configuration to wait for the Promise to be resolved/rejected. The resolved Promise’s value will be assigned to the variable on the left(user/user2).

Now the next thing for me is to use ES7’s async functions. I can run ES6 and ES7 code with transpilers like Babel on the back and front-end.
Async functions’ syntax is similar to the one with the generator above without the need to use a wrapper function. I am thinking to wait a little before using them and keeping the code close to what is available natively in the latest Node.js/io.js which is ES5/ES6 syntax at least until the near future(next year?) when the ES7 will be finalized and ready to be used/implemented in the JS engines.

Enable full ES6 support in Node.js – dynamic transpiling with Babel

Finally I’ve decided to go beyond Promises with Node.js and started to look how can I write easily ES6 code today in my apps. I’ve had the option to use io.js which has a good ES6 support by default, starting Node.js with the Harmony flag was also an option. However if I wanted as full as possible ES6 support I had to use Babel. There are 2 options here: static compiling and deploy or dynamic compiling when the application is ran. Babel uses cache so only the changed files are recompiled.

First I had to install babel through npm:

npm install babel --save

It is recommended to install babel globally but I wanted to have it in the local packages for easy CI testing.

Then I added this little piece of code on the top of the main app.js which is the file used when the application is started with `node app.js`:

require("babel/register");

One downside is that the main (app.js) file must contain only ES5 code if the Node.js version you are using is not supporting the new syntax. However you can just create one bootstrap.js that registers babel and includes the app.js which then can contain ES6 code(and vice versa: app.js as the main one including bootstrap.js).

I wanted to have the ES6 support in the tests too and because I use grunt, mocha and istanbul I’ve added this configuration to the Gruntfile.js:

mocha_istanbul: {
    src: 'test/server/',
    options: {
        ...
        mochaOptions: ['--compilers=js:babel/register']
    }
}

That way the tests are running with transpiled files and if I have an ES6 syntax there I am good.

I also had to add/change some configuration in .jshintrc which I use in the tests and in my IDE:

“esnext” : true, //this allows ES6 syntax
“predef”: [“-Promise”] //this allows me to use a Promise lib like bluebird instead the default ES6 implementation

I also changed the JavaScript engine in my IDE (Webstorm) from EcmaScript 5.1 to ES6 to make it happy with the new syntax.

After that I started adding some fat arrow functions and the app/tests are working. It’s interesting how the new features sometimes need more than a basic change. For example the fat arrow functions behave different with this and my code for mongoose static functions that was using return this.somefunc() needed to be changed.

If you use istanbul with the configuration above you may notice that the coverage data shows ES5 code with the source map encoded at the bottom of the pages. There’s an unstable branch on istanbul’s GitHub page about source maps which means that we’ll soon have the coverage in ES6 for free! I’ll also be waiting for the Node.js and io.js to be merged and see what works without transpilers.

The Final Steps to Mastering JavaScript’s “this” Keyword | sitepoint.com

Completing his look at JavaScript’s ‘this’ keyword, Ivaylo Gerchev examines how to use ‘this’ in callbacks and closures, as well as lexical binding in ES6.

Source: The Final Steps to Mastering JavaScript’s “this” Keyword

This article just got me unprepared as I was thinking I already covered all possible situations where “this” is changed by the context. However today I cemented my knowledge!