• Twitter
  • Facebook
  • Google+
  • Instagram
  • Youtube

About me

Let me introduce myself


A bit about me

Into IT industry since 3rd Jan 2011. Worked on many technologies like Web, android, ios, blackberry, augmented reality, virtual reality, touch tables, gesture based, gaming etc.

Learning new technologies. Passionate about the new gadgets and technologies ivolving in current market.

Profile

Tushar Sonu Lambole

Personal info

Tushar Sonu Lambole

Thane district based freelance developer, working experince from 2011

Birthday: 23 NOV 1987
Phone number: +(91) 9423026579
Website: http://tusharlambole.blogspot.com/
E-mail: tusharlambole137@gmail.com

RESUME

Know more about my past


Employment

  • 2016-2018

    Snap2life Pvt Ltd @ Senior Android / Unity3D Developer

    Got chance to learn Touch table apps, Gesture based app development. Magic mirror virtual dressing room technology. Implemented team work managment skills learn in life.

  • 2012-2016

    Mindspace Technologies Pvt Ltd @ Senior Developer

    Started working on android technologies. Got first time exposure to Unity3D and Augmented reality based apps and game. While learning the technology developed my own AR based action game and launched in market as "AR Battle Tank"

  • 2011-2012

    Prosares Solutions Pvt Ltd @ .Net Developer

    Started my carrier as an .Net developer got first time exposer to the IT industry. In few months got an apportunity to work on Blackberry mobile apps along with Android technology. Got to know about the cross platform technologies for mobile app development.

Education

  • 2011

    Bachelor of Engineering @BE Computer

    Graduated from University of Mumbai with BE degree in Computer stream with first class result.

  • 2005

    Higher Secondary School @ Science stream

    Cetificate of Higher Secondary Education with First class marks from Pune University Board.

  • 2003

    Secondary School @ Passed

    Got education in Maharashtra Military School with First class academic score. Got training for punctuality and discipline in work as well as in life.

Skills & Things about me

Learning Skill
86%
Technology
Punctual
91%
Discipline
Energetic
64%
Development

Portfolio

My latest projects


Creating the Ad Hoc distribution build for IOS application

Creating the Ad Hoc distribution build for IOS application

Author:- Tushar Sonu Lambole
(Android,IOS, Unity3d application developer)


You need to make an ad hoc build which your friends can install on their phones. It's a bit of a pain, but basically, the procedure goes like this:

  1. Go to the Apple Developer Center's Provisioning Portal and register their device ID's. You will need to have your friends give you their device ID's, which can be done by clicking on the "Serial Number" field in iTunes on the device page.
  2. Generate a distribution certificate for ad hoc distribution in the Provisioning Portal under Provisioning -> Distribution
  3. Download that certificate yourself (the .mobileprovision file) and install it into Xcode by dragging it on the Xcode icon.
  4. Duplicate your "Release" build setting in Xcode for an Ad Hoc build. Everything should be the same as Release, except in the "Code Signing" section you will want to select the new Ad Hoc profile generated in step 3.
  5. Make an Ad Hoc build by going to Build -> Build and Archive
  6. When Xcode brings up the organizer window, right click on the archived build and make a .ipa file by saving it to disk
  7. Tell your friends to drag the mobile provisioning profile to the iTunes icon (or with File -> Open for windows users) to install it on their phone.
  8. Tell your friends to drag the .ipa file you made into iTunes, and sync their phones

Note. To make the Archieve of the IOS project make sure Device is connected to Mac and device name is selected in target.



Git Commands frequently used by me.

Git Commands frequently used by me.

Author:- Tushar Sonu Lambole

 //For more details regarding the git refer following link 
http://classic.scottr.org/presentations/git-in-5-minutes/ 

//To init Empty git Repo. Go to the dir of project 
 git init 

 // Add origin of git 
git remote add origin <URL from repo created> 

//Remove origin from git
git remote rm <origin / bitbucket_tushar>

 // create .gitignore file 
//in case of Mac 
 vim .gitignore //For edit mode 
 press i for edit mode 

 //copy paste for unity3D ignore list 

[Ll]ibrary 
[Tt]emp 
*.csproj 
*.pidb 
*.unityproj 
*.sln 
*.userprefs 

 press Esc then :wq 
//to save file 
 press Esc then :q! 
// to exit without save 

 // To comming the code 
git commit -m "First Commit" 

 // To push the code 
git push -u origin master 
git push -u origin <branch name> // Commit to particular branch 

 // create the branch 
git branch <branch name>

 //So we use the checkout command to change branches. 
git checkout <branch name> 

 //The first branch, or main branch, is called "master." 
git checkout master 

//to update local repository to latest commits
git pull

// Display branches of repo
git remote show

// remove all changes on local project and reset to last commit 
git stash

// remove all changes on local project and reset to last commit With Deleting files 
git stash -u

 // reset the code to particular commit point 
git reset --hard <commit code>

//To retrieve new work done by other people. Fetching from a repository grabs all the new remote-tracking branches and tags without merging those changes into your own branches.
git fetch

//If you already have a local repository set up for the desired project, you can grab all the new information by using
git fetch <remote_name>

//Merging combines your local changes with changes made by others.

Typically, you'd merge a remote-tracking branch (i.e., a branch fetched from a remote repository) with your local branch:
git merge <remote_name>/<branch_name>

//“git pull” is a convenient shortcut for completing both “git fetch” and “git merge” in the same command:
git pull <remote_name> <branch_name>


NOTE: Because pull performs a merge on the retrieved changes, you should ensure that your local work is committed before running the pull command. If you run into a merge conflict you cannot resolve, or if you decide to quit the merge, you can use git merge --abort to take the branch back to where it was in before you pulled.


 // remove the git add . files 
 git rm -r --cached . 

 // forcefully push the code 
git push origin <master/branch> --force 

 // delete file from the repository at server, local all commits from everywhere 
//Take Backup of project before executing below command 
 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch Assets/NGUI/Examples/Atlases/Wooden/ScanAtlas.prefab' --prune-empty --tag-name-filter cat -- --all 

//Easy step to remove the file from repo and local repo 
You should not do "git add". That's all 

 git rm classes/file.txt 
git commit -m"bla bla bla" 
git push 

 //While in your branch you can commit changes that will not be reflected in the master branch. When you're done, or want to 
//push changes to master, switch back to master and use merge. 

git checkout master 
git merge <branch name> 

 //And if you're done with the branch you can delete with the branch command and pass the -d flag. 
git branch -d <branch name> 

 //When you do a git add . and have deleted files, git won’t stage them to be commited (as deleted). Use
 git add -u 

 // Get the history log of all commits done 
 git log --pretty=format:"%h %s" --graph .....

//Get the history/log of commits done
git log -2

* For more details refer link "http://git-scm.com/book/en/Git-Basics-Viewing-the-Commit-History" *..... 


If you want to check your settings, you can use the following command to list all the settings Git can find at that point:

git config --list

// List down the remotes added
git remote -v



------------------------ Mac Terminal Commands --------------------------------------- 
 ls -a      // listing hidden directories 
 rm -rf <file name>    // remove the file 
 pwd     // get current working directory 
 find / -name <filename>    // to search directory 
 cp <file full path> <new location path with file name and extention> 
 cat <file name with extention>     // to read file 





Android Plugin for Unity3D with Augmented Reality

Android Plugin for Unity3D with Augmented Reality

Author:- Tushar Sonu Lambole

WORK Flow From Unity to Android

Before starting this steps be prepare with the following files. can be find in any project of Vuforia AR sample unityPackage.
files are available at location "Assets/Plugins/Android/" in Vuforia unity Sample project.

A) QCAR.jar
B) QCARUnityPlayer.jar

Steps.

1) Create a Unity project; for ease of reference we refer to it as “AndroidPlugin” with importing Vuforia libraries.

2) Create a new Android project in Eclipse, for ease of reference we call it "AndroidUnityPlugin". we assume the main activity will then be called RootActivity.

3) Right-click on the project in Eclipse, go to Properties > Java Build Path > Libraries, and add the following two libraries as “external jars” (both located under the Assets/Plugins/Android/ folder of your Unity project):
  
QCAR.jar
QCARUnityPlayer.jar

4) Open the RootActivity.java file in Eclipse, and make the following code changes:

A) Make RootActivity extend QCARPlayerActivity instead of Activity
B) Remove the line “setContentView(…)” from the onCreate() method.
C) Add a custom public method called showMessage() to the RootActivity class, and fill it with some code to show a Toast message with text.

The code of your RootActivity should look like the following:

package com.qualcomm.plugins;

import android.os.Bundle;
import android.widget.Toast;
import com.qualcomm.QCARUnityPlayer.QCARPlayerActivity;

public class RootActivity extends QCARPlayerActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
     
    public void showMessage(final String message) {
     this.runOnUiThread(new Runnable() {
   public void run() {
    Toast.makeText(RootActivity.this, message, Toast.LENGTH_SHORT).show();
   }
  });
    }
}

5) Right-click on the project, go to Properties -> Android, tick the “IsLibrary” checkbox to turn your Android project into a library; this should make Eclipse generate a .JAR file (e.g., called “AndroidUnityPlugin.jar”) and store it in the “/bin” folder of your Eclipse project.

6) Open the “/bin” folder and copy the JAR library from that folder to the “Assets/Plugins/Android/” folder of your Unity project.

7) Open and edit the AndroidManifest.xml file located in the same “Assets/Plugins/Android/” directory.

8) Create the name of the main activity with your fully qualified Activity name, e.g., “com.my.org.RootActivity”

Code should look like this


<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.qualcomm.QCARUnityPlayer"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <uses-feature android:name="android.hardware.camera" />
    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:anyDensity="true" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
        
    <application
  android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:debuggable="false">
        <activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerProxyActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
           
        </activity>
        <activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
        </activity>
        <activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerNativeActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
            <meta-data android:name="android.app.lib_name" android:value="unity" />
            <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
        </activity>
        <activity android:name="com.unity3d.player.VideoPlayer"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
        </activity>
  <activity
            android:name="com.mindspacetech.androidunityplugin.RootActivity"
            android:label="@string/app_name" >
    
   <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
   
  </activity>
    </application>
</manifest>

9) Create a C# script, call it AndroidBridge. create method showNativePopup. Add following code 

public void showNativePopup(string message){
            #if UNITY_ANDROID 
    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
   
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
     
    //Invoke the "showMessage" method in our Android Plugin Activity
    //string message = "Detected trackable: ";
    jo.Call("showMessage", message); 
  #endif
}

10) call above method on button click, anywhere in application

11) build and run the application.

-------------------------------------------------------------------------------------------------------------

WORK Flow From android TO Unity


Before start this steps will require UnityPlayer classes.Jar

in Mac will find at location "/Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/bin"



Right-click on the project in Eclipse, go to Properties > Java Build Path > Libraries, and add the following 

two libraries as “external jars” (both located under the Assets/Plugins/Android/ folder of your Unity project):





1) To close android app and go back to Unity open RootActivity.java add following code

private final Handler mHandler = new Handler();
 public static final String  EVENT_CLOSED      = "EVENT_CLOSED";

@Override
     public void onBackPressed() {

         mHandler.post(new Runnable() {
             @Override
             public void run() {
                 try {
                     // because UnitySendMessage is static
                     Class<UnityPlayer> c = com.unity3d.player.UnityPlayer.class;
                     Method method = c.getMethod("UnitySendMessage", new Class[] { String.class, String.class, String.class });
                     method.invoke(null, "MyAndroidBridge", "OnApplicationClose", EVENT_CLOSED); // reveiver null
                 } catch (NoSuchMethodException e) {
                     e.printStackTrace();
                     return;
                 } catch (Exception e) {
                     e.printStackTrace();
                     return;
                 }
             }
         });
         super.onBackPressed();
     }


2) Update c# script in unity project "AndroidPlugin" script name as "AndroidBridge". Copy the following code.

public static event Action<string> OnApplicationClose; // same as defined in android activity


// Init the class instance
 static AndroidBridge instance;
 public static void Initialize()
 {
  Debug.Log("Application Init");
  if (instance == null)
  {
   GameObject newGameObject = new GameObject("MyAndroidBridge"); // Here name is same as of android method.invoke statement
   newGameObject.AddComponent<AndroidBridge>();
   instance = newGameObject.GetComponent<AndroidBridge>();
  }
 }


//Callback from Java or Objective-C which notifies an event
 //param : "EVENT_OPENED", "EVENT_CLOSED"
 //Method name starts small "o" and Event name is capital "O"
 void onApplicationClose(string eventStr){
  //Debug.Log("EasyCodeScanner - onScannerEvent eventStr=:"+eventStr);
  if (OnApplicationClose != null)
         {
             OnApplicationClose(eventStr);
         }
 }


Upate showNativePopup() method add following code to check the instance is not null and make the method static.

public static void showNativePopup(string message){
 if (instance==null) {
   Debug.LogError("launchScanner error : AndroidBridge must be initialized before.");
   return;
  }
 //////// below is previous Code 
   #if UNITY_ANDROID 
    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
   
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
     
    //Invoke the "showMessage" method in our Android Plugin Activity
    //string message = "Detected trackable: ";
    jo.Call("showMessage", message); 
  #endif 
 ////// Till here 
 }

3) To interact with this methods we will create now the inteface Type class. Create new C# file name it "AndroidBridgeInterface"

A) Create Method as follow

 //Callback which notifies an event
 //param : "EVENT_OPENED", "EVENT_CLOSED"
 void onApplicationClose(string eventStr){
  Debug.Log("AndroidBridgeInterface - onApplicationClose:"+eventStr);
 }

B) Add following code to Start method
 void Start() {
  //Initialize AndroidBridge
  AndroidBridge.Initialize();
  
  //Register Action
  AndroidBridge.OnApplicationClose += onApplicationClose;
 }

C) void Ondestroy method
 void OnDestroy() {
  //Unregister
  AndroidBridge.OnApplicationClose -= onApplicationClose;
 }



D) we can write the code to call the android application code here. 


 public void showMessage()
 {
  AndroidBridge.showNativePopup("Hello World");
 }


Google Map For Android Native in Release Mode

Google Map For Android Native in Release Mode

Author- Tushar Sonu Lambole
(Android,IOS, Unity3d application developer)


Google Map For Android Native in Release Mode

1) Download and configure the Google Play services SDK. Ref Link (http://developer.android.com/google/play-services/index.html)
2) Follo the steps http://developer.android.com/google/play-services/setup.html
3) https://developers.google.com/maps/documentation/android/start



Steps

1) Download Google play service SDK

2) Import <android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib to eclipse workspace and make this project as IsLibrary.

3) Create new android project in eclipse.

4) In AndroidManifest.xml, add the following element as a child of the <application> element, by inserting it just before the   closing tag </application>:
--------------
<uses-library

        android:name="com.google.android.maps" />

  <meta-data
      android:name="com.google.android.maps.v2.API_KEY"
      android:value="API_KEY"/>
--------------    
  substituting your API key for API_KEY. This element sets the key com.google.android.maps.v2.API_KEY to the value API_KEY   and makes the API key visible to any MapFragment in your application.

  ----------
<permission
        android:name="com.example.android.mapexample.permission.MAPS_RECEIVE"

        android:protectionLevel="signature" />

 <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- The following two permissions are not required to use
     Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name="com.example.android.mapexample.permission.MAPS_RECEIVE" />

<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

-----------

5) In main.xml, add the following fragment.

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.MapFragment"/>
       
6) In MainActivity.java, add the following code.

package com.example.mapdemo;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

7) Steps To get the API service Key
  A) Go to link "https://code.google.com/apis/console/?noredirect" and activate "Google Maps Android API v2" service

  B) Get the Debug keystore SHA1 key
      1) Open Terminal
        Run Command as it is "keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android"
      2) above command will display SHA1 key

  C) Click Create New Android Key....
      In the resulting dialog, enter the SHA-1 fingerprint generated by the keytool,
      then a semicolon, then your application's package name. For example:

      BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75;com.example.android.mapexample
      The Google APIs Console responds by displaying Key for Android apps
      (with certificates) followed by a forty-character API key, for example:

      AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0
   
8) Copy this key to the project manifest
    <meta-data
      android:name="com.google.android.maps.v2.API_KEY"
      android:value="API_KEY"/>
   
9) Build and run project. You will see application with google map.

----------------------------------------------------

10) Steps To get the API service Key for Release Mode.

  A) Sign your application same as we done for uploading on market.

  B) locate your .keystore file path save... Will require path.

  C) Run command in terminal  "keytool -list -keystore <Path_got_in_previous_step with extension .keystore>"

  D) Enter keystore password   Will display MD5 Key

  E) Run Command in terminal "keytool -list -v -keystore <Path_got_in_previous_step with extension .keystore> -alias <alias_name>"

  F) Enter keystore password   Will display MD5 and SHA1 Key

11) Follow Steps 7-C, 8 and 9 with SHA1 key got in step 10-F.

12) Finally sign your application.

13) If required do the Zipalign of APK.

    A) Run command in terminal
        "zipalign -v 4 <Path_of_Signed_apk_file_with_fileName_&_extension_.APK> <New_path_with_FileName_&_extension_.APK>"

14) Your APK is ready to publish on google market with release mode key.



Services

What can I do


Mobile Applications

Expertise in developing Android native app development. Creating custom requirement details into working app as per your wish.

Augmented Reality

Expertise in developing static and dynamic Augmented reality based application for Android and IOS platforms. Successfully developed 10+ AR apps for both the platforms.

Game Development

Successfully developed 10+ games for PC, Android and IOS devices. Games are puzzle games, action games, gambling games etc

Development

Worked on Android native, Unity3D, java, php, mysql, sqlserver, web hosting, website, photoshop, javascript, API's languages, technologies and tools.

Touch tables

Have worked for the touch table based games for Adani's Belvedere club house.

Gesture Recognition

Developed application as Magic Mirror for virtual dessing room. Users can use app to try various outfits in few clicks.

Contact

Get in touch with me


Adress/Street

B/1, Keshar Gaurav BLD, Gujarathi Baug, Shahapur

Phone number

+(91) 9423026579

Website

http://tusharlambole.blogspot.com/