Posts

My FIRE Journey

Image
Welcome to my blog. Just to give some background about myself, I am Amar, working as Member of technical Staff in Paypal.  Moved to US in 2012 and have been staying here for 8 years. I have two boys one is 10 years and another one is 3 years old.

"Idle money is like a radio-active material, its value depreciates over-time"

I came to know above FIRE (Financial Independence and Retire Early) in 2013 while searching for investment opportunities.
Let's jump into the topic. My goal was to be financially independent by 40. I just want to have the financial independent and perceive my interests instead of wasting my precious time churning out money for my family.

The investments are broadly classified as the following categories

Indian Real-estate - Stable and reliable and it never disappoints as long as the decision is goodIndian stock market - Unreliable US real estate - Very slow growth (non bay-area) with lots of wait times and a bit unreliableUS stock market - No one can be…

Some thoughts on MongoDB Nodejs driver

I am in the process of evaluating mongoDB for one of the product requirements. We were on the J2EE stack and MongoDB has java driver with which we got awesome results compared to the existing framework in terms of not only speed and resource utilization but also in terms data replication and fail-over behavior.

I was curious about mongoDB nodejs driver and tried to test its performance over java driver. It was very easy to write code as I was already familiar with javascript and the footprint, startup time are far less compared to the J2EE stack.

Now comes the real problem with NodeJS. My application typically tries to connect to different database for each request and existing nodejs api does not support to use same driver across different requests rendering the connection pooling offered by the framework useless !!!. I need to create server instance for each request.

With  read preference as NEAREST, the reads are not shared across the replica set members and only the member on whi…

MongoDB index completion status

MongoDB allows you to create indexes and run them in the background using the ensureIndex. Often indexing is a time consuming process and may take long if indexed upon string and the collection contains millions of records. For example, Indexing on my collection having 50 million records took almost 15 minutes. Here is the script that can be used to monitor index operation status.


var ops = db.currentOp();

if(ops.inprog && ops.inprog.length > 0) {
    for(o in ops.inprog) {
        var op = ops.inprog[o];
        if(op.msg && op.msg.match(/bg index build/)) {
            print(op.opid+' - '+op.msg);
        }
    }
}

copy above code into test_index_status.sh, execute mongo index_status.sh and see the magic!!!



Configuring jawr to use YUI compressor instead of JSMinifier for minifying js files

Jawr is the framework that is developed to make the versioning, compression, minifying css, js files  more stream lined. It can also be integrated with smartsprites and people can write their custom handlers for their application needs. I am not here to explain about various features supported by jawr. Please go to the link mentioned above for more details.

JSMin is the default post processor used by jawr, it is too old, does not understand some semantics and bothers you throwing errors during minifying process, or the minified version has some bugs which are not present if you set debug mode to true.

So the other option is YUI Compressor,  Jawr identifies which post processor to use based on jawr.js.bundle.factory.bundlepostprocessors property in jawr.properties it is defaulted to JSMin if none is specified. We can set the property to YUI to notify jawr to use YUI compressor instead. Download YUI Compressor from http://yuilibrary.com/download/builder/ please use latest version 2.4.7 …

CORS issues with IE9 and workarounds

CORS(Cross-Origin-Resource-Sharing) is one of the features in HTML5 feature stack that enables a page to make AJAX requests to other domains. This feature is introduced to circumvent the Same-Origin-Policy. I am not discussing about CORS in detail here as there are lots of online resources available.

I am working on a product where html files are served from one domain and back-end requests should be made to another domain (of course sub-domain) for security reasons and API clarity.

Luckily we need to support browsers with HTML5 capabilities like Chrome > 14, Safari  > 5.0.5 , Firefox > 9, IE >8. I thought that IE9 is HTML5 complaint and promised to have support for it. I could have investigated a little bit 

Application was implemented and we are running for release. Suddenly while going through entire flow we realized that IE9 is not making any CORS requests. From then on our hunt started. Searching blogs, articles, stackoverflow for solutions.

I am here to explain the …

Difference in core javascript and jquery event handling

I was surprised to see that jquery handles events in a different way as compared to core javascript event handling.

Here is the case

jQuery("#testAnchor").click(function() {
//do some thing
return false;
});

If you are returning false in an event handler in jquery, that means you are stopping propagation and preventing default. All the handlers listening on the click event on that element will be called and the event will not be propagated to the parent element.

If you use

document.getElementById("testAnchor").onclick = function(event) {
event = event || window.event;
//do some thing
return false;

returning false in this case wont stop propagating the event. we should indeed say event.cancelBubble= true or event.stopPropagation() based on the browser.

Knowing whether control key is pressed while an event happened

If you are listening to click events of anchors to do some operation of showing a dialog or doing something else, you have to know whether ctrl key is pressed or not as you may not want your custom logic to kick in when ctrl key is pressed as user wants to open the link in the new tab.

He is the solution, assuming jquery is used
jQuery("a.link").click(function(event) {
if(event.metaKey || event.ctrlKey) {
//ctrl key is pressed
}
});

checking for metaKey apart from ctrlKey property of event as mac's command key press will set metaKey property to true and ctrlKey for remaining browsers.