Showing posts with label tips_tricks_traps. Show all posts
Showing posts with label tips_tricks_traps. Show all posts

Monday, 30 March 2015

Cloud Tech 101

“It went up, it went up to the cloud”
“You can’t get it down from the cloud?”

“Nobody understands the cloud, it’s a ****ing mystery.”

... says Cameron Diaz ! Well, here is something that should help !




[Update]: Here is the link to a more detailed article : http://mashable.com/2015/04/02/public-private-hybrid-cloud/?utm_cid=mash-com-Tw-main-link

Source: http://www.intel.in/content/www/in/en/cloud-computing/cloud-computing-innovation-infographic.html

Monday, 23 March 2015

Mobile App Review: CultureAlley's English App

Listed by Economic Times as one of the 15 hot startups to watch out for in 2015, CultureAlley brings to the market a unique B2C proposition - A Hindi based English Learning App.

With well crafted modules starting from spelling names to incrementally building expertise in grammar and vocabulary, English App is a class apart from several other Edutainment  based mobile apps.

Strategic Analysis: With only 10% of the Indian population currently speaking English and a growing need for innovative language learning techniques,CultureAlley's English App fits right into the space of making learning entertaining. The app begins with the user spelling his or her name and then carefully leads the user through various levels of learning English. Several other startups in the space like Rosetta Stone, LearnEnglish Grammar, Duolingo etc. each come with their own unique points of differentiation in the edu-tech space, but English App has a competitive edge ,having incorporated several unique techniques together.

PODs: Several unique feature that make the English App fun to use are :

  • Gamification: Well designed games like Cutting Chai are conceptually right on the spot given the target audience and not only help keep the user engaged but also make learning fun.
  • Superior UI/UX: The app is very user friendly and also includes commonly used English words in Hindi ("continue","next") etc. The color tone is fresh and as the lessons progress, navigation and screen flow is seamless.
  • FB/Wiki Integration: The app allows the user to link his/her FB newsfeed and get translation highlights for the key words. This inclusion of the social aspect is one of the most attractive and innovative features of the app.
  • Audio-Visuals: It sure helps to hear each word out loud.And the app scores rather well there. Each new module has some crisp AVs that make things easy for the learner.
  • Help at Hand and Tutor Notifications: Timely assignments from the tutor and online chat facility keep the learner engaged and motivated.   
Revenue Model: Freemium + Ads

Started in Dec 2014, English App is well loved by the investors and by the users as well.



Monday, 24 February 2014

adb not detecting your Android Device ?

To debug your mobile application on an actual device, Android requires you to connect your device to your computer and test if it is detectable by Android.

To achieve that , you need to go to -

<android-install-location>/sdk/platform-tools 

and give the command

adb devices

You might not have platform-tools  installed by default.
So install it through the SDK Manager before you read further.

Ideally the output of  the command should be the serial number of your device.

But many times if the device is not read by Android you end up seeing blank.

To troubleshoot , make sure that -

  1.  USB debugging is enabled on your Android phone
  2.  Ensure that you have successfully downloaded and installed Google USB Driver Package
  3.  In case of Samsung devices,install Samsung Kies as it installs device drivers.
  4. Goto Control Panel->System ->Device Manager and make sure that none of the drivers show any error.
For Samsung devices Samsung Kies software installs device drivers.
There are different Kies versions for different Samsung devices so make sure you have installed the right Kies

Eg:  Kies 2 supports Samsung Note 2 but Kies 3 doesnt.
If you try to connect a Samsung Note 2 with Kies 3 installed,you will observe device driver errors.
You will then have to install Kies 2


Saturday, 14 December 2013

Types of Mobile Applications: Difference between Native, Hybrid and Web applications

There are many contradictory views on the various types of mobile applications that can be developed for mobile devices

Mainly most mobile applications can be-

1) Native Mobile Applications :
Completely coded using the sdk of the various platforms (like Android and iOS).
The language is used to implement both UI and functionality.
Native applications can use device functionality like camera,contacts et cetera.


2)Hybrid Mobile Applications:
Such applications use a skeleton native application and load web content in it
This web content may be static(where the served html,js,css etc are packaged with the application and reside on a users device) or dynamic (where the content is served from a server)
You can use the various HTML5 technologies and come up with an amazing user interface.
Hybrid applications can use device functionality like camera , contacts et cetera,thanks to the skeleton native application.

3)Mobile Web Application::
This is your traditional  web application loaded on a device browser (Eg : WebKit,Chrome,Firfox on Android)
This may be (or may not be) different from the application that loads in your desktop browser.
For example-m.facebook.com is the mobile web application of facebook.com
Application developers can customize their websites to load content more efficiently ,given the limited resources of a mobile device.
Mobile web applications cannot use device functionality


Check out this really cool video by Intel differentiating between how content is served in a mobile web application and in a hybrid mobile application.

Monday, 11 November 2013

Debugging application startup with plugins in Websphere Application Server

This post mainly addresses the errors observed during installing a application in Websphere Application Server . Most of the stuff I shall write about are generic to WAS 7 ,WAS 8 and WAS 8.5

1) So what happens when you install a new application through the WAS Admin console , and post successful installation it does not start ???

Observe the application startup logs in  your application server folder in profile
Eg : C:\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\server1
or C:\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\webserver1
Go through the logs and you should get idea of whats wrong.

2) If Step 1 fails , and the logs show only IBM related errors, then it might be a good idea to look for and install any applicable fixpaks. These fixpaks are cumulative so the latest should suffice

Eg: I was trying to install an application in WAS 8.5 and though the installation was successful , the applciation would not start .  The logs at C:\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\ffdc
said  :
[11/11/13 9:40:36:513 IST]     FFDC Exception:com.ibm.ws.exception.RuntimeError SourceId:com.ibm.ws.runtime.component.CompositionUnitMgrImpl ProbeId:679 Reporter:com.ibm.ws.runtime.component.CompositionUnitMgrImpl@e341fce8
com.ibm.ws.exception.RuntimeError: java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:792)
..
..
..
Caused by: java.lang.ArrayIndexOutOfBoundsException
at org.objectweb.asm.ClassReader.readClass(Unknown Source)
at org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.objectweb.asm.ClassReader.accept(Unknown Source)

Appeared to be an application issue,but after a lot of browsing realised that the fix was in one of the fixpaks
So stay on the latest fixpak if possible

Now what happens when you application has started successfully

1)Try to access your application through the application server port
Eg: http://localhost:9080/<context-root>/<web-page>

If this works well for you , that means the setup is correct
Otherwise,ensure that the URL you are accessing is correct, and simple html,jsp files etc are accessible

2) If you'r able to access your URL through the application server,but you are getting a 404 error on trying to access it through the web server ,follow the below mentioned steps :
-Make sure your http.conf has the following entries :
LoadModule was_ap22_module "C:\IBM\WebSphere\Plugins\bin\32bits\mod_was_ap22_http.dll"
WebSpherePluginConfig "C:\IBM\WebSphere\Plugins\config\webserver1\plugin-cfg.xml"

-Check your webserver logs  for errors
Eg : Ensure the follwoing text appears
[Mon Nov 11 12:57:52 2013] [notice] PLUGIN: mod_was_ap22_http: apache_log_header: WebSphere Plugins loaded.
[Mon Nov 11 12:57:52 2013] [notice] PLUGIN: mod_was_ap22_http: apache_log_header: --------------------Plugin Information-----------------------
[Mon Nov 11 12:57:52 2013] [notice] PLUGIN: mod_was_ap22_http: apache_log_header: Bld version: 8.5.0
[Mon Nov 11 12:57:52 2013] [notice] PLUGIN: mod_was_ap22_http: apache_log_header: Bld date: Apr 24 2012, 15:12:31
[Mon Nov 11 12:57:52 2013] [notice] PLUGIN: mod_was_ap22_http: apache_log_header: Webserver: IBM_HTTP_Server
[Mon Nov 11 12:57:52 2013] [notice] PLUGIN: mod_was_ap22_http: apache_log_header: --------------------------------------------------------------

My log had additional errors: 
File does not exist: C:/IBM/HTTPServer/htdocs/<application context-root>
Since plugins were configured ,this meant that the plugin-cfg.xml file was incomplete
Read on to know more ...

-plugin-cfg.xml
When any application has to be rerouted to the application server to the web server,plugins need to be generated specifically for that application . One plugin-cfg.xml file is updated(Operation "Generate plugins") and propagation involves pasting this file in the various app server,web server and dmgr locations (Operation "Propogate Plug In") . 

Sample locations :

C:\IBM\WebSphere\Plugins\config\webserver1\plugin-cfg.xml

C:\IBM\WebSphere\AppServer\profiles\Dmgr01\config\cells\CFWIN2012X64-4Cell01\nodes\CFWIN2012X64-4Node01\servers\webserver1\plugin-cfg.xml

C:\IBM\WebSphere\AppServer\profiles\AppSrv01\config\cells\CFWIN2012X64-4Cell01\nodes\CFWIN2012X64-4Node01\servers\webserver1\plugin-cfg.xml 

If any time a plugin-cfg.xml is created in the Dmgr01 file path ( as shown in sample location 2) , any changes made to the plugin-cfg.xml are not reflected to it.Hence it will always remain out of sync with the other plugin-cfg.xml files

 The trick is to make sure all the plugin-cfg.xml files are in sync,bear the same timestamp and content.just search plugin-cfg.xml files in your IBM roots,copy paste and restart web server.

This will also resolve the incomplete plugin-cfg.xml issue mentioned above


.

Monday, 1 April 2013

Increasing deployment timeout for jboss7.1.0

Sometimes EAR deployment fails as it needs more time to deply than the timeout specified in your JBOSS7.1 config files

In such cases we get errors like :


23:33:19,789 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "abc.ear" was rolled back with failure message Operation cancelled
23:33:19,795 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015052: Did not receive a response to the deployment operation within the allowed timeout period [60 seconds]. Check the server configuration file and the server logs to find more about the status of the deployment.

Searching the standalone.xml file for timeout might not help if its a fresh install of jboss 7.1 as these values are default.
You have to explicitly set it in the standalone.xml file

Steps are as follows:

1)Stop jboss server
2)Goto jboss-as-7.1.0.Final/standalone/configuration
3)Edit standalone.xml file
4)Search for he following block of code

 <subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
            <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000"/>
        </subsystem>

In this case deployment timeout defaults to 60 seconds
5)Add deployment-timeout value

 <subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
            <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" deployment-timeout="300"/>
        </subsystem>

Now the deployment timeout value has been set to 300 secands.You can configure it as per your need
6)Start jboss server and deploy your app.




Tuesday, 22 January 2013

Adding extra packages to Android SDK

Recently I wanted to download some additional packages to my existing Android SDK.

The simplest way to go about anything is seemingly the UI way.

So I went ahead and launched my Android SDK from the Start Menu.,and as expected it displayed the sdk contents.But to my absolute amazement ,even thought the updates options was checked the Packages View would not show me any updates to the folders.
All it would show me was that updates were available for "Android SDK Tools" and "Android SDK Platform-tools".



Since I had no use for an update I happily ignored those two and focussed on the Extras folder which is where the said packages were supposed to reside.
No matter how many restarts I made to the SDK Manager (including launching it from eclipse,starting it from Start menu with administrator permissions)

Finally I decided to do the minimal and updated the suggested updates to  "Android SDK Tools" and "Android SDK Platform-tools" and restarted the SDK  Manager

And to my utter surprise .....

The Packages View goes ahead and shows all that is available for download in all the expected folders: Tools,Various Android Versions and the Extras.
now it was easy to download whatever I required .



Moral of the Story : Need an extra package? update exisiting packages and restart SDK Manager (run as administrator)

Wednesday, 19 September 2012

Convert your pfx keystore to jks keystore

Many times we need to convert our PKCS12 keystore/digital signature/digital id file to JKS files.

There are various many ways of doing it . Most blogs talk about how OpenSSL would help you do it and other go on about new tools.But its all within java keytool's capabilities.

Its actually as simple as what I quote below.

Goto your <JAVA_HOME>/jre/bin


keytool -importkeystore -srckeystore MyPfx.pfx -srcstoretype pkcs12 -srcstorepass mysrcpassword  -destkeystore exportfrompfx.jks -deststoretype jks -deststorepass mydestpassword


This process will create a new jks file and call it exportfrompfx.jks

All the certificates with their aliases will be exported from MyPfx.pfx to exportfrompfx.jks

Use the following command then to verify your new keystore:

keytool -list -storetype jks -keystore exportfrompfx.jks -v


To selectively add each certificate use its alias.

Get the alias using the above mentioned list command

keytool -list -storetype jks -keystore exportfrompfx.jks -v


Use keytool to import that alias into your JKS keystore

keytool -importkeystore -srckeystore MyPfx.pfx -srcstoretype pkcs12 -srcstorepass mysrcpassword -srcalias alias -destkeystore exportfrompfx.jks -deststoretype jks -deststorepass mydestpassword -destalias destalias



Thursday, 16 August 2012

OpenOffice+OSX Error: "The application...restore windows.." in OSX 10.7

While running OpenOffice  on Mac OSX 10.7.1 ,sometimes we repeatedly get an error "The application 'OpenOffice.org' was forced to quit while trying to restore its windows.Do you want to restore its windows again"

This is a persistant popup which might lead you into thinking that something is catastrophically wrong with your OpenOffice installation.

There are several solutions on the web but the only way that worked for me is as follows:
1) Kill all instances of soffice/OpenOffice.org
2) Goto /Users/<you>/Library/Saved Application State
Library is a hidden folder ,so use Go->Go to folder from the Finder Menu
3)Look for the folder org.openoffice.script.savedState
4)Delete this folder!!!
5)Now try to use Openoffice again.

You can observe that the popup disappears.

Alternatives (in case the previous method did not help)
 1) Kill all instances of soffice/OpenOffice.org

2) Goto /Users/<you>/Library/Application Support/OpenOffice.org/3
Library is a hidden folder ,so use Go->Go to folder from the Finder Menu
3)Look for a folder named user
4)Rename user folder to user.old (just so that you have backup)
5) Now try to use Openoffice again.
(If that still doesn't fix your problem , delete the new user folder and restore user.old to user and try again)

Wednesday, 13 June 2012

Simple plugins with PhoneGap1.7 Android

Recently I had a major run in with PhoneGap 1.7 and since I had a lot of java just begging to be called I ended up using plugins in PhoneGap.

Though there is a decent example on the PhoneGap website , I found it a little off base for a first plugin example , to explain just the basic functioning of plugins.The example I post here is a beginner level example which will help you understand the basic mechanism of plugins without any fancy stuff.

Steps :
1)Create an PhoneGap powered Android Project using phonegap docs
2)This is where we write our business logic . Create a java file MyPluginClass . This class will return some standard string to a html. You need to override the execute method of Plugin class and send back your result in a PluginResult object

package org.firstplugin;



public class 
MyPluginClass extends Plugin{



@Override

public PluginResult execute(String action, JSONArray data, String callbackID) {

       try{

       PluginResult rs=null;

      /* Create the JSONObject which will be sent in PluginResult */

      JSONObject jsonobj=new JSONObject();

    /* Add whatever you want to send back to PhoneGap in the JSONObject */

       jsonobj.put("myname","whats in a name");

   /*  Put your JSONObject in a PluginResult object */

       rs=new PluginResult(Status.OK,jsonobj);

}
catch(JSONException e){ LOG.d("DEBUG",e.getmessage())}

/* Send your PluginResult object back to PhoneGap */

return rs;
}

}

3)Now we shall write the plugin javascript which will call MyPluginClass.This "myplugin.js" JS file will call PhoneGap.exec which in turn will call the execute method of MyPluginClass.


var CallPlugin=function(){};

CallPlugin.prototype.get=function(successCallback,failureCallback){

  return PhoneGap.exec(successCallback,failureCallback,'  MyPluginClass ','show',[ ]);

};

PhoneGap.addConstructor(function() {

//Register the javascript plugin with PhoneGap
PhoneGap.addPlugin('callplugin', new CallPlugin());



});
In detail :
successCallback : This method will be called after the plugin gets executed
failureCallback : This method will be called in case of error
We can also pass arguments to the Java class through the array

4)Register the plugin in plugins.xml with :
<plugin name="
MyPluginClass" value="
org.firstplugin.MyPluginClass"></plugin>

5)Now write the html which will execute this plugin.Click the button " Click Me To Return Name" to run the plugin


<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <meta name="viewport" content="width=device-width, initial-scale=1" />

        <title>

        </title>

        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />

        <link rel="stylesheet" href="my.css" />

        <link rel="stylesheet" href="photoswipe.css" type="text/css"/>

        <style>

           /* App custom styles */

        </style>

        <script type="text/javascript" src="klass.min.js"></script>

        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">

        </script>

        <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js">

        </script>

        <script src="cordova-1.7.0.js">

        </script>

        <script src="
myplugin.js">

        </script>

      </head>

    <body>

      

         <div data-role="page" id="home">

              <div data-theme="a" data-role="header">

                <h3>

                    Plugin Example

                </h3>

               </div>

               <div data-role="content">

                <div>

                        <a data-role="button" data-transition="fade"  id="runplugin">

                            Click Me To Return Name

                        </a>

                        </div>

                </div>

               <div data-role="footer"></div>

         </div>

<script type="text/javascript">





$("#
runplugin").click(function(e){

     window.plugins.callcamplugin.get(

function(r){alert(JSON.stringify(r);},

function(e){console.log(e)}

);

});





</script>

   </body>

</html>


 
Using this code you will be able to run a simple plugin using PhoneGap

Monday, 13 February 2012

Enable debugging in Websphere Application Server 7.0 ND

Generally ,debugging is one of the most handy things to have in a Application Server and as such easy to enable.
I had a pretty tough time for WAS 7.0 when I went through the conventional way of adding debug properties to the Java args. The server literally gave up and refused to start.
After a bit of googling and reading the detailed WAS documentation,I realised it was simpler to do so in Websphere than in many of the other simpler application servers
Here are the steps :
1)Log on to the IBM Websphere Administrative console.This typically runs on the ports 9060(unsecure) and 9443(secure)
2)Navigate to Servers->Server Types->WebSphere application Servers-><application server>
3)Click the WAS instance on which you want to enable debugging.

4)In the configuration tab,scroll down to the Additional Properties
5)Click on "Debugging Service"

6)Check the "Enable service at server startup" checkbox.

7)Click on Apply and click Review to review your changes
8)Check the "Synchronize changes with Nodes" checkbox (unless Automatic synchronization is enabled)
9)Click the Save button
10)Once the Synchromization is complete (This might take a few seconds) ,click OK and then restart the WAS instance .
11)Now you are all set to fire debug requests on the JVM debug port (as specified in the Debugging service page.Default is 7777)