Sep 29, 2015

Android App Review: Vyomo Beauty Salon Booking

Search & Discover Legendary Salons & Spas Around You in Less Than 2 Minutes. Book the top beauty & wellness professionals around you- hair stylists, tattoo artists, barbers, massage therapists and everything else related to Beauty & wellness.

Design Review

This can be replaced with toast or no internet connection screen. Dialog / Alert box may annoy users.

Alert box for validation is not good UI practice as, it requires extra click for user to close alert box.

This alert box is proper because it confirms some action from the user. If profile pic is important then its better to explain why profile pic is needed?

Another dialog..... :-(
And again dialog... too much dialog in setup or starting up the application will irritate users. Sign Up steps must be simple and easy.

Header Application logo and title "search/ book" are not vertical centre (point 1,2 and 3 in image). "By Service" menu is also not vertical centre (point 6 in image). Un-selected tab "By Salon" don't have tab border. It should be able to give the feel of tab. There should be border on top or colour difference.  "More" option should be indicated separately. It should not be a part of menu (point 4 in image). "Book" button has very small font size. Font size should be appropriate to button size (point 5 in image).

Upto this screen most of the things are in rectangle border, but here search edit text is rounded corner which looks odd. Position of search bar makes entire screen ugly. There should be top spacing between search bar (point 1 in image). Again "Back" is the part of menu option (point 2 in image).

In this screen Un-selected tab has dark background colour which creates design inconsistency. In home screen, "By Salon" tab has transparent background. No description required for point 1 in image.

Left menu padding should be same for all menu items (point 2 in image). Sliding or Hamburger menu should not have back button (point 1 in image). It will confuse the user.

Left padding of cart icon and face care is different. Left and Right sliding menu looks very odd and difficult for user. Right slide menu can be converted into Activity / Screen and provide option in hamburger menu.

Application logo, location and tabs occupies almost half of the screen, which makes very annoying to scroll salon list (point 1 and 2 in image). Salon row design have few problem like name of salon is not highlight because of background image. Background image should be blur. Salon name should have bold font and different colour like dark pink. Components like star rating, address, title and distance are not at proper place and order.

This flow is very confusing for user. Salon detail screen design is very complicated. Back arrow below info logo is confusing (point 1 in image). Up arrow on right side is not highlighted (point 2 in image). Alignment of title "Tatto0 &..." below details are not left alignment (point 3 in image).

Performance Review

Above images has lots of dark red area, which is a sign of very poor performance. When application render a portion of screen multiple times, it displays dark red colour and light red in screen. This is GPU Overdraw benchmark. Read this link for more information about GPU Overdraw

Profile GPU Rendering gives you a quick visual representation of how much time it takes to render the frames of a UI window relative to the 16-ms-per-frame benchmark. Above image has issue in few frame rendering. Read this link for more information

Memory Profile

Application takes 17 MB on splash screen. There could be various reasons for memory allocation. 


In this application there are many security flows ranging from minor to major.

Library, Framework & Services

Following libraries, frameworks and services are integrated in the application.
  1. Bolts-Android -
  2. PagerSlidingTabStrip -
  3. Crashlytics -
  4. Facebook SDK -
  5. Flurry -
  6. Asynchronous Http Client -
  7. Mobile App Tracking -
  8. Paypal SDK -
  9. OKhttp -
  10. Picasso -
  11. -
  12. Twitter's Fabric -
  13. Squareup Okio -
  14. Calligraphy -
In above list, I found strange things. I don't understand why they are using multiple libraries for network operations i.e. Async Http client and Retrofit+okhttp.

Android Manifest Statics

  1. Package Name: com.vyomocp
  2. Version Code: 22
  3. Version Name: 5.1.1-1819727
  4. Support Screen: Any
  5. GCM: Yes
  6. Uses Permission: 18
  7. Uses Feature: 4
  8. Activity: 27
  9. Receiver: 3
  10. Service: 2
  11. Meta Data: 5


Overall I would say it's an average application from technical perspective. Wow factor is missing in Design. Performance is ok, Security need improvement.
Information provided in this article is purely for knowledge sharing purpose. No intension to favour or harm reputation of the application. Insight information of application is provided for knowledge sharing and learning purpose. Owner of the blog don't have any responsibility of how, when and what purpose reader use this information.




continue reading Android App Review: Vyomo Beauty Salon Booking

Sep 23, 2015

Android App Review: First Run C25K Fitness Trainer

Design Review

First Run application design don't have 'Wow' factor but it's also not ugly. You will find inconsistency in many screens. At first, the application will impress you with splash screen and login / signup screen. Sign In / Signup screen's design looks perfect with social login options as well as manual signup and sign in options. You can also use this application without Sign In / Sign Up.
Here is my observation for the design
This screen is part of application. Yes, Entire screen without design. When user select Music folder this screen appear.

Sign Up or Sign In screen. Looks perfect. Application logo and background image are placed perfectly. Nice design to provide Social and manual login options.
Sign Up Dialog. When I looked at this screen first time, I had a question in my mind, Why EditText are rounded corner and Button with square corner? Both looks very odd. When dialog appear cursor blink to Email EditText but keyboard is not visible. Generally, when cursor blinks keyboard should be visible. The height of EditText is larger than button's height. It gives feeling like button is squeezed.

When you click on Sign Up without typing anything, Application display message "Invalid Email ID" in toast. Message text and the way it is displayed, is not professional. There isn't any visual indication for wrong data (email or password). Application displays only Toast messages.

Sign In screen. When you click on Sign Up button, Application will open dialog on same screen but when you click on Sign In button, Application will open new screen / activity without background image. Which gives feeling inconsistency.
When user selects program, above screen appear. "Prepare your run..." message is not vertically centre. Entire screen is blank except this message. It looks ugly.
You can easily recognise that the content display, inside WebView. 1) Back arrow is non standard. 2) Running form label and the arrow image is not properly align. This screens can be improved a lot. There can be three steps wizard with nice designs. Caption text below video can justify.
Inconsistency, Few screen has action bar back button and few screen don't have. Actionbar Title and Sub title is in italic. Point 2 in image, thickness and cap between lines are different. Point 3 player control is too small.

Performance Review

 This is GPU Overdraw benchmark, It's good that only centre section is red. Read this link for more information about GPU Overdraw
Profile GPU Rendering gives you a quick visual representation of how much time it takes to render the frames of a UI window relative to the 16-ms-per-frame benchmark. Above image has issue in few frame rendering. Read this link for more information

Memory Profile

This application is memory hungry, Above screen shot illustrate memory allocation of the application on start. 58 MB Heap Size and 42 MB allocation is huge. Application may have issue with lower end devices. 33 MB is allocated as 1-byte array. It might happen that application persist high resolution images in memory.


Security is always major flow in Android application. In this application there are many security flows ranging from minor to serious.

Library, Framework & Services

Following libraries, frameworks and services are integrated in the application.
  1. AChart Engine -
  2. Amazon AWS -
  3. AppVirality -
  4. Facebook SDK -
  5. Flurry -
  6. Mint Splunk -
  7. Twitter4j -
  8. Bolts-Android -
  9. Google Analytics -

Android Manifest Statics

  1. Package Name: com.firstrun.prototyze
  2. Version Code: 21
  3. Version Name: 5.0.1-1624448
  4. Support Screen: Any
  5. GCM: Yes
  6. User Permission: 17
  7. Activity: 23
  8. Receiver: 6
  9. Service: 3
  10. Meta Data: 5


Overall I would say it's an average application from technical perspective. Wow factor is missing in Design. Performance is good, Security need drastic improvement.


The information provided in this article is purely for knowledge sharing purpose. No intension to favour or harm reputation of the application. Insight information of application is provided for knowledge sharing and learning purpose. Owner of the blog don't have any responsibility of how, when and what purpose reader use this information.


continue reading Android App Review: First Run C25K Fitness Trainer

Go Language For Java Developer Part-5


Variable: A variable is a storage location for holding a value. The set of permissible values is determined by the variable's type.

Java Variable

Java language has primitive type and objects, both have different syntax to declare a variable
Primitive type variable
int a
String b
float c
Object type variable
Animal a = new Animal()
Student s = new Student()
Java is object oriented language so that we can have access modifier for variable declaration
private int a
public String b
protected float c
private Animal a 
In Java we can declare variable at many places like Local variable, Parameters, Class level, Instance variable.
Variable Naming
  1. Variable names are case-sensitive
  2. An unlimited-length sequence of Unicode letters and digits
  3. Beginning with a letter, the dollar sign "$", or the underscore character "_".
  4. No special characters allowd as identifier of variable
  5. We can't use reserved keywords

Go Variable

Variables in Go are created by first using the 'var' keyword, then specifying the variable name, the type and finally assigning a value to the variable.
package main
import "fmt"
func main() {
    var x int  // Line 1
    x = 10 // Line 2
    var y string = "Hello Go!" // Line 3
In Line 1, var indicate it's variable, x is name of variable and int is type of variable. In Line 2, we are assigning value in x variable. In Line 3, we have declare string variable and assign in single line
Since creating a new variable with a starting value is so common Go also supports a shorter statement:
y := "Hello Go!"
With above shorter syntax Go compiler will automatically identify that y is variable of type string and value is "Hello Go!".
Declare multiple variable at same time
var (
    name string
    age int
    location string
Go is not object oriented language so we don't have access modifier like we have in Java. In Go language, We have two place to declare variables 1. Inside Function 2. Out Side Function.
Function / Local Variable
package main
import "fmt"
func main(){
    var x int = 10  
Global Variable: Any function can access y variable, x is local variable only accessible inside main function
package main
import "fmt"
var y int =10
func main(){
    var x int = 10
func hello(){
Variable Name
  1. Name must be start with letter
  2. Name may contain letter, number and underscore (_)
  3. Name is character sensetive Num and num consider as two different variable

continue reading Go Language For Java Developer Part-5

Go Language For Java Developer Part-4


Following keywords are reserved and may not be used as identifiers.

Java Language Keywords

abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while

Go Language Keywords

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

There are few obvious keywords like break, case, if, for, etc but few keywords are new in Go Language.
  1. func: To declare function
  2. interface: To declare interface (It's different than Java's interface)
  3. defer: something like finalise method in Java
  4. go: To create thread
  5. chan: To do synchronised between threads
  6. var: To declare variable
  7. range: It's like iterator in Java

continue reading Go Language For Java Developer Part-4

Go Language For Java Developer Part-3

Java Language: Data Type

In Java, We have premitive data types and objects. Java support 8 premitive data types for different purpose.
Data Type Value
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false

Go Language: Type

Go language is statically typed programming language. It means that variable always has specific type that can't be changed. Go language data type can be divided in main three categories.
  1. Boolean: A boolean type represents the set of Boolean truth values denoted by the predeclared constants true and false. The predeclared boolean type is bool.
  2. Numeric: A numeric type represents sets of integer or floating-point values. The predeclared architecture-independent numeric types are: int, float32, float64, etc
  3. String: A string type represents the set of string values. A string value is a (possibly empty) sequence of bytes. Strings are immutable: once created, it is impossible to change the contents of a string. The predeclared string type is string.
Data Type Default Value Range
bool false true or false
int 0 either int32 or int64
int8 0 signed 16-bit integers (-32768 to 32767)
int16 0 signed 16-bit integers (-32768 to 32767)
int32 0 signed 32-bit integers (-2147483648 to 2147483647)
int64 0 signed 64-bit integers (-9223372036854775808 to 9223372036854775807)
uint 0 either 32 or 64 bits
uint8 0 unsigned 8-bit integers (0 to 255)
uint16 0 unsigned 16-bit integers (0 to 65535)
uint32 0 unsigned 32-bit integers (0 to 4294967295)
uint64 0 unsigned 64-bit integers (0 to 18446744073709551615)
float32 0 IEEE-754 32-bit floating-point numbers
float64 0 IEEE-754 64-bit floating-point numbers


Next article we will larn about variable in Go Language

continue reading Go Language For Java Developer Part-3

Go Language For Java Developer Part-2

Normally first program you write in any programming language is "Hello World". Hello World is simple program which print "Hello Word" text on console / screen.

Java: Hello World

As Java Developer you can easily understand following code. No need to explain. correct ?

package com.kpbird.gotutorial; 
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World");        
To compile & execute above code, you need to write following two commands in the Terminal.
java Main

Go: Hello World

Create directory where you need to keep the code. Create file named "main.go" and write following code
package main  // line 1
import "fmt" // line 2
func main() { // line 3
    fmt.Println("Hello World") // line 4
} // line 5

To execute above code, you need to write following command in the Terminal
go run main.go

You should see Hello World in terminal. If you don't see Hello World displayed then you may have mistake in typing program. The Go compiler will give you hint about where the mistake lies.

Understand Go : Hello Word program

1. Package Name (Line 1): Go program start with package declaration. Every Go program must start with package declaration. Package declaration is used to organise source code. In Java we follow relative path but with "." (dot) format like com.kpbird.gotutorial represent physical path com/kpbird/gotutorial. While in Go language package name represent only current folder name "gotutorial". Go language support two type of program 1. Go Libraries 2. Go Executable. Package main is a way to tell compiler that this Go program is executable. When you declare "package main" you don't need to create folder / directory called "main".

2. Import (Line 2): import keyword is used to include code from other package or library. The "fmt" package is short form of Format. It is used to format input and output. In Java, we don't need to write java.lang package explicitly compiler will do it behalf of us.

3. fund main() (Line 3): Functions are building block of Go language. All functions start with keywords "func". func followed by name of function in our case "main" is the name of function. If function takes any argument we need to write in parentheses. Main is special function because main gets called when we execute Go program. It's like public static void main() in Java.

4. fmt.Println (Line 4): Line 4 has three component 1. fmt package name. 2. Println function name 3. String argument "Hello World". In Java, we use System.out.println().

Java vs Go

We should not compare both languages because both are different. Go Language is functional features language in which functions are first-class citizen. Java Language is Object Oriented language in which Class / Object are first-class citizen.

To execute Java program, first we need to compile using "javac" command, after that we need to use "java" command execute a program.
To execute Go program, we just need to write Go run main.go. Single command will compile and execute program. To build program Go language has command build. It will generate native executable file as per the platform, that you can directly execute.
$Go build main.go 

In Go Language don't have semi-colon (;) to end the statement. It means that you can't write two statement in single line.
In Java Language, As we have semi-colon (;) to end the statement we can write entire code in single line.

Next article we will learn about data types in Go Language.

continue reading Go Language For Java Developer Part-2

Go Language For Java Developer Part-1

Go language is normally known as golang. It's general purpose programming language developed at Google in 2007 by three Google employees namely Robert Griesemer, Rob Pike, and Ken Thompson. In November 2008 Google had announced Go Language to public and made it open source.
Go language compiler is available for the Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Plan 9, and Microsoft Windows operating systems and the i386, amd64, ARM and IBM POWER processor architectures.
Beginner Go language developer should visit following links.
  1. Go Language
  2. Go Language Source
  3. Go Language FAQ
  4. Go Google+ Community
  5. Go Language Resource
  6. Go Language Patterns
  7. Go Newsletter
  8. Why Go is not good?
As you are reading this article, It means I can assume that you know about Go Language and it's advantage and shortcoming. As the title suggest it's for Java developers, so I can also assume that you have knowledge of core Java.
Install Go Language
  1. Download installer binary / package / installer as per your OS
  3. Current version is go 1.4.2
  4. Run package to install Go language
  5. After setup completes, you need to set environment variable to go language
  6. In case of OX, Add /usr/local/go/bin to the PATH environment variable. You can do this by adding this line to your /etc/profile (for a system-wide installation) or $HOME/.bash_profile:
    export PATH=$PATH:/usr/local/go/bin
  7. To verify installation, you can execute following command
    $go version go version go1.4.2 darwin/amd64
Go Language IDE Officially, Go Language don't have any IDE but there are many open source 3rd party IDEs / Plugins are available. If you are familiar with IntelliJ or Eclipse then you can install plug-in for Go Language. For more details, please visit following link
Now, you have enough details to jump start coding. In next article I will cover fundamentals and syntax of Go Language.
continue reading Go Language For Java Developer Part-1

Android M API Changes

Andorid M Preview Features
  • App Linking
  • Auto Backup for Apps
  • Authentication
  • Fingerprint Authentication
  • Direct Share
  • Voice Interactions
  • Assist API
  • Notifications
  • Bluetooth Stylus Support
  • Improved Bluetooth Low Energy Scanning
  • Hotspot 2.0 Release 1 Support
  • 4K Display Mode
  • Themeable ColorStateLists
  • Audio Features
  • Video Features
  • Camera Features
  • Flashlight API
  • Reprocessing API
  • Android for Work Features
The overall difference between API Levels 22 and mnc-preview-1 is approximately 11.82%.
Type Additions Changes Removals Total
Packages 4 52 28 84
Classes and Interfaces 121 236 27 384
Constructors 3 0 2 5
Methods 510 123 28 661
Fields 403 81 39 523
Total 1041 492 124 1657
continue reading Android M API Changes

Android Simple SyncAdapter

SyncAdapter is standard and preferred way to sync application data with server, cloud or MBaaS backend. SyncAdapter is the most efficient way to make your application update to date. It will help you to present fresh data when user open application. You can increase user experience by not making wait to user till you call web service and fetch the data. Almost all popular android application use SyncAdapter, you check from Setting -> Account, you will find accounts i.e. google, twitter, facebook, etc.. It means these application use SyncAdapter.

Why SyncAdapter?
As Lazy developer you might think why should I put an effort to write SyncAdapter. SyncAdapter is complex!!, I can directly make network call when required, and more...
Let’s compare custom sync with SyncAdapter
Custom Sync Sync Adapter
Network Availability - manually Network Availability - Automatically
Pending Queue - manually Pending Queue - Automatically
Refresh on Network - manually Refresh on Network - Automatically
Periodic Update - manually Periodic Update - Automatically
Sync Setting - manually Sync Setting - Automatically
Network Bandwidth - manually Network Bandwidth - Automatically
Battery Efficient - ?? Depend on you    Battery Efficient - Yes
And many more And many more
I hope above table is sufficient to convince to create sync adapter demo.

Concepts are very important to read before jump to the demo. Many developer don’t read API document or understand concept and directly start sample and try to learn from it but I suggest to read concept first before open your IDE and read the code. SyncAdapter has mainly two section 1. Account management 2. Sync Adapter. If your app requires user credentials or server login, you can optionally integrate account management and authentication into your data transfer.
SyncAdapter has following sections.
  1. Sqlite Database: I guess you all are master of Sqlite database, SyncAdapter will store data in Sqlite using Content Provider. You may choose other options as well.
  2. Content Provider: Act as bridge between your database and SyncAdapter. To expose your data in Rest like URL pattern.
  3. AbstractAccountAuthenticator: As developer we need to extend this class and override methods, It is primarily used to manage authentication and account management. To use SyncAdapter you must have custom account. This class is responsible to create account, maintain auth token and various things related to authentication.
  4. Authenticator Service: This is normal Service, which we are using daily. The only difference is that this service create object of AbstractAccountAuthenticator class and bind.
  5. AbstractThreadedSyncAdapter: As developer we need to extend this class and override methods. . This is the main piece of SyncAdapter puzzle. It has method onPerformSync, in which we need to write our code.
  6. Sync Service: This is normal Service. It use to create object of AbstractThreadedSyncAdapter class and bind.
  7. Authenticator.xml: You need to create this file under res/xml/ folder. This file is required to bind your authenticator component into the sync adapter and account frameworks, you need to provide these framework with metadata that describes the component. You can choose your own file name.
  8. SyncAdapter.xml: You need to create this file under res/xml/ folder. The metadata specifies the account type you've created for your sync adapter, declares a content provider authority associated with your app.
  9. AndroidManifast.xml: You must register Sync Service, Authenticator service and few other things in AndroidManifast file in order to work SyncAdapter, This is the final piece of puzzle.
Following diagram depicted relationship between all different components of Sync Adapter. Account Manager and Sync Manager are provided by Android OS, except these two thing everything else you need to implement.

Coding - Let’s jump to the code
I am taking simple example ToDo list sync with (Parse is BaaS service, If you want to know more about BaaS or MBaaS Service, please refer this article).
You will find many sync adapter example with “AccountAuthenticatorActivity”, In this situation you need to develop your login screen by extending “AccountAuthenticatorActivity”, but this might not be case in every project. In few situation you might want to use sync adapter without login / registration. In this demo I will explain how to create ToDo list with as backend and without login / registration.
When user start application, It will fetch primary Gmail account and create Parse User through coding. For simplicity I will sync ToDo list only single direction, from to local, you can have bi-directional sync based on need.
  1. Open Android Studio
  2. Create Project Name “SimpleSyncAdapter”
    • Minimum SDK: 4.0
    • Package Name: com.kpbird.simplesyncadapter
  3. Create Blank Activity
  4. Download Parse Android SDK (, Copy Parse.jar in lib folder and click “Sync Project with Gradle File” button in toolbar.
  5. We will create following files
Sr File Purpose
1 This class will hold authentication related information
2 This class will provide object of SimpleAuthenticator class
3 This class is responsible for database operation
4 This will initialize Parse library and fetch default Gmail account
5 This class ir responsible for Sync, Android OS will call onPerformSync method, we need to write our sync code in onPerformSync method.
6 This will provide object of SimpleSyncAdapter to the sync framework
7 This will hold all required constants
8 This will have common methods
9 authenticator.xml Meta information of Authentication
10 sync_adapter.xml Meta information of Sync Adapter

Note: Please update API key before execute sample


continue reading Android Simple SyncAdapter

How Smart Watch can change your life

_"A smartwatch (or smart watch) is a computerized wristwatch with functionality that is enhanced beyond timekeeping, and is often comparable to a personal digital assistant (PDA) device" - _Wikipedia

Avi Greengart, a consumer device analyst, predicted that 2013 may be "the year of Smart watch". This prediction turned out to be true as majority of smart phone manufacturer are focusing on smart watch and wearable. Many of them have already released smart watch and others have near future release plans. It is forecasted that 350 million smart watches will ship by 20201.

Smart watch shipments 2013-2020 (in millions)
There are numerous day-to-day use cases that can be made simple yet secure with usage of smart watch. Let's have quick look, how smart watch can make your life easy.
  1. Smart Watch as ID card: Do you forget to carry ID card every morning? NFC based smart watch can work as your ID card. Enterprise can do away with hassle of issuing separate ID card to employees having smart watch.
  2. Smart Watch as Wallet: Do you feel your wallet is bulky with credit cards and other useless stuff? Smart watch can replace your need to carry credit cards. Smart Watch and "Card on File" concept can replace need of carrying plastic card in your wallet.
  3. Smart Watch as Health monitor: Are you a health geek? Or having health issue which requires continuous monitoring? A smart watch with sensors like Heart Rate, Body Temperature, Accelerometer, etc., will collect your health data and upload to cloud for 24x7 care.
  4. Smart Watch as Remote control: Are you confused with different remotes for different systems like home garage door, television, Set Top Box etc.? Smart Watch with Bluetooth can work as remote for your garage, television etc.
  5. Smart Watch as Security Token: Do you need to carry RSA Token to access highly secure software or physical location (like Server Room). Smart watch can work as RSA token, it can generate software RSA key. Or it can add 3rd factor of authentication.
  6. Smart Watch as SOS Device: Smart watch knows when you could be in danger and sends for help. Smart watch contains a gyroscope and an accelerometer, that detect physical activity or aggressive movements, and mobile app send SMS and email to configured emergency contacts with your current location.
  7. Smart Watch as Notification/Reminder Device: This is prime feature of smart watch as of now. It will display different notification from smart phone and allow quick action. With smart watch you will never miss important things like breaking news, flight alerts, meeting calls, reminders, weather alerts.
Smart Watch will change our life in many ways. It can become your identity for office access, wallet for payment, car door keys and much more…Vision is smart watch will replace your need of carrying disparate accessibility tokens including a smart phone.

continue reading How Smart Watch can change your life

Wearable technology to monitor Parkinson’s disease

Parkinson's disease is a degenerative disorder of central nervous system. It's more common in older people after the age of 60. It is sometime call idiopathic because it has not external identifiable cause. The early symptoms of disease are shaking, difficulty with walking, rigidity, bradykinesia (slowness of movements), postural instability, freezing and loss a sense of smell. In later stage when disease increase, patient may have behavior and thinking issues. According to the National Parkinson’s Foundation survey in 2010 [1], nearly 1 million people in the U.S. are living with Parkinson’s disease, with between 50,000 and 60,000 new cases diagnosed each year. Medication costs for an individual person with Parkinson's disease average $2,500 a year [2].

There is not biological markers to diagnose Parkinson’s disease. Researchers are working hard to identify the cause of disease.
The physicians are use following techniques for diagnosis.
  1. The doctor tries to observe if patient’s expression is animated.
  2. Patient’s arms are observed for tremor, which is present either when they are at rest, or extended.
  3. Is there stiffness in patient’s limbs or neck?
  4. Can patient rise from a chair easily?
  5. Do patient walk normally or with short steps, and symmetrically swing their arms? The doctor will pull patient backwards.
  6. How quickly can patient regain his/her balance?
Above techniques are traditional and subjective, the result may vary as per doctor's observation. These techniques have not changed since Dr. James Parkinson suggested before 200 years (1817). There is no cure for Parkinson’s, but the drug levadopa and other medications can control symptoms for years together. In addition to above techniques physician suggest a patient to undergo PET Scan, CT Scan and MRI to check other effects on body. Accurate and objective diagnosis is primary challenge for physician.

The primary symptoms of Parkinson's disease is Moto symptoms - Shaking or tremor and walking difficulty. Latest technical innovation in sensors and wearable has potential to transform current practice of observing & capturing effect of Moto symptoms on patients. With the wearable device monitoring, symptoms can be measured objectively. For instance, a patient might inform the doctor that he felt tremor for several minutes, whereas actual duration would have been few seconds. With these wearable device doctors can get precise measurements about the "frequency and severity" of symptoms.
There are multifold benefits of using wearable to monitor patients.
  1. Automatically capture data without any effort made by patient. Real-time analysis.
  2. Data will be store in cloud to provide accessibility anywhere, anytime.
  3. Doctors can diagnosis multiple patient at a same time with cloud based system.
  4. Patient need not visit doctor for routine observation.
  5. Data will be helpful for research.
  6. Data will be used to monitor effect of new drug.
  7. Data will be used for progression of disease and behavior pattern.
Wearable has potential to revolutionize diagnosis technique for Parkinson's disease. Using wearable technology, researchers can actually monitor and measurable Moto symptoms. It will help to find new drugs, can save thousands of dollars and most importantly researchers will find cause and treatment of Parkinson's disease to save patient's life.

continue reading Wearable technology to monitor Parkinson’s disease

Monolithic vs MicroService Architecture

Monolithic architecture is something that build from single piece of material, historically from rock. Monolith term normally use for object made from single large piece of material.” - Non-Technical Definition

“Monolithic application has single code base with multiple modules. Modules are divided as either for business features or technical features. It has single build system which build entire application and/or dependency. It also has single executable or deployable binary” – Technical Definition

Industry is using this approach since long to develop enterprise application. Many companies have invested years to build enterprise application with monolithic approach. Sometime it also called multi-tier architecture because monolithic applications are divided in three or more layers or tire i.e. presentation, business, database, application, etc. It was a time of browser evaluation. Enterprise was focused on desktop/laptop devices with Web Browser as client, which doesn't require to expose data with API, mainly because browsers can understand only HTML, CSS and JavaScript. Although, Enterprise was using Enterprise Data Bus(EDB), Electronic Data Interchange(EDI) , Enterprise Data Exchange (EDX) and many more ( data exchange format to interact with each other in back-end. Monolithic architecture need of enterprises' at that time.

Suddenly, entire paradigm shift from browser / desktop to mobile / smart devices. Enterprise need to serve data to different devices and form factors (smart phone, tablet, handheld, etc). Smart phone become always available, always on and personal device for everyone, which demand information anytime, anywhere, on fingertip. Mobile application is nearly useless without internet connectivity and backend services. Now is a time for mobile first, every enterprises are looking forward to develop mobile application before web. To developer mobile application enterprise need to expose data using API (REST or SOAP) because legacy data exchange format was not compatible with mobile application. With increasing demand of mobile application force to change back-end architecture. This is prime force behind migrating monolithic architecture to microservice architecture.

Microservice architecture is an approach of building large enterprise application with multiple small unit called service, each service develop, deploy and test individually. Each service intercommunicate with a common communication protocol like REST web service with JSON. Each service run individually either in single machine or different machine but they execute its own separate process. Each service may have own database or storage system or they can share common database or storage system. Microservice is all about distribute or break application in small chunks.

Microservice is more than code and structure. It’s way of working. Its culture in a way, every developer or team own some part of large application. Microservice is not ultimate solution for every application but it’s surely solution for large enterprise application. Microservice has some shortfalls like increase lot of operations overhead, DevOps skills required, complex to manage because of distributed system, bug tracking become challenging.

Difficulties with monolithic application, when it grow
  • Large monolithic code base makes complicated to understand, especially for new developer
  • Scaling become challenging
  • Continuously integration / deployment become complex and time consuming. You may require dedicated team for build and deploy
  • Overloaded IDE, Large code base makes IDE slow, build time increase.
  • Extremely difficult to change technology or language or framework because everything is tightly coupled and depend up on each other.
 Privilege with Microservice architecture, when it grow
  • Each microservice is small and focused on a specific feature / business requirement.
  • Microservice can be developed independently by small team of developers (normally 2 to 5 developers).
  • Microservice is loosely coupled, means services are independent, in terms of development and deployment both.
  • Microservice can be developed using different programming language (Personally I don't suggest to do it).
  • Microservice allows easy and flexible way to integrate automatic deployment with Continuous Integration tools (for e.g: Jenkins, Hudson, bamboo etc..). The productivity of a new team member will be quick enough.
  • Microservice allows you to take advantage of emerging and latest technologies (framework, programming language, programming practice, etc.).
  • Microservice is easy to scale based on demand. In a nutshell, monolithic vs microservice architecture is like elephant vs ant approach. What you wants to build a giant system like elephant or army of ant, small, fast and effective.
People to follow
Article & Presentation
Case Studies

continue reading Monolithic vs MicroService Architecture