Archive for the ‘Technical Posts’ Category

ES6 Generator functions – A beauty !

leave a comment »

ES6 Generator* function is one of the unique features which helps maintain a flat & clean code.

Let’s consider a simple example of getting pizza.

Promise based implementation:


Generator fn based implementation:



  • Generator fn differentiates itself from other functions by *
    ie., function* pizzaGenerator() or function *pizzaGenerator()
  • runGenerator() can be considered as a util that executes generator function.
  • generator() returns iterator object which exposes next() that helps move to targets in sequence.
  • yield in generator function*() is synonymous to pause. It helps pause the next line execution until the current execution result is obtained (be it function call or promise)

It’s usage has made my code very straight-forward, flat & clean.


Written by thangaveluaishwarya

May 29, 2017 at 12:27 AM

Webpack configuration for multiple environments : different ways

with 3 comments

I had searched much on direct & easy ways of webpack configuration for multiple environments. I was not able to find a straight forward article and hence I’m writing about it.

To configure webpack manually for multiple environments (say dev/prod), we can do it in the following ways,

  1. Configure in a single file
  2. Configure in multiple files

Below is the difference between the both,

Single File Configuration Multi File Configuration
 When to use?  can be used when only few
config properties
between env differ.
 can be used when most of the
config properties
between env differ.
No of config files single file for all env
eg: webpack.config.js
 mutiple files used.
One file for each env.
eg: dev.js, prod.js
config definition config declared as function
& env is passed
2.a) config declared as obj
2.b). config declared as fn -official link
(script command)
 webpack –env= <env> 2.a) webpack –config=<filepath/filename>
2.b) webpack –env= <env>
Disadvantage code-cluttering increases
with increase in different values for
same config properties across env.
 repeatability of common env
config properties across files.

Therefore based on one’s project scope and need, one can choose which approach to go with.

Approach 1: Single File Configuration:


Note: config is declared as a function with environment param.

Add the below in the scripts section,


In the above command, --env tag passes environment as ‘development’ / ‘production’ to webpack’s config function.

Approach 2: Multi File Configuration:
Here separate files are created for each environment.

This slideshow requires JavaScript.

Note: Here config is declared as an object.

Approach 2.a) package.json:


In the above command, --config refers to the config-file-path .
Default file path is webpack.config.js or webpackfile.js

Other approaches:

  • Approach 2.b) Invoke respective env files from webpack.config.js as given in official link (Manual way)
    • webpack.config.js: Here config is declared as function. Respective env config files are invoked based on env.
    • package.json: webpack --env = <env>


  •  Automatic configuration for production: webpack -p . Official link

Written by thangaveluaishwarya

April 17, 2017 at 10:28 AM

ES6 modules & classes with Webpack: quick setup & usage

with one comment

For setting up and using ES6 Modules with webpack perform the following steps:

  1. quicky setup js-sdk library using webpack
  2. Install babel-loader and its dependencies.
    npm install babel-loader babel-core babel-preset-env --save-dev
    Here babel-loader is the main package for invoking Babel transpilation. It requires babel-core for apis. babel-presets has the plugin for module-loading.
  3. Configure webpack.config.js
  4. vi index.js

    //Class definition
    export default class Imax {
      get movies() {
        return ['Logan', 'Beauty and the Beast'];
      bookMovie(name) {
        return `Thank you for booking with Imax. Booking ID is ASDFFG|${name}`;
    module.exports = new Imax();
  5. webpack // build library
  6. webpack-dev-server  // host library. (hosted locally here)
  7. Client side:
    $.getScript('//localhost:8080/assets/imax.js').then(() => {
        let selectedMovie =[0];
        console.log('Movie list: ', Imax.bookMovie(selectedMovie));
  8. O/P:
    Thank you for booking with Imax. Booking ID is ASDFFG|Logan


Written by thangaveluaishwarya

March 24, 2017 at 11:17 AM

Quickly setup JS SDK library using Webpack

leave a comment »

Technology used:

  • node version :  6.9.4
  • npm version :  3.8.5
  • webpack      :  2.2.1
  • webpack-dev-server : 2.4.1


  • mkdir imax //project name
  • cd imax
  • npm init
  • npm install webpack --save-dev
  • npm install webpack-dev-server --save-dev //for development use only
    webpack-dev-server helps serve the webpack bundle.
  • vi index.js
    module.exports = { 
      greetings: 'Welcome to IMAX movie booking', 
      movies: ['Logan', 'Beauty and the Beast', 'Transformers'] 
  • Now on running  npm run build, the following error occurs,
    No configuration file found and no output filename configured via 
    CLI option. A configuration file could be named 'webpack.config.js' 
    in the current directory. Use --help to display the CLI options.

    webpack requires webpack.config.js file.

  • vi webpack.config.js

    module.exports = {
        entry: './index.js',        //app entry point
        output: {
            path: 'dist',           //output directory absolute path
            publicPath: '/assets/', //public URL address of output files
            filename: 'imax.js',    //output-bundle filename
            library: 'Imax'         //helps export output-bundle as library

The configuration is done. Now execute the below commands,

  • npm run build
    It internally invokes webpack, which compiles & bundles the library file.
  • npm start
    It starts the dev server & serves the bundled file at http://localhost:8080/assets/imax.js

Client side JS:

$.getScript('//localhost:8080/assets/imax.js').then(() => {
    console.log('Movie list: ', Imax.movies);

You can also directly add the script in html and use the library functions.


Welcome to IMAX movie booking
Movie list: ['Logan', 'Beauty and the Beast', 'Transformers']


Written by thangaveluaishwarya

March 13, 2017 at 10:02 AM

Devil or Deep Blue Sea ? The pain in choosing the two heroic MVC frameworks

with 5 comments

Of late, for the past few months I had been working on Ember. Few of my old posts would have been on angular-1.x. From my hands-on in both, I’m listing the pros and cons observed. This blog definitely doesn’t mean that I’m anti-angular now.

Angular and Ember both are client-side framework giants which help develop single page web applications. The below comparison is in reference to ember-1.x and angular-1.x

  • Coding style:The significant difference that I felt when I was working with ember was its coding-standards – ’ember way of coding’
    ie., In angular if there are different ways to do a single task and the developer can make the choice based on his needs, ember provides only one best way to do a task and the developer is forced to follow that. This inturn lead to clarity, reusability & scalability advantages when the app got bigger.
  • Data Layer: Ember has an excellent optional data layer. Ember’s model classes help a great way in handling properties and its relationships, dirty checking etc.,
    In angular, we don’t have a proper model-base class. It attaches everything to $scope.  Dirty check using $digest at times has performance lag.
  • Data Store: In Ember, we query data using ember data store query. The data fetched is then stored in ember-data-store. When second request is made, results are fetched from in-memory store.
    Whereas angular treats every request to be new. It discards what it already had and makes a request again. Though angular services help store data, they do not serve upto the capacity of ember-data-store.
  • Computed property in ember observes change in property value dynamically during runtime.
    In angular this is done using $scope.$watch but it gets tedious when that particular object had to exist in other controllers too also causing performance degradation.
  • Project Structure: Ember’s pod structure helps organise app in a feature driven approach i.e., our files are grouped by functionality  rather than by type. This gives a lot of control and helps scale apps when they get bigger.
    Angular also helps structure code based on feature but angular is very flexible
    The difference I would like to highlight here is  Ember drives the pod structure, whereas in angular the developer drives the structure.

Accepted that, there was a havoc in developers mind when we where told that almost most of the code in angular-1.x cannot be reused / migrated to angular-2.x. This created a little tension and confusion while selecting frameworks.

However now looking at angular-2.x features (like performance optimisation, native support, es6 & es7 features), it’s sharply showing that it would give a great reach for forthcoming projects which would implement it.
Ember-2.x is also of no less with its features like very high speed performance, server-side rendering etc., [Ember-2.x coupled with Glimmer engine – the app is going to fly].

Having worked in both the frameworks, I feel Ember and Angular both are close to eachother and are equally good. The main determinant in choosing the framework is the learning curve,  community support, regression free migration to releases, time to deliver etc.,

Written by thangaveluaishwarya

January 17, 2017 at 12:16 AM

Error: [$interpolate:interr]$interpolate/interr? and $sce

leave a comment »

 When trying to load an iframe with url value fetched from controller, interpolate error occured as follows,

Error: [$interpolate:interr]$interpolate/interr?p0=%7B%7BembedUrl%7D…
  at Error (native)
  at v (
  at Object. (
  at n.$digest (
  at n.$apply (
  at Object.e [as invoke] (
  at d (

 Interpolate means , to alter/corrupt by adding something new. Angular assumed url loaded in iframe to be a corrupt one.

 This problem can be solved by using $sce service(Strict Contextual Escaping) with which we can mark the object(url) as safe.

app.controller("DemoController", function ($scope,$sce) {

  In the above code, url that has to be fetched in iframe is passed through $sce.trustAsResourceUrl(url). It returns an object that is trusted by angular which can further be used in ng-src.

 Did you know that, the above problem can also be solved by whitelisting url.


Quick Notes on Angular: Difference between angular.module(“app”) and angular.module(“app”,[])

leave a comment »

  • angular.module(“app”,[]) – helps define a new module called “app” . The array will contain different other  modules that this app-module depends on.
  • angular.module(“app”) – helps to get the reference of  the already created “app” module.



Written by thangaveluaishwarya

May 19, 2015 at 12:35 PM

Unsatisfied Dependency Exception : CDI 1.1 + Bean Validation + GlassFish 4.0 -> requires jersey-gf-cdi.jar upgrade

with one comment

Recently,  I faced Unsatisfied Dependency Exception, when trying to integrate BeanValidation with CDI 1.1 . Independently (without integration) everything worked fine. Looks like, the present Glassfish version 4.0 doesn’t support CDI 1.1 + Bean Validation together.

To be still clearer, Jersey (reference implementation for JAX-RS)  jar related to CDI  i.e., jersey-gf-cdi.jar in GF-4.0 version, is not supporting this integration .

I made the below changes, for Bean Validation integration with CDI 1.1 in Glassfish 4.0 to work.

Applicaiton Server used : Glassfish 4.0

Technology : JEE-7, CDI 1.1

Exception Trace :

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=Foo,parent=Foo,qualifiers={@foo()}),position=-1,optional=false,self=false,unqualified=null,350112977)

at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(
at org.jvnet.hk2.internal.Utilities.justInject(
at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(
at org.jboss.weld.bean.ManagedBean.create(
at org.jboss.weld.context.unbound.DependentContextImpl.get(


Solution :

  • Download jersey-gf-cdi-2.0.jar . Download specifically 2.0 version for glassfish4.0. If other higher versions 2.10 are used, incompatibilty with other jars (firstly with jersey-server.jar) will arise.

  • Rename the jar to jersey-gf-cdi.jar
  • Replace it in glassfish4.0/glassfish/modules/
  • Delete osgi-cache folder -> Path : glassfish4.0/glassfish/domains/domain1/osgi-cache
  • Refresh and restart glassfish. New osgi-cache will be created in domain 1 with the latest jersey-gf-cdi.jar. Problem will be solved 🙂

This issue will be resolved in Glassfish-4.0.1 version (not released yet). We’ll have to do the above till GF-4.0.1 is released.

Have a great day 🙂

Reference :

CDI – Lifecycle Management by Container

with 3 comments

We know that, CDI Managed Beans are contextual. Their lifecycle management is done by the container. One of its main advantages is type-safe dependency injection.

But how does it do it?
In the below code, during application initialization process, the container checks for Type-Safe Resolution for News bean annotated with @Inject and then instantiates it.


Here the container checks ,

  • if the bean type is equal to the required type(type: News here) at the injection point in Consumer Bean class.
  • if the qualifier of bean is equal to the required qualifier at the injection point.
  • (If no qualifier specified , then default qualifier is @Default)

public class News {
  public String getLatestNews(){
    return "FIFA 2014 WorldCup";

@Path(value = "consumer")
public class Consumer {

  private News news;

  public String tweetLatestNews(){
    return news.getLatestNews();

Any mismatch will result in unsatisfied or ambiguous dependency problem.




New DelegatingScript Base Class – Groovy 2.2 feature

leave a comment »

Script base class of Compiler Configuration can be customized.
Delegating Script Base Class helps to delegate the calls in a script to a class that has DSL methods/functions & variables.

import org.codehaus.groovy.control.CompilerConfiguration

def scriptInfo='''
        model="Nexus 5"

class MobileDealer{
    String model
    void getModel(){
        println "Mobile : $model"

def compilerConfig=new CompilerConfiguration()
def shell=new GroovyShell(compilerConfig)
def script=shell.parse(scriptInfo)
MobileDealer m=new MobileDealer()
  • Line 1 – import package of Compiler Configuration class
  • Line 3-6 has the script where the delegate is set and is run finally.
  • Line 8-13 has the class declaration of the delegate class MobileDealer. The methods and variables in this class can be reused commonly in scripts.
  • Line 15new instance of compiler configuration is created
  • Line 16DelegatingScript is set as the base class for that particular compilerConfiguration instance
  • Line 17-new groovyShell instance is created with the present compiler Configuration
  • Line 18-The above “scriptInfo” is parsed to DelegatingScript type
  • Line 20-MobileDealer class is set as delegate in the script.
  • Line 21-the script is run.


Written by thangaveluaishwarya

February 14, 2014 at 12:32 PM