Friday, September 14, 2007

Generating unique strings with JAVA

If you need randomly generated Strings in your java code you can use the below functions.

01  public String generateRandomString(String s) {
02   try {
03    SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");
04    String randomNum = new Integer(prng.nextInt()).toString();
05    randomNum += s;
06    MessageDigest sha = MessageDigest.getInstance("SHA-1");
07    byte[] result = sha.digest(randomNum.getBytes());
08    return hexEncode(result);
09   catch (NoSuchAlgorithmException e) {
10    return  System.currentTimeMillis()+"_"+username;
11   }
12  }

The classical hexEncode method:

01 protected String hexEncode(byte[] aInput) {
02   StringBuffer result = new StringBuffer();
03   char[] digits = '0''1''2''3''4''5''6''7''8''9',
04     'a''b''c''d''e''f' };
05   for (int idx = 0; idx < aInput.length; ++idx) {
06    byte b = aInput[idx];
07    result.append(digits[(b & 0xf0>> 4]);
08    result.append(digits[b & 0x0f]);
09   }
10   return result.toString();
11  }

Suppose that you need to generate unique random session ids for your logged in users. You can use the above function as follows :

String sessionId = generateRandomString(username);

10 consecutive calls to generateRandomString("ilkinulas") generates the following strings:


Friday, September 7, 2007

The power off shell

Linux shell is a powerful tool for developers. Basic commands such as find, grep, diff can be combined to make our lives easier. Suppose that we are working on a project that uses CVS as source code control system, and there are plenty of versions of the same project on CVS. How can you find out the changed java files between version V1 and version V2? The answer is simple: use cvs and diff commands.

First, checkout the two versions of the project in to two different directories. Create a directory named v1. Checkout a version of the source into directory v1.

mkdir v1
cd v1
cvs -d :pserver:ilkinba@ co -rICU_01_03_01 common/InoxCommonUtil

Create a directory named v2. Checkout a version of the source into directory v2.

mkdir v2
cd v2
cvs -d :pserver:ilkinba@ co -rICU_01_03_02 common/InoxCommonUtil

Now it is time to use diff command.

diff -r -q v1/ v2/

This command outputs all the files that differ in directory v1 and v2.
"r" option is used to tell diff command to work recursively.
"q" option is used to tell diff command to work briefly. diff will only write the names of the different files.
Use grep to filter java source files.

diff -r -q v1/ v2/ | grep .java

After detecting the changed java source files you can use diff to see what has been changed in the java source files.

$ diff -r -q v1 v2 |grep .java
Files v1/common/InoxCommonUtil/code/src/com/oksijen/inox/common/util/edr/ and v2/common/InoxCommonUtil/code/src/com/oksijen/inox/common/util/edr/ differ

$ diff -y --suppress-common-lines v1/common/InoxCommonUtil/code/src/com/oksijen/inox/common/util/edr/ v2/common/InoxCommonUtil/code/src/com/oksijen/inox/common/util/edr/

The result of the above command will be something like:

&& st[i].indexOf(label) >= 0) | && st[i].indexOf(fileName) >=

"y" option tells diff to output results in two columns(side by side)
"--suppress-common-lines" option is used to display only changed lines. Common lines will not be displayed.
Thats all.

Tuesday, September 4, 2007

Search java class files in jars.

This script helps you find the jar file which contains specified java class file.

Usage is simple :

./findClass /home/ilkinulas/lib

This command searchs all the jars in directory /home/ilkinulas/lib and lists the jars that contain java class.



for i in `find $START_DIR -name *.jar`
(jar tf $i | grep -q $KEYWORD) && echo $i;