Posted in software

My First Conference Speaking Gig

 

Last year, when Great Indian Developer Summit brought tech gods like Douglas Crockford to pune and offered the event tickets at measly 500/-, I was stoked and I not only attended the conference myself but also took 90 more Infoscions from Pune DC along with me.

I realized – while sitting and listening to some of the other sessions – that speaking at these external conferences is not beyond my reach. While the speakers were presenting great things, many of those things I had been practicing / knowing already. So it was just matter of presenting the right idea at right time.

So, I subscribed to couple of conference update emails. And in Jan / Feb of this year, GIDS folks opened their CfP (Call for proposal). I submitted couple of talks and to my delightful surprise, they accepted my proposal to speak on Webpack Javascript module bundler on 25th of April at IISc, Bangalore.

My session was scheduled for quite late slot in the day but that was good time-slot as I got opportunity to hear many great sessions from luminary speakers from all over the world talking about various advances in Web and Javascript. I loved the passionate yet artistic keynotes from Venkat Subramanian and Scott Davis.

By the time my session time was approaching, I was quite unsure about how many people will have energy left to hear about Webpack tool by 4:15pm in afternoon. Also – since I am a virtually unknown face on conference circuit as well as in Bangalore tech scene, I felt certain that not many people will turn up for my session. I reminded myself of many days spent preparing the code samples and the presentation and re-assured myself that people would find the abstract worthy to walk out of main hall and join me in another building for the session.

Thankfully, by the time I was ready to start the entire hall was full to my delight! Session went quite well and I could present many different features of webpack and answer many queries from the interested and enthusiastic crowd.

At the end of the session, I felt exhausted due to talking, pre-session anxiety, etc.. But thankfully a good feedback poured over after the session as well as on twitter and all the exhaustion was now worth it!  🙂

Looking back, I think I loved the energy and overall networking opportunities offered by technical conferences. So.. all pumped up to go for more conferences in future. I have even committed myself to improve conference scene in Pune by joining Javascripters and GDG-Pune groups. Lets see how Pune can see action similar to Bangalore!

PS: Now I am scheduled to speak at another javascript event (jsfoo 2017) at Bangalore in Sept 2017 and have been trying for many such opportunities.

PPS: If anyone is looking to access the ppt and code for my session at GIDS .. see below tweet

 

Posted in software

Publishing a Angular Component

With me diving little more deeper into Angular (2+), I quickly realized that its a game of components. We must eat, sleep and breath components!

As part of the project we came across certain reusable usecases – which we made into project specific components but I felt that I should try and create a generic component and publish it for other’s use on npm. This could be start of a small library similar to prime-ng or kendo, etc.

We must eat, sleep and breath components!

I thought that it would be pretty trivial to publish the component library on npm. But it turned out to be a fairly complex item with a lot of un-intuitive errors messages on the way.

Some of the things that I desired in the library:

  • Custom component.
  • in-place demo app for quick testing of the component
  • Tree-shakable component (es6) compilation output
  • AOT compilation of the component
  • Usage of rollup for compiling the component instead of webpack!

Turns out getting all this to work is quite a work. I had a headstart thank to this post from Cyrille and one more from Olivier.

But I quickly realized that it lacks the structure and details that I needed.

The angular-library-seed from preboot seemed quite promising and in fact, I was able to publish first version of my component on npm. But my the external example project was not able to use the newly published component.

Finally, I came across this library seed from filipe de silva. His seed seems to be quite nice.. but even that seed has same issue that external example errors out saying “module not found <my custom component>” if the external example project was generated using angular-cli.

But if we generate the external app fresh from angular-cli, it worked fine.

So – please check out my first Angular component on npm.  (Github)  ngx-advanced-table.

To use it in your Angular app, simply run

npm i ngx-advanced-table -S

Its still not really “advanced” yet. But I am working on getting it to have many features added as soon as possible.

Do chime in with your feedback and comments.

Posted in software

Angular (and general web-dev) Best Practices

Since last October, we have developed an decent sized application using angular with around 10-15 developers working full time. You can call us early adapter of angular2 as we adapted Angular2 for production usage within a month of its v2.0.0 was finally released.

As with any new tool, not everything worked smoothly but the angular does offer a lot of promise. We all took some time to learn nitty-gritty of angular. Based on our experiences of last 6 months, I outline below some of the best practices the teams should follow.

Best Practices

  1. I cannot emphasis this more than placing this to be the 1st item on the list. Angular is all about components. Design the components first, before starting to code. By design, I mean –
    1. Draw outlines on the Visual-Designs to clearly outline which screen area will be which component. Make the components small enough so that they can be reused at many places But large enough that making them any smaller makes no sense. This logical grouping is little tricky at start but you will adjust to this quite naturally in 2-3 sprints. My entire team does this for EVERY story in every sprint.
    2. Once you know your component, document the “inputs” and “outputs”. I have a small checklist which I make every developer fill-up as a short design documentation for each story. Please see Design Narrative section below this checklist for what each developer can use to think about his/her component.
  2. Design each component with Re-usability in your mind.
  3. Next most important thing is ensure your developers have READ and actually TRIED ES2015 and ES2016 flavors of JavaScript. There is A LOT to learn here but it will just make ready to face the external world tutorials which often makes use of these syntax. E.g. syntax like `() => {}` or `[a, b,]` should not trip you. Or usage of import, class, let, const, etc should be first nature to your developers. Most of the initial curve for angular is just about getting comfortable with ES2015.
  4. Most of the code snippets you will find online are in Typescript.. which is a superset of ES2015. I will highly recommend that you use this so that code snippets online will make sense. Also as a companion, use Visual Studio for Code as your IDE, TSLint as your linter and TSLint plugin in VSCode to ensure you get best static code analysis experience. Plus – by using TS, you don’t need Babel.
  5. Along-side ES2015, Angular is also all about being comfortable with Node and NPM Ecosystem. Any serious example will make use of package.json (npm) and node to build and run their example. Virtually EVERY angular component out there will give you instructions about how to install it using npm. So make absence of Npm and VSCode deal-breaker for your teams. Either your developers are using these tools or they are not on your team! Seriously!
  6. Usage of AoT (ahead of time) compilation is a great step towards perf gains at runtime as well as it reduces your bundle by about 30kb (gzipped) which is a LOT of improvement. Angular 4.0+ brings about 30% improvement in app bundles due to how it generates the AoT code.
  7. A LOT of Angular work is about understanding what is “Observable”. It’s very important to understand how observables work and becoming comfortable with RxJS library which helps you become Observable Ninja.
  8. Lazy-load every route which don’t need at 1st page hit. Webpack2 import() function will come handy for you. Also webpack’s ng-router-loader will help automate the bundle creation for each lazy loaded module automatically..
  9. Consider using standard widget library like PrimeNG or ValorSoft.
  10. Try to avoid JQuery as it cannot be tree-shaken.
  11. Use webpack effectively to ensure that you are not bundling too many things at multiple places. There are bundle-analyzers from webpack which do brilliant job of telling you about this.
  12. Make use of ng.probe() in chrome console to do effective debugging / Or make use of Augury extension – which wraps ng.probe for you.
  13. NgZone and ZoneJS are some of the dark corners of Angular. When things don’t work fine even after you trying 100 different things for many days, you might be up again these two adversaries. I call them dark corners because no error will ever tell you that you can fix this by using NgZone 😦 You must figure that our yourself. As such, NgZone is very easy to use but I did not even know it existed for almost 5 months in my project.
  14. Make use of some kickass starter kit because they would have done a great job at incorporating many features for you. I wholeheartedly recommend AngularClass webpack starter or BlackSonic’s ES6 starter. This will get you running in no time with a great foundation for large project.
    1. Other option is to use Angular-CLI.
  15. Often times, developer do not think about finding shortcuts to improve their developer productivity. This includes, circumventing login locally, caching backend calls which are not required for your current work, making small code fixes to skip through 10 screens / clicks to arrive at the screen where they need to do their change. They need to think about it and use these tricks so that they will spend time where they should – their current story and not on navigating through repetitive login and user profile backend calls and some 10 screens.
  16. Try to make use of shared module. Create a module and that should import & export all the commonly used modules & providers and import this in other modules.
  17. Whenever writing the CSS, try to visualize if this kind of element might be used at lot of places and then write the style at application level instead of component, it will avoid the re-writing it again in new component. You can just override any small change is required in component level.
  18. When using any CSS preprocessor, always define a file which has variables only related to color, font-size, etc. of the applications, it will help when you need to change the theme.
  19. Try to utilize the Inheritance in Typescript. If you have some view related functionality that might be required in many screens, you can create a base component with common functionality and then all other components can just extend it.
  20. Strive for complete segregation between the View implementation and service call. In the UI component, keep code only related to view, and delegate to a service to make the backend calls and for any functional logic.
  21. Try to create commonly used UI element as separate component and re-use them in the screens.

Note: My geeky colleague, NaveenKY, also contributed to this list.

Design narrative:

As part of design elaboration, I insist that my developers follow this narrative.

To deliver this story

  1. Which component(s) would be required to be “created” or “modified”.
  2. How will the component be accessed? From a topNav? Routing? From some user interaction on other components?
  3. Which folder would those components belong?
  4. What kind of @input, @output would be provided to / emitted from these components.
  5. What would be your backend call requirement and it’s sequence
  6. Any form validations?
  7. Any spl technical things / libs required? E.g. moment, datepicker, modal, etc.
  8. “Productivity improvement”? How will you reach your page fast – hardcoding? Proxying?

 

Posted in software

Best Practices for Angular2 Development

Trying to play around with NgModules in last few days..

Here is what I have realized.

Once we move into post RC5 arena for Angular2, we need to use @NgModule annotation to declare sort of template for each component and also to ensure that all the declared components of that module are available without importing etc.

Fall out of this situation is that we must “declare” EVERY component in @NgModule annotation declaration section.. This reminds me of struts-config.xml from struts1 where everyone wants to add their route definition into that single file!

The situation that I played out in my head is described here as well. So the solution apparently is to break the application into multiple Feature NgModules. This way, at least, some level of separation is achieved. And abc module guys can play update war on their NgModule file while pqr guys can keep updating their NgModule to add their own components. Some example and commentary can be found here.

Still not crystal clear as to how do I share / communicate between these modules and optionally share only some components.. that’s something for further research.

Reactions / more food for thought welcome.

Posted in personal

Gaarva ani Saanj Gaarva – downloads

माझ्या गारवा आणि सांज गारवाच्या post वर अजूनही खूप लोकं येताना मला दिसतात. मला असं वाटतं की ते download च्या शोधात असतात. म्हणून हे post.

खालच्या संकेतस्थळांवर तुम्हाला गारवा तसेच सांज गारवा ची सर्व गाणी मिळतील.

आशा आहे की हे post लोकांना उपयोगी पडेल.

–Mystic

ता. क. : हे post लिहिण्यासाठी गमभन साईट चा उपयोग केला आहे. त्याचा मराठी लिहिण्यासाठी वापर करावा.

Posted in open source, software, technology

Puppy Linux on VirtualBox – The screenshot tour

Finally here comes the long promised Screenshot tour of Puppy Linux installation on VirtualBox. Click on pages link in right bottom corner of the post to go through the pages detailing the steps.

  1. Basics of Virtual Machines

    Virtual Machines is a software emulating a real hardware machine.  Popular System Virtual Machines include, VMWare, VirtualBox, Microsoft Virtual PC. VirtualBox is a freeware virtual Machine from Sun. I chose VirtualBox primariely because of its price (Free), brand and increasing popularity on message boards. We would run Linux inside VirtualBox which is installed on Windows Vista. Thus, Windows Vista becomes a Host OS while PuppyLinux would be my Guest OS.

    Click on page 2 for visiting next pages of post.

Posted in project, sdlc, software engineering practices

Non-Commitment, the new (or rather old?) Management Disease

Non-Commitment!

These days, I hear / feel / see this disease that seems to have plagued management of my organization.

Just to elaborate the point, Lets take a few examples… (of course the names are indicative and not real)

  1. Rajesh is in a new responsibility of handling a few freshers below him. He has a few years of experience. At the start of development of new project, he is been consulted about the dates and plans. But, as it always turns out, there were requirement gaps and whole new additional functionality clarifications comes later in the project increasing his workload. Since, Rajesh has already committed on the delivery date to his seniors, he, along with his team, even-though-grudgingly, toiled through the weeks till the delivery to provide a feature complete module
  2. Many people join the offshore IT services organization like mine in hope of going to another country (and possibly earn some extra money). Nameet was no exception. He was a brilliant programmer and a highly team-person, the one who gets gelled into the team nicely. But, to his misfortune, for all the commitments he made for completion and quality the work, he never got any commitments from the organization about his career progress. All he got was promises. There was no one (senior) who stood on the promises which were made. [All the years of staying the organization had also taught the seniors to not promise anything in writing!] … Well, outcome was obvious, my organization lost a good programmer and team person.
  3. Sanjay, being in the organization for quite some time, had learnt a thing or two about how management works. He wanted a transfer and he started the process of talking to seniors around 3 month prior to when he really desired to get transfer. [Update: There is slang term for this, CYA.. go look yourself up if you do not know what that means]. When he was asked to work on some proposals, he committed for the work and did not care if that meant staying up till 3AM every other day for 15 days. But seniors, despite 3 months lead time, were not ready to provide any commitment on transfer for Sanjay. Neither was any response (positive or negative) provided in written communication. So much for soft-skills training that my organization mandates to everyone.
  4. Everyone has likes and dislikes about jobs. Hari did not like maintenance work. He, being the bright and self-confident person, wants something bleeding edge. So when he was moved into maintenance project with low activity, he asked for change of project. Seniors, agreed after series of “discussions” but did not provide any commitments on when it will happen.

As I am trying to highlight, all these incidents involve different teams and different people but the theme is unmistakable. Juniors, are been asked for commitments and are providing commitment and are living upto it, even if that means lot of hard work and weekends, nights lost. But seniors, when it comes to reciprocating the deal, are consistently evading it!

I would venture to say, that a leader should provide a clear indications to his/her subordinates, about the responsibilities and time-lines to complete them. But he/she should not evade his/her own responsibility to provide clear time-lines / risk mitigation when it comes to fulfilling the subordinates aspirations. At the same time both need to attack their responsibilities with transparency to other party to boost the confidence!

I can clearly see few big benefits by not evading responsibilities:

  1. Juniors are not in dark about when things will happen and if they do not happen, what are their options.
  2. Seniors would be more esteemed personalities in their juniors eyes. At least, they would not be back biting A**holes.
  3. Overall team spirit goes high when Seniors and Juniors join hands and transparently act on issues.
Posted in project, software

JavaScript Library Showcasing Project

Hi…

Today I am starting a new project which would try to attempt a implementation of one/two HTML pages  using all major JavaScript libraries. Pages would cover many many Rich UI features of web 2.0 world. Goal of the project is to make the comparison of various js libraries feature by feature in order to help make a decision about which library choice is good in given scenario.

The project would be hosted on Google Code.

Here is the url: jslib-showcase

Feedback, help, suggestions welcome!

Posted in project, software

Cygwin Alternative – PuppyLinux on VirtualBox

Now I do not have a lot of valid reasons why I hate Cygwin. Its actually a wonderful piece of software. It gives you workable linux environment while you continue running Windows. If you have to deal with megs and megs of logs files every other day to figure out issues in applications… you would know what a godsend gift cygwin proves to be.

But then… again.. you know, cygwin default console is real bad. After a while, you figure out that, you can rather set rxvt as your cygwin console rather than the fixed width windows command prompt. But, when you get things just as how they “should” be, that feeling is different. And cygwin fails there by not providing me the customer delight. I mean I agree that, linux is all about freedom to customize, but at the same time, one must notice that, any wildly successful product strives to provide the best out-of-box user experience. If you want to win over loads of users [the layman users not the nerds] then, you must provide users a delightful user experience.

Thats why… I finally set out for a search of an alternative to cygwin. There are other similar clones of cygwin in the market but none impressed me. Finally, as of now, this is what I am finding decent alternative to cygwin. – Install puppy linux inside the VirtualBox and you would get a nice awesome UI, linux everything right inside the windows machine.

My following post would give step by step and screen-shots based tutorial about it. Till then.. its late night for me.

Enjoy
VJ

Update: The post for step-by-step screenshot tutorial is here.

Posted in project, software engineering practices

Client Side Communication Norms

When a person is traveling to travel to client location, he/she should be aware of cultural differences between his/her original location and the client location. This helps in quickly establishing oneself at client location… though the real awareness can be built only after the real interaction with the customers.

Communication Norms

Are they direct or indirect in their communication?
Indirect communication, even though is worse way to communicate, is often employed in avoiding a direct but disturbing communication. e.g. Say client wants to really say that, ‘Infy is giving me really high price and timeline. i cannot accept this one.’ or he just wants to pressurize Infosys person to give him the best deal, so he would say, ‘i did a project x times bigger that the one we are talking about and .. i did it in so and so time, how come u need so much time / money’
Indirect communication is also employed in various subtle ways in meetings to de-risk oneself by saying, ‘as per xyz person….. ‘ or ‘you can better talk to xyz if you want more details / concrete answers’
But apart from this, if we keep ourselves on toes, we can get most of the communication in direct form. We should ask first person questions, objective questions, multiple but defined choice questions in order to extract the information from the client in form of direct communication.
At the same time, one must understand that as a human nature, indirect communication is a inherent part of human communication and you playing little parts once in a while in such kind of communication can actually gain trust of and comfort with client person quickly. [e.g. gossip, crib, etc 🙂 ]

Do they prefer written or oral communication most of the times? In what kind of situations do they prefer written communication?
For majority of the communication, business client prefer the Oral communication but expect a formal written summary communication [e.g. Meeting Minutes] of the same.
They also prefer to change the information provided earlier [documented in formal communication] via oral communication, that too in a very off-hand manner. But they remember such instances very particularly and can beat you up for not accommodating such changes in the actual implementations.

What are the usual expected response times for emails?
From client anywhere between 15 minutes to upto a week. It depends on how much client is involving him/herself in the project. If he feels the ownership of the project, he / she would be very prompt in replies [often this is NOT the case]. If client involvement is minimal, then tactics like multiple follow ups / reverse signoffs would need to be employed in order to formalize the communication.

What are some of your own findings?

1. You need to be positive in your communication but you should be very firm in not bowing to the pressure often. Client would always, i repeat, always try to get the best deal, even an unfair deal out of you. Its upto you how much you would agree to let him/her get away with it.
2. Some of the grammar phrases and usage of language would be different between Indian English and client language. Try to keep an open mind to receive a critical and irritating feedback on it. And try to correct such usage to fit the client’s view. e.g. usage of word ‘Fetch’ turned out to be very offensive to my customer since, fetch is something they use only ask their dogs to get something! Continuous smiling and nodding even when we have not understood what they are talking also proves to be unapproved by client.
3. Small talk is a very big talk! We Indians fail to make any small talk. While the US customers are big small talkers. That makes them comfortable in the group and very very uncomfortable for you in the same group since your participation in the small talk limits often to just smiling.

Meeting norms

What is the typical duration of their meetings?
1 hour
What is considered to be “appropriate” participation?
Participation in intial phases, is expected to be formal one.
In consecutive meeting, being little informal, making small talk is expected. gossip in small doses is welcome. humor is welcome too.
How do people respond to distractions like phones ringing, during the meeting?
People will typically be very family oriented so any phone from family would be given a due attention though would be curtailed soon. For the caller outside the family, the call would be received and would be courteously if its ok to talk later on.

Language used

What is the key business language?
Depends on locality is guess. For US Customers, its English.
Do you hear client folks use any other language?
Never. And they always hear us (Indians) talking in native languages in front of them and is highly unapproved by them.

Dressing and grooming

What is the expected dress code?
Varies client to client. Most financial clients would expect formal dress code.
What is considered to be completely inappropriate?
Varies by client and occasion. Most of the times floral and bright colors is a no-no.

Work values/ethics

What are some implicit norms in the organization that would not be documented anywhere for e.g. picking up stationery items, usage of common areas like cafetarias etc
Well, almost everywhere, few things are expected.
1. keeping volume level in check
2. not eating Indian food at desk [it would spread its strong aroma in entire office floor]
3. being courteous and positive in communication, etc.

Feedback from the client

Our strengths
Probably the biggest strength of us is the price and quality combination. Our lower price than direct contractors in US at the same time none or almost negligible deterioration in quality tempts many clients to go to offshoring / Infosys.
Active communication is also one of the key strengths.
Quick turnaround time due to 24 hrs open shop [onsite+offshore combined]

Our areas of improvement
Being open for bullying around. Most of the people at customer side would give their own life a first priority e.g. vacations and spending time with their family etc. Due to this they would be very open and rude about when they can finish their part of the work. Infosys team more often than not, fells pray to bullying from customer and onsite Infosys team about maintaining schedules even when the delay was all due to customer.
Too much smiling is a complete turn down.
We say ‘Yes’ when we do not understand what client is talking about and often find ourselves to have said Yes to something we didn’t wanted on our head. So start saying NO when not sure. you can get thing clarified and say yes when it is appropriate later on.

Cheers,
VJ