Saturday, May 31, 2014

PhoneGap 3.x Mobile Application Development Hotshot - Review

Hello folks,

Around 6 months back, I got an opportunity from Packt Publishing to review one of their new books

http://www.packtpub.com/phonegap-3-x-mobile-application-development-hotshot/book

Since, this was the first time for me I was actually not sure about the process and actually was not sure how to review but I think they made me understand the process and I reviewed in the last 6 months.

So, something about the book. It is a great book by author Kerri Shotts and I the book has almost 10-12 practical applications which will really go deep into PhoneGap. They published almost a week before. So if you are interested, a beginner and have some know how of PhoneGap, you can go for it.

Thanks,
Vishal

Monday, April 28, 2014

Student - A Character Revisited

Hello Folks,

First, It feels challenging, sometimes scared and responsible to be a Student again after giving a pause to my work back there in India. While, I am writing this post I got an idea to keep this post as more elaborate with my till-now experience here in Seattle-US.

A great city with a good Spring season (Flowers all around with Sun starring them). So getting back to the title now, It wasn't that easy to incorporate rather recall all those characteristics I had in myself during my student life. I really took some time to go back to past and recall how I took classes, the way I paid attention and the way I dealt with some of the difficult assignments at that time. But this was all in that 1 week before the classes started. Since, I arrived 1 week earlier I got some time to recall them. But after the classes started, its now that I feel I can look around to some other things.

Something about the University: Northeastern University, Seattle is a great to place to study at. India being a country with high traditional values, its not that easy to capitulate those values and just settle quickly at this new land. But, I think the university played a role for me and making me comfortable though slowly and always teaching me lessons on the way. The staff working close with Students (I really think this point is very similar to what APIIT had), good technology infrastructure (I was surprised by the size of the projector in the lecture room, even more when I presented a co-op presentation on it. I will come to what co-op is.... :) ), their hospitality are some good qualities to mention. I think all the reasons I thought had something optimistic in it.

Coming on to the subjects I took:

a) Programming Design Paradigm (PDP)
b) Database Systems (DB)
c) Co-op Seminar (This is what I was talking about above)

I really think that all the three subjects I took in my first semester were really good. PDP of which I will mention some of the assignments we got as examples, DB which sometimes went very deep into the memory calculations we would need to access some data and finally co-op which is about some great behavioral skills to have in you.

Starting with PDP which is a pure programming course based on Scheme programming language had assignments every week. This was no less than 40 hours per week which we generally spend at work.

I know that almost all of you must be familiar of the Pitcher/Jugs problem which is famous being a Google Interview Question. We got an assignment which told us to have some Pitchers and a desired amount and we had to determine the moves in which we could achieve the desired amount. I think this was a great question as I really enjoyed developing it. The whole week, my brain had almost n pitchers with any quantities.



The image above shows an example. Just to explain The solve function takes a list of Pitchers which is one of 8 liters, 5 and 3 respectively and the desired amount is 4 liters. The result is a list of moves where a number is the jug/pitcher number. I would suggest you to try these moves by making an assumption that the first pitcher is initially filled completely and you cannot waste any water, you only have this amount of water. This was the first time I implemented the breadth-first search algorithm which was a good experience.

Another assignment I found interesting was the N-level tree. Try the video below:


So, I press T and a new tree is created, pressing N while a tree is selected creates a new child and d while a tree/child is selected deletes it. I think this was really a good one.

We had almost 10 assignments and its not possible to describe everyone of them here, but these are some good ones.

The Database Systems which also had submissions every week involved concepts such as Indexing, Cost calculation, stored procedures and user-defined functions. I think seeing the course content is what encouraged me to take this subject and it was a good experience.

Some other things I would like to mention is the speed of speaking of native people here in US. It really made me thought when one day, I tried to ask the bus driver if this was the stop I wanted to get down and in spite of asking him 3 times I couldn't grab his answer properly and got down at the stop and more funny thing was that the stop was the wrong one. I think, till the time you try to understand what have they said, its gone. But, I remember the lessons from Asif's Sir class during my under graduation which have helped me a bit. Some picky things such as "(pronunciation of P is Phee not Peee") I hope I am still write.

The next semester is about to begin and the vacation is like it never started. I think gone are the days when during the vacation, I would be at home enjoying the best food in the world. I must say food is one thing I miss almost every time.
I hope you enjoyed reading the post though and as always feel free to give any suggestions on the things mentioned in the post.

Thanks,
Vishal

Monday, January 21, 2013

PhoneGap 2.3.0 Plugin to Extract .zip file

Hi All,

You must be familiar with the PhoneGap plugin to Extract .zip files. As there are some changes for plugin development in version 2.3.0, I have created a new repo for 2.3.0 and the plugin seems to be working after some changes. Below is the repo URL:

https://github.com/vishalrajpal/PhoneGap-ZipFile-Plugin-2.3.0

Thanks,

Tuesday, December 4, 2012

"PotLuck": Guess what do you have in your Pot?

Initiated by Namit and myself..It happened to be a successful gathering with around 40 different dishes and guess what I won't be able to categorize them due to their versatility. "PotLuck" I wasn't knowing the meaning of it though being my 2nd PotLuck lunch at DP, but yes it had to be known. It has a great meaning which says "What do you have in your Pot and that depends on your luck..." isn't that interesting?...











When I was pursuing my B.E, I got various chances to organize such things being in a kind of team, but this was the first instance at DP. I enjoyed a lot and ate up to the brim that afternoon. Thanks to everyone who was a part of such a great gathering and the Photo Session was another unforgettable thing :)

Saturday, September 22, 2012

Titanium FTPModule: My First Social step towards Titanium

Finally something new....
A Titanium module to Upload/Download files to/from a FTP Server. Its published on the marketplace.
You can use this module in your Titanium Mobile Application by providing a FTP server with valid credentials for accessing it and Upload/Download files to/from FTP.

For further details you can read the Documentation for the Module on the Marletplace.

Below is the link for the module at the Appcelerator's Marketplace:

https://marketplace.appcelerator.com/apps/3160

I will happy to see some suggestions here as well as reviews on the Marketplace.
Note: This module is for an Android Titanium Application till date.

Tuesday, February 21, 2012

PhoneGap Android Plugin to Extract ZipFile.

Hello Folks,

Its about after 2 months I thought of writing a post. So here is it. I was thinking to extract a .zip file from PhoneGap on android and I ended up implementing a plugin for it.

Include the below .java file with the same package mentioned.

/*
     Author: Vishal Rajpal
     Filename: ExtractZipFilePlugin.java
     Date: 21-02-2012
*/

package com.phonegap.plugin.ExtractZipFile;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import org.json.JSONArray;
import org.json.JSONException;
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;

public class ExtractZipFilePlugin extends Plugin {

    @Override
    public PluginResult execute(String arg0, JSONArray args, String arg2) {
        PluginResult.Status status = PluginResult.Status.OK;
        JSONArray result = new JSONArray();
        try {
            String filename = args.getString(0);
            File file = new File(filename);
            String[] dirToSplit=filename.split("/");
            String dirToInsert="";
            for(int i=0;i<dirToSplit.length-1;i++)
            {
                dirToInsert+=dirToSplit[i]+"/";
            }
            BufferedOutputStream dest = null;
            BufferedInputStream is = null;
            ZipEntry entry;
            ZipFile zipfile;
            try {
                zipfile = new ZipFile(file);
                Enumeration e = zipfile.entries();
                while (e.hasMoreElements())
                  {
                      entry = (ZipEntry) e.nextElement();
                      is = new BufferedInputStream(zipfile.getInputStream(entry));
                      int count;
                      byte data[] = new byte[102222];
                      String fileName = dirToInsert + entry.getName();
                      File outFile = new File(fileName);
                      if (entry.isDirectory())
                      {
                          outFile.mkdirs();
                      }
                      else
                      {
                          FileOutputStream fos = new FileOutputStream(outFile);
                          dest = new BufferedOutputStream(fos, 102222);
                          while ((count = is.read(data, 0, 102222)) != -1)
                          {
                              dest.write(data, 0, count);
                          }
                          dest.flush();
                          dest.close();
                          is.close();
                      }
                  }
            } catch (ZipException e1) {
                // TODO Auto-generated catch block
                return new PluginResult(PluginResult.Status.MALFORMED_URL_EXCEPTION);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                return new PluginResult(PluginResult.Status.IO_EXCEPTION);
            }
           
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
        }
        return new PluginResult(status);
    }

}


Include the below .js file in your phonegap project.

/*
     Author: Vishal Rajpal
     Filename: ZipPlugin.js
     Date: 21-02-2012
*/

var ExtractZipFilePlugin=function(){
};

PhoneGap.addConstructor(function()
{
    PhoneGap.addPlugin('ExtractZipFilePlugin', new ZipPlugin());
});

ExtractZipFilePlugin.prototype.extractFile = function(file, successCallback, errorCallback)
{
    alert(file);
    return PhoneGap.exec(successCallback, errorCallback, "ZipPlugin", "extract", [file]);
};



Lastly include this plugin in the plugins.xml of your project.


<plugin name="ZipPlugin" value="com.phonegap.plugin.ExtractZipFile.ExtractZipFilePlugin" />

Usage i.e. .html file

<!--
     Author: Vishal Rajpal
     Filename: index.html
     Date: 21-02-2012
-->

<html>
<head>
<script type="text/javascript" src="phonegap-1.3.0.js"></script>
<script type="text/javascript" src="ZipPlugin.js"></script>

<script type="text/javascript">

document.addEventListener("deviceready",onDeviceReady);

function onDeviceReady()
{
}

function extractFile(fileName)
{
    alert(fileName);
    var ZipClient = new ExtractZipFilePlugin();
    ZipClient.extractFile('sdcard/'+fileName,win,fail,'ExtractZipFilePlugin');
}
function win(status)
{
   alert('Success'+status);
}
 
function fail(error)
{
    alert(error);
}
</script>
</head>
<body>
<input type="button" value="Extract Zip File" onClick="extractFile('SampleDir/AnotherDir/SampleFile.zip');"/>
</body>

</html>

The default location for the file has to be sdcard then it can be as many directories or no directory i.e.
extractFile('SampleFile.zip');

The plugin will work both ways.

Thanks. Any suggestions or comments will be helpful.

Friday, December 9, 2011

PhoneGap and Gigya API Implementation

I was stuck regarding facebook implementation through PhoneGap. Though Phonagap provides a plug-in but you need to have facebook application installed on your device and that created a question for me. So here is it with the implementation of childBrowser PhoneGap plugin and the GIGYA API.
Initial Steps
1. Do have a registered Gigya account. you will get a API KEY and the site which you are adding needs to be a valid server as you will be hosting a small html page.
2. Create a new phonegap project.
3. Implement the childBrowser Plug-I. This post helped me as I was implementing it for the first time
http://simonmacdonald.blogspot.com/2011/09/phonegap-android-childbrowser-revamp.html

4.  Here is the code....

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Child Browser Example</title>
    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
    <script type="text/javascript" charset="utf-8" src="phonegap-1.2.0.js"></script>
    <script type="text/javascript" charset="utf-8" src="childbrowser.js"></script>
    <script src="jquery-1.4.3.min.js"></script>
    <script src="jquery.min.js"></script>
    <script src="jquery.mobile-1.0a1.min.js"></script>
    <script type="text/javascript" charset="utf-8">


    function init(){
        document.addEventListener("deviceready", onDeviceReady, false);
        gigya.services.socialize.addEventHandlers({}, {  
            onLogin:DisplayEventMessage, 
            onConnectionAdded:DisplayEventMessage, 
            onConnectionRemoved:DisplayEventMessage 
           } 
        ); 
    }
    
    function DisplayEventMessage(eventObj) { 
        alert(eventObj.eventName + " event happened"); 
    } 
   
    function onDeviceReady() {
        alert("PhoneGap is ready");
    }
   
    function locationChanged(newurl)
    {
        //alert("The JS got this url = " + newurl);
        console.log(newurl);
       var access=newurl.split("#");
       var token=access[1].split("=");
       //alert(token[0]);
       if(token[0]=="access_token")
       {
//Status URL...Through which status on facebook will be set
var statusurl="https://socialize.gigya.com/socialize.setStatus?status=welcome&oauth_token="+token[1];
            //window.open(statusurl);
            localStorage.accessToken=token[1];
            window.plugins.childBrowser.close();
            window.location="Messages.html";
            console.log(statusurl);
       }
    }
   
    function openNew(statusurl)
    {
        alert(statusurl);
         window.plugins.childBrowser.openExternal(statusurl);
    }
    function closed() {
        alert("The JS got a close event");
    }
   
    function showPage(locbar) {
        window.plugins.childBrowser.onLocationChange = locationChanged;
        window.plugins.childBrowser.onClose = closed;
        var url="https://socialize.gigya.com/socialize.login?client_id=yourGigyaAPIKEY&redirect_uri=http:yourSite/yourPage.html&x_provider=facebook&response_type=token";
        showBrowser(url,locbar);
    }
   
    function showBrowser(url,locbar)
    {
        window.plugins.childBrowser.showWebPage(url, {showLocationBar: locbar});
       
    }
    </script>
  </head>
  <body onload="init()" id="stage" class="theme">
    <a href="#" class="btn large" onclick="showPage(true); return false;">Login to Facebook</a></p>


  </body>
</html>

So, thats it.. you don't need to have a facebook app installed on your device..
Will come up with more things on this.
Any suggestions gracefully accepted....