Tuesday, 31 March 2015

How to Resolve Conflict In Git

Through a development life cycle when it comes to commit our whole day work and stuck in merge conflict without resolved/ No knowledge what went wrong in conflict makes our happiest day a dreadful night .


Here are few tips which can save your dreadful night :

Git merge Style


Suppose you are on master and merging development :
$ git merge development
Auto-merging hello.rb
CONFLICT (content): Merge conflict in hello.rb
Automatic merge failed; fix conflicts and then commit the result.
We would like to see what the merge conflict is. If we open up the file, we’ll see something like this:

#! /usr/bin/env ruby

def hello
<<<<<<< HEAD
  puts 'Hi Santosh'
=======
  puts 'Hello Abhisehk'
>>>>>>> development
end

hello()
Both sides of the merge added content to this file, but some of the commits modified the file in the same place that caused this conflict. One helpful tool is git checkout with the ‘--conflict’ option. This will re-checkout the file again and replace the merge conflict markers. This can be useful if you want to reset the markers and try to resolve them again.

You can pass –conflict either diff3 merge (which is the default). If you pass it diff3, Git will use a slightly different version of conflict markers, not only giving you the “ours” and “theirs” versions, but also the “base” version inline to give you more context.

$ git checkout --conflict=diff3 hello.rb
Once we run that, the file will look like this instead:



#! /usr/bin/env ruby

def hello
<<<<<<< ours
  puts 'Hi Santosh'
||||||| base
  puts 'Hello Santosh'
=======
  puts 'Hello Abhisehk'
>>>>>>> theirs
end

hello()
If you like this format, you can set it as the default for future merge conflicts by setting themerge.conflictstyle setting to diff3.
$ git config --global merge.conflictstyle diff3
Keep Njoying GIT !!!!


Thanks to Santosh for writing this post .



Monday, 30 March 2015

How to install CasperJS on windows

CasperJs is a javascript library written for phantomjs which is a headless browser . To install casperjs in windows , first you need to download phantomjs and set its exe file path in you path environment variable . after that download casperjs for windows , and set its batchbin directory path in your path enviornment variable .


You can check your installation by typing phantomjs and casperjs on your command windows . If you do not get 'Unrecognized command error ' then it means your installation is successful .


Now you might get following error if you try to run some javascript in casperjs .
Couldn't find nor compute phantom.casperPath, exiting.
To resolve this error , you need to insert following lines in bootsrap.js in your bin directory of casperjs .
var system = require('system');
var argsdeprecated = system.args;
argsdeprecated.shift();
phantom.args = argsdeprecated;
Now , try to run again , and you will not see this error .


Ref


Post Comments and Suggestions !!

Thursday, 29 January 2015

Top Build Automation Tools

Apache ANT :


Apache Ant uses build.xml file to describe build process and it is implemented in java . ANT first version released in 2000 and soon became one of the most popular build tool at that time .Ant was intended to be used in place of unix make process which was not platform independent. ANT is an abbreviation for Another Neat Tool . Ant has several tasks available which you can use according to your project's requirements and it is flexible enough , so that you can create your own custom tasks . The biggest drawback of ANT is the use of xml file , which might become complex and verbose .








Apache MAVEN :


Apache Maven is based on project object model also known as POM. The biggest different between Maven And Ant is , Maven allowed the dependency to be downloaded over the internet . In ANT , we have to included each and every dependency by ourselves , Maven reduced the burden . It is also uses the pom.xml file for describing the build process , but the structure is completely different from Ant's build.xml . It still has the same problem of bulky and large xml file in case of big projects .








Gradle :


Gradle has combined the features of Ant and Maven with its own Domain Specific Langauge based on Groovy. It does not uses xml for describing the build process . Gradle is slowly getting popular .








Buildr:


Buildr is based on Ruby's build system Rake, and uses Ruby as a scripting language. It provides greater flexibility as you can write your custom Ruby code before and after standard buildr targets .










REFERENCE1
REFERENCE2
REFERENCE2

Thursday, 8 January 2015

Java MultiThreading Interview Question

What would be the output of the following program ?


public class ThreadTest implements Runnable
{
 private Object obj=new Object();


 public static void main(String[] args)
 {
  
  ThreadTest test = new ThreadTest();
  Thread t1 = new Thread(test);
  Thread t2 = new Thread(test);
  t1.start();
  t2.start();
  
 }

 @Override
 public void run()
 {
  synchronized(obj)
  {
   System.out.println("1 " + Thread.currentThread().getId());
   obj = new Object();
   System.out.println("2 " +Thread.currentThread().getId());
  }
  
 }
}


Answer : The lock will break. The reason is that each and every object has got its own Object Monitor. Modifying the object means we will have a new lock object with new monitor. In such a case, lock will break and cause all the threads in the entry set to acquire the monitor.

Thursday, 18 December 2014

How to Check For Null Payload in Mule XML

If we want to check in our flow , weather payload is null or not , we can do it using MULE Expression Language .
#[payload == null]
This was not working in MULE 3.1.1 , so we can try another expression like this :
#[payload is NullPayload]
But , this condition also threw and Exception like this :
org.mule.api.MessagingException: Execution of the expression "payload is NullPayload" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: NullPayload
 at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:35)
 at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:43)
 at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:43)
 at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:93)
 at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:66)
 at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
 at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:43)
 at org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(AbstractInterceptingMessageProcessorBase.java:105)
 at org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeInterceptor.java:55)
 at org.mule.processor.AsyncInterceptingMessageProcessor.processNextTimed(AsyncInterceptingMessageProcessor.java:118)
 at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker$1.process(AsyncInterceptingMessageProcessor.java:186)
 at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker$1.process(AsyncInterceptingMessageProcessor.java:179)
 at org.mule.execution.ExecuteCallbackInterceptor.execute(ExecuteCallbackInterceptor.java:20)
 at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:34)
 at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:18)
 at org.mule.execution.BeginAndResolveTransactionInterceptor.execute(BeginAndResolveTransactionInterceptor.java:58)
 at org.mule.execution.ResolvePreviousTransactionInterceptor.execute(ResolvePreviousTransactionInterceptor.java:48)
 at org.mule.execution.SuspendXaTransactionInterceptor.execute(SuspendXaTransactionInterceptor.java:54)
 at org.mule.execution.ValidateTransactionalStateInterceptor.execute(ValidateTransactionalStateInterceptor.java:44)
 at org.mule.execution.IsolateCurrentTransactionInterceptor.execute(IsolateCurrentTransactionInterceptor.java:44)
 at org.mule.execution.ExternalTransactionInterceptor.execute(ExternalTransactionInterceptor.java:52)
 at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:32)
 at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:17)
 at org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(TransactionalErrorHandlingExecutionTemplate.java:113)
 at org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(TransactionalErrorHandlingExecutionTemplate.java:34)
 at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker.doRun(AsyncInterceptingMessageProcessor.java:178)
 at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:43)
 at org.mule.work.WorkerContext.run(WorkerContext.java:311)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 at java.lang.Thread.run(Unknown Source)
Caused by: org.mule.api.expression.ExpressionRuntimeException: Execution of the expression "payload is NullPayload" failed.
 at org.mule.el.mvel.MVELExpressionLanguage.evaluateInternal(MVELExpressionLanguage.java:208)
 at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:169)
 at org.mule.expression.DefaultExpressionManager.evaluate(DefaultExpressionManager.java:234)
 at org.mule.expression.DefaultExpressionManager.evaluateBoolean(DefaultExpressionManager.java:361)
 at org.mule.routing.filters.ExpressionFilter.accept(ExpressionFilter.java:127)
 at org.mule.routing.ChoiceRouter.selectProcessors(ChoiceRouter.java:35)
 at org.mule.routing.AbstractSelectiveRouter.process(AbstractSelectiveRouter.java:194)
 at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
 at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:43)
 at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:43)
 at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
 at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:43)
 ... 23 more
Caused by: [Error: could not access: NullPayload; in class: null]
[Near : {... Unknown ....}]
             ^
[Line: 1, Column: 0]
 at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:611)
 at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanPropertyAO(ReflectiveAccessorOptimizer.java:439)
 at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:353)
To resolve this , you have to tweak the expression a little bit like this :
#[payload is org.mule.transport.NullPayload]
Post Comments And Suggestions !!

MULE EXPRESSION LANGUAGE REF




Thursday, 20 November 2014

How To Get Client Operating System Name IN ROR

In the world of increasing web sites in a fast pace , at times we need to get the clients OS details to execute some script in clients machine, or know what is the OS/Web browser/Client Details used by client.


When ever a client accesses your website and makes a request, Browser sends the details of the client in as an WEBHTTP OBJECT.


HTTP_USER_AGENT request header contains the information about client .


To get this information in rails we need to write following code .


we create a around filter/action to and paste it in application controller so that it keeps the track of every request.


def get_operating_system
  if request.env['HTTP_USER_AGENT'].downcase.match(/mac/i)
    "Mac"
  elsif request.env['HTTP_USER_AGENT'].downcase.match(/windows/i)
    "Windows"
  elsif request.env['HTTP_USER_AGENT'].downcase.match(/linux/i)
    "Linux"
  elsif request.env['HTTP_USER_AGENT'].downcase.match(/unix/i)
    "Unix"
  else
    "Unknown"
  end
end
Thanks to Santosh for writing this post .



Monday, 17 November 2014

How to Use ActiveMQ in Rails App

Active MQ is one of the most popular messaging server . In this post we will list out the steps on how to use it in rails application.

Installation ActiveMQ procedure for Ubuntu 14.04

Download ActiveMQ 5.4.2 from http://activemq.apache.org/download.html or you can install it from console by writing following command .
sudo apt-get install activemq
Now start the server by writing following command :
$ ./activemq start
Now , for connecting activeMQ server , we can use Stomp Gem .

So for sending message , open IRB prompt and write following command :
$ irb req1.9.3-p362 :001 > require "stomp"=> true 
1.9.3-p362 :002 > client = Stomp::Client.new("admin", "admin", "localhost", 61613)
You might get error like this :
Errno::ECONNREFUSED: Connection refused - connect(2)
 from /home/usermac44/.rvm/gems/ruby-1.9.3-p362/gems/stomp-1.3.3/lib/connection/netio.rb:203:in `initialize'
We have to configure stomp protocol on our activemq server like this : Add the following line to the configuration file:
  <transportConnectors>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireformat.maxFrameSize=104857600"/>
  </transportConnectors>
Now restart activemq , initiate the client and send message like this :
client = Stomp::Client.new("admin", "admin", "localhost", 61613)
 => #"0,0", 
"session"=>"ID:ACSMAC05-63136-1415951184416-2:1", "server"=>"ActiveMQ/5.8.0", "version"=>"1.0"} ......#>


client.publish {|msg|  puts msg }
It will work now . You can see the active mq console at http://localhost:8161/admin .


Thanks to santosh for writing this post .