Stay Amazed with Rohit Surwase

Friday, November 3, 2017

 

Linkaive - an Android app designed to allow users collect all sort of Links and URLs at one place.

To know more about Linkaive- checkout this blog 

Linkaive, Saving Bookmarks & Links (URLs) Made Easy

 

 Frequently Asked Questions

Q. How to add new link or URL?

A: You can add new Link/URL in two different ways
  1. Manually from inside the App
    • To add new link manually, just click on floating button or “Add new Link” from the menu at top right corner of the App. After you insert the link click on SAVE button. That link will be saved for you.
  2.  Using SHARE feature of any App
    • You can add new link URL to the Linkaive App using SHARE option from any other app. Just click on SHARE option and then select Linkaive from the list of available apps. The selected link will be saved for you. You can also select the URL and then choose share option from popover menu and add that selected link to the Linkaive App. This is the most simple way to add new links to the Linkaive as you can share the link from any Android app like WhatsApp, Facebook, LinkedIn, Instagram, Medium, Quora and the list goes on.

Q. How to search for a Link/URL or its contents?

A: You can search among the saved links using it’s URL or description that you remember. The search results are so quick that you will get results in fraction of seconds.

What are you waiting for?
Download the App now-


Friday, October 20, 2017

(Note: This app was published with the name Save Me -Pocket Lite which is changed to Linkaive later on.)

TL;DR

Linkaive is an Android App designed for Readers, Quorans and all Internet Users who like to save and backup Links/URLs on the go.

The Problem

While surfing the internet we came across so many links, and references that we feel like it will be useful in future. So what we used to do, we bookmark all those links in our browser, but now, all those links are limited to that particular browser. Some of us must have used the ‘Pocket’ App for this purpose. And being an existing user of the Pocket App, you must already know, it consumes a lot of internal memory, mine reached to almost 1.5 GB.
Even if you have found a way to save your favorite links, you can not recall them as you can not search for its content. And that’s another story that we do not have control on those saved links.
If you are a Quaran, how many times have you searched for a way to save your favorite answers? Yeah, I know the pain.

The Idea

There must be a way, independent of any browser which can bookmark and save unlimited links without any condition. Then, why not an Android App? Nowadays, being online is not a big deal, but the internal memory is. So the App should consume least internal storage irrespective of the links saved in it. The App should allow me to search for links and it’s content. The App should offer me a full control over all my links saved.
The most importantly it should work even offline, without internet. And it should be able to save links to your favorite answers on Quora.

The Solution

Linkaive an Android App to the rescue.
It is an Android App designed for everyone which overcomes all problems mentioned above and willing to offer many best features for free. It is created for Readers, Quorans and all Internet Users who like to save and backup Links/URLs on-the-go.
To summaries, it is the lighter version of the Pocket App. But the advantage of Linkaive App is, it consumes very less internal storage. And it also allows you to browse the saved links inside the App.

Some Features of the App

  • Hassle free way to add new Links/URLs- You can add new Links/URLs manually using floating add button in App. You can all also add new Links/URLs using any other App using share feature of that particular App.
  • Marks Links/URLs as Favorite.
  • Search for Links/URLs and it’s content even if you are offline.
Now it’s time to use the Linkaive Android App. Add comments to request new features. And do not forget to rate the App 5 star on Play Store.

Thanks for reading the article.

Play Store link to the App- Linkaive on Play Store.

Thursday, October 5, 2017


It’s time to understand introverts better while they are blushing on themselves.

Being a unique kind of Introvert, predicting and visualizing each side of a situation is always easy for me. I am aware of the misunderstandings that usually one can have about an introvert and at the same time, I am aware of the hidden sorrow buried in the corner of an introvert. So I decided to remind people that we, ‘introverts’ exist, yeah we are less in number but we do exist.
Introvert- “A person predominantly concerned with their own thoughts and feelings rather than with external things.”
Introverts, who are they? They are normal human beings too! But with some pinch of unique qualities. They are mysterious, relaxed, motivated by internal conviction, creative, out-of-box thinkers, and loving by nature. They love introspection so solitude is essential above all for them. Their nature of turning inward is the source of comfort as well as a key asset for survival. Their best ideas come apparently out of the blue when their mind is wondering. They don’t need external stimulation or inspiration to work hard. They get it by their inner self, from the ideas and thought process running in their mind. They do not seek for reward or appreciation, they know who they are, what they want and what matters in their life. And the most importantly neither they can be created nor one can be like them, they are just born this way.
Though the world we live in, is dominated by extroverts, most spectacularly famous people in many fields are ought to be introverts! Umm, hard to believe, right? Here are some examples of introverted people: Albert Einstein, Mahatma Gandhi, Adolf Hitler, Bill Gates, Barack Obama, Mark Zuckerberg. Wait the list isn’t over! Warren Buffett, Abraham Lincoln, Christina Aguilera, Emma Watson, Deepika Padukone, and Steve Wozniak are also amongst few well-known introverts.
Before starting, let’s have a look at the history of these terms. Carl Gustav Jung, a Swiss psychiatrist, and psychoanalyst was the first one who founded analytical psychology and defined introversion and extroversion. Later on, a study carried by Richard Lippa in 1978, proposed that there is one more factor which plays an important role which is ‘Expressive control’. Expressive control depends upon individual’s ability to control their behavior.
Humans are complex and every human is unique in every manner but at the same time, it is also true that an individual can either be introverted or extroverted.
When I was writing this article I was trying several ways to clearly figure out this ‘special kind’ but yet not enough to decode this special kind completely. Introverts are so valuable that I do not want to mess with their secrets just because of a wrong presentation. So I have decided to represent this in a quite different and subtle way.
So let me introduce our imaginary character ‘Aarush’, he has a typical introverted personality. He is a person who is confident, self-inspired, and disciplined. Who tend to remain reserved and private most of the time.
One fine day, he proposes a girl, ‘Riya’, the one whom he liked. At first, the girl was surprised as she was not expecting this from Aarush and the next moment she was happy inside as she had been waiting for this to happen. Without giving a second thought, she confessed that she likes him too. She was so eager to know about Aarush that she kept asking him so many questions all the time. Aarush, being an introvert, found hard to open up with Riya.
But he thought to give it a try and decided to open up to her.
And here is the conversation between them.
Riya: I am still surprised Aarush…
Aarush: Wait wait, first tell me what you thought about me from my first impression?
Riya: Hmm on my very first day, you didn’t even look at me, all busy in your daily activities. You hardly talked, stayed away from gossips. You were not even aware of the difficulties and problems faced by people around you. And that headphone! Is it necessary all the time? I thought you are a workaholic, arrogant, and rude person who does not care for others. But the way you speak one to one, the way you help people in case of emergency, the way you participate in group activities, confused me a lot. So I was sure that you are not the one the way everyone knows, you are hiding something from every one.
Aarush: Really? I never thought this way. :D
Riya: So tell me who are you, like in real?
Aarush: … (OMG! she directly asked about my core secret. Should I tell her or … ?)
So after a while, Aarush is ready to reveal about the real “me” of him.
Aarush: I like being alone, and I prefer activities like reading, writing, and thinking. Partying all the time is not my cup of tea. I get drained while in a group and seek for an instant recharge by spending time alone. I am a good observer, you can say observation is my compelling asset. I do not like to show off and I try hard to utilize each second of this life. And utilizing does not mean working all the time.
I am cautious about my secrets and do not like to reveal it to anyone. Everyone will not get a chance to know about me, I am very picky while choosing my friends. I believe in quality over quantity so I have only 2- 3 friends. Maybe, you do not know but I am very popular online. :D You see the only things that I wanted to show so obviously predicting me in not an easy task. And even if you are successful in predicting me, that may be because I am letting you predict. Headphones, I love headphones, it is a doorway to enter my world from this world. Whenever I feel drained I need alone time, this does not mean I am lonely.
Yes, this is true, there are few who like to express themselves through music as they hear all kind of music and know which song fits a particular moment. They accompany the one with whom they want to be with, else they prefer to be alone. There are very few who can understand an introvert in reality.
“The philosophy of the wisest man that ever existed is mainly derived from the act of introspection.” -William Godwin
Riya: Have you ever been in love?
Aarush: Love, love is something that I am afraid of. Yes, I had been in love. It has shaken me throughout, as it was a battle between my desires and solitude. Love needs interaction while I prefer alone time. I am not the one who falls for anyone, I will observe her, test her. If it has future then only I would like to be part of it. My confidence gives me the power to make the first move in love. I do not like to keep on saying those cheesy lines all the time but I know the ways to make her feel special. I can sense the things that she has not told me yet.
The one, the special soul, who would be my lover and partner will have higher priority into my life. She will get a chance to dive deeper into my life, now predicting me can be easier. There are many things I want to tell her, it is like a flood of thoughts stored in my heart for so long. Yes, sometimes I really crave for some one to talk to. I can step out of my comfort zone to be with her. I do not like to become crutches of her but a source of inspiration. Now all my resourcefulness will be available to her.
They do not speak out even if they are hurt hard by anyone, their feelings remain aloof. This complex nature is the reason why it is difficult to understand them. So they look for someone who can understand, and cherish them in downtime.
“Introverts are capable of acting like extroverts for the sake of work they consider important, people they love, or anything they value highly.” -Susan Cain
Riya: How do you like to socialize with people?
Aarush: I prefer one-on-one instead of group talk. I usually take some time to know people around me, as I simply observe them at first. I prefer doing my stuff instead of partying all the time as it causes a feeling of guilt in my mind. Though I prefer to be quiet and wait for my turn to come in a group conversation, they say I am a good public speaker. I think, my deeper understanding of any subject helps me speak more effectively. This may be the reason why people ask me for suggestions in case of difficulties they are facing.
Have you ever thought of watching a movie, and hanging out alone? I can do it easily and I have done it many times. I like when seats around me are empty, it gives me more comfort. I do not like to hurt or play with anyone’s feelings. I just hate betraying anyone.
Yes, they like to live on their own. They do not express their need and desires and will not ask for help unless it’s emergency. They avoid explaining their actions to others, all those questions are just a smile away.
Riya: What about your professional life?
Aarush: I like being a professional and know how to separate professional life from social and personal life. Work is work, a place to get job done. I really get distracted by chatty colleagues, sometimes it irritates me a lot. I am not afraid of talking to anyone, whoever it may be. I do not hesitate to accept whatever I have done whether it is good or bad. It is true that I have my own logic for everything I do. It helps me think out of the box.
I prefer to be in my role while working. I really care for the time I spend, so I am not gonna explain those new topics. I am not gonna help you with the problem you are facing unless it is necessary. And most importantly I will not help unless and until someone ask for help.
Research says, under right circumstances, they can be the best leaders of all as their introversion helps them to understand others while their analyzing skills helps to get to the root of the problem. Their resourcefulness comes in action as they are aware of a most efficient solution for any problem. If an introvert is spending time with you for any reason, then I will say, you should consider yourself a lucky one! They are so much engaged in activities like reading and adopting new skills that he or she is the one asset that you want to be always with you. But they know the right time to show up their knowledge. Decisions taken by them may feel too quick but it is the result of those lengthy algorithms running in their mind.
Knowing your teammates is the key ingredient for collaborative success. -Rohit Surwase
Riya: Which is the most important thing in your life?
Aarush: Relationships, it has all exceptional allowances that I can have.
How do you feel now? Don’t you think, whatever we did to them is injustice? Because they are wired that way, and not trying to act like that. They do what they say. If you are lucky enough to get on their priority list then you should be proud of yourself as they are the most trustworthy person you can have in this modern world. They can be the backbone of your life and will not let you down in any situation.
They know more than they say.
 They think more than they speak.
 They observe more than you know.
 They know when and how to listen to people.
 They know how to stand alone.
 They know how much is too much.
Here are some Misconceptions about them:
Introverts are cold, or standoffish.
Reason — Many introverts have learned to cope with constant over-stimulation by putting up a wall against themselves.
They turn into different being altogether.
Reason — They do it once they reach the level of tolerance, they prefer to go into their shell. As they know when they are annoyed, they sound very harsh.
They are rude and arrogant.
Reason- It’s their less talkative nature, not a choice. Suggestions given by them may feel weird but trust me, you should give it a try, you will not regret it.
This is not all, the more you get to know about them, the more you will get amazed. If you are one of those, who think someone around you is uninterested and coincidentally he or she is an introvert then I will say you are an unlucky person who can not see all the colors that he or she has.




Image Source: www.pomegranates.org
Here’s an introvert. Extremely tough to open up. Not suitable everywhere because it’s hard and messy to open up. People find it boring because it takes up a lot of efforts to peel open. But, those who open it enjoy this fruit like heaven. Sweet, tangy, sour, full of flavors and rich in antioxidant. Once, opened up, it’s tough to resist. Not so popular, costly, always recommended by doctors but gets replaced by someone easy to go! Only a few people truly admire this fruit :) [Source: Jay Pandit’s answer on Quora]

(Sources- Title Image: www.pomegranates.org)

Originally Published on Medium July 29, 2017.
The first and most important thing to start with your goal/task which I would like to suggest is, caring about your deadline. If you are motivated to achieve deadline, you will give your best for it. If you don’t care about your targeted deadline, obviously you will fail to achieve it in time.
I have gone through many articles & trials and I came up to a conclusion that if you follow 4 steps mentioned below, you can achieve your deadline easily. Yes! You read it right. You can achieve your deadlines easily. I have been following these 4 steps since long and I must say it has helped me and it’s still helping me a lot. So I am sharing my secret with you.

1. Know Your Enemy

If you know the enemy and know yourself, you need not fear the results of a hundred battles. If you know yourself but not the enemy, for every victory gained you will also suffer a defeat. If you know neither the enemy nor yourself, you will succumb in every battle.- Sun Tzu
Whenever you get to know about a task that you have to complete, the first thing to do is know it thoroughly. Ask yourself a question like- What exactly do I need to do? Study every aspect of that task. You should be aware of the issues that you may face while implementing the solution. Read everything related to that topic. I assure you none of the information will go in vain.

Knowing the real enemy is half the battle win- Unknown

2. Recognize Your Weapons

Just because we can’t find a solution it doesn’t mean that there isn’t one.- Andrew Wiles
Once you are aware of your task, it’s time to collect weapons to fight the real ‘battle’. Ask yourself a question like- What are different approaches available to accomplish my task? You will get to know that most of the solutions already exist out there. You don’t necessarily need to follow conventional solutions at all. Most of it are deprecated now. Come up with your own ideas. Don’t behave like a sheep, find your own ways to achieve tasks efficiently. Learn about the implementation of each approach, its pros and its cons. Find out solutions for the issues that you already knew in the first step.

3. Choose The Most Efficient

The greatest weapon against stress is our ability to choose one thought over another. - William James
Now, when you have everything to land in a battlefield, it’s time to take a final decision. You are aware of all the alternatives, it’s pros and cons. It’s time to choose the ‘best’ approach amongst all. While opting for the best approach, ask yourself questions like-
  • Is it possible to implement it in a time frame given?
  • Will my approach satisfy all my requirements?
  • How efficiently does my approach perform?
If the answer is a “Yes!” for the approach you have chosen, go ahead with that approach.

4. Give Your Best Shot

It’s not about making the right choice. It’s about making a choice and making it right.- J. R. Rim
This is the most crucial phase of all. It’s time to prove, you were right. It’s time to show best of your capabilities. It’s time to get your hands dirty. You must have spent 20–30% of the time to reach to this step. Now you have everything to implement your logic. Design logic in your mind. You have an idea of difficulties and it’s appropriate solutions. Let’s pour out all the knowledge you have to complete the task. Be ready for unknown surprises. Work smart and try to optimize each logic that you are about to implement. If you think enough before implementation, you don’t have to optimize your code in future.
Just keep in mind- “Think More, Code Less”
Knowing is not enough; we must apply. Willing is not enough; we must do.- Johann Wolfgang von Goethe
Yes! It’s so true. I know everyone is looking for the key to be successful, a key to get recognized. Consider you have one, it’s time to take efforts to open up doors to your success. You know how to achieve your deadline.


The world is full of good and bad individuals, to be successful you just need to be better- Rohit Surwase

(Sources- Title Image: https://quotefancy.com)

Originally Published on Medium March 28, 2017.


My name is Rohit and from past 1 year, I have been working as an Android Developer. Now you may think why should you read an article written by a guy who has only 1 year of experience? But wait what makes me different from others is my one of many habits. I think, my habit of learning at least one new thing every day makes me different. So I have learned 300+ new things last year. And I have already used many of it in practical. It’s enough about me, let's move on to the main topic.
I have been working on an app from few months. Basically, it showcases information stored on the server. And the app was completely online. Down the line, I felt like adding an offline feature to this app so as to make its usability better. So lately I decided to add an offline functionality support to my app. So taking this thought process of adding offline support to my app ahead, the first question that came to my mind was -

What are the available options?

In Android, we can sync server database to local storage mainly using

  1. Sync Adapters
  2. Custom Services
  3. Other services like Firebase

Sync Adapter and Content Provider

If we want to share app’s private database with other apps, we have to use Content Provider. Content Provider is the one who decides which app can access a private database. The best example of this approach is our contacts which are accessible to all other apps that have permission. On top of Content Provider, there is a Content Resolver which has all functions useful to interact with the private database. Later comes the Sync Adapter. Sync Adapter synchronizes server and local database using Content Resolver. Content Resolver acts as an interface between Sync Adapter and private database. Sync Adapter is specially designed service which is useful to transfer data between server and device using predefined schedules and triggers. Sync adapter adds an option in “Settings — Account — Your App” to set your sync preferences. It's optimized and recommended way to sync server database continuously. So if you decide to use Sync Adapter in your app, your app’s structure will be like-
Online Database => Sync Adapter => Content Resolver => Content Provider => Private Database
 => Custom Services

Here I will write about normal Services and Intent Services only. Intent Services are simply awesome. It's already bound to your app. It creates its own worker thread so you don’t need to create your own thread to run in the background. It gets destroy on its own, you don’t need to call stopSelf() on intent service. But wait if you are already using Volley library in your app, then you should not make use of Intent Service. Because Volley processes API call in a separate thread and returns result to the calling thread. If you are using Volley and Intent Service simultaneously, you will end up main thread creating separate worker thread (by Intent Service) and that worker thread creating a separate thread (by Volley) for API request. So there are many scenarios where you will leak memory through your app.
So if you want to use Volley for synchronization efficiently you should use normal Service. Using Volley in Service you don’t need to create separate background thread so that you can be sure that app will not leak memory easily. So I have decided to use normal Service in my app.

Local Storage - SQLite

Although there are some alternatives to SQLite in Android, I have decided to go with the default option which is SQLite. Maybe next time I will think of other alternatives. So my plan was-
  1. Create Helper class which will create or upgrade database and tables.
  2. Create a Handler class which will have functions to interact with the database.

Here are some code snippets, you can refer -
My DatabaseHelper class



My DatabaseQueryHandler Class


Abstract Methods

SQLite Database Abstract Methods- Insert, Query, Update, Delete. Even though there are specific functions in Android, here I am going write about the best suitable approach for each method.


Insert -

For insert query, I have used Prepared Statements. It's the best way to insert/update/delete multiple rows at a time. Prepared statements improve the speed of transactions using the concept of Transactions and Compile-Statement. It's faster because the query will be compiled only once throughout the transaction.
Example -
 //SQL Prepared Statement
 String insertPreparedStatement = “INSERT INTO “ + DatabaseHelper.TABLE_CUSTOMER_DETAILS + “ VALUES (?,?,?,?,?)”;

Query/Search-
We cannot use Prepared Statements for queries which returns some data.
So you have to use "query()" function of SQLite database. This function returns Cursor object, which can be used to access values of each row.
Syntax of query() function
//Cursor cursor = sqLiteDatabase.query(String tableName, String[] tableColumns, String whereClause, String[] whereArgs, String groupBy, String having, String orderBy);

Update -
There are two optimized ways to update all /selected rows of a table in the database. And of course, both ways works with prepared statements.
1. Using “INSERT OR REPLACE INTO” keyword — used to insert/replace a row in a table using primary key only. It doesn’t allow you to use WHERE clause. If a primary key exists then replace row (delete and then insert row) else insert row directly. You can use this keyword instead of INSERT to insert rows in the table.
2. Using “UPDATE” keyword — used to replace selected values/columns from the table using WHERE clause. It is helpful when you have to update table data/row independent of a primary key using WHERE clause.
Example- UPDATE TABLE_NAME SET COLUMN_1=?, COLUMN_2=? WHERE COLUMN_3=?


Track Memory Leaks

Now you must have got an idea of, which type of query can be used where. After implementing this, next came to my mind was-
How can I track whether my app is leaking memory or not? & How can I be sure that my app will not leak memory?
So I had a look at some options to resolve this issue and I found a library called Leak Canary.
Even though the issue looks difficult, you can make it simple by using this library. This library alerts you whenever app leaks memory so you can keep track of memory leaks in your app.
After digging out every possible information about services, local storage, threads, volley, transactions, SQLite, its different queries and much more, I feel proud that I have achieved my target in predefined deadline. 
I hope my story will help others who are looking for a better solution to synchronize their app with the server database.

(Sources- Title Image: www.iconfinder.com) 

Originally Published on Medium January 29, 2017.


Do you ever caught in a situation, when you don’t want to create separate app icons for multiple screen sizes?
Do you think that you are tired of traditional way of re-sizing app icons?
If yes, then there is an automated way to create and resize app icons for multiple screen sizes - Vector Asset Studio to use Vector Drawables.

Summary


  • What is a Vector Drawable? 
  • How to create Vector Drawable?
  • Vector Drawable Image vs Raster Image
  • How to use Vector Drawable?
  • What is Vector Asset Studio?
  • How to use Vector Asset Studio?
  • Useful Attributes and Example.
  • Backward Compatibility.



Advantages

What is a Vector Drawable?

class - VectorDrawable extends Drawable                   
In android 5.0 (API Level 21) Google introduced a support for Vector Drawables. Vector Drawable image is simply XML file which contains all the geometrical information of an image such as a set of points, lines, and curves, as well as their associated color information.

How to create Vector Drawable?

Crating Vector Drawable is two step process.
  • Note: You can also use Googles Inbuilt Material Design Icons.
  1. Create App Logo in any professional image editor and then save or export that image as SVG format. (Scalable Vector Graphics (SVG) is an XML-based vector image format.)
  2. Use Android Asset Studio to convert that SVG image into XML format. The detailed process can be found below.

What is Vector Asset Studio?

In latest android studio google introduced new tool Vector Asset Studio. With this tool, importing SVG files is became easier and we can now use any of the material design icon vector assets provided by the software. The Vector Asset Studio generates a XML file for VectorDrawable using data from a SVG file.
Vector Asset Studio helps us to add material icons and import Scalable Vector Graphic (SVG) files into our app project as a drawable resource. Compared to raster images, vector drawables can reduce the size of our app and be resized without loss of image quality.

How to use Vector Asset Studio?

Running Vector Asset Studio in Android Studio:
Follow these steps to start Vector Asset Studio:
  1. Open an Android app project.
  2. In Project window, select the Android view.
  3. Right-click the res folder and select New > Vector Asset
  4. Continue with Importing a Vector Graphic.
Referring to a Vector Drawable in Code:
Ex. In XML Code

Ex. In Java file
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);

Backward Compatibility:

Android 4.4 (API level 20) and lower doesn't support vector drawables. But dont worry if our minimum API level is set at one of these API levels, Vector Asset Studio also directs Gradle to generate raster images of the vector drawable for backward-compatibility.
For Android 5.0 (API level 21) and higher, Vector Asset Studio supports all of the Vector Drawable elements. For backward compatibility with Android 4.4 (API level 20) and lower, Vector Asset Studio supports the following XML elements:

<vector>
android:width
android:height
android:viewportWidth
android:viewportHeight
android:alpha
<group>
android:rotation
android:pivotX
android:pivotY
android:scaleX
android:scaleY
android:translateX

Advantages:

  1. Vector drawables scales without losing image quality.
  2. We need only one asset file for multiple vector images.
  3. Vector drawables can reduce the size of our app.
  4. We can import Scalable Vector Graphic (SVG) files into our app project as a drawable resource.
  5. Help us to easily support different Android devices.
Example:
Vector image with the shape of a heart- heart.xml


(Sources- Title Image: www.designplusph.com)

Originally Published on LinkedIn in January 21, 2016.