A year of exciting journey

A year has passed since I left my corporate job and started an exciting journey. I was not expecting this time fly so fast. One of the reasons behind leaving a well-paying corporate job was that I was not able to satisfy my hunger for knowledge. I used to feel guilty of not utilizing my time in things I wanted to do and rather get stuck in things I call unavoidable clutter. Well, this year, I had been doing what I thought was the best use of my time and it is an amazing experience.

I want to highlight some of the achievements of 2018 for a record.

A small corporate office in Delhi – This was the first step towards going full-time agency way. The ideology followed was that of a lean startup – Get only what is absolutely necessary and nothing more. Initially the office was entirely open but as the projects started flowing, a cabin for client calls and personal discussions became a necessity and this was addressed two months back.

A team of engineers – I decided to engage with young and energetic talent. Although it takes some time and patience to make them technically productive and set right expectations but it is worth the effort. We believe in an open culture and people don’t hesitate to seek help if they are stuck. Today we are a team of seven and the energy on floor is high.

Long term clients – One of the testimonies of whether we are heading in the right direction is when the clients decide to stick with us. Nothing can beat a feeling when one project completes and the client is happy to offer another. We have been lucky in finding such clients but I must say the decision to stick to us is because of the dedication of the team to serve.

New technologies and frameworks – We decided to stick with cutting-edge technologies in web and mobile development. We built projects on latest technologies from ground-up and delivered them successfully. We also keep looking for opportunities in other languages which we are still learning.

Apart from using languages and sdks, we also decided to explore popular CMS platforms like WordPress and Umbraco. We are excited about these platforms and are planning to add more (e-commerce and ERPs) to our toolkit.

In the coming year, I hope we keep our pace and enjoy this journey.

Thanks,
Naveen

Advertisements

Swagger/Open Api

I got a chance to implement Open Api (aka swagger) recently in one of my projects and I thought I should pen down my experience with this interesting concept.

We have been working on this project from last six months. We were asked to build a modern front-end dashboard of an existing application dealing in travel domain. We picked VueJs as a framework of choice to develop this application. We also picked an interesting visualization library (Echarts). We decided that the front-end will be built using mock-api stubs and integration with back-end will take place at a later stage.

Things were going well and we developed the front-end with dummy data. Once they decided to integrate front-end with the back-end, the overall speed of the project started going down. Although we assumed that the back-end team will build their api’s by referring our mock api stubs and there will be no issues in integration, things did not go as we expected. Back-end team did follow the mock api stubs but they wanted changes in data structures at many places to suit their technology. Also there were many cases where they sent wrong field types in api response which they were not aware of.

It took days to figure out these integration issues and led to think of a better way of dealing with this situation. And we googled and came to know about this concept people are embracing – Open Api.

Open Api has two popular specifications – v2 (aka swagger) and v3. They has a lot of support in many platforms and languages. There are commercial tools available which host a mock server in cloud.

The concept is very simple. It starts with a definition of api. This definition is a document which contains details about api – methods, parameters, type of parameters, sample response and so on. A definition document can be created in json or yaml. There are ready-made editors to create this document.

Once this document is ready, it can be used by both front-end as well as back-end to develop their sides independently. For back-end teams, there are tools which help them to get started by auto-generating the interface of api from the specification. For front-end teams there are tools which help to create a mock server from the specification.

Although there is a little overhead of maintaining this document, it pays eventually by saving a lot of time. It is even more beneficial in cases where front-end and back-end technologies are different and it is hard to interpret other party’s code.  Open Api definition document becomes the ultimate point of reference and anyone can understand it easily.

I really liked this concept and am looking forward to use it in my future projects.

 

 

CLICKVALLEY – A place for passionate programmers

I left my corporate job to begin a new journey of my career as a Founder of CLICKVALLEY Technologies. This was a long awaited step which was delayed for a long time due to various reasons – financial as well as personal. I must admit that it is not easy to let go off your full time job after following a routine of 9 to 5 for more than a decade. Apart from the thought of that paycheck not getting credited in your bank account every month, it is an emotional crisis which needs to be dealt with stable mind and proper planning. Support from family is one of the essential components in this transition and I have been very lucky in all these aspects. I left my job in Dec 2017 and I can hardly realize two months have gone by. I am working harder than ever. Being a freelancer is a very satisfying and engaging job. It opens new avenues of growth and learning. One can explore one’s full potential and also be fearless and brutally honest with one’s work. If you are really good at what you do, there is nothing that can be more enticing than being self employed.

I foresee CLICKVALLEY to be a place which provides a fulfilling career to those who are passionate about programming. The plan is to create a group of like minded people who are always in a learning mode and creating quality applications for our customers. I hope our efforts will make this dream come true in future.

Machine Learning in Azure

Machine learning is everywhere these days. Every organization is trying to leverage this technology in some or the other way. I was also curious to learn more about Machine Learning when an opportunity popped up. It was to use Machine Learning in a proof of concept which eventually could turn into a large enterprise initiative if we could prove the benefits of using Machine Learning.

The problem statement – Our organization had a large number of enterprise applications which were live in production and supported by a team of more than 50 people. Thousands of tickets being addressed every day. The management decided to evaluate Machine Learning to help reduce this ticket load and save costs.

Solution – The idea was to extract the ticket history and use this data to train a machine learning model. This model would be used to take some basic decisions of routing the ticket to the correct support team and thus reduce the ticket count of first level support executives.

Our initial approach – Since we were novice in the field of Machine Learning, we started random research on this topic. We were not sure if we should go with open source or use some commercial platform. Few of the platforms we tried –

  • Weka –  An open source data mining and machine learning platform.
  • Accord.net – An open source machine learning framework for .NET
  • Tensorflow by Google – Open source machine learning library based on Python.
  • Azure ML studio – A commercial platform offered by Microsoft in cloud.

Although Accord.net has an advantage of being based on .NET which is my primary technology, I was not convinced that we should build large enterprise solution using this framework. Same was the case with Weka.

Tensorflow was a good choice but our management wanted us to use Microsoft Azure because it was being adopted in other departments. New IT infrastructure was being provisioned in Azure cloud.

Azure ML Studio – It was easy to get started with ML studio. We used a free Azure account to create initial experiments. The good part about Azure ML Studio is that it guides you from data preparation to deploying your model as web API. The modules available in ML studio are enough for an advanced ML model.

Some of the modules we used were –

1. Data import – ML studio provides various ways of importing data and converting data into different formats like csv, tsv etc.

2. Data transformation – This category of modules provides some essentials data preparation functions. The ones we used are –

  • Clean missing data
  • Edit metadata
  • Remove duplicates
  • Select columns in dataset
  • Split Data (into training set and test set)
  • Normalize data

3. Text Analytics – We used language detection to filter English speaking regions in the data set. We also tried N-grams feature from text and feature hashing was also of use in some cases.

4. Feature Selection – to identify the columns in your input dataset that have the greatest predictive power.

5. Machine Learning modules – This deals with choosing an appropriate algorithm and then evaluating it on a training set. ML Studio provides following ML algorithms to name a few –

  • Anomaly detection
  • Classification – We used couple of them (Bayes, Multiclass neural network) before we found better results with logistic regression.
  • Clustering
  • Regression

6 Python and R language modules – You can add custom modules using python and R.

Summarizing the entire experience with Azure ML Studio, it is a great platform to get started with Machine Learning. Their documentation is solid and easy to follow. We were able to create a working proof of concept in three months time and it was used as a reference for the technology road map.

 

 

 

 

 

 

 

 

Entrepreneurship

Being an entrepreneur means you can watch your child grow. It was not an easy choice to make and it took years of hard work and planning. Innumerable sleepless nights and the perseverance to continue in the game during the hard times. I must say it all pays and is worth the pain. Here I am watching my little one from a distance on a beautiful day in winters with a pleasant sunshine.

VueJs – A strong alternative to AngularJs

Few months back, we got an opportunity to work on a project where our client wanted to modernize their product (web application) by taking advantage of the latest and greatest technologies available in market. Considering ourselves as experts in AngularJs, I started selling AngularJs as much as I could. I explained how AngularJs is different from all other front end frameworks out there. I explained how AngularJs is a full fledged framework in itself and can take care of everything from the front end side right from rendering html, binding data, abstracting html with the help of components and directives to communicating with back end by abstracting data with the help of services. I also explained how Typescript can make code more readable and easy to maintain.

However my client had done some research on these frameworks. He proposed VueJs and asked me to compare Angular with Vue. The reason he proposed VueJs was its small learning curve involved as compared to AngularJs.

Although I had heard of VueJs in past but I didn’t pay much attention to it as I thought nothing can beat AngularJs because of its backing from Google and a strong community support. I wanted to collect enough references to convince my client to use Angular.

I started reading about VueJs. The first stop was obviously their website. I went to their getting started guide. I followed their steps and within ten minutes I had a page with VueJs up and running. Being from Angular background, it was like a piece of cake to use Vue. I somehow liked how easy it was to get going with this framework.

Although I had started feeling that VueJs was a good option for small applications, I started to read more about this framework. I was curious to know if Vue can provide advanced features like router, services, dependency injection and all that stuff.

Although the core library of VueJs is focussed on the vue layer only, it does have libraries to support advanced features created by VueJs team as well as by community members. vue-router is the library used for routing. Vue recommends using vuex for state management. VueJs uses ES6 modules and classes and hence you can import any class into a vue file by using import statement.

VueJs has a command line interface (vue-cli) just like AngulsrJs provides with some predefined templates to initialize a project of your choice. VueJs has a well defined testing framework called vue-test-utils. It has a great documentation and is easy to set up.

By the end of my research over the weekend, I was convinced that VueJs was in fact equally stronger framework for those who don’t want to face the steep learning curve of AngularJs. It did have the capability of handling complex web applications and remaining lean at the same time. Although we can use Typescript in VueJs, I did not find many examples in Typescript which means Javascript is the preferred language for VueJs. I personally like using Javascript as much as I like Typescript and hence that was not a big deal for me.

By the next working day, I was ready to take up this project in VueJs. We worked on a prototype and then started the development. This project turned out to be one of the smoothly happening projects with awesome UI and well defined architecture sitting on top of VueJs.

More than getting to know about VueJs, this incident was an eye opener for us. Now whenever I hear about some new framework, I try to gather enough information about it to see if it can become our next development framework and that is beauty of our profession – to keep reinventing ourselves.