Deploy your Website Changes using Git

It is really a bad idea to deploy website using FTP and replacing old files with new one. Let me explain you the deployment using git which makes the life easy.

Before starting we need SSH client and Git to be installed on our local machine. I am assuming you already have installed these applications. So lets begin the interesting stuff.

We need to install Git on the remote server, so SSH to the server and issue following command:

Now we need to create a bare Git repository which should located outside the webroot. We can keep it in our home directory or create a separate folder in the home folder for bare Git repositories.

Lets create out Git repository

Now we are going to create a hook which will move latest changes in the webroot. Create a file hooks/post-receive and paste following code it it:

Update the GIT_WORK_TREE path with your webroot path. Make this file executable:

Server setup is done.

On your local machine you just need to add a remote branch to push your changes.

Your latest code is deployed to the server.

Source: http://sebduggan.com/blog/deploy-your-website-changes-using-git/

क्या हक़ हासिल करना ज़रूरी है ?

जब मुहम्मद (SA) पहली बार हज करने के लिए मक्का जा रहे थे उस वक़्त उन्हें मक्का वालों ने आने नहीं दिया और जंग के लिए भी तैयार थे। मक्का वालों को ये भी मालूम था कि वो रसूलुल्लाह की सेना का मुक़ाबला कभी नहीं कर पाएंगे फिर भी ज़िद पैर थे कि उन्हें मक्का में दाखिल नहीं होने देंगे। उमर (RA) ने अबू बक्र (RA) ने पुछा :
1. क्या हम हक़ पे नहीं हैं ?
2. क्या हम उन लोगों से ज़्यादा ताक़त में नहीं हैं ?

अबू बक्र (RA) ने कहा, हाँ उमर ये दोनों बातें सही हैं लेकिन रसूलुल्लाह अमन चाहते हैं, हम हज के लिए जा रहे हैं हमें खून नहीं बहाना। काफ़ी दिनों की बात चीत के बाद सुलह हुआ। सुलहनामा कुछ ऐसा था :
1. अगर कोई मक्का का निवासी मुसलमान बनना चाहता है और मदीना आता है तो उसे अपने parent से इजाज़त लेनी पड़ेगी अन्यथा उसे वापिस मक्का भेज दिया जाये।
2. अगर कोई मुसलमान वापिस अपने दीन पे जाना चाहे तो उसे किसी से इजाज़त नहीं लेना।
3. इस साल कोई हज नहीं होगा। अगले साल 3 दिन के लिए मक्का में आकर हज कर सकते हैं लेकिन शर्त ये है कि आप अपने साथ कोई हथियार नहीं ला सकते।

इस सुलहनामे पे मक्का की तरफ से सुहेल इब्न अम्र ने हस्ताक्षर किया था और मुसलमानों की तरफ से उन्ही के बेटे अब्दुल्लाह इब्न सुहैल ने।

इस वाकये से सबक़ मिलता है कि अपना हक़ लेना इन्साफ है लेकिन अमन क़ायम करने के लिए हक़ छोड़ देना ही बेहतर है।

XPage : Dynamic field Binding

In my application I wanted to bind a viewScope variable with the field, but the key was not static. The viewScope key was generated based on some business logic. To solve this problem, I created a dataContext variable (whose name is constant) and computed the value of this (data context) variable. I wrote the code there to calculate the key name. Finally I binded the field with the viewScope variable as follows:

The dataContext variable:

The field binding:

Same technique can be extended to other objects like NotesDocument, NotesViewEntry, etc.

XPage – Sort View Column – Optimized

In my previous post I discussed about sorting a view column using java.util.TreeMap. In this post I shall discuss about some optimizations to address the issue with duplicate values (refer to the line 19-21 in previous post).

Let us calculate time complexity of existing code:

From here: http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html
This implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations. Therefore,

Time complexity of TreeMap.containsKey, T1 = log(n)

Time complexity of TreeMap.put, T2 = log(n)

Time complexity of inner while loop, T3 = n * T1

Total time complexity,
T = n * (T3 + log(n)) log(n) for TreeMap.put
T = n * (n * T1 + log(n))
T = n * (n * log(n) + log(n))
T = n * (n + 1) * log(n)

From above calculation we can hardly do anything with T1 and T2, but we can optimize T3.

Let us modify the code to optimize:

From the API doc of HashMap:
This implementation provides constant-time performance for the basic operations (get and put), assuming the hash function disperses the elements properly among the buckets.

Let us calculate the time complexity of this code:

Time complexity of HashMap.containsKey, T4 = K1 , where K is constant

Time complexity of HashMap.get, T5 = K2 , where K2 is constant

Time complexity of HashMap.put, T6 = K3 , where K3 is constant

Total time complexity,
T’ = n * (T4 + T5 + T6 + log(n))
T’ = n * (K1 + K2 + K3 + log(n))
T’ = n * (K + log(n)) , where K = K1 + K2 + K3

It is clear that T’ < T. Hence our new algorithm is much more better than previous one.

आत्मग्लानि

हे आर्य !
तुम अपने पूर्वजों के
बेइन्तहां किये ज़ुल्मों पर
रचते हो छंदबद्ध कविता और महाकाव्य
और करते हो
उनके काले नियमों का
महिमामंडन.
बस समझते हो कि तुम्हारे पूर्वजों
की विरासत ही है भारतीय संस्कृति
तो हम पूछते हैं कि हम
आदिवासियों, हूणों, शकों, संथालों, भीलों,
दलितों, मुसलमानों, सिखों, बौद्धों इत्यादि
की संस्कृतियों का क्या स्थान है
तुम्हारी तथाकथित भारतीय संस्कृति में ?
तुम हमारे दुःख- दर्द क्या समझोगे ?
पूछो उनसे उनका दर्द –
जिनके पूर्वजों के कान में दग्ध सीसा
उडेला गया वेद सुनने के अपराध में
पूछो उनसे उनका दर्द
जिनकी नियति में पीढ़ी डर पीढ़ी
ग़ुलामी लिख दी गयी
पूछो उनसे उनका दर्द
जिन्हें इन्सान तो क्या जानवर से भी नीच
समझा गया
पूछो उनसे उनका दर्द
जिनके पूर्वज तुम्हारे ज़ुल्मों से
तंग आ कर बुद्ध और मुहम्मद की शरण में गए
और जिन्हें आज भी तुम विदेशी म्लेच्छ कह देते हो
तुम्हें ये सब जानकर भी क्या कभी आत्मग्लानि नहीं हुयी ?

– अदनान कफ़ील