Tuesday, February 26, 2013

String vs StringBuilder performance trade-offs


public class StringTest {

public static void main(String[] args) {

int[] runfor = { 10, 100, 1000, 10000 };

for (int i = 0; i < runfor.length; i++) {
long start = System.currentTimeMillis();
String s = "";
for (int j = 0; j < runfor[i]; j++) {
s += "Hello" + "--" + "World!!!";
}
long end = System.currentTimeMillis();
System.out.println("String concatenation x " + runfor[i] + " times: " + (end - start) + " miliseconds");

start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < runfor[i]; j++) {
sb.append("Hello");
sb.append("--");
sb.append("World!!!");
}
end = System.currentTimeMillis();
System.out.println("StringBuilder concatenation x " + runfor[i] + " times: " + (end - start) + " miliseconds");
}
}
}


Results:

String concatenation x 10 times: 0 miliseconds
StringBuilder concatenation x 10 times: 0 miliseconds
String concatenation x 100 times: 1 miliseconds
StringBuilder concatenation x 100 times: 0 miliseconds
String concatenation x 1000 times: 15 miliseconds
StringBuilder concatenation x 1000 times: 1 miliseconds
String concatenation x 10000 times: 1143 miliseconds
StringBuilder concatenation x 10000 times: 3 miliseconds

Monday, January 28, 2013

Pushing a specific commit to repository


git status says:

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.

You want to git push only one of those commits to the public repo. Here’s how:

First use git log to get the commit hash of the commit you want to push. Then:

$ git push origin <thelonghash>:master

example:
$ git push origin 7605596d45d2e3812da1e22db447fc6f1fe6f876:Dev-5.0

Friday, January 25, 2013

Viewing Unpushed Git Commits


It was useful for me to avoid unnecessary commits with a push.


git log origin/master..HEAD
You can also view the diff using the same syntax
git diff origin/master..HEAD


Source:  http://stackoverflow.com/questions/2016901/viewing-unpushed-git-commits


Thursday, January 24, 2013

GIT: reverting a second commit of the push from central repository

Have you ever come across the issue, where you have pushed your code to a central repository but unknowingly old commit also has been pushed which is not required any more.

In general, If you want to revert a last commit:

$ git revert d768b8d6a709ba5524e2cf68915d718b9e9ae0bf


In your last push, you have pushed two commits and imagine second commit now you want to roll back,

$ git revert a768b8d6a709ba5524e2cf68915d718b9e9ae0be

fatal: Commit 137ea95 is a merge but no -m option was given.


You will come across above issue,

To resolve that, we need use -m option with order of a commit. Like below,

$ git revert a768b8d6a709ba5524e2cf68915d718b9e9ae0be  - m 2

This will revert second commit which you have made.

Source:  http://gitready.com/intermediate/2009/03/16/rolling-back-changes-with-revert.html



Tuesday, January 22, 2013

Eclipse debug configuration setting and reading

 Here is the way to specify the debug configuration parameters through VM arguments in eclipse.



In VM arguments section, as you can see I have passed following debug parameter.
-Dkony.debug=true


These parameters I can read in the following way in Java.

String isdebug = System.getProperty("kony.debug");
Boolean DEBUG_MODE = new Boolean(isdebug);

if(DEBUG_MODE) {
        System.out.println("My application is running in debug mode");
      //Do your action here!!
}


Other sources:
http://www.avajava.com/tutorials/lessons/whats-the-difference-between-program-arguments-and-vm-arguments.html








SAXON: Failed to compile stylesheet. 1 error detected.


What would be a reason to come across this issue ? There are several..

Tue Jan 22 17:10:38 IST 2013
Failed to compile stylesheet. 1 error detected.

javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet. 1 error detected.
at net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:176)
at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:139)
at net.sf.saxon.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:91)
at com.kony.sync.offlineservices.util.TransformUtil.transform(TransformUtil.java:35)
at com.kony.sync.ide.actions.GenerateOfflineServicesAction$GenerateOfflineServicesJob.run(GenerateOfflineServicesAction.java:105)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)


Since, I don't have log for what had happened internally it was very difficult to figure it out the actual cause by looking at the above issue.

Finally, i figure it out that it was because of '*.xslt' does not exist in the specified location.

Other reasons from various sources:
http://zvon.org/xxl/XSLTutorial/Output/example11_ch15.html






Friday, January 18, 2013

Very useful Eclipse Debug option:Suspending Threads


Suspending Threads


This would be useful If incase eclipse is blocked and you exactly don't know the reason why call is blocking. You can just go to eclipse debug mode and suspend the main thread and worker threads. That will show you the stack frame.
To suspend an executing thread:
  1. Select the thread in the Debug View.
  2. Click the Suspend button [ Suspend ] in the view toolbar.
The thread suspends its execution. The current call stack for the thread is displayed, and the current line of execution is highlighted in the editor in the Debug Perspective.
When a thread suspends, the top stack frame of the thread is automatically selected.  The Variables View shows the stack frame's variables and their values.  Complex variables can be further examined by expanding them to show the values of their members.
When a thread is suspended and the cursor is hovered over a variable in the Java editor, the value of that variable is displayed.