Google Analytics Java API

Google Analytics (GA) is a free Web Analytics tool from Google. If you are looking to get some insights into web properties or desktop applications usage, and willing to share that data with Google, it is a great choice. For web properties it is straight forward (include the js file given by GA and it just works. However, for desktop applications where there is no web context, it has been little tricky. You had to simulate the web with cookie support etc.

GA is rolling out new protocol called Measurement Protocol, which supports collecting the tracking data in client device agnostic way. It is part of their Universal Analytics product and it is still in beta and soon it will replace the current way of tracking the data.

If you want to use GA in Java server or desktop environment, unfortunately GA doesn’t provide any Java API. Recently I came across this situation and was hoping that there would be some third party API implementing this protocol. But I found none which implements full protocol. So end up creating google-analytics-java library.

It is open sourced in github and deployed in Maven Central. If you have such need, try it out and see if it helps you. If there are any issues or missing features, you can send me a pull request or log an issue.

Salesforce and Random Identifiers

Salesforce generates random identifiers for internal “Id” field. However if we are looking for business identifiers we are left with AutoNumber which generates the sequential numbers. If we are looking for a business identifier with some entropy to enhance the security of it, Salesforce leaves us to custom develop it.

A Blog entry talks about few options of Salesforce random number generation. To ensure the entropy Crypto class is preferred over Math.random (I assume this is analogs to Math.random and SecureRandom in Java). But crypto’s getRandomInteger class doesn’t generate consistent length random number which might be a problem.

Here is a simple Apex class which generates consistent length (10 digits) random identifiers.

public with sharing class RandomNumberGenerator {

    public static String generateRandomNumber() {
        String randomNumber = generate();
        if (randomNumber.length() < 10) {
            String randomNumber2 = generate();
            randomNumber = randomNumber + randomNumber2.substring(0, 10 - randomNumber.length());
        return randomNumber;
    public static String generateIdentifier(String prefix) {
        return prefix + '-' + generateRandomNumber();
    private static String generate() {
        return String.valueOf(Math.abs(Crypto.getRandomInteger()));

Sample identifiers generated using this class:


Releasing Putani PKI Explorer 1.0.0

When you have to spend some time dealing with Keystores and certificates, every tool which would make your workflow easier, is of a great help. When I was in same situation, it was really tough as you had to deal with many cli commands and that’s when I had determined to write a friendly GUI application.

Soon after I started working on Eclipse and found out about the Eclipse RCP. I really liked the capability and ease it brought to Java UI application development. So there it started my adventure to learn Eclipse RCP and write a GUI app to manage the Keystores and (if possible) PKI objects (like X.509 Certificates, CSRs, CRLs etc).

Today I’m releasing that effort as Putani PKI Explorer. Downloads are available as Windows/Linux/Mac 32/64 binaries. Wiki with features and user guide is on the way. However GUI is easy to use and friendly so I believe you will not have to try hard to understand it and use it.

I dedicate this effort to my father (July is his Shraaddha month), mother and brother. You guys have given me all that you had and you are the reason whatever I’m today. Thank you.

Putani name means a “little one”, affectionate way to call small children. I chose this name for my first niece (Lahari), my son (Kashyap) and second niece (Ritu).


At times the problem with Java eco-system is its complexity due to availability plethora of choice of tools/frameworks. Getting a basic application with appropriate stack working is the big hurdle.

Same goes with the effort to get the GwtSpringHibernate stack working.

There have been lots of references about Gilead and Gwt-Sl libraries and how to use them to glue the stacks together but couldn’t find a complete deploy-able application. Hence this post.

Here is a complete deploy-able war file and its source. The example uses the following libraries.

  • Smart Gwt
  • Gwt
  • Gwt-Sl
  • Gilead
  • Spring
  • Hibernate
  • Hsqldb

Download the war, deploy and test it. Explore the source to get the understanding of stack. Post a comment if you have any questions.