ArgbEvaluator example in Android

           There are thousands of classes that can be used to develop an application and many of them are just too awesome. Hold your breath, animation lovers. Here we bring you a subclass of TypeEvaluator, ArgbEvaluator. This pretty class can make the transitions from one colour to another colour a smooth process. This class has just one function evaluate() which has three parameters. The first parameter is a fraction. It is used to calculate the in-between value from start value to end value colours. The second and third parameters are the starting colour and the end colour. This function returns a 4 byte colour, an int value, from a linearly interpolated range from start colour to end colour.

Below is the output of this program - easy to see through gif image :

ArgbEvaluator example in Android
    Let us see its properties through an implementation in ViewPage. We will be developing an application that will have three fragments in a ViewPager and each fragment will have a background colour different from the other. To change background colours we will be using ArgbEvaluator. So let’s get started:

Below are the xml for three fragment with some text to identify the fragment number. We have kept the layout all the three almost same and just changing the background colour using a ViewPager.

fragment_one.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent"
android:gravity="center"
tools:context=".FragmentOne">

<TextView
android:id="@+id/text1"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Fragment 1"
android:textColor="@android:color/black"
android:textSize="30dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_below="@id/text1" android:text="slide to go to next fragment" android:textColor="@android:color/black" android:textSize="18dp" />

</RelativeLayout> 


fragment_two.xml

<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cte.argbdemo.FragmentTwo">

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Fragment 2"
android:gravity="center"
android:textSize="30dp"
android:textColor="@android:color/black"/>

</FrameLayout> 

fragment_three.xml


<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="cte.argbdemo.FragmentThree">

<TextView android:layout_width="match_parent" 
android:layout_height="match_parent"
android:text="Fragment 3"
android:gravity="center"
android:textSize="30dp"
android:textColor="@android:color/black"/>

</FrameLayout>


Now coming to the main activity xml, we have used a RelativeLayout. Other parent layouts can also be used, for eg LinearLayout

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout"
tools:context="cte.argbdemo.MainActivity">

<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</RelativeLayout>

      Here we have defined a ViewPager that will be holding the three fragments and allow smooth horizontal sliding. For the ViewPager, we need to create a custom PagerAdapter. Since we are inflating Fragments for a page, our adapter will be extending FragmentStatePagerAdapter.

CustomAdapter.java


public class CustomAdapter extends FragmentStatePagerAdapter {
 
 public CustomAdapter(FragmentManager fm) {
 super(fm);
 }
 
 @Override
 public Fragment getItem(int position) {
 //set for which position which fragment is to be inflated switch (position){
 case 0: return new FragmentOne(); 
 case 1: return new FragmentTwo(); 
 case 2: return new FragmentThree();
 }
 return null;
 }
 @Override

 public int getCount() {
 //there are three fragments to be displayed in the viewPager return 3;
 }
}

Coming to main part.

MainActivity.java

public class MainActivity extends AppCompatActivity {

RelativeLayout relativeLayout;
ViewPager viewPager;
CustomAdapter customAdapter;
int[] pagerColors = {R.color.pager1, R.color.pager2, R.color.pager3};

@Override
protected void onCreate(Bundle savedInstanceState)
{ 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); //defining an object of CustomAdapter
customAdapter = new CustomAdapter(getSupportFragmentManager());
viewPager.setAdapter(customAdapter);
// setting pageChangeListener

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() 
{ 
@Override
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
 {
  //if android version is lollipop or greater, change the color of status bar as well
  if (Build.VERSION.SDK_INT >= 21)
  {
  // set the color change animation only when page change is from 0 to 1 and from 1 to 2 if (position < 2) {
  getWindow().setStatusBarColor((Integer) new ArgbEvaluator().evaluate(positionOffset, ContextCompat.getColor(getBaseContext(), pagerColors[position]),
  ContextCompat.getColor(getBaseContext(), pagerColors[position + 1])));
  }
   else
  {
  getWindow().setStatusBarColor(ContextCompat.getColor(getBaseContext(), pagerColors[position]));
  }

 }

// set the color change animation only when page change is from 0 to 1 and from 1 to 2 if (position < 2) {

relativeLayout.setBackgroundColor((Integer) new ArgbEvaluator().evaluate(positionOffset, ContextCompat.getColor(getBaseContext(), pagerColors[position]),
ContextCompat.getColor(getBaseContext(), pagerColors[position + 1]))); 
} 
else
{
relativeLayout.setBackgroundColor(ContextCompat.getColor(getBaseContext(),
pagerColors[position]));
}
}
@Override
 public void onPageSelected(int position)
 {
 }
@Override
 public void onPageScrollStateChanged(int state) 
 {
 }

});
}

}



      Here we have first attached our custom adapter to the ViewPager. Now we have to change the backgrounds with the scrolling of pages. For this we have attached an OnPageChangeListener to our ViewPager. Here we override the function onPageScrolled. The second parameter of this function positionOffset serves as the first parameter of the evaluate function of ArgbEvaluator. positionOffset is a fraction which holds a value 0 when there is no scrolling and increases as scrolling starts and reaches 1 when the next page is completely visible and the previous page is completely hidden.

See the gradual changes implemented using ArgbEvaluator. The main part of the project is attached

Download ArgbEvaluator Project here

Hope this tutorial and example helps you to understand ArgbEvaluator in Android..



RecyclerView vs ListView in android

       RecyclerView came into existence during the launch of Android version 5.0 (Lollipop). It came as a powerful and flexible enhancement over ListView. When we look at the implementation side of the RecyclerView, we find that it makes an optimised use of item layouts.

Best Android Practices to make an optimised and easy to understand Android application development

1.  Name variables efficiently


         Naming variables as ‘a’, ‘I’,’d’ proves to be a great headache during debugging. It is advised that the names of variable should indicate their usage.
Example -  Button cancelButton, saveButton; proves to a saver while debugging, instead of Button c, s;
Even Button cancel, save; is not recommended, as you may not know whether it was a Button or
TextView, unless you search for it. CamelCase format for naming is recommended. In camelcase first
word starts with small letter and consecutive words start with capital letter with no spaces in between.

2. Modularising codes

          Projects can have 100 – 150 classes. Those include Activities, Fragments, Adapters, Custom Views, etc. To make things easier, directories named as ‘Activities’, ‘Fragments’, ‘CustomViews’ etc. can be created inside the java folder of a project. Below project screenshot depicts one such view
Modularising Code 

3. Declaring constants at one Java class


          User-defined functions that are used in various parts of the functions can be declared at one place. This will reduce size of the project and help in easy modifications. Strings that are used as Tag names can also be declared here. The data type of just strings will be ‘public static final String’.
Declaring Constants in One Class
4. Use the latest compileSdkVersion and targetSdkVersion


        It is recommended to make android apps that are compatible to the newest versions. This reduces chances of crashes in the production app.

5. Following the conventions for naming Java classes and xml layout


       The first letter of a class name should always be capital. If the name is composed of 2-3 words, then the first letter of each word should be capital. Examples of some class names are SignUpActivity, TransactionHistoryFragment. For naming layout files, the first word should indicate the type of layout: an activity (activity_), a fragment (fragment_), a listview item layout (layout_item_), a selector (selector_).
These help in proper organisation of files.

7. Prevent use of hard-coded values

         Define the values of strings, dimensions, colours in the respective xml files available in the values folder. Change of values is made easier when these are defined once (i.e. in the values folder xml files) and reused later.

<RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_gravity="center_vertical"
      android:layout_marginBottom="5dp"
      android:layout_marginEnd="@dimen/padding_main"
      android:layout_marginLeft="@dimen/padding_main"
      android:layout_marginRight="@dimen/padding_main"
      android:layout_marginStart="@dimen/padding_main"
      android:layout_weight="0.5"
      android:gravity="center_vertical">

values/dimens.xml

<resources>
<dimen name="padding_main">30dp</dimen>
</resources>
Prevent use of hard-coded values
8. Comment your code appropriately
        Always add comments before a function or class declaration about its functionalities. Such practises make it easier to recall the purpose of the function and increase its readability. Make use of the beautiful feature of Android Studio to add TODO lists. All TODOs in the project are highlighted in blue colour. These are very useful when certain tasks are postponed to be accomplished later.

/*
Function to change the format of dates. Date returned in the format dd/mm/yyyy.
*/

public static String changeDateFormat(int date, int month, int year) {
String d = "", m = "";
String cDate = "";
//TODO: implement logic to set dates in the correct format
return cDate;
}

9. Do use try catch block to catch all exceptions in one go
         Catching all exceptions at once using the Exception class may prevent your application from crashing but will handicap it. You will never know why a particular feature is not working. Use the child of Exception class instead. This will let you know why exactly the application in production stopped at a point. The logs are obtained in the crashes section in Google Play Developers Console.

try {
JSONObject jsonObject = new JSONObject(data);
Boolean success = jsonObject.getBoolean("success");
if (success) {
JSONArray jsonArray = jsonObject.getJSONArray("transaction_logs");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject tId = jsonArray.getJSONObject(i);
String merchant = tId.optString("merchant_name");
}
}
} catch (JSONException e) {
e.printStackTrace();
} catch (NullPointerException e){
e.printStackTrace();
}
'
Hope these Android best practices for beginners will help you to code a better Android project / Android application..


How to place markers on Google maps using google maps JavaScript API with example

        In the last blog we went through an in depth discussion about how to incorporate Google map in a website, web app as per our requirements of width and height, this article uses code of this previous (Using Google Maps Javascript API with example) article and make sure you read the first article before reading this.

Why we need markers on a map?
        We need markers in order to indicate certain places like your office, school and home and any other place that you want to show on your web app, website. Markers intuitively identifies location on a map.

How to add markers to a Map?
          By using google.maps.Marker class of the google maps JavaScript API we can add markers to our map, all we need is the latitude and longitude of the place.

var markerpos = new google.maps.LatLng(16.5062, 80.6480);
var marker = new google.maps.Marker({
    position: markerpos,
    map: map,
    title: 'center of map'
  });

Let us place above code inside the intMap() function.
The google.maps.Marker’s constructor takes a single Marker options object literal, specifying the initial properties of the marker.

Position:
       As the name says this specifies the initial position of the marker on the map. This should be latitude longitude object.

Map:
       Let us assume that we didn't specify this property, then what would happen?  Think about this and scroll below.
In the above questioned case, Marker is created but it doesn't know where to display it, so no marker gets displayed. This is an important property of the marker. We can again make it to appear by setting  setMap property to setMap(map). Remember this!!!

Title:
         We pass title of the marker as a string to this attribute. This is the text that is shown when you place the mouse pointer near the marker for about 3 seconds.

Let us put together all the pieces and see the result with marker displayed on map:

  You learnt about how to place marker on the screen but this has less use unless there is a way to hide/show the marker. Now we will discuss how to add this functionality.

We will use checkbox for this purpose.

<div id = "input">
<input type="checkbox" id="showmarker" onclick="checkclick()"> show marker
</div>

The above code adds a checkbox with id as showmarker and with onclick method as checkclick(). The JavaScript part of our final code is as follows.

<script> 
// javascript program starts from here
var location_1;
var map;
var markerpos;
var marker;

function initMap()
{
location_1 = new google.maps.LatLng(16.5062, 80.6480);
       map = new google.maps.Map(document.getElementById('mapdivid'), {
        center: location_1,
        zoom: 13
    });
}
function checkclick(){
if(document.getElementById('showmarker').checked)
{
showmarker();
}
else
{
clearmarker();
}
}
function showmarker()
{
markerpos = new google.maps.LatLng(16.5062, 80.6480);
marker = new google.maps.Marker({
    position: markerpos,
    map: map,
    title: 'center of map'
  });
}
function clearmarker()
{
marker.setMap(null);
}
//End of the javascript program
</script>


I told you before that we can use setMap() to set map canvas on which our marker gets displayed , we used this property in order to clear our marker from the map.

checkclick() function:
This function is used inorder to know whether the checkbox is ticked or unticked. 
document.getElementById(‘showMarker’) returns the element with ID as showMarker, on which we are calling checked property.

Showmarker() function:
This is responsible for showing the marker.

clearmarker() function:
This function is responsible for clearing the marker from the map using setMap() function of google.maps.Map class and by setting Markers map attribute as null, setMap(null).

Final result of the map is shown below - with show marker checkbox.

 Hope this example better explains how to place markers on Google maps using JavaScript API.
You can download the complete code below :

Download code here


Using Google Maps Javascript API with example

Why to use Google Maps JavaScript V3 API?
             Google maps JavaScript V3 APIs provide a way for the developer to use google maps in a web app or a website. This APIs allow us to do some basic functions like getting directions, placing custom markers on the map or highlighting a specific region on our map.

How to use this API? 
              In order to use this API we should include google map’s JavaScript library in our app that’s it, No building or including sdk in complex manifest file like we do in ANDROID

<script  src="https://maps.googleapis.com/maps/api/js?callback=initMap "> </script>

Carefully Observe the above line of code, you can observe that I have included something called “callback = initMap” , what this piece of code will do is  that it will tell the browser to run initMap function, that we wrote in the JavaScript file of the website/web app.

So you would have guessed by now that initMap function is an important function for our maps to work.

What does initMap do?
          initMap function initialises map. A basic initMap function in JavaScript would look like this.

Var location_1;
Var map; 
function initMap{
       location_1 = new google.maps.LatLng(16.5062, 80.6480);
       map = new google.maps.Map(document.getElementById('mapdivid'), {
        center: location_1,
        zoom: 13
       });
// This function is like main() function in your c program.


I am pretty sure after seeing this code you will think that what the heck is that code??
I will give answers to your questions by answering some detailed questions..

Why you declared variables outside the function(global variables) instead of declaring them inside the function(local variables) ?
       We declared our variables outside the function so that the remaining functions we would write after initMap should be able to access map variable.

What would happen if we declare them inside the function, can’t we declare again a new map variable like we did in initMap?
         You can declare like that whenever you needed, but imagine that you have 5 functions, you should create 5 new map objects which would significantly slow down the web app loading time so it is a good practise to declare one map object and use that whenever you needed.

What is location_1 variable do?
          We need to specify to the map, which place we would want it to focus once our web app or website gets loaded, for demo purposes I am using latitude and longitude of Vijayawada, if you want to map to show a specific location like your office or your city, change the coordinates to our respective coordinates.

What google.maps.Map() do?
          This is the function that is responsible for displaying our map , and the places , zoom level that we want our map to have by default, of course we can define later change the zoom level by using scroll wheel.

What parameters do google.maps.Map() take?
          Listen carefully, till now in this post I have told you where our app would display the map on the screen, This property is set by using document.getElementById(), essentially what we are saying is that this function would get the div tag which has id as mapdivid and would map in its place so we need to include a div tag as follows like this

<div id = “mapdivid”>
</div>

In css part as :
#mapdivid{
height: 500px;
width: 500px;
}

So now the map knows where it would  display the map created but till now it doesn’t know which place to display at the centre of the screen or the zoom level it would display that place, so we need to pass that information to this function.

Final result would like this.

<!doctype html>
<html>
<title>My first Map</title>
<style>
#mapdivid{
height: 500px;
width: 500px;
}
</style>
<script> 
var location_1;
var map;
function initMap()
{
alert('123');
location_1 = new google.maps.LatLng(16.5062, 80.6480);
       map = new google.maps.Map(document.getElementById('mapdivid'), {
        center: location_1,
        zoom: 13
    });
}
</script>
<body> 
<script src="https://maps.googleapis.com/maps/api/js?callback=initMap" async defer> </script>
<div id = "mapdivid">
</div>
<script>
</script>
</body>
</html>

Below image displays actual output of our example code.. 


Download code here


Control Structure in PHP with example

           Control structure pertains to the different methods through which we can control the running flow of the program. These structures take care of a few conditions and make sure that a particular portion of a program is run only under certain conditions or is run at least for a set number of times. 

There is broadly two categories of control structures.
1. If/else condition
2. Loops

Let us talk about If/elseif/else condition. In PHP only one instance of else is allowed although you can have multiple instances of elseif conditions. E.g.

$x = 1;
if ($x < 1){
    echo '$x is less than 1';
}elseif ($x == 1){ // Note the double equals, for comparison
    echo '$x is equal to 1';
}else{
    echo '$x is neither equal to 1 or less than 1';
}

Output : 
$x is equal to 1 (Shown in Image)

Another kind of control statement is Switch statement. This is just like the ‘if statement’ with a difference in the way the condition is checked. Syntax-

switch (expr) {
    case value:
// Do this if value matches
        break;
    case value2:
// Do this if value2 matches
        break;
    default: // [optional]
// Do this if no other cases match. Does not have to be at the end
        break;
}

expr: Is the variable against which the case values will be checked.
Break: It stops a loop from executing and exits. But what is a loop?
Loops are of three types, for while and do while.

1. While:
Syntax-
while (expr) {
// If expr is TRUE, do this, then evaluate expr again
}

A while loop first checks the condition and then enters the loop, therefore there is  chance that the loop doesn’t executes even a single time.

2. Do While
Syntax-
do {
// Do this
} while (expr);

This is just like the while loop, with a little difference. This loop will execute once even if the condition is false because the condition is checked later.
Continue: It breaks the current iteration of the loop and starts from the beginning. 


3. For

Syntax-
for (expr1; expr2; expr3) {
// If expr2 is TRUE, do this

Expr1 is the initialization for any variable which might be used in the loop. Expr2 is the condition, while the expr3 is generally used to manipulate the control variable, or other variables.

4. Foreach

foreach ($array as $value){
// Do something
}
// Another form, for keys and values
foreach ($array as $key => $value){
// Do something
}

For each iteration the loop runs for a fixed number of times. It runs as long as there are elements in the array. You might be confused as to what ‘key=> value’ is, but don’t be. We will learn it in future lectures.
Break[$integer] : We use this to tell the break statement, how many nested loop does it have to break out of.

These control structures are not limited to variables. They can include files too and can perform actions on them. For now all you have to master is the art of getting the maximum functionality by using the minimum number of control structures. Remember even codes do not want to be controlled too much!



Introduction to PHP

            Among all the languages available for programming when it comes to web development PHP is among the most sought after language. It is mainly used for back-end development. You will learn in the future articles, what back-end is.

Android Fragment Lifecycle Tutorial with Example

                    If you are reading this article then you must be aware about the basic concepts of android application development such as Activity and Fragments. Furthermore if you have been doing android application development for about three weeks or a month maybe, then you must be aware about "Activity Life Cycle". A concept exists similar to it for fragments as well. Understanding Fragment life cycle is very important specifically when you have to develop multiple screen size (say tablets) supporting android applications.
                    The life-cycle of a fragment is connected to the life-cycle of its host activity. Fragments have their own life cycle and it is somewhat similar to the life cycle of an activity but, they have more stages as compared to the activity life-cycle. The lifecycle of the activity in which the fragment lives directly affects the lifecycle of the fragment, which means in simple words, if the activity is destroyed then its corresponding fragments will also be destroyed.

There are several methods present in a fragment life cycle, some of which are exactly similar to activity life-cycle. Following is the list of methods which are available:

1. onAttach():
            This method is called when the fragment gets attached to the activity. At this stage both activity and fragment are not initialized. Typically you get in this method, a reference to the activity which uses the fragment for further initialization work.

2. onCreate():
            The system calls this when creating the fragment. Within your implementation, you should initialize essential components of the fragment that you want to retain when the fragment is paused or stopped, then resume it.

3. onCreateView():
            The system calls this when it is time for the fragment to draw its user interface for the first time. To draw a UI for your fragment, you must return a View from this method that is the root of your fragment's layout. You can return null if the fragment does not provide a UI. Till this point, activity is not fully initialized so don't interact with activity here.

4. onActivityCreated():
            This is the point where host activity gets created. This is important to notice that this method is called after onCreateView(). This method gets called when the activity's onCreate() method has returned. At this point, view can be accessed with the findViewById() method. Example: In this method you can instantiate objects which require a Context object.

5. onStart():
            This method gets called when the Fragment is visible to the user. This is generally tied to Activity.onStart of the containing Activity's lifecycle.

6. onResume():
            From this point onwards, Fragment becomes active.

7. OnPause(): 
            This method gets called when our fragment is not active anymore (here fragment is visible). This is generally tied to Activity.onPause of the containing Activity's lifecycle. Example: If any other activity takes place of the host activity then this method will be called.

8. onStop():
            This gets called when fragment is no more visible. This is generally tied to the Activity.onStop of the containing Activity's lifecycle.

9. onDestroyView(): 
           This method destroy's the view hierarchy of the fragment. When a fragment comes again into view from backstack then OnCreateView() is called.

10. OnDestroy(): 
           This method does the final cleanup related to the fragment state but is not guaranteed  to get called by the Android platform.

11. OnDetach(): 
          This method gets called when the fragment is being disassociated from the activity.
Note: When overriding these lifecycle methods — with the exception of onCreateView() — you must call through to the super class’s implementation of the method. Otherwise, an exception occurs at run-time.

Fragment Life cycle 

Fragment Life-Cycle


Syntax to override fragment lifecycle methods :
public class LifeCycleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_life_cycle, parentViewGroup, false);
        return rootView;
    }
}

Here I have showed how we can override one of the most commonly used fragment lifecycle method. Similarly other methods can be overridden.

Practical Applications: 
            Fragment lifecycle plays a very crucial role when we are extensively working with tablets where we want a multi pane layout. Here comes fragments into the picture and with them the fragment lifecycle. Thorough understanding of fragment lifecycle is very important if we want to work with multi pane layouts. In most of the popular applications like whatsapp, facebook etc. where fragments is used in form of navigation drawers, multi pane layouts etc.


How to get element inside element by id and class using plain JavaScript

If you have multiple elements with same class name in your html page and you want to select particular element using its class, sometimes it may become difficult to select the element we want.

For example: I have two <select> with same class name "myclass1". Now I want to get the selected option in the second <select>.


How to get Dynamic Web Project option in Eclipse Luna

Are you not seeing Dynamic web project in your Eclipse Luna? You may have to download and install additional plugins to enable this option.
This may happen because you have downloaded different flavor of Eclipse which does not have "Dynamic web project" pre-installed.

To get "Dynamic web project" you have to follow below steps;


How to resolve NoClassDefFoundError: org/eclipse/core/resources/IContainer

If your Eclipse IDE crashed for some reason, you may see below error during startup.


!ENTRY org.eclipse.osgi 4 0 2015-08-15 21:37:18.834
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:136)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)

Top 10 useful and interesting extensions for a better Chrome experience

       Google Chrome is one of the most commonly used browsers across the globe, with more than 45% of internet users using it. Currently you might be using a Google Chrome browser as you are reading this article. No wonder, the simple, elegant and easy-to-use interface along with it being considerably faster than others has made it a popular choice among internet users. But, as humans we are not always satisfied with just that. We want more and more in a browser means adding little bits of code that makes our browsing experience and usage more interesting and easier. 
         Extensions as mentioned in Google Chrome developer page are “small software programs that can modify and enhance the functionality of the Chrome browser”.  You can benefit from these small programs in a huge way, and in many ways you will find that it enhances your productivity and usage in a great manner. 
Here are some of the most useful and interesting Chrome extensions that you will help you to have a better web experience:

1. Sortd – Enhance your Gmail productivity

         
       Now do not let your important emails get lost in the inbox. Sortd turns your Gmail into a Kanban-styled board and you can sort them into actionable boards. It is a useful thing to prioritise your emails and make it like a task manager; increasing your productivity my easily organising the mails according to importance.

2. Ginger – No more typos

           Save yourself from a lot of embarrassment the next time you send an email or post an update on Facebook or Twitter. Ginger automatically checks for any typographical and grammatical errors in your text and suggest the correct ones. It is free and simple to use. It is a great tool who are not that confident about their grammar and language skills. 

3. Adblock Plus – Time to put a stop to irritating pop-ups and ads


          Are you annoyed by constant pestering from pop-up ads and obtrusive ad banners? It is time to get the Adblock Plus extension for your Google Chrome browser. It will block all the irritating ads that are displayed in websites and get a clear view of the content. The best thing is that it is free. 

4. Hover Zoom – Easy viewing of pictures in Facebook, Twitter, etc.


          If you are going through social media networks very often, this is a wonderful tool for you. With this extension, you can view full pictures without clicking them. You just need to hover the mouse pointer over a picture and get a zoomed out full sized one. It works with Facebook, Twitter, Flickr, Amazon, Tumblr, etc.

5. Bitly – Shorten an url for easy sharing


          Do you need to share links often on the internet? Sometimes the web urls are long enough to be shared and when it comes to platforms that have limited character count it is a grave problem. Bitly solves this problem my making urls shorter and thus, more easily shareable.

6. TabCloud – Tabs for future use


       Are you addicted to opening more tabs than you can handle. This extension will come as a relief to you. TabCloud saves your tabs to a cloud syncing service so you can open them at another time or on another computer in just a click. Now reduce RAM use, battery life and free your web browser from slowing down.

7. Social Fixer – A solution to annoying Facebook posts


      This is another useful extension for Facebook users. Do you like Facebook but hate those annoying posts like candy crush posts that are swamping your feed? Get the social fixer extension on you Chrome and do away with those unwanted posts with just a keyword. It will give you a lot more control on how your feed should look like.

8. Turn Off The Lights – Get unobstructed video viewing


        Are you glued to videos on YouTube and Vimeo most of the times? It might occur to you that the video suggestions and other content around the video space are hampering your viewing experience. If you do not want to make the video full-screen and still want a good watching experience, then Turn Off The Lights is a great extension for you. It darkens the content around the video space and focuses on the video. 

9. Dropbox For Gmail – Share items from your Dropbox account

        If you are using Dropbox for your official purposes and need to send items from your Dropbox account in Gmail, then this extension comes handy. You can directly attached documents, pictures and other files from Dropbox and saves you from the long process that it usually needs.

10. Google Dictionary – Understand better, Learn more



      Sometimes you may come across a word whose meaning you do not know. The Google Dictionary extension helps you to understand the meaning of a new word. It also helps you to get the translated meaning of a foreign language within the text. 
Interested by some of the above mentioned extensions? Install them and see how useful these little extensions can be. 

Author Bio - Hasib is a knowledge junkie and an SEO writer in the job portal – naukri.com, and often writes on topics related to jobs and job opportunities for fresher in IT