Wednesday, 27 April 2016

Simple producer and consumer problem in java (1.8)


Simple producer and consumer problem solved in java (1.8) with help of BlockingQueue 


import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * Created by vijaysy on 26/04/16.
 */
public class ProducerConsumerApp {

    public static void main(String[] args) {
        //new Thread(() -> {System.out.printf("Hi");}).start();
        BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);
        new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                try {
                    Thread.sleep(i);
                    blockingQueue.put(String.format("%s",i));
                    System.out.println("Produced:" + i);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            try {
                blockingQueue.put("exit");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }).start();

        new Thread(() -> {
            String string;
            try {
                while ((string = blockingQueue.take()) != "exit") {
                    Thread.sleep(20);
                    System.out.println("Consumed: " + string);
                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }


        }).start();
        
    }

}

Thursday, 31 March 2016

Redis Keyspace Notifications, Java example

Reff: http://redis.io/topics/notifications

dependancies :  redis.clients:jedis:2.7.2

To set notify-keyspace-events 
Command: redis-cli config set notify-keyspace-events KEA

Subscriber.java

package com.vijaysy.notification;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

/**
 * Created by vijaysy on 31/03/16.
 */
public class Subscriber {
    public static void main(String[] args) {
        /*  JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
            Jedis jedis1 = pool.getResource();
            jedis1.psubscribe(new NotificationListener(), "__key*__:RT*");  */
        Jedis jedis = new Jedis("localhost");
        jedis.psubscribe(new JedisPubSub() {
            @Override
            public void onPSubscribe(String pattern, int subscribedChannels) {
                System.out.println("onPSubscribe " + pattern + " " + subscribedChannels);
            }

            @Override
            public void onPMessage(String pattern, String channel, String message) {
                System.out.print("[Pattern:" + pattern + "]");
                System.out.print("[Channel: " + channel + "]");
                System.out.println("[Message: " + message + "]");
            }
        }, "__key*__:RT*");

    }
}

TestNotification.java

package com.vijaysy.notification;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Created by vijay.yala on 31/03/16.
 */
public class TestNotifications {
    public static void main(String[] args) {
        JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
        Jedis jedis = pool.getResource();
        jedis.set("RTnotify", "umq");
        jedis.set("notify", "umq");
        jedis.set("notify1", "umq");
        jedis.set("RTnotify1", "umq");
        jedis.expire("RTnotify", 10); //in Seconds

    }
}

Wednesday, 30 March 2016

Simple Redis PubSub java example

Reff: http://redis.io/topics/pubsub
dependancies :  redis.clients:jedis:2.7.2

To set notify-keyspace-events 
Command: redis-cli config set notify-keyspace-events KEA

Publisher: RedisPub.java


package com.vijaysy.pubsub;

import redis.clients.jedis.Jedis;

import java.util.Scanner;

/**
 * Created by vijaysy on 30/03/16.
 */
public class RedisPub {
    public static void main(String  args[]){
        Jedis jedis = new Jedis("localhost");
        Scanner scanner = new Scanner(System.in);
        System.out.printf("Enter the channel name:");
        String channel=scanner.nextLine();
        System.out.println("Starting publisher for channel "+ channel);

        while (true){
            System.out.println("Enter the string to Publish:");
            String msg = scanner.nextLine();
            jedis.publish(channel,msg);

        }
    }
}


Subscriber:  
RedisSub.java


package com.vijaysy.pubsub;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

import java.util.Scanner;

/**
 * Created by vijaysy on 30/03/16.
 */
public class RedisSub {

    public static void main(String args[]) {
        Jedis jedis = new Jedis("localhost");
        Scanner scanner = new Scanner(System.in);
        System.out.printf("Enter the channel name:");
        String channel = scanner.nextLine();
        System.out.println("Starting subscriber for channel " + channel);

        while (true) {
            jedis.subscribe(new JedisPubSub() {
                @Override
                public void onMessage(String channel, String message) {
                    super.onMessage(channel, message);
                    System.out.println("Received message:" + message);
                }

                @Override
                public void onSubscribe(String channel, int subscribedChannels) {
                }

                @Override
                public void onUnsubscribe(String channel, int subscribedChannels) {
                }

                @Override
                public void onPMessage(String pattern, String channel, String message) {
                }

                @Override
                public void onPUnsubscribe(String pattern, int subscribedChannels) {
                }
                
                @Override
                public void onPSubscribe(String pattern, int subscribedChannels) {
                }

            }, channel);
        }
    }
}


Monday, 22 February 2016

Non lexicographical order sorting

/**
* Created by Vijay Yalasangimath on 23-02-2016.
* Non lexicographical order sorting
*/
#include<stdio.h>
#include<string.h>

/**
*  returns 0 when both strings are equal
*          + str1 < str2 (In provided order)
*          - str1 > str2 (In provided order)
*/
long int mySort(char *a , char *b){

  long int c1,c2;
 char * myLex = "qwertyuiopasdfghjklzxcvbnm";
 char *p1,*p2;
 p1=strchr(myLex, *a);
 p2=strchr(myLex, *b);

  c1=p1-myLex+1;
 c2=p2-myLex+1;

  while((a[0]!='\0'||b[0]!='\0')&&(c1==c2)){
     p1=strchr(myLex, *a);
     p2=strchr(myLex, *b);

     c1=p1-myLex+1;
     c2=p2-myLex+1;

      a++;
     b++;
 }

  return c2-c1;
}

int main(){
    char str1[25],str2[25];

    printf("String will be compared in following order: qwertyuiopasdfghjklzxcvbnm\n");

    printf("Enter the strings for comparison\n");
    printf("First string:");
    scanf("%s",str1);
    printf("Second string:");
    scanf("%s",str2);

    printf("%ld\n", mySort(str1,str2));
    return 0;
}