Skip to main content


Showing posts from March, 2014

saavn usability

I am fan of this bollywood music service Saavn and I hear the same song whole day and sometime same song for days (latest one I am hearing is "Harry is not a bramhchari") as after a while the song doesnt matter and you can get into the coding gear.

Sometimes little little things on usability matter, I think they need to work on tooltips.  I wanted to hear the same song in loop and I see no button  for repeat and the green icon now looks intuitive that its a repeat icon once I have figured it out but initially it was not that obvious. So I did Inspect in firefox to figure out what is repeat button and what is shuffle.

So if you have just an icon toolbar you need to have tooltips for each icon. I just checked our storage file listing toolbar and luckily it has tool tips so the UX team has done a good job ;).

Finally uploading to S3 using java sdk

One of the reasons I joined my employer was that I would get some experience with AWS and S3. But so far the ride is a roller coaster ride and I have been working on something totally different and first we created our own S3 like system and then uploading to S3 and AWS was handled by another rockstar friend in the team :).  Now it almost seems like I wont get a chance to work on it so I was like let me anyway write a simple program, so I signed up for AWS and tried this. Its a simple thing and took me only 2-3 hours but its worth spending it because for past 3 weeks I am working on cleaning technical debt accumulated over years and that doesnt give that much joy. Doing this give me some joy.

On that note one of the team mate shared this today to me

public class S3StorageService {
    private static final AppLogger logger = AppLogger.getLogger(S3StorageService.class);
    private String bucketName;
    private String …

nginx install godday cert

again on same weekend looks like the cert on his dev site expired and the rest api tests were failing to curl due to cert issue so he gave me the cert files that he got from godday and asked to install it. This took 5 min but it was cool. What was complex was godday would give you a cert and an intermediate cert but nginx would only accept one file. so the way you do is

cat your_godday.crt> your_final_chained.crt
cat gd_bundle.crt>>your_final_chained.crt

thats it you got your chained cert and all you need to do is specify this in nginx

    ssl_certificate /etc/nginx/xxx/your_final_chained.crt;
    ssl_certificate_key /etc/nginx/xxx/your_cert.key;

Looks like this is cert expiry week, even our code signing cert is expiring this weekend so we would sign our java applet jars again and deploy a hotpatch this weekend, will update that also in the post.

jenkins aggregating downstream build results and how a "-" can be PITA

You would want to reuse common piece of jenkins builds to use DRY. for e.g. if you have multiple instances like dev, psr, uat and a deploy target for each instance or you have installer targets per branch. Then only thing that is different is the instance where you are deploying or the branch that you are building respectively. Two weekends before I ran into an issue where I was creating a target to auto deploy a build on an instance and problem was I had following build targets

UAT -->AnyDeploy->Run-Tests

So I had AnyDeploy and Run-Tests as shared targets that I was triggering using parameterized builds now I wanted to archive test results on top level targets(UAT,QA,Dev). Now jenkins already has an option to aggregate downstream test results but problem was that my friend had written some cryptic test runner and junit formatter that was printing results in some non standard format. So I installed copy artifact plug…

nodejs push java redis

Disclaimer: The code below is just a general guidelines and I am not pasting full code so you would have to fill in the blanks if you want to use it.

Continuing  finally I was able to write the nodejs app that would listen to events from redis and publish message to browser.  The architecture looks like

1) Your browser will use SockJS javascript library to connect to the nodejs server and it would then listen to events. The normal html code looks like

<script src=""></script>
<script type="text/javascript">
    isOpen = false;
    var newConn = function(){
        var sockjs_url = '';
        var sockjs = new SockJS(sockjs_url);
        sockjs.onopen = function(){
            sockjs.send(JSON.stringify({"userName": "", "sessionId": "e1930358-87d2-4d2b-86b6-2b2373ac…