Wednesday, October 6, 2010

Adding new contact fields in Funambol

Another 2 weeks into Funambol and this time the work is little different, more interesting and more challenging. The task at hand is to add a new field under new contacts in Funambol. Previously I had mentioned how to enable the already supported fields of Funambol in the web demo and I was able to enable the Nickname under new contacts. This time we doing something similar. When we create a new contact in BlackBerry, henceforth to be called as client or BB, we see an extra field called PIN which is specific to BB only. Funambol doesn't know about this. In this post we will see how we can create a PIN support in our locally installed funambol server, henceforth to be called server. In other words, I should be able to send and receive contacts including the PIN field from client to sever and vice-versa.

We will assume that we have a working funambol server installed in the PC and Funambol source code in local hard drive. There are three things through which we can accomplish the addition of new field. First, we need to create a new attribute in the contact class structure called Pin. Second, we need to add an additional column in the database for storing PIN against all contacts. Third, we need to change the webdemo front end to expose the PIN field to user and send/receive PIN from user to backend and vice versa.

Module -1: Adding PIN attribute. The java files are in \funambol\common\pim-framework\src\main\java\com\funambol\common\pim

Step-1: In file PersonalDetail.java, add a new attribute "private String rim_pin;" going by the same format as other fields there, like gender. You'd add getPin(), setPin() etc.
Step-2: we'll edit SIFC.java, SIFCParser.java and ContactToSIFC.java to enable PIN field in incoming/outgoing SIFC, going by the same format as other fields in there like NICKNAME, ANNIVERSARY etc.
Step-3: We'll edit ContactToVcard.java going by the same format as other PersonalDetail attributes. So, we'll add a method "composeFieldPin" which should be like this,

/**
*
* @return a representation of the vCard field X-RIM-PIN
*/
private String composeFieldPin(String pin) {
if (pin != null) {
return "X-RIM-PIN:" + escapeSeparator(pin) + newLine;
}
return "";
}

This is because the tag name standard for PIN in Vcard is X-RIM-PIN so when we are converting contacts in server to vcard for sending it to client, the pin data must be against X-RIM-PIN tag. This will enable the client which will know that it has received a PIN value and so when you see the corressponding contact in client, the PIN field will contain the value that you had set in the server.
Next we will edit VCardSyntaxParserListenerImpl.java and add code for pin going by the same format as there are codes for other fields in there. Now all the X-* fields in the vcard that the server receives from the client, they are added to a XTag list through "addExtension" method in this file. For interpreting the PIN, we will intercept this method. Add the following at the end of this method,

if(tagName.equalsIgnoreCase("X-RIM-PIN")|| tagName.equalsIgnoreCase("RIM-PIN")){
contact.getPersonalDetail().setPin(text);
}
Next we edit the VCardSyntaxParserListener.java in the same format as other fields.
Step-4: Build the changes. Go to pim-framework directory and run mvn package. One may need to modify test files as well if build fails. When its done, run mvn install so that the changes are reflected to other packages later.

Module -2: Adding PIN in database. Corresponding java files are in \funambol\modules\foundation\foundation-core-8.X.Y\src\main\java\com\funambol\foundation\items\dao

Step-5: Modify the PIMContactDAO.java changing the select and insert SQL query, adding the extra rim_pin field at the end. Just go by the same format as Gender field is handled in the file and add similar codes for rim_pin. One may also want to add rim_pin in the create table query in PIMContactDAOTest.java for checking including sql files in test folder.
Step-6: Edit the funambol.script file in hypersonic\data and in the query CREATE MEMORY TABLE FNBL_PIM_CONTACT( ... ) add RIM_PIN column at the end.
Step-7: Build this module, mvn package and then mvn install.

Module -3: Adding PIN in webdemo. Source files are in \funambol\modules\webdemo-module\webdemo-webapp

Step-8: Edit the PDIServlet.java adding rim_pin just like the way other fields are mentioned. Build this module.Edit the add.jsp and view.jsp in \tomcat\webapps to show an extra text box field named rim_pin. Follow the other fields mentioned in the files and rim_pin can be added in the same way.
Step-9: Replace all the libraries that were created from build into corresponding places in local server directory. Replace the class files in webdemo module with that generated after the build like PDIServlet.class.
Step-10: Restart the server and try creating a new contact in webdemo, give some value in pin field. Sync with client. open the same contact in client the see the pin field populated. Similarly create a new contact in BB and sync, then see the contact in webdemo(server side) and find the pin field as given in BB.

Helpful references:
https://core.forge.funambol.org/ds/viewMessage.do?dsForumId=405&dsMessageId=126575
https://core.forge.funambol.org/ds/viewMessage.do?dsForumId=405&dsMessageId=125104
https://core.forge.funambol.org/wiki/HowToHackWebdemo?highlight=%28CategoryHowTo%29

Stumble Upon Toolbar

Monday, September 27, 2010

Playing around with Funambol web demo app

I was involved working with asset management database for the first 2 weeks and it was very educational. I was given a lookup feature to be included in the database front end which I completed in 1 week. I also tested the same by adding up more than 40 devices into the database through the lookup feature. I hope my lead was impressed by this feat. He seemed satisfied. When delivering him the final package I asked if he wants me to look into something else. There was not much to do in the database part so he included me into the blackberry apps group which is also handled by him.
It was then that I came to know about Funambol, my first assignment.
Funambol is an open source mobile sync feature for various mobile devices. The concept is simple. Users can download and install it in their mobile. Then specify the email address from which you want to sync your device with. If I give my yahoo mail address, it copies the contacts, calender etc from that account and the Funambol-Email will also display(sync) the inbox into your device. This helps people access their account on the go. Just open the application, choose the server sync option, when its done, you can see the new changes (if any) like new mails, new tasks etc that has been added into your email account. Through Funambol you can also set new task, contact, send email to others, upload pictures into facebook on the go etc.
How does it work? I haven't researched it well but I believe the funambol data server communicates with regularly with your yahoo account and stores the email, contacts etc from their and when u select the device sync option, it actually loads data from the funambol server. The same happens when you want something to go out from your device, like uploading a picture.
More detail information can be found at Funambol site, http://www.funambol.com/
I installed the funambol data server application (free!). Through this you can make your own PC act as the Funambol data server, and the device will contact your PC for updates. Once it is installed, start the funambol data server (start->all programs->funambol->funambol data server->start server). It will take some time to be up. The open the browser and type http://localhost:8080/funambol/ds and you can see the web demo client. By default the admin username is included (username: admin password: sa). You can also open the funambol administration tool. Play around with funambol for a while. Get yourself comfortable about its working. The settings for web demo is in the C:\Program Files\Funambol\tools\tomcat\conf\server.xml file. You can change the default port 8080 to something else like 8181, which I did. The documentatio for funambol can be downloaded from this site, https://www.forge.funambol.org/download/documentation.html#runserver

My Task: When we login into the web demo client (say using admin account), and create a new account, the common fields are First Name, Last Name etc. What if I want to add more fields like (Nickname) on top of the exisiting ones. This is necessary because in a blackberry when we create a new account, we have all sorts of extra fields and we need to map Funambol's server contact fields with BlackBerry's so that when sync-ing, all fields in BB gets populated. Investigate.


Initial Approach: I could see that the web demo client front end is bunch of jsp pages. When I populate the contact fields and click Add, some jsp page is called passing the values. The jsp pages are in C:\Program Files\Funambol\tools\tomcat\webapps\webdemo and main.jsp, add.jsp, view.jsp and list.jsp handles the contact part. Looking into the source code isn't much of a help. But I know that parameters are being sent/received from somewhere, parameters like operation=ADD, type=contact etc.
Next approach is to find the source code. Browsing in the Funambol folder, there is no .java files, only .class files (in C:\Program Files\Funambol\tools\tomcat\webapps\webdemo\WEB-INF\classes). If its open source application, where is it?
As it turns out, the source code doesn't come with the installation package. One can download the source code separately, modify, rebuild the package the replace the .class files with the one thats in the installation package and you get your new modified funambol.
Okay. Next thing to do is download the source code, from https://core.forge.funambol.org/source/browse/core/ using the command "svn checkout https://core.forge.funambol.org/svn/core/trunk encore --username kundan " in the command prompt(win)/terminal(linux). I recommend one should register at the funambol site. One can also use the anonymous username (no password) to download the source. This will copy the source code into the encore folder. Next step, how to build it?
I followed the instruction mentioned in https://core.forge.funambol.org/wiki/BuildingFunambolV8?highlight=%28CategoryDeveloper%29 to build the whole funambol bundle. I did all the package settings as it asked me to. Building the whole package is a feat in itself. When I tried "ant forge-bundle-win", I faced lots of errors. These may arise because of fault in settings etc. Bottom line is, debugging the build error is out of my reach.

On further reading the how to build wiki page(above), I could see that we can build individual sections separately. I am concerned with webdemo part only, why not build webdemo only? So, I went into "encore\funambol\modules\webdemo-module\webdemo-webapp" and ran "mvn package". result: BUILD SUCCESSFUL. A target folder is created containing the new class files. Now its time to edit the souce code.
Open the encore\funambol\modules\webdemo-module\webdemo-webapp\src\main\java location and edit the PDIServlet.java file. Study the source code. You have to add parameters for nickname going by the same format as name, surname etc in the java file. The main contact class is in https://core.forge.f​unambol.org/source/b​rowse/core/trunk/fun​ambol/common/pim-fra​mework/src/main/java​/com/funambol/common​/pim/contact/ and the servlet file calls functions of this file to read/write contact properties. One can see that Name.Java file indeed has fields for nickname, suffix, initials etc. These are the fields that are already supported by Funambol but for some reason they do not show up in the web demo. We are closer on our way to displaying them. Build the package again after modifying. target folder is created. Copy the .class files into the funambol install dir i.e at C:\Program Files\Funambol\tools\tomcat\webapps\webdemo\WEB-INF\classes.
Finally we need to modify the corresponding jsp files to display text boxes for those fields. Modify the view.jsp and add.jsp to display field for Nickname in the same manner as Name and Surname etc are being displayed there.
We are done!

Open the web demo portal(you might need to restart server for changes to take effect), login using any (admin/guest/user) account. Click on new contact and see the Nickname field. Test the modification by adding a new contact and then displaying the same. The nickname field is saved.
Through this we are now able to write nickname field into database whose value previously being written was null.
Another interesting thing to check. One can confirm that the nickname field is being written into the database by looking into the funambol.log file.Since I have used the default db i.e hypersonic, so if I open \hyper​sonic\data\funambo​l.log file, at the bottom I can see the sql script being invoked to insert data into db and there is one less NULL data being written because we have now enabled the nickname field. :)

That summarizes my first funambol experience. A further look into Name.java, Address.java etc will tell us what are the funambol supported contact fields.
Next task I think is to know how to add a new field, the one that is not even supported by funambol. May be next time I'll reflect on this.

Useful reads:
https://core.forge.funambol.org/ds/viewMessage.do?dsForumId=405&dsMessageId=125526
https://core.forge.funambol.org/ds/viewMessage.do?dsForumId=405&dsMessageId=125104

--

Stumble Upon Toolbar

Saturday, September 11, 2010

2 weeks into Chicago

I am in Chicago right now, dreading the oncoming winter. Yeah, I hate winter. Boo You. I hate it because it makes me lazy. I don't like to be in bed till 11 am and still not in mood of coming out of the blanket because you worked so hard over night to make the interior this warm, cozy. In the midst of this paradise, who would like to think that you have a class starting in 30 mins or the project manager waiting for you. Less spoken the better about the everything turning stone cold, literally. Water is cold, kitchen utensils are cold, damn it the toilet seats are cold. You would hate to come out of the hot shower for the same reason. Why go out and say hello to cold air, invite them to touch you, give you a tingling shiver.

I can go on for more but in the midst of my harangue I forgot the main thing.

I am in Chicago for my internship, at RIM, the creator of BlackBerry, in case you didn't know that. Its been 2 weeks here. The place is nice, people are nice, facilities are awesome (I meant free unlimited coffee of course), work i seven more interesting and the best part, no fixed committment when to be in office and when to come out etc. If one may remember the one thing I used to hate the most while employed at Samsung is the punch-in punch-out system. One has to be in office at best by 10am and one canno tleave office before 4pm with maximum of 1 hr break in betwen. What is this, a jail?

Anyways, that being said I'll try to put in some things that I learned during these 2 weeks. In simple words, my work pertains to developing application in VBA (Visual Basic for Applications) for a database in MS Access. What does the database contain? Well, nothin but which guy has which device with him, who is responsible for the device etc etc.

My first order of business was to resolve the size difference between the front end and back end. It is a common observation that when you open the modules, forms etc for changing in their codes and close the application after the updates you'd notice that the size of the front end has increased. My thought process was to separate each of the forms, macros, queries etc from the application and analyze their size individually. This didn't work. After some research on the web, I found out the solution.

The automatic compaction feature of Access is not enabled by default. If not done so, Access front end would incorporate the back end wholly which is unnecessary. The checkbox to enable the automatic compaction can be found in the Access Options. Initial side effects would involve slowing down of opening or closing of application but that would settl edown soon. One doesn't even need to tell the Access to compact everytime the application is closed. It can be invoked periodically at a predefined time stamp or you can set the size beyond which Access will automatically compact and repair the database.

Among many other itsy bitsy things I learned this was something I thought worth putting into a blog. May be in my next post after 2 weeks I'll have something more interesting than this.

Goldy Blank

Stumble Upon Toolbar

Sunday, June 6, 2010

Algorithms for 8 queens problem

The 8 queens problem is a very popular puzzle especially for a Computer Science engineer. From the point of view of algorithms, there can be many approaches towards its solution. The problem statement and various solution approaches are mentioned below.


Problem: Arrange 8 queen pieces in the standard chess board so that none of the queens can take any other queens, i.e, there is no conflict in their positions.

Solution:
Approach 1: The common and straightforward solutions for the beginners is the brute force technique. Take all the arrangements of 8 pieces that can be possible and discard those that are in conflicts. It is not at all a suggested approach as its exponential if the problem is generalized to n-queens on an nxn board problem.

Approach-2: Backtracking is a common AI approach of solving problems. In this problem, we start arranging the queens column wise such that the current queens position is not in conflict with any of the previous ones. If there is a conflict in the column, we try to place it in the next available(conflict-free) column. If we run out of columns, we backtrack to the last stable arrangement and continue process from there and so on. This is actually accomplished through recursive backtracking technique.

Approach-3: Permutation Method. First a solution is found out for 8 rooks on a chess board which has only 8!=40320 possibilities. Then take each permutation and replace the pieces by queens and discard those arrangement where the queen is attacked diagonal-wise.

All solutions mentioned above produce guaranteed results. There are other heuristic based approaches which may get stuck midway.

Reference:

Stumble Upon Toolbar

Saturday, June 5, 2010

Everything about Bottleneck Spanning Tree

In this post we will take a detail look on BottleNeck Spanning Tree (BNST).
But first, lets understand the definition of BNST.
Suppose we have a graph G(V, E). Now take out all the spanning trees of G. In all the Spanning trees, the maximum weight edge is called the bottleneck edge [because this edge is some sort of bottleneck for us. The ST cost can be reduced if we reduce this edge]. Of all the spanning trees, pick the tree whose bottleneck weight is such that its the smallest of all other bottleneck weights of other trees, i.e there exist no other spanning tree which has its bottleneck value lesser than the bottleneck value of the tree you picked up.
Lets take an example. Consider the graph below. Also shown are its spanning trees.
The bottleneck edge value is 2 in each case and if I pick any tree, there exist no other tree having its bottleneck value less than 2. Hence all three spanning trees are also BNST [NOTE: the middle spanning tree is a BNST but not a MST, the other two are].
Another example can be as shown.

Consider all its spanning trees. We can notice that spanning trees can have either of AB, BD or BC edge to include the B vertex(or more than one). So 8,9,10 are the heaviest edge that one of the spanning trees can contain and among all the spanning trees, there is no spanning tree whose maximum edge weight is less than 8. So pick any spanning tree with AB edge in it and it will be a BNST. Note that BNST is only concerned with its maximum edge weight.

Problem 1: Is an MST a BNST also? Is a BNST an MST also?
Solution: There are two ways to proving this.

First, by contradiction. Lets say an MST is not a BNST i.e for graph G(V, E), lets say there is an MST, T and a BNST, T'. Assume the maximum edge in T is e and that of T' is e'.
W(e)>W(e') because T' is a BNST and its by definition of BNST that all other spanning trees have their maximum edge weight greater than that of T'. That means if I add edge e to T', it will form a cycle and the cycle will have the maximum edge as e. By the red rule, the edge e cannot belong to any MST hence its contradicting. So the MST is same as BNST.

Second, Instead of proving MST=>BNST, lets prove that ~BNST=>~MST. Assume graph G has a spanning tree T that is not a BNST. Let e be the maximum weight edge in T. Lets say e connects two trees T1 and T2. Since T is not a BNST, there exists another edge e' which also connects T1 and T2 and W(e')
T=T1+T2+e
T'=T1+T2+e', where T' is the BNST.

Sum of tree edge weights, S(T)>S(T'), so T cannot be the MST. Now T is not a BNST, implies it cannot be the MST as well. Hence proved.

The second part of the question can be proved using the counter example explained above.

Problem-2: Give an algorithm to create a BNST of a given graph G(V, E).
Solution: The solution is very simple. For this, starting with the largest edge, remove edges from G one by one. If removal of any edge disconnects G, then keep that edge and continue the process with the next edge in sequence. Continue this until all vertices are covered. Now we have a spanning tree which is a BNST. Note that it is an exact opposite of Kruskal's algorithm to find the MST of G. Moreover any MST finding algorithm is also fine because MST is a BNST as well.
Another method is, find the median edge weight and remove all edges with weight more than the median. If the remaining graph is connected recursively repeat the process. If the graph is not connected then there are connected components in the G. Shrink these components into single vertices with edges coming out is similar to original graph and reconstruct till G is connected again. Repeat the whole process till result is achieved. It is O(|E|+|V|log|V|).

Problem 3: Give a Linear time algorithm to determine if a graph G(V,E) contains a BNST with its maximum edge <= b, where b is a given constant.
Solution: We remove all the edges with weights > b from G. Then we check is G is still connected. If yes, then such a BNST is possible, else not. We can use DFS to check connectedness of G which is linear.


References:

Stumble Upon Toolbar

Friday, June 4, 2010

Algorithm: Determine the element that occurs more than n/2 times in an array of size n

Problem: An array of size n contains integers between 1 to n. You have to determine if there exists an integer which occurs more than n/2 times in the array. Also, find the element. This is also called the majority problem. One more thing, the solution has to be done in linear time and using constant extra space.


Solution: I tried real hard to think it over myself but gave up eventually. Going through the solutions posted in the web, I selected the following ones, which seemed to me more acceptable.

Despite many claims of doing it in under linear time (like logn), it is not possible to do it. I can always find a way to arrange the numbers such that one has to traverse the whole array atleast. Also, sorting is not allowed as it will make it nlogn complexity, greater than linear. O(n) sorting is possible, like radix sort but I think they donot do it in constant extra space. So here are my collected approaches.

Approach-1: A simple solution is to find the median of the integers in the array. Median can be found in O(n) time, called the Selection in Worst case in linear time. Since if an integer exists in majority, it must be the median itself. But median doesn't always guarantee that its the one. Once median is found, we need to run another traversal of array to count the number of times the median element occurs. If its more than n/2, thats the answer else return none.

Before going to next approaches, lets understand the concept of the solution. Since there is only one integer(if any) that can occur more than n/2 times in the array, the trick is every time you encounter 2 different integers adjacent to each other, make arrangements to remove them from the array, or simply pair them together and forget about them. And if adjacent numbers are equal, you continue with next integer in the row but remembering that the integer you encountered just now could be a potential majority element. If we go through this one, we are actually collecting the majority element together, and the in-between different elements are (kind of) removed by pairing them with one of the potential majority element. In other words, we are sacrificing one of the majority element to remove one of the other (different ) element. Eventually, the non-majority elements will vanish but atleast one of majority element will still exist because it is present more than half the times.

Approach-2: Take the first element, consider it as ele, the majority element, and put a mark for it. Traverse through other elements and do the following:
a. If next element in array is equal to ele, increment mark by 1.
b. If next element is not equal to ele, decrement mark by 1.
c. If mark is zero, make mark as 1 and consider the current element as ele.
When traversal is done, take the ele and perform another traversal through the array and count the number of occurrence of ele. If its more than n/2, return it as answer, else return NONE.

pseudocode:
-------------------------------------
m = 0
for (x = i..j)
if (m = 0)
m = 1
ele = A [x]
else if (A [x] = ele)
m = m + 1
else
m = m –1
endif
endfor
Another array traversal and count number of times ele occurs
if count>n/2
return ele;
else
return NULL;
------------------------------------------

Approach 3: This solution is very much similar to the one above, i.e the same concept of taking out pair of different elements out of the array and this one uses a stack to remember the previous encounters.
Create an empty stack. traverse the array and for each new element e,
a. If the stack is empty, push e into the stack.
b. If stack is non-empty, compare e with top of stack e', if both are equal, push e into the stack, else remove e' from top of stack (pop).
c. Once traversal is finished, if stack is non empty, remove the top of stack e' and do another array traversal and count the number of times e' occurs. If its more than n/2, return it as answer else return NONE.
As one can see that the stack performs the work similar to mark in the previous approach.

References:

--

Stumble Upon Toolbar

Monday, May 31, 2010

Prelude to the Blog makeover

I felt like writing something. Its been a long time and moreover this blog is nothing but my nonsense thoughts. I mean, yes, it is exactly so. Take for instance some blogs where people discuss technical matters, this error occurred and I did this and that and poof!! the errors' gone. Some people write blogs on technical gadgets, giving their views, some people put up their photography skills on display, some people put up tutorial pages in their blogs and those are the ones that really help others. Yes, its true. I have myself got many of my computer bugs fixed through posts in one blog or the other. I have bookmarked many such websites where there are useful links, posts, images, directions, helps etc. And compare those blogs to this one. Sheer waste of google's space. Its just to feed my fantasies. Its just a consolation. Just a time-pass when I think I am a good writer and I had to vent out something somewhere to prove that I am a good writer. Trust me, I read my own articles many times and I like it but I am afraid if other would think so. Moreover I don't expect to show off my writing skills even if I have any. There are some people who publish their blogs to friends in the hope to garner some appreciations for their writing skills, show off. I ain't like that at all. I can live my life writing anonymous posts no matter how good they are.

From now on I have decided to make this blog useful to atleast someone. I think I have some computer knowhow, programming knowledge, software understanding etc. Time and again I bump into something interesting, like some interesting piece of code, some unknown shortcuts, tricks, some error handling solutions etc. So one can look forward to this blog for that. I think once I start my industrial experience, I'll be in a better position to put quality stuffs here.
Plus I like travelling alot. And I like planning before I decide on visiting any place. In that way, I can put up my travel itinerary here and the reason why I took this route, some suggestions for others, feedbacks to future travelers.
Apart from that, I take interest in photography also. So I'll try to put up snaps of the beautiful places I have been to. One step towards the same is the "Collections" series of post at this blog.
I am an avid reader of books also. I'll try publish my book reviews (completely unbiased, totally my own views).
Did I mention I am a movie worm? Yeah, I am a Hollywood movie freak and not only movies but take interest in watching documentaries also. I used to watch lots of Bollywood movies also but as I grew more and more acquainted to Hollywood, I kinda lost interest in Hindi movies. You don't have to worry about that. The Bollywood movies are all nothing but cheap remake of Hollywood ones and they are pathetic, trust me. Except for a few ones, Hindi movies these days are nothing but waste. And the few good ones that I am talking about, won't miss their spot on this site.
And of-course obvious is the the usual nonsense thoughts and everyday happenings that I have been putting in here till now.

--Goldy

Stumble Upon Toolbar

Thursday, April 22, 2010

part time = party time

Its been 9 months since coming to US and I haven't had a part time. Not any more!

There used to be a time when people were coming to US, completing their studies and everything and not spend a single dime from their pocket. All expenses, assistantships, funding and all provided by the University. Although the same doesn't happen anymore but there are some people who have this luxury. Others are spending, sometimes complete expenses, from their own. I was kinda in between. University paid 40% of my tuition, but I had to pay for the rest 60% of my own. I had to take an education loan for the same. So it was very very important for me to get a part time job here atleast to take care of my living expenses.
I tried hard during the initial days of my University, going through departments, stores etc and putting up an application wherever I could. As the days passed by, I kinda slowed down on my hunt. Partly because I wasn't getting any reply what so ever, and partly because my enthusiasm was dying. Moreover it frustrated me when some of my friends got into one or the other.
Come spring, and I realized a lot of my senior friends will be graduating this term and many of them had part times so why not ask them for some push. There is one guy from Bhubaneswar here, Sandeep, very nice chap and down to Earth. He was employed at the bookstore. He had helped me alot when I was new here, taking me to the Banks, completing formalities etc etc. I always used to consult him regarding University matters since he has been here for a year now and knows more or less everything about the University activities. I asked him if he could refer me to the Bookstore guys for hiring. He readily agreed and said to contact him again in the first week of April, when he will put up my name to the authorities.
Come April, I emailed him and asked to let me know when to come down to the store so that he can introduce me to his superior. He said it is not necessary for me to come down now. He said he will tell his manager about me and I can go and meet Mr. Tucker in 2-3 days and ask for service letter.
I paid a visit to Mr Tucker after 3 days. I told him that I am friend of Sandeep and that he told me to come down here and check if there are any positions open. The guy told me there are no positions open now and that I should see him in 1-2 weeks. I let him know that I don't have an SSN, and that it would be another 2 weeks before I can actually start working. He told me he can't issue me service letter unless he hires me for any position.
Anyways, I met him again after a week. This time he told me he can hire me right away only if I have an SSN. This was a shock for me. I was so very disappointed. I told him atleast give me a service letter now so that I'll apply for SSN and in 2 weeks I am good to go for the job. But he told me its a strict policy in the bookstore to mention SSN info before hiring anyone so he can't even offer me a position unless I have an SSN.
Now I am in a loop. Its like a dog chasing his own tail. I can have SSN only when I have a service letter, i.e he hires me for any position and he can hire me for a position only when I have an SSN. Now my head is spinning. I went to the International Center and they told me I can still work if I don't have SSN but I'll be paid only after my SSN arrives. I told the same to Tucker that atleast now let me fill in the position, I'll start working and apply for the SSN in the meantime and he doesn't have to worry about paying me for this time. To this he said they have policy they can't hire people unless they have SSN, so its the same story altogether.
I was so dejected. I had lost all hopes of this job. It was my time-pass for the long summer break, apart from the loads of studies. Seeing me so sad, Tucker told me to come around July and he will see what he can do but we both knew its a consolation. Even though I get a job in July, my summer is wasted, the time when I could have put in 40hrs of work per week (unlike 20 hrs during semester) and earned double money so that I need not take loan money anymore.

Tucker: Come in July and we will see what we can workout. You will be working alongside Sandy. Do you know Sandy?

I thought Sandy is some software the store uses to manage operations.

Me: Well, it will take me no time to know that. But I was banking heavily on this job now. I was thinking I'll be replacing Sandeep since he will be leaving this job soon.
Tucker: You know Sandy?

Now I realized he is referring to Sandeep by Sandy.

Me: Yes. I know him pretty well. He is the one who referred me for this job.

Tucker: Yeah. He once told me he referred one person for this position. Are you the one?
Me: Yes. I am the one he referred.
Tucker: Well then let me have a talk with Sandy tomorrow. Does he have your number?
Me: Yes. He has.
Tucker: Thats better. Let me talk to him on this tomorrow and you can expect a call from him sometime tomorrow.
Me: Sure. Thanks!

Then I left. It made me think. I was now sure that he didn't realize before that I am the one that Sandy referred. He must have been thinking something else when I told him I am a friend of Sandeep, may be he didn't pay attention to this statement or may be he did but it didn't strike him of any importance. Why does he care if I am a friend of 'xyz' or 'abc'? But the conclusion to be drawn here is that there was a communication misunderstanding that led to a week's delay. The next day, Sandeep called and told me to meet Tucker on Monday and he will give me the letter. I was so jubilant. Better be late than never.
On Monday I got the letter, took the application form from the International Center and applied for an SSN on the same day. Its a matter of days before I start earning some dough. One step towards my ultimate goal.

Before I wrap up this, I must thank Sandeep a thousand times for this opportunity. It would not have been possible without his help. Thanks man!

cheers....

Stumble Upon Toolbar

Sunday, February 14, 2010

The friends I have been with

One type of people we treasure the most are our friends. Atleast for me, my friends have always been special for me. So I thought to take a moment's time from my life and cherish the memories of some of the fascinating people I have crossed roads with.

When I was in school, apart from some of the hot chick's faces, I distinctly remember my happy times with two of my best friends there. One's name was Sudhamshu Ghode and another Abhijit Nayak. Ghode had more of a tamed animal's personality and I enjoyed bossing around with him. I used to ride on his back(his name signifying the same is ironic) most of the time and he would whole heartedly agree without ever protesting. It was more of demanding and serving friendship between us and I was always won over by his servitude. I never used to bring my lunch box to school and so I would always devour on Ghode's. Moreover, everybody in the class used to like him for his free manners. Ghode left the school in 7th or 8th grade and our friendship too. But unlike Ghode's, my friendship with Abhijit lasted till 12th grade. We were bound to become best buds since we had been in the school from 1st grade, if I remember correctly. I am still in touch with him although very rarely we exchange greetings. But nonetheless he still holds respect in my heart. Nadu, as we used to call him fondly, had a typical attribute in his body language. His body always had this motion, or vibration thing attached to it. Yes, his body was always moving, very slightly ofcourse but distinct enough. And he used to drool alot too. I mean, he never had this control over his saliva, that in the middle of some arguments over some problems in mathematics, while explaining, some saliva would suddenly come out of his mouth. Nadu, the name was derived from this act of his only. Although when we were young, we took pride in mentioning each other and to the world that we are best friends of each other. I don't know if during the later part of the school he had the same feeling or not, since we kinda matured and behaved like adults, had friendly arguments often, went to different coaching centers etc, but he still remains my best friend of my school. We both might have changed from what we used to be in 6th grade than what we became in 12th grade, but I still considered him my close friend owing to the long history we had shared.
There were some other school friends too whom I remember. There was Abhisek Mohanty, our Biolgy teacher's son. He was the best man in an argument and I always knew that noone can beat this dude in a friendly (or unfriendly) verbal fight. Then there was this haughty, hollow-inside group comprising of Preetam, Shivananda whom I always disliked cos they will never loose a chance to degrade you infront of bunch of girls or other smart ass friends of theirs to make an impression of themselves upon them, no matter how old your friendship might have been. They were friends with their kind of people only, as I believed. Then there was Rahul, the guy I hated the most throughout my school life. Although his younger brother was a gem, in his nature, but Rahul was a deeply selfish guy. We were friends too, since we had our houses nearby and he was also a teacher's son, like me and I used to hang out in his house alot when we were kids but as we grew old, he became more and more selfish as to the point that I couldn't stand his attitude anymore.
Among all my schooldays friends, there was only one, and only one person whom I admired, respected and adored truly as a friend, was Barun. He was such a jolly and innocent looking and selfless person and I always was bowled over by the purity of his heart and behavior. A true gem. Towards the end although he too became somewhat biased by being in the company of Preetam and Shiva and Rahul, and sometimes I didn't like him but when he wasn't with those guys, he was again the same, the pure form of himself. Thats why I liked him.
There were bunch of other friends too like Pankaj, with whom although my interactions were for small time but his jokes would always crack me up, I considered him a truly funny guy, pulling out jokes from nowhere and spoken as to bound to crack you up. Then there was Bittu, the living symbol of the result of a struggling family. His father had died long ago, his mother worked in the CRPF hospital as a nurse and wasn't earning much because in his house there would one find nothing except bare minimum stuff necessary for a living yet Bittu and his brother were fine, elegent gentleman type in their acts. They studied well too. Another person deserving a mention here is Jyoti Ranjan Mohapatra. He was in the C section (I was in A) and it was only during 11th and 12th grade that we came together to sit in one class, namely, the Science section. I spent my 2 years (11th and 12th) and major part, with him. We were in the same tuitions, same class. His unmatched quality to make fun of teachers, to be able to copy their expressions, voice, movements and everything and his ability to contrive his wildest imaginations and putting the teachers in there and make jokes around them influenced me so much, I must admit, today the person that I have become, the way I act, the way I try to make a joke and many more things are very much like Jyoti's. Except a few, I don't have contacts with these guys but I still remember their faces and occasional incidents, the moments I shared with them. Priceless!!!!

I was never comfortable talking with girls of my class. I remember faces of some of 'em, because they were cute and beautiful, but I don't have any moments, any conversation with them that I can recall. There was one girl, Smruti, whom I can consider as my best friend among girls because probably I spent more time talking with her during my school days than any other girl. She was also the school staff's daughter and lived in our own colony, which should explain the deeper acquaintance between us. Moreover, I think her mom also used to hate Rahul and so she would rather ask me to come over to her house and help her daughter with some questions in the history chapters than ask Rahul. Its a different thing that I would ask Rahul about the answer to those questions (for he was the topper in our class) and then go to Smruti's house and replicate the same answers on her notebooks. Smruti is in US, married and with a baby too. I am in touch with her, and I enjoy talking with her, remembering our good old CRPF days.

After 12th, I took a year's break, to prepare for my entrance exams. During that time I used to go to 2-3 places for my tuitions on Physics, Chemistry and Mathematics and I made some good friends there too but have lost contacts with all of them. During those days, I met with DibyaJyoti and we became instant friends, little did I know that this friendship will extend for another 6 years and during which time I'll come to know more of him and be influenced by his ideas.

The came the best 4 years of my life. My B-tech at NIT Rourkela. Staying away from home, for the first time, staying in a hostel with 300 other students and this for another 4 years and sure enough I met with some of the best people of this world and am glad of it. Among the closest friends I had when I left Rourkela was Ashwini Maharana. My best friend of NIT. A person of not so much of pure heart but still quite pure, not much of a funny guy but yet funny sometimes, not much of helpful yet very helpful almost all of the time, and moreover the one quality for which I'll always know him, Unlucky. No matter how careful he tries to be in every dealings of his, yet he would fall into some trap, be duped, made a scapegoat, always dominated by others. He was kind of the favorite, lovable by all others in the hostel and I take pride in the fact that he considered me his best friend, and we stayed in adjacent rooms during the final year, the year when students enjoy the college life the most. Although these days we talk less often but I still keeps an update on him. Next on the list would be Abhisek Bose definitely. The true prize of my 4 yrs at NIT. My only regret was, I got to meet and know him better only during the 3rd year but we became such good friends, I am sure we will remain the same till I breathe my last. He is the type of person that I am myself in many respect. Only that he has one more good quality, he has been very regular being in contact with me. I admit I sometimes don't feel like going out and reaching to my close friends, but Bose has never failed me in that front and I always feel like on top of world, cross my limits of ecstasy when I see Bose's call , or his "Hi" over gtalk. As I said, he is like my own reflection. Whenever I had asked him for any assistance, he was there with me even to the extent that he agreed to come with me to Puri on a stormy evening because I had this desire to spend a whole night on the beach. Not to mention that he made the arrangements for us to stay in a dharamshala which was on the beach itself. He truly is a true friend, above all. I would not have found the courage to visit Puri of my own, more so because it was raining cats and dogs those days and major parts of the state were under flood waters and as a matter of fact the following morning, ours was the last train from Puri to Bhubaneswar after which the railways services were disrupted between Puri and Bhubaneswar since waters had flooded the region. I'll always admire him for what he has been to me.
Apart from the two there were couple of others whom I consider close too, like Abhisek Saran, a pure, innocent and genius boy, Sibashish Acharya, a charismatic, life sacrificing friend, and many more.

Then came my two year stint as a software engineer working for Samsung, at Noida. And the single most influential people during this time on me was none other than Dibyajyoti. I must mention that he was with me at NIT too, all through the 4 years, he in mechanical branch, me in computer science but still living in the same hostel, with regular visits to each other's room and frequent hang outs but I never got to know him better. I must also mention that Barun and Preetam were with me too, in the NIT all through the 4 years, them in Mining (Barun changed to mechanical after 1st yr) but this was the time when I grew apart from Barun. He was spending his time mostly with Preetam and and his likes and was behaving like one of them when in their group but surprisingly he was the same old Barun again when alone. So I would talk to him only when I would see him alone or with other friends and avoided him otherwise (I avoided Preetam all the time). With Dibya, it was different. We were kinda close, good friends but I would say, never from within. When in Noida, he was to join CSC so he asked if we three (including Amartya, Samsung) could stay together and I agreed. I never expected to stay with him cos I never really knew him that well but I agreed because I thought its better to stay with someone whom I know something about than with some other guys whom I don't know anything about. While living with him, I would not hide the fact that we had numerous verbal arguments on myriad topics, his views rarely agreeing with mine or vice versa and yet we were hands and gloves on a lot of other matters. Although I used to be irritated alot by some of his acts, esp his casualness towards common household matters yet we both enjoy each other's company, we both would visit places together. Without doubt, he was the best thing, the best friend of mine in Noida's 2 years. We had the same feelings towards Amartya i.e sarcasm and we both kinda enjoyed it. Above all, gradually he made me realize there is no harm in buying a little luxury for yourself, now that we have started earning ourself handsome salaries. He made me realize money is not for stashing away someplace and living a beggar's life but living your life first and then stashing the leftover money. He made me realize that if I don't start living my life now, I might never get the same chance again, and I might as well save me some regret in future. He brought broadness into my thoughts and actions. I was no more irritated over messed up table or bed or be worried about my mobile or MP3 player not working. And this transformation has surely made me very very comfortable with people and things around me.

Then came my stint as a student again, this time in a whole different country, USA. While looking for roommates, owing to my broadness and highly evolved adjusting nature, I never cared with whom I would be living as roommates because I knew, whoever it may be, I'll be able to adjust. Luckily, I found Subrat and Ajit as the best roommates and in turn, friends that I could have found. Although the same doesn't go well with Bibhu because he has mannerisms typical of a geek, a class topper, a blend of selfishness and irritating behavior and uncomfortable with adjusting. In short, not at all open minded. No broad thinking, no broad perspective. He doesn't like sharing his bowls/plates etc for using in microwave by others, he keeps his charger nicely tucked away in his luggage and taking out only once in 4-5 days for charging purpose, doesn't like someone wearing his sandal even to walk inside the house etc etc. Well, I am too much evolved to worry myself over who is using my sandals or who is doing what with my plates/bowls and Subrat and Ajit are exactly like me too and thats why I bond so well with them. Such sense of freedom to use others stuff without feeling any 2nd thoughts invokes a feeling of brotherhood between people and thats why I donot think anything otherwise, no guilty, no shame, nothing, to use Ajit/Subrat's plate or his hard disk or his laptop without his permission, I use it as if its my thing and they use my stuff without any question and seeing them use my stuff I feel very very happy in the fact that they thought me as close enough to use my stuff without asking me anything, as if its all theirs. It makes me feel like we are all brothers. I agreed with Ajit when he said people's perception, thinking, actions are broadened, matured when he has been under a period of financial independence like the time we had(Ajit, Subrat and I have atleast 2 yrs of work experience) and sadly this is absent in Bibhu. May be its true but sometimes I think Bibhu would still remain Bibhu even if he would have 5 yrs of experience earning money. No doubt, Ajit and Subrat are the best things that have happened to me in USA. And Bibhu has been my worst.

This is where I would stop. This is where I am right now but I am sure I'll have more things to fill this place when I move on to new adventures. But one thing is for sure. I am proud of all the friends I have made. They are all exceptional people and I consider myself very fortunate to have company like these.

Stumble Upon Toolbar