Showing posts with label Computer Engineering. Show all posts
Showing posts with label Computer Engineering. Show all posts

Saturday, November 28, 2015

View unlimited articles on Harvard Business Review and Economist.com


In this post I am going to discuss with you a chrome extension I developed to view unlimited articles on Harvard business Review and Economist.com

Harvard Business Review allow unregistered users to view 5 articles at max where as Economist allows unregistered user to view at max 3 articles for the 4th article click it asks users to pay for registration before viewing new articles.

One manual hack is to install a chrome extension like Cookie inspector or Cookie manager and delete the cookie before proceeding to view other (blocked) articles.

to avoid this manual work. I created a chrome extension which does this automatically.

So the idea is the same for both Harvard Business Review(HBR) and Economist. That is every time a user clicks on any hyper link delete the associated cookie of the respective domains.
The code can be found at github repo

Technical layout :
Architecture of chrome extension allows user to create scripts of various types. For ex: Content scripts or background scripts. Content scripts can access the DOM structure of the HTML page on which it has the permission to inject where as background scripts can access Chrome* api and can run some background job either in persistent mode or trigger based mode.

WORKING : 
For this chrome extension, I have created a content.js which gets injected in the DOM structure of Economist/HBR as defined by the permissions given in the manifest file. So every time a user clicks on any anchor tag ('<a href="....">'). A message is sent to background script (BackGround.js). So in this case background script is triggered via a message sent by content script and hence is non persistent as configured by manifest file.

When the background script receives a trigger from content script it invokes chrome api for cookies. So first it gets all the cookies associated with the concerned domain - in this case HBR and Economist. After all the cookie associated with the HBR or Economist domain is received, they are iterated one at a time and removed using chrome api.

AFTER EFFECTS :
After you add chrome extension on your chrome. Go to hbr.org.
Now select any articles to read, you will land on specific article page. The number of articles left for free view can be seen at bottom of page.


Now go back to hbr.org by clicking on anchor tag on the left side of the page


Same goes for economist.com

How to install Chrome Extension on chrome :
1.) Go to chrome://extensions/
2.) Next check the developer mode
3.) click on load unpacked extension


4.) Find the location of the chrome extension 

Now you are good to go. Just in case if you have already opened HBR or Economist make sure to reload the page.


Wednesday, July 22, 2015

Pride Management ? How much to ask ?

About a week ago, a group of freshers joined my team as software developers. I was asked to conduct their training on technologies like Java, tomcat,  maven and a few concepts like continuous integration and continuous development etc. Through out my life I have been very enthusiastic and proactive about helping my juniors or colleagues but this was for the first time when a group of naïve technologists, sitting in a semi circle with pens in their hands, ready to jot down every word I said were looking forward to not just casual help but but also to form a foundation to prove their worth in the team. This reminded me of my Onboarding days also know as “Honeymoon” period when I started working, super excited to make a difference and to prove my worth in the team just like these freshers. My mentor helped me checkout latest code from the repository and introduced me to a tech term - “SVN”.  I searched online what SVN meant and found a plethora of other technologies which were almost same as this SVN. Then I starting exploring the folder structure and with every java file I read, with every design pattern I recognised (Factory pattern or Builder Pattern) I felt as if I was unraveling a mystery. Now coming back to the Onboarding session I was conducting in a meeting room I decided to put Java, CI/CD pipeline concept on hold and shared some lessons with them which I learnt in my “Honeymoon period” .

Should I follow my pride and sit back or should I get up and ask for help.
This was the dilemma I faced during the Onboarding days. I thought that asking for help in very first few days of my job will portray me as a lackadaisical fem-engineer. I thought I might end up give the impression that I am not inquisitive at all and believe in running for help for every minor question. So, I made an “intelligent” decision and I chose the extreme that is to prove my worth with smart work/extra work and not ask a single question to any of my senior.
This was not as intelligent as it appealed to me when I was a fresher. Not asking questions or trying to figure out everything by yourself just portrays an fresher as a solo-worker and not a team player. It might even convey an unintended message that the fresher is uninterested in the on-going. Do some pride engineering to come up with a balanced approach which will help you bring out your best qualities.

What to ask and what not to ask
This point may act as an input to do that optimised pride engineering I just talked about. Bothering your seniors with every single question or every minor tech question may make you sound like an amateur who doesn’t respect the fact that you might be a newbie but others do have deadlines and product to deliver. So, how should you maintain that delicate balance ? The simple approach is to categories your question into technical and business related questions. For ex: Say you are asked to run/write new unit test cases (which is the standard Onboarding process followed by a lot of companies) and you get an error say “No tests found with test runner JUnit 4”. So there is no point running to your seniors for this. Search StackOverflow or other technical blogs for such minor issues you will surely find a solution. Do some hit and trial. But if you are issues related to business or domain logic, take a note of 3-5 doubts and then take it to your seniors. It will bring out a shade of your professional qualities.

Disclaimer: If you are unable to resolve a tech problems after trying 5-6 different approaches, better tell about it to your senior. But be prepared to list of various methodologies/resources you followed to resolve it.

Do Not underestimate the impression given during “Onboarding”
Human beings are often dictated by preconceived notions or ingrained ideas in their minds. The intentions or the ideas conveyed about your personality are not easy to override in your subsequent months. Often freshers find it hard to understand “corporate” culture mainly because not everyone is alike. Not all colleagues are as easy going as your college friends neither all colleagues are malefactors. So join the team with an open mind don’t expect people to be saints or wrongdoers just on basis of what you hear around. Try to bring out best colours of your qualities.

Just “Keep calm and Do your best”.

Tuesday, February 10, 2015

nice -20 technicalCareerProcess

Any guesses what this post will be about ?

Let me give you a hint. The nice command(runs on linux machines) has the same effect on a process's life which a good technical project or an amazing internship can do to your career.

I am sure you must have guessed it by now.
"Nice " command is used to increase the priority of process. Say if I know that a job is really lengthy and requires a lot of resources, I would probably want to decrease the priority so that higher priority jobs can run first.

In this article I am going to list a few resources/internship opportunity which you should not miss in college and these can really help you not only to make a good network with coders and programmers but also to earn a few brownie points for your resume.
1.) Google Summer of Code(GSOC)
The program invites students who meet their eligibility criteria to post applications that detail the software-coding project they wish to perform. These applications are then evaluated by the corresponding mentoring organisation. Every participating organisation must provide mentors for each of the project ideas received, if the organization is of the opinion that the project would benefit from them. The mentors then rank the applications and decide among themselves which proposals to accept. Google then decides how many projects each organization gets, and asks the organizations to mark at most that many projects accordingly.
It is not easy to come up with an idea just like that. You will have to use it and realize that what is missing or which feature/functionality can be added to enhance the usability of the project you have shown your interest in.

2.) Season of KDE (SoK)
KDE is an international free software community producing an integrated set of cross-platform applications designed to run on Linux, FreeBSD, Solaris, Microsoft Windows, and OS X systems. It is known for its Plasma Desktop, a desktop environment provided as the default working environment on many Linux distributions
The goal of the community is to provide basic desktop functions and applications for daily needs as well as tools and documentation for developers to write stand-alone applications for the system.Season of KDE (SoK) is a program for people could not get accepted into Google Summer of Code. They will have a mentor from the KDE community to help them if any question arises or if they do not know how to continue.

3.) Anita Borg Scholarship-Only for girls sorry guys ! !
The scholarship is open to students at the Bachelors, Masters and PhD level who have at least one year of their program remaining. The scholarship value is around USD 1500–10000 and is competitively awarded based on essays and interviews. In addition, scholars and finalists usually have a retreat at a local Google office.
The program is run separately in several regions around the world, with local selection committees and retreats. Each program takes applications once per year, typically selecting one postgraduate and one undergraduate scholarship winner from among a group of 10–20 finalists.

4.) Contribute to open source
This is not an internship and neither will it pay you for the contributing to the project. However, it will give you amazing experience, provided you pick up an appropriate project. It not only proves that you are self-motivated to contribute to the open source and to take decisions by yourself but also proves that you have some exposure to real work.

So this is not an exhaustive list of all the internship opportunities or projects you can go for but this will give you good idea about other side projects which you can pursue very early in your career.



Invincible World of Data

                                                                      
Figure:[1]
“Big data expertise increased 89.9% in the last twelve months”, “Big data, Big pay”, “Data is as important to organisations as labor and capital” are a few the headlines taken from leading newspapers and websites which came across recently. No doubt there has been a rapid increase in the demand of data analysts. Because there is millions of Terabytes of data lying on clouds, local desktop, Government databases, application logs which can be processed to get  lot more significant information/insights than just suggesting ads.
Figure[2]
In this post, I will discuss some of the technologies covering from SQL to No-SQL and highlight the key features and drawbacks of various such technologies. Before touching upon the latest technologies, I would first like to go back in days when databases were not very common. Recently, I was watching a series “The Bletchley Circle” which was about 4 female friends who were code-breakers in World War 2 and then move on to live normal lives after the war. One of these girls had incredible photogenic memory. During one of the episodes she is given a chart of trains with their source, destination, arrival and departure timings of each train. She reads the sheet once, stores the data in her head and later other girls who are good at strategies or guessing who might be the culprit, use her photogenic memory to query the data and form a pattern. Analysing pattern or querying the data is not something which is the need of the hour today, it has been a need realised long back. When database systems were not very technically advance and when computers were not enough complex to support such technologies simple text or flat files were used to store the data.
Later, with the advent of RDBMS or relational database SQL came in picture. To understand No-SQL it is very important to understand the architecture of RDBMS first. So, the idea was to keep the entire data in a table which can be visualised like a matrix. Ex: if we were to store data like user’s FirstName, user’s LastName, Brand purchased etc, all the information in one matrix or a table, each row will contain repetition of data. To handle this situation the concept of foreign key was introduced which if used as an analogy in this example can be thought as, say we assign a unique ID to each user and then in a different table we store the info [BrandID, Brand] in TableA and get [firstName,LastName,BrandID] info is stored in TableB.
However, this simplistic situation is easy to implement or visualise but as the number of joins between the table increases so does the time to get the response at the front end. Sometimes, in a Private Network of a company, if server’s are kept in different countries, by the time response from DB will come, front-end  may even time out, irrespective of efficient indexing. Hence a need was felt to avoid the joins.
Another very major concern with RDBMS is its stringent definition of columns. Say while creating the DB if the administrator assumes that the firm would need 10 columns, under no situation can a developer push data with 11 attributes, unless either the DB is altered to add new column(which is a time consuming process if the data is in GBs) or the first table is copied to another DB with extra column value equal to None and then delete old DB. 
As it is said that need is mother of innovation. Therefore to overcome the constraints of SQL databases, no-SQL technologies were brought in picture.
The major difference between SQL and No-SQL technologies is that, the latter are Document data model. That is everything in these technologies is stored in key-value format. Ex: No-SQL DB like MongoDB will store data like {FirstName:”XYZ”, “LastName:”PQR”} and so on. The values part itself can be a complex block of key and value in turn.
These No-SQL technologies have added advantage like ex: MongoDB provides automatic “Sharding” that distributes data across a cluster of machines.Moreover, as discussed earlier, No-SQL databases support dynamic schemas. But that does not mean that there is nothing wrong with these technology or a tech team should opt for NoSql by default. Since these technologies are usually open source they lack maturity. These databases were primarily designed for storage and offer very little functionality beyond.[3]
No doubt that NoSql technologies have become really popular with the advent of cloud and it can help to deal with situations where the firm has to deal with unstructured data, it is nevertheless limited in certain areas. So a tech team or an individual must carefully consider the pros and cons associated with these technologies.









References Used:-
[1]http://www.sbp-romania.com/Blog/2014/03/05/sql-vs-nosql.aspx

[2]https://keefcode.wordpress.com/2013/12/04/nosql-databases-how-to-choose/

[3]http://greendatacenterconference.com/blog/the-five-key-advantages-and-disadvantages-of-nosql/
 

Monday, January 12, 2015

InternshipProject = Modify(Start_up_Idea);

Hundreds of start up are set up each day, some with an amazing idea and some with a not so amazing idea. I believe that in the world of technology every project or every success in tech world has two pillars one is the idea and the other is the excellent execution of that idea. Over a million other factors can be classified broadly in either of these two sets.
Some start ups achieve accolades by slightly changing the existing idea but it is the execution of their plan or risk taking appetite which makes them innovators. 
In this post I am going to talk about a few start up ideas which you can modify and implement in you college project itself and get an exposure of various new technologies and research work.
DISCLAIMER : I have selected these idea purely on the basis of their implementation say the functionality of their website or the idea/algorithm which they might be using at the back end. I am not saying that these ideas are too easy that you can set up your own start up and start generating revenue.

This idea is basically a recommendation system. There a lot of research papers which can be obtained form IEEE or Google Scholars website based on recommendation systems. The papers basically add a minor change in a basic structure which one might can think of to make a recommendation. Even though the recommendation system used in sites like Amazon or flipkart are really complex(assuming) but even I worked on a recommendation based research paper for e-governance, where we not only made a recommendation to the users using the web logs but also took care what if the user didn't take our recommendation.

WishPicker is about recommending gifts for your friends and family and allows you to purchase them too, so on the whole it is an eCommerce platform in disguise. You can implement such an algorithm where you first classify each product into a category and add features like age, gender, cost, popularity etc. When a user comes to seek a recommendation of gift with parameter say A,B and C, first find all the products with A, B and C attribute. If that result is less than say 15 then go on to select product with attribute A and B, assuming priority of A>B>C. This idea can be made more attractive with an amazing UI and magazine like structure.

It is a startup which lies in travel and tourism domain. The idea behind this website is that usually when people travel abroad they not only want to see the famous picture but in a way they want to experience the life of a local citizen.  So the idea is that this website provides a platform to local people of the country to post any local event which they might want to organise. For ex if Bob knows how to cook a truly authentic dish or drink of Barcelona, he will post the ad on line so that all those tourists who are visiting Barcelona can attend his class at 'x' cost and specific days and time. This was an example of food category, similar ads can be posted for adventurous games or merely sightseeing.

Important point for such a website is to identify what types of ads can be posted and what is not allowed. For ex how do you stop some one from posting fake deals or deals hosted for illegal agendas. Here basic knowledge of semantic search can be applied. obviously you  need not handle all the cases but if you algorithm can handle or stop  40% of malicious content, it will be more than enough.

3.) Meterup
The idea behind this project was to let the users compare the fares of various cab services. This is another idea which most start ups follow. I call such idea comparator idea. Such start ups access the API offered by various websites and compare the cost and let the parent company/the host company to collect the cost. for ex comparehatke/buyhatke. Now coming back to the MeterUp.

The idea is to access the approx fares returned by APIs of leading cab services and and display the result. The made an app and a website for the same idea. Apart from just showing the fares they also show approx distance and access google map api to know the shortest route. The benefit of implementing such an idea is that you understand how to build an Android app and then you also learn to access various APIs.

The idea is to let people post any idea they have. From ideas like 'give historical facts on a pizza cover' to  'a new way to keep your books'. The founders thought that most of the times people invent simple methods to implement a particular idea but usually they have no one to share it with. Obviously, people can share such creativity with their friends on facebook but it does not amplify the idea. So they thought they can give a platform to people where they can come in and post their thoughts or suggest an idea. The interface is really simple and easy to use.

Once again, you can take this idea and to enhance your skills you can advance it to either domain : 1.) Make use of complied CSS libraries like Bootstrap to create responsive design or 2.) Implement artificial intelligence or data mining at the back-end to gather the data or rough statistics like how many of feedback about XYZ company are positive and how many are negative using the comments not discrete ratings of any form. 3.) Or use ElasticSearch/solr as search library to search efficiently.

Sunday, January 11, 2015

@Test(expected = ComputerEngineeringErrors.class)

You might be wondering about the strange title of this post.
In this post I am going list a few mistakes which I regret doing back in college. I don't know how different my professional life would have been had I not made these mistakes but all I know is that these were "mistakes" which shouldn't have been made and should not be repeated by any one.
Before getting into lessons learnt following is the technical description of the title.

@Test is the Junit annotation to tell the Java compiler that following function is a test.
When we test a function say divide(int a, int b) {return a/b;} and we know if b is equal 0 we will get a "divide by zero", so to tell the test case that we expect an exception thrown we write expected = ErrorExpected.class

MISTAKE 1: Chased internship in a giant technical companies rather than working in a startups or a research based project.
I was so intrigued by the idea of how computer engineers work professionally that I deliberately ruined the opportunity of working in 2 startups during summer vacations via on-campus internship programs. In one of them, the interviewer had known a senior of mine, for whom I had made some
plugin to be used in his website. I didn't know that he(senior) was now working with this startup and even before my interview process, the interviewer told me that he already knew about the plugin which I had made for that website and is really looking forward for the interview and I totally ruined my interview deliberately because I knew that if I take this internship opportunity, I would not get a chance to appear for another internship interview via the college placement cell. To add on to my mistakes, I didn't even made an effort to at least pick a research based project under some professor's guidance so that I could at least do a quality project in the vacations. In the end, no more companies came for the internship process and secondly I thought it would be too dumb to do a research based project and it won't give me a professional exposure.

MISTAKE 2: Underestimated the power of delta change in resume
Through out my engineering life, I continued to skip of small project. Ex, a professor once had a project which was say, 75% done and the professor was looking for students who could test it, continue the development and give the performance number but the research or the scope of that project had already been defined and done. I thought since I had not started on this project, I should not take this task because it won't be 100%  my own research. In my fourth year of engineering I realized that to do a big project one should preferably begin with such smaller things because first of all it is not too much burden all together and secondly, one should not dream of coming up with something big in just first attempt.Most of the owners of successful startups had initially failed bad in their carrier before making it big.
Such delta changes in your resume reflect a lot of change at the end of your engineering life. Rather than waiting for a big day when everything will fall in place it is a lot better to do something small today even if it is as meager as learning a new desktop shortcut .

MISTAKE 3: Ignored some really good ideas
In college, I had a tendency to grade my ideas as "Not good" and ignore them. I don't know why I did that may be because I was afraid of executing/implementing them or may be it was because I didn't believe in my own ideas or I didn't brainstorm on it a lot. A lot of times I ignored the ideas because I felt that there was a technical blocker which I am bound to face in future and didn't know about the right resources or right people to contact. One time I had this idea that there should be a website where students can post some class notes or exam papers. Though this idea may seem to cliche now but back then we didn't have any such website, so it was actually a potential opportunity which I totally missed. A few days later some seniors launched such website using a basic "Wordpress Template" and with just basic functionality to download pdf verison of notes and exam papers. That idea could have been extended to an app on with uploading rights to based on college identity/admission number.
Lesson learnt was never ever ignore your ideas even if you feel they are too basic or not so important. Because you feel that something is missing around your college or locality, it is very much probable someone else is missing it too. All problems are opportunities is disguise and don't fill your eyes with tears if you miss one because it will double the chances of missing another. Important point on which you should work upon is figuring out that whether have you missed an opportunity or not. For ex, when I didn't work on the college website idea, I didn't even recognise it as an opportunity.

I hope that you will not make these mistakes or miss another opportunity.


Tuesday, January 6, 2015

Google Women Techmaker - 2014 - My experience :)

One of the aim of this blog is to encourage women in technology. So, I thought that it is best time to write my first post specially targeting this aim. What can be a more motivating than getting a chance to get training from Google and  a chance to interact with Google's employee while enjoying Google food.

Since my college days, Google has been one of my dream company and so it is for almost every software engineer. But I did get a chance to visit Google Bangalore office, get training from Speechless and join the Google's cause to help motivate women in technology.

This all began around October, 2014 when I came across a form from Google saying it is inviting applications for women/girls who are in technology and feel for the cause of motivating others. I was super delighted to see the form because I was thinking about doing something to help budding technologists and this seemed to me a perfect opportunity. So I read on, there were two essays with no word limit which the candidates were supposed to fill. One of the questions was what was your motivation  that you made you women in technology and what are your goals/objective another question was why do feel for this cause of helping the female technologists.
I submitted the application and then waited and waited. After around 15 days or so I received a mail congratulating me for getting selected in Techmakers program. They selected 10 girls from all over India.
Then a Program Manager scheduled a call with all the selected techmakers individually and we were supposed to confirm the dates. As I was supposed to fly from Delhi to Bangalore twice once around November beginning and next time around December beginning.

Skipping to the day of training. This time the aim was to introduce the techmakers to each other. Meet the PMs involved in this program. I also met the Country Head of Startup Support ecosystem at Google and other employees of Google Bangalore. There was also a team which had come to the Bangalore's office from Google Hyderabad. Another aim of this visit to give us public speaking training which would ultimately help us to motivate women in technology. The best part about the training was that no matter how much it sounds non-tech but there were a lot of technical discussions going on there.I came across other programs in which Google acts a technical support for start up ecosystem. I interacted with software developers there to know what exactly do they work on in this office.
For the training purpose. Actors/comedian from Speechless had come to India specially. That training was the best of all the trainings.The training began with a weird game in which all the candidates and PMs of Google were made to stand in a circle and we were supposed to innovate various sounds or body actions. Then the aim was to pretend that we are giving something delicate to someone else in different styles. After every one hour we would get break time. In which we used to explore every corner of Google's office. From Oatmeal to super amazing but unhealthy giant brownies. From a toffee to ice-cream, fruits we had so much to chose from. Note - lunch was altogether a different meal. In our next training session, we were divided in groups of 2 and we were asked to come in front of presentations. We didn't know what was there in the slides but we knew the story line around which we were supposed to speak. We chose Hindu mythology Ramayan. So, a random slide used to come on screen, say an exploding bulb or tree inside a house or green star and we were supposed to speak using the objects shown in slide and sticking to the story line we had picked in the beginning. Then we had an amazing lunch.
After lunch each techmaker was asked to come on stage and tell her story. THIS WAS THE BEST PART OF THIS ENTIRE PROGRAM. The stories were so different yet so encouraging and motivating. I prepared a story of around 9 min in my head but once I went on stage I skipped the unnecessary part and finished it in merely 4 min. I was given the feedback to include the details and go more in depth. Then we had dinner with Google team :) and we headed back to our hotel.

Next day real work began. Target was to shoot a a 4-5 min video. The content could be or could not be in line with our final video's script. This time aim was not to get the script right but to get us friendly with the camera. Each one of us got a chance to become director, producer, camera man, mic man, make up artist etc. It was fun to play all these roles that too with a professional camera and editing system right in front of you. In one of the practice session, a techmaker was speaking somewhere around the middle of her script another girl said CUT,STOP IT. We all were shocked and literally scared. It was like we were lost in the silence of the room with just one voice speaking. We asked her what happened and it turned out the speaker was not wearing a mike while the camera was rolling. We had an amazing time.
At the end of the day, 3 best videos were replayed. We were given a book/reading material and a super cool Women Techmaker logo stickers shown on the top of the screen. I have these stickers on both of my laptops to remind me about objective of this program every time I look at my laptops.

After I came back to Delhi, merely after a week our so, we started getting mails to prepare for the main day. We were sent literally 10 TB of videos/articles etc to help us make our final script. And each week we used to have around an hour call with Google Hyderabad PMs who met us in Bangalore. The first script which I wrote and the final one had only "is", "was", "the" common in them. The script went through so many changes. On the day of shoot, I was so tired because of flight and all that I asked all girls - present on that day to get their videos shot before me. Finally when my turn came I gave my best shot with a minor fumble in one word. They asked me to give another shot but I don't know was it the lights glaring right on my face or was it the relief that my first video was pretty good, I could never speak more than 15 sec. I either used to fumble badly or used to discover a new word while speaking the script. One time rather than saying opportunistic I said oppotunityyyIstic and then I was wondering  whether it is a word or not. Finally, after giving 3-4 such 15-25 sec shots I gave up and said I am okay with first video itself.
Then I was given a logitech camera to shoot videos and a shrug with [W] logo.
Next day I took my flight to Hyderabad, to meet a friend and then came back to Delhi.

We get mails from the PMs now and then suggesting us some good reads.

No doubts the experience was amazing, innovative, technical, funny and unforgettable. I met the one of the finest people in technology who were not only professional but also down to earth. I met with such fine other female developers and discussed with them what all problems I feel that I faced being a part of minority group in the technical industry and got their advice too.

Once again thanks Google. This time not for the pic or URLs but for one of the most amazing learning of my life.And for actually taking a step forward to motivate women in technology rather than sitting back and just publishing statements on newspaper that "companies should aim for diversity."


Friday, January 2, 2015

How to get the perfect internship ? ! ! ?

CONFESSION 

"Getting an internship is sometimes more difficult than getting a Job"
Get an internship specially when you are just a sophomore/third year student is like task equivalent of cutting a Gordian knot.
Issues which a normal student might face while looking for an internships are :-
1.) Most companies do not offer 2 months internship. They offer it for 6 months
2.) Lack of skill set in sophomores or lack of proper guidance like failing to apply on right time.
3.) Zero contacts in industry or no god father in your life to form a platform for you to walk.
4.) Unaware of the fact which field interests you more.

I faced all these issues in at least one year each while pursuing my graduation. And now when I look back I realize that there was hardly any need to get so apprehensive about this entire process of getting an internships.

So following are the ways which might help you to do/learn something meaningful

1.) GETTING AN INTERNSHIP VIA THE CAMPUS ITSELF
Most of the companies which when visit the campus for recruitment session also allow the third year students to appear for the exam too on a different/same day keeping the question paper same. Plus they give some stipend. And if you work really good they might even offer you pre-placement offer (also known as PPO), which is pretty good and saves you from facing the intense competition of the placement session.

2.) DO RESEARCH BASED PROJECT WITH YOUR COLLEGE PROFESSOR
I was lucky that somebody gave me this advice when I was a sophomore but ignorant enough to pay no heed to the suggestion. Because I was dying to know how professionals work.I wanted to experience something new rather than pursuing another project under the guidance of my professor. This was one of the worst mistake of my engineering life. If you realize that you are not getting an internship from the campus itself and there is no chance to get the same because of any reason - lack of preparation etc start looking for professor who might consider to guide you, while you pursue a project under the prof's guidance. If you are not interested in research for an algorithm or if your interests is totally aligned with programming then you can tell your professors the same. Sometimes they have seniors/PHD students working under their guidance who are also looking for programmers because of lack of time to implement the algorithm or it never hurts to have a helping hand.
If your college does not have such provision of promoting the research work you can look for nearby good colleges or contact PHD students of those colleges via linkedin or facebook.

3.) JOIN A STARTUP
This is the best you can do.Your knowledge will increase exponentially. Additionally you will experience how computer engineers work. Now if you are wondering how to contact the right start up, I am going to suggest a few ways via which you can know about the upcoming start up around your area. My favorite is "The Economic Times". Even if you are not a newspaper person or haven't subscribed to the newspaper itself, you can go to their website and look for "Biz & entrepreneurship" section to get a list of new and upcoming start ups. Next you can look for sites like letsintern or hellointern .Go to the respective website of the startups and look for Job or career or Join Us section. You can send them a mail with your resume and a good enough SOP. You will most certainly receive a response. But make sure to have a good command over at least one programming language and send mail to at least 10 startups.

4.) SOLVE A PROBLEM OF YOUR NEIGHBORHOOD/COLLEGE/CLASSMATES
This is the best you can do for your community. This help you improve not only your technical skills but also skills like problem solving and team-management if you can motivate other to work with you as a team for the cause. 
The million dollar question here is how to find an appropriate problem to target. I would just like to give you some ideas like 
  • Say you feel that there can be a portal where students can upload their notes/links/past year question paper etc. You can design a website on similar involve. You might implement the       project using latest technologies like MongoDB and python rather than conventional PHP and MySql.
  • You can make a college app which will enlist the upcoming events/talks or the reminder system of classes.Try to make use of Sencha framework.
  •  Organize a hackathon. If you feel that you can help others than you can pick a topic like C++   library or Python web scrapping library. Organize a meet up where you can first teach these       skills and then see if your batch mates come up with an innovative idea around the same.
  • Last but not the least and this is my favorite too. Make a Chrome or Mozilla extension. Explore APIs of various upcoming products and enhance their functionality by making a chrome       extension.
  • Add a twist in conventional projects. There are numerous sites where the conventional and easy to make projects like online library system, hospital management, car rental or chat server are available. Try to add something new and innovative in these system. For ex: I made a conventional examination system and the students performance was measured not in an absolute manner but with respect to how to peers performed and how to the teacher performed in the same test. And as one of my other internship program I made a Content Management System where not even the header of the website was hard coded. Everything was stored in the database and only the CSS part was written rest everything was retrieved by querying the database and the user interface was such that even a non-technical person could add or delete articles with any prior training.

I hope these points will help you in creating something innovative and out of the box rather than looking for internships which in the first place waste your time to contact the right person and secondly, 90% times are not as good as you expect them to be.

Wednesday, December 31, 2014

Five things to remember during placement session




Most of the freshers consider package/C.T.C as the only parameter of selecting a job.I was one among them back in college. But as it is said that an intelligent person not only learns from its own mistake but also from the mistakes of other. The truth is that C.T.C should be the last parameter used to chose a job. In this post I am going to discuss 5 key elements which students or even professionals generally overlook or in fact don't even care about in their placement sessions.


1.) YOUR PROFILE 
I can not emphasize more on this point. In case of tech companies students usually assume that their are just three types of profiles software developer, software tester and User Interface designing.  But that is not it. There are a lot designation which you can join in as a fresher itself like deployment engineer, release/build engineer, data scientist(MongoDB/python/Hadoop are the prerequisite) etc but you need to be sure of these profiles and the job responsibilities which come along them.
Even if the company is not offering these profile in your college and if you feel that you can really can do better in some other profile then the offered ones, you can take a chance and talk to the H.R for the same - but this will be bold step. Be absolutely sure and know what you want to do. Just don't take this step to stand out from the crowd. 

Coming back to the three profiles which companies usually offer - developer, tester and User Interface/web programmer. Since these days companies have merged the two designations of developer and tester so most of the engineers are now Software Engineers rather than Software developer or Software tester. So be sure that for which profile are you getting interviewed for.

2.) DON'T TRY TO KILL TWO BIRDS WITH ONE STONE AT LAST MINUTE
Most of the students are not sure whether they wan't a carrier in tech industry or non-tech one, even till the day of placement or even if they are sure, the anxiety of placements has the potential to confuse even the most confident candidates.
Be absolutely sure which placement do you want to crack tech or non-tech. Even though if you are in doubts or have left the decision on destiny, do attend the pre-placement presentations of the companies which interest you because you get to learn a lot from them. But if you are absolutely sure that you want to make your carrier in a tech based company don't waste your time in preparing for GDs or  case studies and same goes for students interested in non-tech jobs don't even think of Codechef competitions at last minute.
If you still want to go for both such companies and go with the flow of time then you must start early. Prepare for GDs as well as participate in tech competition but give ample time to yourself so that you don't get apprehensive about your decision last minute.

3.) SHOW YOUR INTEREST-ASK QUESTIONS
No matter how upset you are with the placement session.Whenever you go for an interview or pre-placement session always spend a little time in understanding the domain of the company even if it is a company like Google. Know some terms/technologies mentioned on their site and if that seems to much then at least go through the Wikipedia page of that firm.
Most of the companies - established ones like Facebook, Google or even not so big companies offer APIs. If you can build something using those APIs nothing like that and make sure to highlight that point in your resume or try to form a question out of it and ask during the Pre-placement session. For ex ask something like 'I used Google's Youtube API to get info of a video but is there an API to get common info of the playlist  no matter which video of that playlist is buffering.' You can even use StackOverflow and tags to search latest questions.
Don't be afraid of asking questions.
When I appeared for my campus placement session somebody asked what does (inwards pointing) arrow in the logo of RBS means. Even the presenter of the PPT didn't know but their team was really impressed. If you don't get a chance to ask question in the PPT session do ask it during your interview. But don't ask just for the sake of asking make sure that you ask something relevant, sound inquisitive for the answer.

4.) DON'T  CHOOSE C.T.C NUMBER OVER YOUR DESIGNATION
In my opinion a candidate should just emphasise on designation and the roles and responsibilities with the company but not all fingers are of same length. Some student may have the pressure to repay the student loan etc. Even in that case never ever get carried away by the C.T.C numbers they are just Cost to Company for example if you company offers you cab facility or discounted lunch/buffet all these costs are included in the C.T.C. Another example could be that some companies give you gratuity that is amount you receive once you complete a certain defined years with the company. So say the gratuity agreement says that you will get Rs 3 lakh after you serve for 4 years in the company. So you CTC will also include these 3 lakh irrespective of the fact whether you serve them for 1 or 4 years.
Your basic salary of the CTC is what you get and that is taxable too.

5.) ALWAYS REMEMBER YOU JOIN A COMPANY BUT YOU LEAVE A BOSS
Companies are nothing but a cluster of numerous teams. Your association and the impression that the company has on you is merely based on your team. Therefore, never emphasise on just the name of the company, also take into consideration the team you are being interviewed for. Most of the times even if you ask the HR or your interviewer that for which team are you being interviewed for most likely they will not tell you. Because sometimes even they are not sure. But if they tell you the name of the team try to get in touch with seniors/alumni already working in that team about the feedback of manager. If you don't know anyone you can give a shot on Linkedin too since some people not only add their company name and designation but also add the team's name.
The following picture might help you make your decision.



Tuesday, December 30, 2014

How do software engineers work as a professional ? ! ! ?

The following image pretty much sums up my college life when I was in 3rd year.


Third year of college is the most important year in one's life because it is then when we have to decide whether we want to continue with the technical domain and wait for some computer giant companies to hire us or should we switch to some other domain and leave computers behind by giving a management exam like GMAT or CAT or should we go abroad to pursue M.S in computers and live the American dream.

NOTE :- I have intentionally written "we" because our seniors/alumni/classmates/batch mates are also a part of this decision.

THE ASSUMPTIONS ERA

I too faced the same dilemma back in college when more than one half of the class started preparing for GMAT/CAT ,  about 5% of my class started preparing for M.S and the rest started preparing for the campus placement session. I belonged to this third category There were the students who were also preparing for CAT/GMAT side by side and kept the option for tech/non-tech placement open for them.
I had no interest in MBA - by the way I figured this out after I joined a well known MBA classes in Delhi area. It had nothing to do with the teachers/coaching classes but lets say it was my inner voice. I didn't have the courage/money to pursue MS from U.S and leave everything behind. So, by following the method of elimination I figured out that the only option I had was to prepare for placement session and hope to get placed in a super amazing tech company. 
Browsing, through the websites like Geeksforgeeks or Cracking the Coding interview.I often used to wonder that how software engineers work in big tech giants like Google, Microsoft and Adobe. Another important question which used to linger in my head was how do sites like GeeksforGeeks and CareerCup help us become a better engineers once we get placed. So I assumed that all questions like reversal of link list, maximum sub-sequence problems are miniature of real life problems which software engineers face everyday. And I started solving algorithm/programming problems on daily basis and continued with my research based projects.  

REALITY
In my opinion when a fresher joins a company, the fresher is already afraid and the rest who are working on some projects will make sure that the freshers gets even more uncomfortable and they start throwing new words/technical Jargon/domain knowledge on you for the sake of "Ramp Up" session. Now there will be one person in the team who will be serving the notice period and will have all wrong things to say which a fresher does not want to listen. And the fresher will think I literally killed myself for this job and this guy is leaving this job seriously ? What is wrong with him ? The answer to this question or rather I should say truth of life is no wonder which company you get in from your campus placement there will be a hundreds of people leaving the company on your joining day and other hundred who will be preparing to become your colleagues in near future. So this outflow and inflow of employees is not big deal.

Now coming to the topic of today's post that how do the software engineers work. 
First of all you need to understand a general structure of a team.
A company is composed of a numerous teams. Your future with that company depends on that team and not on the company's name itself.
Now this team generally consists of  :-
1.)  Senior Manager  
Now this person does not code but is usually the most intelligent person in the team.This person knows all the domain/business knowledge and is the face of your team for the outside world.

2.)  Program Manager (PM)
If you have studied that topic of Requirement Engineering as a part of software engineering course in your undergrad then you have your answer. This person gathers all the requirements of what the product/API is supposed to do. Refer image below

3.)  People Manager
The person who makes sure that you are happy in the team. This person approves your holiday and reimbursement requests. If you have some permission issues or need a new laptop from the company or want to get an early cab he should be our contact person. They are also involved in making sure that you are assigned work as per your expertise/interests.

4.)  Software Architect
Decides technologies to used. Does software design, mentors you to manage the software and deployment process extra. Unlike college, where getting some output on console was considered more than enough, in professional world you should also know the response time of your service. In other words in college/placement sessions it is enough to know whether insertion in a link list will take O(1) – assuming you have tail pointer or will it take O(n) – you just have start pointer. But here you need to know response time of your service exactly. You need to work on scalability of the service/product etc. You need to work in coordination with testers to find how much time will the 99% of the requests take. One of such parameters is called TP99.

5.)  Software Development Engineer
This is where you come in picture. The one who rights the code from the requirements as given by the requirement set from Program Manager and the architecture/design as decided by the software architect.

6.)  DataBase Engineer
Writes stored procedures, manages DB be it on Sql or NoSql technology. Has the entire knowledge of database architecture. Will never give you the admin rights to insert or delete a column at your own free will. Writes queries for you which you didn’t even know exist in the world. Personal Experience – I didn’t know that I can search a database to get a list of table which contain a column name with something like “xyz”. The query can be easily be found at stack overflow - just in case you are wondering.

7.)  Software Test Engineer
Person who files bugs on your name in Jira or Trello as per your companies standard directions. Tests the application/service you made either manually or the technology stack which your company follows.

Having introduced you to various roles and responsibilities you can find in a team. Now let me touch upon the process of work getting assigned to you. Most companies these days have started following Agile Development. 

Though I have never heard of a company where Agile development is followed ideally but this is what companies aim to achieve. One of the component of Agile development is Excessive Preparation/Planning also known as Sprint planning.
Sprint in simplistic terms means a cycle. A company may follow a sprint of one week or a month. Two week period is assumed to be idealistic. So a PM sends engineers, architect/lead a meeting invite. PM opens a Jira/Trello/similar issue tracking software dashboard. So, for ex if you are supposed to design a restful Java API so that a user can insert a record. If you have completed insertion API without testing or performance number. So now backlog will contain to two stories 1.) Test the API
2.) Get performance number of API. As per the capacity or number of man hours available in the sprint stories will be picked.

NOTE :- Stories consists of tasks. Tasks is something doable like code/review request etc. After breaking a story into a task, these tasks get assigned to the software developer/tester/architect/database architect.
So next day onward of  the sprint planning meeting you have daily meeting of 15 min. Now this is where the actual work gets discussed. Engineers discuss what issues they are facing. Or if they need some kind of database permissions etc.


FINAL COMMENTS
That is how a software engineer gets allocated the work and finally they start writing the code/documentation/class diagram as required. A software engineer’s job is not necessarily all about just writing the code blindly in isolation without getting any acknowledgement. It involves understanding requirements and which of these requirements require immediate attention and which of them can be delayed to next sprint. It involves proper justification of why your method/approach is better.
Software engineers play table tennis, foosball, snake & ladder and sometimes chess too. Though we never meet the clients of our product directly but this does not means we live a life never seeing light of the day.

P.S – This lifestyle is more about a product based companies where a development is going on. Service based companies have a bit different lifestyle and Startup culture is totally different and is super fast. And if you are working in a team where even though you are a software engineer but your work involves mainly the maintenance of an engineer's life might be pretty different.

P.P.S – Special thanks to Google for the images.