Cerebro - A milestone tracking portal with artifact discovery


I have been recently working on few requirements. Broadly, the need to accomplish the following:

  1. Track project, their milestones and progress
  2. Each milestone could have an artifact and multiple stakeholders
  3. An artifact could range from text, document, demo or working software
  4. An artifact should be searchable so that anyone within the geographically distributed team could easily discover it and share with customers or other stakeholders.
  5. An artifact could draw new ideas, comments, feedback etc. and a larger collaboration
The requirements are broadly captured in the following mindmap




With broadly these requirements in mind, I came up with the idea of product Cerebro - A milestone tracking portal with artifact discovery. Cerebro is built on a MEAN JS stack and took merely 5 days of effort to prototype.

The full code and requirements are detailed on bitbucket.



The MEAN JS stack


What is MEAN JS?
MEAN stack is a framework based on full Javascript stack: Mongo DB, Express JS, AngularJS, Node JS with JSON (Javascript Object Notation) as the data transport format.

  • Mongo DB: A leading NOSql database
  • Express JS: Web application framework based on Node JS suitable for web and mobile.
  • Angular JS: HTML 5 MVVM (Model View ViewModel) based responsive framework
  • Node JS: A JS platform based on Chrome's Javascript engine

In addition, you could use:

  • Mongoose (Object Document Model) for a quick schema based solution for application's data.
  • npm and bower as the package managers
  • grunt task runner or gulp build system
  • karma and mocha/jasmine for unit tests
  • Bootstrap or Angular Bootstrap for styling
  • Jade templates with stylus for css

Why do I use MEAN JS?
Here are some of the reasons why you would use MEAN JS:

  • Rapid development with boiler plate code
  • Simple and maintainable code with existing JS based project skeleton
  • When you are looking for an isomorphic Javascript based full stack
  • Saves a lot of data transformation across layers since all components speak JSON
  • With package managers developing, reusing and sharing code becomes super easy and fast

What are the alternatives to MEAN JS?
MeteorJS is a cool and terse and MEAN IO are few alternative.

Useful links for comparison?
stackoverflow - mean.js vs mean.io
meteorjs vs mean

Happy coding with JS ...

Lightwave - Opensource vSphere's core IDM solution with native tools support


Lightwave is VMware's initiative to opensource the identity and access management stack which forms the core of VMware's flagship vSphere product.

The stack consists of a state of art enterprise grade solution that includes:

  • Directory - a multi-tenant store to hold the users, groups and various configuration objects
  • Certificate Authority - directory integrated certificate authority
  • Authentication Framework
  • Secure Token Service (STS) - support for Open ID Connect, SAML and bunch of other authentication providers
  • Single Sign On Services - REST based API for registering service providers, identity providers and integrating with external identity stores such as Active Directory and Open LDAP
  • Native Mac and Windows UI tools to administer each of the components


Lightwave can be hosted on VMware's cool Photon OS (that boasts of less than 20s reboot) or using a Docker container.

The full source code is hosted on github at:
https://github.com/vmware/lightwave


You could download the binaries:
https://vmware.bintray.com/lightwave
https://vmware.bintray.com/lightwave_ui



AngularJS - Structure your projects along the functional axis


One of the important things that everyone comes across when one starts a new project is how to structure it. Although AngularJS seed project does have some guidelines on how to structure the application.

It somehow makes a logical sense to me to align the code along the functional axis as opposed to a technical one. Hence, I prefer using the following structure for my AngularJS projects:

app
  |
  -------- assets
  -------- styles
  -------- bower_components
  -------- src
               |
               ---------- shared-module
                                        |
                                        ------------- util
                                        ------------- directives
                                        ------------- features (incl. cntrls+views)
               ---------- module-1
                                       |
                                       -------------- services
                                       -------------- feature-1
                                                               |
                                                               ---------- controller-1
                                                               ---------- routes-for-feature-1
                                                               ---------- views-for-features-1
                                       -------------- feature-2
 
  -------- tests
               |
               ---------- shared-module-tests
               ---------- module-1-tests
               ---------- coverage
  -------- dist
  -------- GulpFile


Here are few advantages of the above structure:
1. One can easily find the functionally related code
2. Improves testability of the code since the related features and tests go together
3. Applying a route, security, logic across similar modules, features becomes easier
4. You can move/re-factor a feature with ease


In addition to the above structure you would need a dist folder where you could build the code, concatenate the source js and css, minify it and copy it over for deployment. I prefer using code approach (as opposed to config) based automated task runner (aka streaming build system for JS) Gulp for this task. You could use Grunt or any other equivalent.


Here are few links that could help you choose:

Gulp vs Grunt I
Gulp vs Grunt II
Gulp vs Grunt III



Yum Tum with Borivali Biryani


Being brought up in a foody family of non-veg eaters, one thing I always need to ensure that no matter what the occasion is the food served has to be savory and delicious. Having previously served the themes of South Indian, Maharashtrian, Goan delicacies, this time around we decided to go with biryani and some kababs. There are plenty of outlets which offer good quality biryani and kebab stuff in Mumbai. Lucky (Bandra West), Jeff (Bandra West), Alpha (Andheri West), KK Punjab (Vile Parle East) to name a few .. Here are few more options from Zomato.

Borivali Biryani (Goregaon eat outlet near the railway station) was preferred choice merely due to proximity to my work place and having read of their reputation over net. Last minute decision meant less time for preparations. So the plan was to pick it up on my way to home. We entered the restaurant around 08:00 PM. The owner at the counter and the person taking the orders warmly greeted us. The thing that caught my eye was that there were more number of waiters than eaters. A suspicious thought crossed my mind, is it really sought after? Then a board which read Home Delivery caught my attention. Ah! Most of the eaters prefer it home delivered or take away. I was relieved. The wait was worth it ... we enjoyed every bit of the biryani. A definite must eat!!!