Thursday, November 5, 2015

Debugging Dart web app with WebStrom

Debugging a Dart application is pretty much easy with WebStrome IDE. But there are several steps to follow

  • Install  JetBrains Chrome Extension (Later need to setup by providing the correct port and ip)
  • Open the web application with webstrome by clicking on the html page's browser icon (top right corner)

  • Most probably it'll open with host=> & port => 63343
  • Right click top of the JetBrains Chrome Extension -> Options

  • Change the Host and Port values and apply the changes
  • Now It's time to setup the Javascript Debugger in webstrom go to Run -> Debug -> Edit Configuration
  • Add Javascript Debugger with + icon
  • Add the web page URL to debug configurations
  • Ok Done ! Lets test a sample app and see
  • Make a break point anywhere in dart source code
  • Simply go to Run -> Debug Dart_Debug (in this case I gave this name)
  • It'll open the web application with new tab, when it'll hit the brakpoint it should work
    • Whoo Hoo !!!

Friday, August 14, 2015

WSO2 multi-tenant cache JSR107 update

Current Carbon-Kernel v4.4.0 caching is based on JCache v0.5. This Blog is about new JSR107 (JCache) v1.0 update in Carbon-Kernel based on new Hazelcast caching provider. 

  • What is JCache
  • Whats in latest JSR107 (JCache) in high level view
  • WSO2 Caching
  • New caching API changes in WSO2 Caching
  • Examples of new caching API

What is JCache ?
   Caching is proven method to increase scalability and performance. JCache (JSR 107) is a standard caching API for Java. It can keeps some data in low-latency data structures for some period.It provides an API to create and work with in-memory cache of objects. It allows to create, access, update and remove entries from caches.JCache API only provides set of high level components (interfaces) to work with caching other than thinking about the implementation of the caching

Some common use cases
  • Client side caching of Web service calls
  • Caching of expensive computations such as rendered images
  • Caching of data
  • Servlet response caching
  • Caching of domain object graphs

Latest JSR107 (JCache) in high level view

Caching Provider – used to control Caching Managers and can deal with several of them,
Cache Manager – deals with create, read, destroy operations on a Cache
Cache – stores entries (the actual data) and exposes CRUD interfaces to deal with the entries
Entry – abstraction on top of a key-value pair akin to a java.util.Map


WSO2 Caching
Core Features
  1. Local and distributed mode
  2. L1 and L2 caching model for distributed mode
  3. Multi-tenancy
Local and distributed mode: carbon kernel has 2 different jcache implementations called local and distributed, default it use local cache when the Axis2 clustering is enabled it use distributed cache.In jcache v0.5 for distributed map carbon-kernel used Hazelcast distributed maps but in new jcache v1.0 for distributed cache it use Hazelcast caches.

L1 and L2 caching model for distributed mode: In order to improve performance there are 2 types of caching models called L1(Level 1) and L2(Level 2) caching, L1 cache is implemented by HashMaps, and new L2 cache is implemented by Hazelcast cache (wrapper of jcache v1.0 API).Every first time it checks in L1 cache but if the value is located in the L2 cache, then the value is also stored in the L1 cache

Multi-tenancy: It can cache and provide tenant specific data and make it available in every and each cluster members.

Sequence diagram of L1 and L2 caching model

In the distributed mode, if a cache entry is removed, invalidated or changed then the Hazelcast Cache Entry listeners that registered will trigger on each and every Hazelcast cluster member, In that same time L1 cache and the L2 cache being removed or updated

Sequence diagram of remove item


New caching API changes in WSO2 Caching
  • In previous jcache version, to create a CacheManager object had to call CacheManagerFactory and parse the name to CacheManager
    • Caching.getCacheManagerFactory().getCacheManager("sampleCacheManager");

  • New version of jcache use CachingProvider to create CacheManager by parsing a URI(String) object
    • Caching.getCachingProvider().getCacheManager(new URI("sampleCacheManager"));

  • To create a custom cache with custom configuration no need to call createCacheBuilder() to and parse the configuraion object, now CacheManager can directly call getCache() by parsing a cacheName and CacheConfiguration object

  • Other than that the org.wso2.carbon.caching.impl.CacheImpl class distributedCache is changed to Hazelcast cache (v4.3) insted of using Hazelcast Maps
    • hazelcastCacheManager = DataHolder.getInstance().getHazelcastCacheManager();

  • Because the Hazelcast cache is distrbuted one, There's no need of having registered OSGI service called DistributedMapProvider so the service intarface has removed from the org.wso2.carbon.caching and also from the org.wso2.carbon.core.clustering.HazelcastDistributedMapProvider

  • Other API changes are done to
    • org.wso2.carbon.user.core
    • org.wso2.carbon.registry.core

Examples of new caching API

Example: Simple cache creation

Example: Using cache configuration with a custom cache expiry

Please feel free to test out the new jcache v1.0 implementation

Friday, April 3, 2015

Configure Apache ActiveMQ 5.10 and WSO2 CEP 3.1.0

Copy appropriate activemq jars to $CEP_HOME/repository/components/lib 

If you are using activemq-5.9.1, above 5.8.x you cannot find activemq-core-x.x.jar now it has been split into two jars activemq-broker-5.x and activemq-client-5.x. In order to configure you only need these 3 jars to copied inside lib.

1. activemq-client-5.x.jar

2. activemq-broker-5.x.jar

3. geronimo-j2ee-management.x.x.jar

To test the communication run [WSO2 CEP Sample 0002]

Monday, March 30, 2015

Send email with linux

This is very use full for raspberry pi projects.Email temperature information, notify things when you not there.And the best thing is its really easy to configure.I'll go through step by step.

  1. First thing is to install ssmtp.
    • sudo apt-get install ssmtp
  2. Edit and add new configurations to ssmtp.conf file. 
    • nano /etc/ssmtp/ssmtp.conf [add new line or change current lines ]
      • hostname=localhost
      • UseTLS=Yes
      • AuthPass=your.password
      • UseSTARTTLS=Yes
      • FromLineOverride=YES
    • ctrl+O [nano save]
    • ctrl+X [nano exit]
  3. Install mailutils to send emails from terminal.
    • sudo apt-get install mailutils
    • Sending a test mail
      • echo "Email Body [Happy Coding]" | mail -s "Email Subject [Finally Done]"
  4. Possible errors and how to fix them.
    • mail: cannot send message: Process exited with a non-zero status
      • check the error log >> cat /var/log/mail.err or cat /var/log/mail.log
      • If its Authorization failed (xxxxxxxxxxxxxxxxxxxxxxxxxx)
    • sSMTP[1564]: Cannot open
      • To fix this change port 587 to -> port 465 in mailhub attribute in ssmtp.conf 

Sunday, February 8, 2015

Setting up an OpenGL C++ with eclipse IDE

I'm currently using Linux 3.13.0-24-generic x86_64 kernel version of linux mint with OpenGL version of 2.1 Mesa 10.1.0 follow this link to check OpenGL version [link]

You need to go through only three steps
  1. Download OpenGL C++ libraries.
  2. Setup and install eclipse CDT bundle.
  3. Configure the eclipse libraries [simple].
  4. Test OpenGL application.

Download OpenGL C++ dependencies
  • In terminal use sudo apt-get install libglu1-mesa-dev freeglut3-dev

Setup and install eclipse CDT bundle

  • In eclipse Help > Install New Software
  • Add new cdt installation path
  • Tick CDT Main Features hit next and finish the process and restart the eclipse

Configure the eclipse libraries [simple]

  • In eclipse choose New > C++ Project

  • Right click the project > Properties
  • Select C/C++ Build > Settings > GCC C++ Linker > Libraries > +
  • Add glut, GL, GLU libraries
  • Time to test a OpenGL app

Test OpenGL application

  • Download this sample source code [link] 
  • Right click on project New > File create new c or cpp file and paste the code
  • Its best practice to always clean and build the cpp project to do that right click Clean Project, right click Build Project / ctrl+B
  • Right click on project Run As > Local C/C++ program
  • It should show a red 3d cube like this
  • Fun [HACK] make the cube rotate 
    • Replace this code snippet inside void display(void) function
    •  while (true) {  
            glRotatef(1.0f, 1.0f, 1.0f, 1.0f);