Shankh is London based consultancy started on 2011 to provide consultancy services primarily in Java. With several successful Java projects under our belt, we started exploring mobile based services towards end of 2012 which led to our first android/ios/windows-phone app which is staged for release in 2013

Some Random quotes

Innovation distinguishes between a leader and a follower. -Steve Jobs

It is not that i am smarter than others, i just persist with problems longer

JavaFx Coding Challenge Results

musicExplorerFx Image

musicExplorerFx Image

1st Place

Music Explorer FX, Sten Anderson

lifescope image

lifescope image

2nd Place

Lifescope, Naoaki Suganuma

shining EtherFx Image

shining EtherFx Image

3rd Place

ShiningEtherFX, Evgeni Sergeev

No Image Student Prize

Caesar Photobook Mobile, Ramin Mohammadi

Real Track car race Image

Real Track car race Image

Student Prize

Real Track Car Race, Diego Benna

Calcfx image

Calcfx image

Student Prize

CalcFX, Kazuki Hamasaki

Congratulations to all winners. Well Done !!! Of all the entries MusixExplorerFx looks really cool and no wonder it got the first prize.


Maven Commands Reference Mini Guide

In maven , we have several commands to remember and i was thinking of having a page with simple command reference so that i can have a quick look whenever needed. I have compiled a list of mostly used commands and some settings and useful links. Now publishing it so that it could be useful to others too . Feel free to add more commands to the comments section.

1. Compile

 mvn compile

2. Compile (offline)

 mvn -o compile

will save you a lot of time

3. Install the generated output to the respective repository

mvn install

4. Clean Target Directory

mvn clean

5. Package as jar or war

mvn package

6. Generate Eclipse project descriptors

mvn eclipse:eclipse

7. Run unit tests

mvn test

8. Run unit tests and print the output to console rather than to file

mvn -Dsurefire.useFile=false test

9. Run individual test

mvn test –Dtest=org.shankh.mavenTest

10. Package without running tests

mvn package -Dmaven.test.skip

11. Install without Running Tests

mvn install -Dmaven.test.skip

12. To download source code into your maven repo:

mvn eclipse:clean eclipse:eclipse –DdownloadSources=true

13. Create a new project

mvn archetype:generate -DartifactId=my-app

Comment : Instead of ‘generate’ i wrote ‘create’ initially, but as simonz correctly pointed out, mvn archetype:create is now deprecated. so use mvn archetype:generate instead.

14. Create a Web Application

mvn archetype:generate

15. Start embedded Jetty

mvn jetty:run

16. Deploys a WAR to embedded instance of Jetty and starts it

mvn jetty:run-war

17. Specify Java Build version


18. Generate site for a single project

mvn site

19. Generate Javadoc

mvn javadoc:javadoc

20. Set Maven_opts System environment variable (will save you from out of memory error)

MAVEN_OPTS=”-Xmx512m -Xms256m -XX:MaxPermSize=128m”

21. Setting M2 variable in eclipse (informing of repository location

Goto Window -> Preferences -> Java -> build path -> classpath variable -> New
Name: M2_REPO
C:\Users\my_user_name\.m2\repository  (In vista)
C:\Documents And Settings\my_user_name\.m2\repository  (In XP)
~/.m2/repository (in Linus/ unix flavours)

22. Links

1. Settings.xml sample:

2. Maven Download:

3. M2 eclipse download:

4. M2 eclipse update site:

5. Cargo:

6. Jetty:


Some fun with Boolean.getBoolean

What will be the output of this code snippet ?

public class BooleanFun {
	public static void main(String[] args) {
		Boolean status = Boolean.getBoolean("true");
		System.out.println("First Case:"+status);

You may think that it will obviously print First Case:true.. But it is not that straightforward. The output is following

First Case:false

Well .. How did this happen? Boolean.getBoolean property does something else than what its name denotes. According to its Javadoc
” Boolean.getBoolean Returns true if and only if the system property named by the argument exists and is equal to the string ‘true’. (Beginning with version 1.0.2 of the JavaTM platform, the test of this string is case insensitive.) A system property is accessible through getProperty, a method defined by the System class. ”

See the following code snippet to understand how it works..

public class BooleanFun {
	public static void main(String[] args) {
		Boolean status = Boolean.getBoolean("true");
		System.out.println("First Case:"+status);

         System.setProperty("bfun", "true");
		 String bfunString = System.getProperty("bfun");
		 System.out.println("System Property bfun value:"+bfunString);
		 status = Boolean.getBoolean("bfun");
		System.out.println("Second Case:"+status);
		System.setProperty("bfun2", "random");
		String bfun2String = System.getProperty("bfun2");
		System.out.println("System Property bfun2 value:"+bfun2String);
		status = Boolean.getBoolean("bfun2");
		System.out.println("Third Case:"+status);


First Case:false
System Property bfun value:true
Second Case:true
System Property bfun2 value:random
Third Case:false

So Boolean.getBoolean will check whether the System property of a given name exists and also whether its value is “true”. In only this case will it return true..

Hopefully this information will help somebody trying to figure out why their program always returns false for Boolean.getBoolean


Java Concurrency and volatile

I came across an interesting behaviour of threads in James Roper’s Blog (  Tested it on Vista 64 bit machine and without a volatile keyboard, in my machine also the code goes into an infinite loop.

public class ThreadExperiement implements Runnable {

	private volatile String str;
    void setStr(String str)
        this.str = str;
    public void run()
        while (str == null){}
    public static void main(String[] args) throws Exception
    	ThreadExperiement threadExp = new ThreadExperiement();
        new Thread(threadExp).start();
        threadExp.setStr("Hello world!!");


Put a print statement inside the while loop and it starts working. Strange , isn’t it?

Is it because of byte code optimisation which detects that there is nothing to do inside the loop ?


Jaxb: Printing Xml with proper formatting

Ever wondered when we print xml, instead of printing it in single line can’t we print with proper formatting and indentation.  If you are using Jaxb then there is a  nice little trick in  to achieve that.

JAXBContext jc = JAXBContext.newInstance( "MyClass.class" );

Marshaller marshaller = jc.createMarshaller();

marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );

marshaller.marshal( <object_to_marshal>, System.out );