Live Debugging Webhooks with Ngrok

ngrok is an awesome service – it creates secure tunnels to localhost. With ngrok, you get a url like http://459387bb.ngrok.com which is actually tunnel to a port to your local machine. So any request you make to that url is served by the app that you run on that port.

I know there are many cool services to debug webhooks like Requestbin – but the main benefit of ngrok is the app keeps running on your app, serving live traffic. So you can debug it in real time.

In this blog post, we would use a Node.js server with ngrok to serve Mandrill webhook requests.

Installing ngrok

Downloading and installing ngrok is pretty easy as you can find here — https://ngrok.com/download. However, if you’re on OS X and use Homebrew, you can install it with just one command:

Creating a Node.js App

Here’s a sample Node app that listens on port 3000 and parses the mandrill payload using body-parser package.

Tunneling Traffic

Once we have the app running on port 3K, we can ask ngrok to create a tunnel for us. For this we just need to pass the port number to the ngrok command:

We would get an url soon afterwards. We can use this url to POST requests. In our case, go to your Mandrill account and create a webhook. Mandrill will send events to this url and it will be served by your app, running locally on your machine. You can make changes to the codes and restart anytime.

Awesome, no?

Using ES7 async/await today with Babel

Let’s take a code snippet that contains the demonstration of async/await — https://gist.github.com/patrickarlt/8c56a789e5f185eb9722 – our objective is to transpile this piece of code to ES5 (current day Javascript) so we can run it with today’s version of NodeJS.

You will notice a command on top of the snippet which no longer works because Babel JS has changed. I am going to describe how we can do it with the latest version of babel as of this writing (6.1.4 (babel-core 6.1.4)).

Install Babel and Plugins

The new Babel depends on individual plugins to transform and parse codes. To transform async functions, we shall use the transform-regenerator plugin. We also need to add the syntax plugin to recognize the async/await syntax. Otherwise Babel won’t recognize those. Apart from that, we also install the ES2015 preset which includes a sane set of plugins for transforming ES6 to ES5. We will keep those so we can use other ES6 goodies.

First we install babel-cli globally:

Here’s our package.json file so you can just do npm install:

Configuring Babel

Here’s the .babelrc file I put in the same directory:

The file tells babel how to transform your code.

Transpile & Run

Once we have installed the dependencies, we can then start transpiling the codes to JS:

You might run into a problem like this:

It’s because we need to include the regenerator run time. The runtime is packed in the babel-polyfill we have already installed. We just need to include it in our source code. So the final github.es6 file would look like this:

Now if we transpile and run again, it should work fine.

ES6 on Node.js (And Heroku)

I will get straight to the point. ES6 is awesome and we want to use it in our Node.js project. We would use Babel to convert ES6 codes to ES5 compatible Javascript for Node. We first install Babel.

Now we write our awesome app in ES6:

We could use Babel to transpile ES6 to ES5 and then run the ES5 code in Node. But instead we shall directly run ES6 with the “babel-node” binary. The babel-node binary transpiles ES6 code in runtime. So we don’t need any watchers or manual transpilation.

We modify our package.json’s script’s section to add the babel-node binary:

Now if we push to Heroku, it will work fine 🙂

নোডস্কুল – লার্নইউনোড – পর্ব ১

ভিডিও এডিটিং এ আমার অভিজ্ঞতা নেই বললেই চলে, চেষ্টা করেছি মাঝে মাঝে জুম ইন আর জুম আউট করে কোড এবং কনসোলের উপর ফোকাস করতে, কিছু কিছু ক্ষেত্রে জিনিসটা স্মুথ হয় নি, এডিটিং জনিত ত্রুটির জন্য অগ্রীম ক্ষমাপ্রার্থী

Tessel: Review

Tessel is a micro controller that runs JavaScript. It is NodeJS compatible – that means you can take advantages of npm and all the NodeJS awesomeness with it. The key attraction for me was the built in Wifi, makes it very easy to connect to the internet. Tessel has a good collection of modules which you can connect to the board to extend it’s functionality. The modules are listed here: https://tessel.io/modules. Each module has a dedicated npm package. You just have to install the package and require it to interact with the module. Cool, no?

I ordered a Tessel from their website on June 14. I got the board at hand today, July 20. They shipped via DHL global mail.

Here’s the tessel main board:
Tessel Main Board

I also purchased a GPRS module to interact with mobile networks. Here’s a photo of the module connected to the main board:
Tessel with GPRS Module

Setting It Up

Setting up was easy. I already has NodeJS installed. I installed the tessel command line tool.

After tessel is installed, I tried listing the devices:

Then I copied the example blinking codes and tried them out. All worked fine. So my tessel was working! Then I tried listing the available wifi networks:

I connected to my home wifi:

It connected to the Wifi just like that! Awesome!

Then I tested out the instructions on the “Tweet” section which uses the recently connected WiFi to send out a tweet.

The WiFi is working excellent!

The GPRS Module

Now I connected the GPRS module and tested out the sample codes. I used a spare Banglalink SIM to send out the SMS. It turns out that you don’t need to type the number in international format. The 017******** format works too 🙂

tesla

Just a quick note: If you follow the official example (it sends a text on gprs.ready event), and then kill the process by hitting Ctrl + C, you might have issues controlling the GPRS module without restarting it. So I think for testing, we can use the Tessel REPL from the command line: