Discover How Your Competitors are Benefiting from Machine Learning

Gartner puts Machine Learning at the top of the 2016 Hype Cycle interpreting that it is extremely valuable to industries over the next decade. There is no doubt of that as it is enabling enterprises to augment their top-line growth by increasing customer satisfaction. Several companies are adopting it to find value in the colossal amounts of data they generate while saving significant time and money.

machine learning

Heretofore, machine learning has opened doors for powerful search capabilities on the web, self-driving cars, speech recognition, etc. And, of course, there is a lot more to come!

Let’s see how your peers are deriving profits by incorporating machine learning into their business processes.

Finding value in the user-generated content

The user-generated content is often appalling and is a way worse than you think. It is ample with obscenity, misspellings, or flat-out wrong information. Machine learning models identify the best and worst content and filter out the bad and provide the good without the need of a real person to tag each bit of content.

In fact, this was one of the earliest problems resolved by machine learning, which is nothing but spam emails. Those days, email providers used to filter out the spam using rule-based techniques. However, the advent of machine learning helped in identifying and eradicating spam efficiently. Now, we hardly see spam in our inbox.

Here are few companies that adopted machine learning models to find value in their user-generated content.

  • Yelp sorts its user-upload photos through machine learning
  • Disqus eradicates its spammy content using machine learning
  • Pinterest uses machine learning to show more interesting content to its customers
  • NextDoor employs machine learning to sort through content on their message boards

Accelerated product search results

As a search engine company, Google always delivers reliable results when a user searches for a specific keyword. It indexes the enormous database and pulls out results that match the keyword. Machine learning helps Google in finding the most relevant matching result within a quick span of time.

Just like Google, other businesses like Apple, Intuit, Home Depot, etc., also incorporated machine learning for smart search results. Even the successful e-commerce startups such as Lyst, Trunk Archive, Rich Relevance, and Edgecase utilize machine learning to display high-quality results when their users are browsing for products.

Enhanced Customer Engagement

Machine learning assists entrepreneurs in streamlining their business processes across various aspects. The communication barrier between companies and customers is also getting curtailed in recent years with the surge of machine learning. Earlier, customers used to self-select an issue and fill out endless contact form fields to reach the organization’s support team. But now, the contact forms are shortened as machine learning peek at the substance of a request and direct it to the right place for prompt response with minimal information. Say, for example, a sales inquiry will be routed to the sales team or a complaint ends up instantly in customer service department. This will not only save company’s significant time and money but also makes sure that issue gets prioritized and solved as fast as possible.

Predicting Customer Behavior

Understanding customer behavior is one of the complex activities of a business. But with the effective use of machine learning, predicting the customer behavior pattern is quick and easy even when there is a large number of customer base. These patterns help companies to constantly review and modify their marketing strategies and assist them in understanding which product/service have the highest propensity to provoke desired outcomes.

Several enterprises are using social media platforms to receive any complaints or feedback from the customers after the release of any product/service. Machine learning is helping them to pull out the relevant ones out of the millions of messages.

There are diverse areas where machine learning can do wonders. It will completely change the way organizations function enabling to make faster and better business decisions. Machine learning does not just revolve around self-driving or flying cars; it penetrates into every business we do and every website we interact. And, those who don’t adapt machine learning will surely get left behind.

FacebookTwitterGoogle+Share
Xamarin Application Development

Xamarin is cross-platform development software that simplifies mobile application creation. Xamarin tools are used to write native Android, iOS, and Windows apps with native user interfaces and share code across multiple platforms including Windows and macOS.

xamarin

Here, I am going to explain how to create Xamarin app with Xamarin Studio and my experience with Xamarin as a Unity developer.

Requirements to develop a Mac OS X application with Xamarin.Mac:

  • A Mac computer running Mac OS X Yosemite (10.10) or greater
  • Xcode 7 and above versions (although it is recommended to install the latest stable version from the App Store)
  • Latest version of Xamarin.Mac and Xamarin Studio

To edit your first XAML file, use Visual Studio or Xamarin Studio to create a new Xamarin.Forms solution.

  • In Xamarin Studio, select File > New Solution from the menu

xamarin

  • In the New Solution dialog, select Cross Platform > App at the left
  • Select Blank Xamarin.Forms App from the template list

4

Blank Forms is the standard template with three projects: iOS, Android and third project (the shared user interface can be built with XAML or C#).

  • Configure your blank form app – Add app name, Organisation Identifier, Target Platform, and Shared Code

 xamarin

 

  • Configure your new Blank Forms App – Enter Project Name, Solution Name, and Location and save the project
  • Click the Create button

xamarin 

Now, Xamarin Studio will create the new Xamarin app.

My Experience with Xamarin

As a unity developer, I would recommend Xamarin is good for 2D applications. However, we need strong knowledge about XAML and basic coding understanding. I have used XAML for UI designing and C# for the functionalities of the application and developed a small demo project during my research. My application contains few screens (Login and Registration screens) which basically include Navigation functionality and UI designing.

Major things to take care before developing Xamarin application is to have basic knowledge about

  • XAML
  • How to use the layout and in which cases to use it?
  • Configuration of Android and IOS

In Xamarin, Navigation of the screen is simpler as compared to Unity 3D as there is less usage of animation. I resolved UI designing issues by using proper layouts. There are different types of layout in XAML such as Relative, Absolute layout, etc. I would suggest using relative layout for Applications which includes both horizontal and vertical element alignment.

Challenges in Xamarin App Development

Xamarin is a bit time consuming when it comes to UI designing of the screens because everything is based on the XAML (Coding) which is one of the drawbacks for the Xamarin learners. Also, we need unique UI code for each platform since the native widgets interact differently. This creates minors alignment issues and UI element size issues.

One of the drawbacks is debugging of crash logs, which is very complicated in mac.

Conclusion

With Xamarin, expect a native user experience in the development. With the help of native API’s, Xamarin helps in developing excellent user experience and user interface and also delivers high-performance apps.

From the user’s perspective, an app development that can create apps that ‘fit’ the standard design guidelines on different platforms and doesn’t allow the use of native UI controllers brings about the best user experience. This is something Xamarin development can guarantee.

Thinking of just creating a mobile app that goes from one screen to another, using menu buttons, I feel Xamarin is a better option to do so. You can develop an entire application, but not the graphics that are presented. Xamarin has Cross-platform support and it has its own bugs.

Well, in my opinion, Xamarin is pretty good for 2D applications. Depending on the project and requirements, I would be happy to use Xamarin but there may be other situations in which I really think Unity3D will be a better choice.

Test cases and workflow for in-app purchase of android app

 IAP Testing

In this blog, I would like to share android in-app product types, workflow of in-app purchases, and the set up of the test releases by a developer. These 3 things are essential for a tester to start in-app purchase testing.

In-App Product Types

The android in-app billing supports the managed in-app products and subscriptions.

Managed product: Once you purchase a product, that item cannot be purchased again until you consume the item, by sending consumption to Google play.

Subscriptions: This product type offers sell features, content, and services to users from the app with recurring weekly or monthly or annual billing.

In-app purchase workflow and settings for releasing apps to test:

The Google Play Console provides several tools to test the in-app billing. There are three stages of app deployment in android in-app purchase:

  1. Alpha
  2. Beta
  3. Production

Alpha and Beta Release (Sandbox account):

Publish app directly to Google Play’s alpha and beta release channels for testing purpose. The app will be available only to the tester who can download and install the app to the device from Play Store.

To release a test app, first, the developer should create and add test-user Gmail accounts to ‘Tester List’ group in Alpha/Beta release section.

Both the alpha/beta release is same; the only difference is adding the number of tester accounts.

  • Alpha test – we can create a small group of testers.
  • Beta test – we can create up to 50 lists per track and can add up to 2000 users in each track.

Testing in-app purchase (In-app billing – Subscription type)

To test in-app purchase, we need to publish the app to an Alpha or Beta channel in Google Play. You can choose any user to be a test account and any user of test account can make test purchases with any available payment methods, without any actual charges to their accounts.

First, the developer has to upload and publish in-app products in play console before publishing the APK itself. Then, add user account ID (Gmail ID) to License testing section in the developer console and we can add up to 400 test-user accounts to test in-app purchase products.

Steps to add: Login to developer console and Go to Settings –> Accounts details then add the addresses to License Testing field.

Note: The address should belong to Google account. It will not accept other accounts to add as license tester.

Once you add the users as license tester accounts and saved the changes, within 15 minutes those users can make a test purchase of your in-app products. After publishing the app, the tester needs to opt-in the alpha/beta release of the app using the provided opt-in URL before making test purchases. In this case, the developer will provide an opt-in link to the test users.

The opt-in URL will generate once the developer has created and added the license test users in the license section. Before that, the developer will send an invitation to users to become a part of tester group and then copy and send generated “opt-in URL” to all test-user accounts.

Once test-users get authorized test access, they can make a purchase without any actual charges. After all the processes have completed, the app will be available in tester’s Play Store who were all added as the Alpha/Beta tester.

Test purchase is auto-renewable on daily basis for any actual duration. The app will automatically renew every day until you cancel the purchase.

Important note: Licensed account must be on the user’s android device. If the device has more than one account, the purchase will be made with the account that downloaded the app. If none of the accounts have downloaded the app, the purchase is made with the first account. Users can confirm the account that is making a purchase by expanding the purchase dialog.

Steps to start an in-app purchase (Subscription) test:

  1. The user will receive an invitation to become an Alpha/Beta tester. Click on ‘Become a Tester’ button in the mail to be a part of the tester group.
  2. Later, the tester will get detailed mail along with opt-in URL link of test application from Google Play Console.
  3. Click on ‘opt-in URL.’ It will redirect to your Play Store app and shows test app with all the information.
  4. You can download and install the app to your phone from Play Store using licensed tester account.
  5. To add payment methods for purchasing the app, select Slider Menu in Google play store –> choose Account option –> Select Payment methods –>  then add your valid international Credit/Debit Card or Net banking detail along with your name and address.
  6. Click on Save in the popup window.
  7. The Payment method will be successfully saved. If you did not add your Payment method, it will ask the card details while doing the purchase.
  8. Once the payment details are successfully added, an amount of ₹50.00 will be debited from your account for Debit/Credit card verification but after few minutes, the amount will be credit back to your account. It will be debited while adding the card detail only. It will not debit while subscribing to the app (If you are a licensed test-user).
  9. Next, you can start testing subscription function in your app
  10. The following message will be displayed on Google popup when you make a payment. “This is test subscription. It will recur daily. You will not be charged.”
  11. You will get a receipt for your purchase order from Google Play Store on successful purchase.
  12. The subscription will auto-renew and send email every day until you unsubscribe the purchase.

Test Cases:

  1. Pricing info should be displayed based on region-specific currency and needs to verify whether the mentioned price has tax included or excluded.
  2. Span time of billing period and description about your subscription should be shown as per requirement.
  3. To verify, the app will deduct given price while purchasing the subscription.
  4. Services or Features should be accessible after successful purchase.
  5. Check whether the purchase auto-renews in the specified duration because it should be continuously renewing the purchase until you cancel the purchase.
  6. Check whether the subscription is expired once the specific subscription period is over. The subscription will expire only if the user canceled auto-renewal or subscription (Auto-renewable product).
  7. Check whether the app is expired on time and make sure that the users should not access purchasable content or features (Non-auto renewable product).
  8. Subscription features should be automatically restored while re-install/updating the app. If it is a Non-consumable product, the app should have restore button for restoring the purchases.
  9. Use the same purchase id to multiple devices and verify whether the app has subscribed state.
  10. Use different accounts (ID doesn’t have a subscription) to Google Play and install the app and verify that the app has Un-subscribed state.
  11. Subscription features should continue to users after canceling the auto-renewal or subscription and until it expires.
  12. Check the status of in-app purchase when users purchase while there is no network on the device. ‘No internet connection’ should be shown when the user tries to purchase a product and while accessing purchasable features.
  13. Once the network connection comes back, check the status of previously attempted purchase at that time of network failure.
  14. The app should validate the purchases on the update
  15. Check the subscribe function of product that was already purchased. It should not allow purchase again.
  16. Verify that the users get purchase receipt from Google play until they cancel the subscription.

 

Understanding Business Intelligence and Data Warehouse

Business Intelligence and Data Warehouse (BI/DW) are two separate but closely linked technologies that are crucial to the success of any large or mid-size business. The insights derived from these systems are vital for an organization as it helps in revenue enhancement, cost reduction, and adroit decision making.

Let’s understand what is Business Intelligence, Data Warehouse (DW), and how they are related.

Business Intelligence (BI)

Interpreting large volume of data often throws up challenges to the enterprises. However, BI can help companies with the easy interpretation of this big data, renders actionable information to end users and supports them in making more informed business decisions.

BI encompasses the set of strategies, technologies, applications, data, and processes used by an organization and supports in data analysis, demonstration, and propagation of business information. BI persuades enterprises to make effective business operational decisions such as product positioning and pricing and strategic decisions like goals, priorities, and directions at the broadest level. BI combines the external data derived from the market with the internal data obtained from the company sources (financial and operational data) and creates an “intelligence” that cannot be reaped from any singular set of data.

Data Warehouse (DW)

Data storage and management is an important managerial activity in any organization today and have become significant for rational decision making. A DW acts as a central repository system where an enterprise stores all its data (from one or more sources) in one place. DW helps industries in reporting and data analysis from the current and historical data stored, and hence it is considered as a core component of Business Intelligence.

Usually, data streams from online transaction processing database into a data warehouse on a daily, weekly, or monthly basis.

The process flow in data warehouse includes

  • Extract data from source systems and upload to DW
  • Data Cleansing and Transformation
  • Archiving the data
  • Steering the data to appropriate data sources

This whole process of extracting data and loading it to DW is generally called ETL (extraction, transformation, and loading).

Benefits of a Data Warehouse

  • Enhance business intelligence with effective strategic, tactical, and operational insights
  • DW contains a copy of analytical data that expedite decision making
  • The data cleansing promises the data quality before it is used for reporting
  • Integrate data from multiple data sources and make it accessible from one place.
  • Easier and more efficient decision-support query writing
  • Enable decision-makers and business users to have timely access to the data from different sources.
  • Stores large volumes of historical data which helps in analyzing different time periods and trends that aid in making future predictions
  • Restructures the data and deliver excellent query performance even for complex analytic queries without impacting the day-to-day transactions

BI/DW

BI/DW implementation

Most business intelligence applications use data collected from a data warehouse, and the concepts of BI and DW together known as BI/DW. Data warehousing helps in achieving a successful BI program by facilitating several key aspects of reporting and data analytics.

Augmented Reality Vs. Virtual Reality: Which One Will Triumph?

Technology can make everything possible nowadays. It has developed in such a way that it even makes you sense and feel your presence in your dream or imagined world. Augmented Reality (AR) and Virtual Reality (VR) are two of such most crucial technology advancements that detach you from the real world. However, the theory between both the AR and VR is entirely different.

AR device

Let us dive into the article, to know the subtle differences between AR and VR.

Virtual reality is an artificial environment that is created by computer graphics, which can be experienced as if that was real. Whereas, augmented reality adds an overlay to the already existing real world, instead of replacing reality (a blend of virtual reality and real life).

Virtual Reality Modeling

Both AR and VR are similar in the ambition of connecting users beyond the real life. However, both the systems do this in diverse ways. With VR, you will be isolated from real-life and involve in the world that is entirely fabricated. With AR, you will be continuously in touch with real-world besides interacting virtual objects around them.

What are they used for?

Everyone believes that virtual reality is just for gaming. But, any business that would benefit from involving users in a different world can use VR technology. This technology could be used during therapeutic treatments for problems such as phobias and other circumstances like tourism to show people the things which no longer exist but are of interest.

AR exists with a much wider scope. Anything that is developed using VR technology can also be developed by AR technology. When we consider games, treatment, and tourism with AR technology, they provide more realistic experience as they were developed having the real world as a part of the technology.

Which technology will succeed?

Even though VR garnered attention in recent years, AR technology acquired substantial financial support from investors and venture capitalists. This is because; AR, in fact, is a stimulated approach towards tangible results and is far more practical with multiple implementations than VR.

As various products with augmented reality are already in the market, we can state that it is ahead of virtual reality. When it comes to VR technology, it is spreading its wings with the rise of Oculus Rift but has still a long way to go to receive a strong impression from users.

Market sector forecasts estimated that by 2020, AR and VR would hit $150 billion revenue with AR taking $120 billion shares and VR at $30 billion.

AR device

Though AR does not take people completely out of the real world, it may have more commercial success as it provides a realistic experience. However, we believe that both AR and VR technologies will succeed.

Automatic Proxy Configuration using PAC File, Batch Script and Windows Server 2012 GPP

Introduction

The proxy auto-configuration is a technique which defines how & where the web browser and other application requests are redirected. Also, this mechanism is designed to overcome the changes and difficulties of manual configuration. Instead of using the static proxy server address, the web browser or application executes a JavaScript function for every request. This script provides greater flexibility than a manual configuration. This blog explains about automatic proxy configuration using Proxy Auto Config script (PAC), windows batch script, and Group Policy Preference (GPP).

What is a PAC file & what it does?

PAC stands for Proxy Auto Configuration. This file contains a set of rules coded using a JavaScript function FindProxyForURL (url, host) which determines whether web browser requests (HTTP, HTTPS, and FTP) go direct to the destination or forwarded via web proxy server such as squid proxy. Vmoksha uses squid proxy server, which is a fully featured web proxy cache server application.

Before Proxy Automation in Vmoksha:

We were facing following problems and challenges before automatic proxy configuration,

  • Manual Proxy Configuration
  • Speed & Latency Issues
  • No Failover Setup
  • Exception (Proxy Bypass) Configuration
  • Explicitly proxy disables in external networks
  • Internet connectivity outage

Benefits after Proxy Automation in Vmoksha:

The following are the benefits after automating proxy configuration,

  • No Manual Effort
  • Script-driven method of controlling the routing of web requests
  • Proxy bypass configuration for private sub-networks, internal/local hosts, and local domains
  • Support for all major operating systems and web browsers
  • Automatic proxy failover with multiple proxy servers
  • Efficient and automated traffic routing regardless of domain name or IP address
  • Support for wireless networks in mobile devices
  • Supports web traffic load balancing

Procedure:

The following are the steps for automatic proxy configuration

Step 1: PAC File Creation

Create a PAC file script based on the following example.

PAC File Example:

function FindProxyForURL(url, host) {

// If the hostname matches, send direct.
   if (dnsDomainIs(host, "localdomain.com") ||
       shExpMatch(host, "(*.localdomain.com)"))
       return "DIRECT";

// If the protocol or URL matches, send direct.
   if (url.substring(0, 4)=="ftp:" ||
       shExpMatch(url, "http://localdomain.com/folder/*"))
       return "DIRECT";

// If the requested website is hosted within the internal network, send direct.
   if (isPlainHostName(host) ||
       shExpMatch(host, "*.local") ||
       isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
       isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
       isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
       isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
       return "DIRECT";

// DEFAULT RULE: All other traffic, use below squid proxy servers in fail-over order.
   return "PROXY 1.2.3.4:3128; PROXY 5.6.7.8:3128";
}

url – The full URL being accessed in web browser. (http:// or https:// or ftp://)

host – The hostname from the above url. port numbers and sub-location is not included in this

return – Return value can be any of the following

  • DIRECT – Redirects requests directly to the destination
  • PROXY host:port – Redirects requests to Proxy server
  • SOCKS host:port – Redirects requests to SOCKS server

Finally, save the file with .pac extension. Eg. proxy.pac

Step 2: Host the PAC file on a web server for client access

Next step is to host the PAC file on a web server’s home directory such as (/var/www/html for Apache2) or (/usr/share/nginx/html for Nginx) or (C:\inetpub\wwwroot for IIS8) and make sure the file is accessible from intranet clients.

Step 3: AutoConfigURL setting via Group Policy Preference

Context: To configure Internet Explorer with a Proxy PAC file using Group Policy Preferences options.

  • Open your GMPC.MSC console and navigate to User Configuration / Preferences / Windows Settings                 
  • Right Click on the Registry object from the left hand pane and select New > registry Item

Automatic Proxy Configuration

From New Registry Properties, login in the following settings

  • For Hive: HKEY_CURRENT_USER
  • For Key Path: Software\Microsoft\Windows\CurrentVersion\Internet Settings
  • For Value name: AutoConfigURL
  • For Value Type: REG_SZ
  • For Value data: http://mysite/proxy.pac

Screenshot

  Proxy.pac File

Apply and OK to complete this GPP Configuration

The following are steps to auto configure winhttp proxy settings

Step 1: Batch Script Creation

Create two batch scripts with the following content

Script 1: "setproxy.bat"

rem This Batch File sets the WinHTTP proxy settings and bypasses the localhost

netsh winhttp set proxy "proxy.mydomain.com:8080"; 127.0.0.1,localhost

Script 2: "resetproxy.bat"

rem This Batch File resets the WinHTTP proxy settings

netsh winhttp reset proxy

Step 2: Group Policy Object Creation

  1. Open your GMPC.MSC console and create a new Group Policy Object and enter the name of it.
  2. Navigate to User Configuration / Policies Windows Settings / Scripts
  3. Select Logon under Scripts; add the above script “setproxy.bat”
  4. Select Logoff under Scripts; add the above script “resetproxy.bat”
  5. Navigate to Computer Configuration / Policies / Administrative Templates / System / Group Policy
  6. Enable the policy Configure Logon Script Delay, and enter “0″ minute.
  7. Attach this GPO to the appropriate OU of your domain and enable it.
What is Jenkins?

During the earlier days of my career at Vmoksha, I have been assigned to set up Jenkins for an Android project development. With a mere knowledge of Java Software Development in those days, it was quite a challenge for me. Initially, I tried to understand what Jenkins is, why it is used and how it helps our android projects. I read the Wikipedia article of Jenkins but couldn’t understand much though. Then, I have done a thorough research to understand about Jenkins.

I know you are also searching for Jenkins and landed on this page. I am pretty sure that after reading this Jenkins blog, you will comprehend Jenkins better.

Introduction

Jenkins is a Continuous Integration (CI) server or tool which is written in java. It provides Continuous Integration services for software development, which can be started via command line or web application server. And also, it is happy to know that Jenkins is free software to download and install.

Continuous Integration

Before going in details to Jenkins, let me tell you what Continuous Integration (CI) is.

Continuous Integration (CI) is a development practice that requires developers to integrate code into a shared repository several times a day. It is a process of running your tests on a non-developer (say testers) machine automatically when someone pushes new code into the source repository. The below diagram shows the CI workflow.

Jenkins Advantages

In this type of procedure, there is a huge advantage of knowing whether all the jobs (configured project in Jenkins) work properly or not. And also we can get fast feedback. The fast feedback is very important so you will always know, right after you broke the build. In the console, you will get the detailed log messages. From this, you will get to know what the reason for job fail was and you can also get to know how you can revert it back. Using an Artifact Repository in CI server will successfully deploy the built snapshot and release which is available to other developers.

If jobs run occasionally then the problem is that since the last time there will be a lot of code changes might have happened. So it will be hard to figure out which changes introduced the problem. But when it is set to run automatically on every code push then it is always easy to know what and who introduced the problem.

Some of the attractive reasons why you need automate build testing and integration are:

  • Developer time is concentrated on work that matters:  Most of the work like integration and testing is managed by automated build and testing systems. So the developer’s time is saved without wasting on large-scale error-ridden integrations.
  • Software quality is made better: Issues are detected and resolved almost right away which keeps the software in a state where it can be released at any time safely.
  • Makes development faster: Most of the integration work is automated. Hence integration issues are less. This saves both time and money over the lifespan of a project.

Continuous Build System can include tools like Jenkins, Bamboo, and Cruise Control, etc. Bamboo has better UX support but it is not a free tool. Jenkins is an open source tool, easier to setup and configure and also has a very active plug-in development community which makes it favored. Now, let us dive into the Jenkins tool.

Jenkins History

Jenkins was originally developed as the Hudson project. Hudson’s creation started in summer of 2004 at Sun Microsystems. It was first released in java.net in Feb. 2005.

During November 2010, an issue arose in the Hudson community with respect to the infrastructure used, which grew to encompass questions over the stewardship and control by Oracle. Negotiations between the principal project contributors and Oracle took place, and although there were many areas of the agreement a key sticking point was the trademarked name “Hudson” after Oracle claimed the right to the name and applied for a trademark in December 2010. As a result, on January 11, 2011, a call for votes was made to change the project name from “Hudson” to “Jenkins”. The proposal was overwhelmingly approved by community vote on January 29, 2011, creating the Jenkins project.

On February 1, 2011, Oracle said that they intended to continue development of Hudson, and considered Jenkins a fork rather than a rename. Jenkins and Hudson, therefore, continue as two independent projects, each claiming the other is the fork. As of December 2013, the Jenkins organization on GitHub had 567 project members and around 1,100 public repositories, compared with Hudson’s 32 project members and 17 public repositories.

Continuous Integration with Jenkins

Jenkins tool is heavily used in CI which allows code to build, deployed and tested automatically.

Jenkins Continuous Integration

Let us depict a scenario where the complete source code of the application was built and then deployed on the test server for testing. It sounds like a robust way to develop software, but this method has many weaknesses. They are,

  • Developers have to pause till the complete software is developed for the test results.
  • There is a huge possibility that the test results might show lot many bugs. This makes developers be in a complex situation to find the root cause of those bugs since they have to check the entire source code of the application.
  • Delivery process of software is slowed down.
  • Continuous feedback referring to things like coding or architectural issues, build failures, test condition and file release uploads were missing so that the quality of software can go down.
  • The whole process was manual which increments the risk of repeated failure.

It is obvious from the above-stated problems that along with slow software delivery process, the quality of software also went down. This leads to customer unhappiness. So, to overcome such confusion there was a crucial demand for a system to exist where developers can gradually trigger a build and test for each and every change made in the source code. Therefore, Jenkins tool is used in CI. It is the most mature CI tool possible. Now let us see how Continuous Integration with Jenkins crushes the above shortcomings.

For software development, we can hook it up with most of the repositories like SVN, Git, Mercurial, etc. Jenkins has lots of plugins that are available freely. These plugins help to integrate with various software tools for better convenience.

One really nice thing about Jenkins is, build configuration files will be on disk which makes massive build cloning and reconfiguring easy.

Advantages of Jenkins

  • Jenkins is an open source tool with much support from its community.
  • Installation is easier.
  • It has more than 1000 plug-in to make the work easier.
  • It is easy to create new Jenkins plugin if one is not available.
  • It is a tool which is written in Java. Hence it can be portable to almost all major platforms.

The diagram below depicts that Jenkins is integrating various DevOps stages:

 Jenkins CI

Once the project is configured in Jenkins then all future builds are automated. It has basic reporting features like status and weather reports (job health).

j3

Most companies who handle continuous integration use their individual cloud-based continuous integration servers built on applications like Jenkins. With Jenkins, organizations can advance the software development process through automation. So overall to say, Jenkins integrates development life-cycle processes of all kinds which include building, documenting, testing, packaging, staging, deploying, static analysis and plenty more.

Building RESTful APIs using Node JS, Express JS, and MS SQL Server

RESTful APIs

REST (Representational State Transfer) is web standards based architecture and uses HTTP Protocol. A REST Server simply provides access to resources and REST client accesses and modifies the resources using HTTP protocol. REST uses various representations to represent a resource like text, JSON, and XML but JSON is the most popular one.

Why do we need RESTful Web Services?

REST is an architecture style for designing networked applications. REST is a lightweight alternative to mechanisms like RPC (Remote Procedure Calls) and Web Services (SOAP, WSDL, et al.). The World Wide Web itself, based on HTTP, can be viewed as an REST-based architecture. The entire modern web browsers are REST client. RESTful applications use HTTP methods (GET, POST, PUT, and DELETE) to perform CRUD operations.

Advantages:

  1. Simple
  2. Easy to use/implement
  3. Easy to build
  4. Uniform interface
  5. The REST API is always independent of the type of platform or languages
  6. Visible, reliable, and scalable

Why opt Node JS for building RESTful APIS?

Node.js is a powerful JavaScript framework built on Google Chrome’s JavaScript V8 Engine. It is used to develop I/O intensive web applications like video streaming sites, single-page applications, etc. Node.js is open source and used by thousands of developers around the world.

nodejsProcessingModel

Advantages:

  1. Quick & easy development
  2. High performance
  3. Run on single thread to handle multiple concurrent requests
  4. Easy to write API and interaction code
  5. Streaming support
  6. Monitoring possibilities
  7. Authentication support
  8. Lightweight, fast, and scalable

About Express JS:

Express is a flexible Node.js web application framework that provides a robust set of features to develop mobile and web applications. It facilitates the rapid development of Node based Web applications. Few core features of Express framework −

  • Allows setting up of middleware to respond to HTTP Requests.
  • Defines a routing table which is used to perform different actions based on HTTP Method and URL.

Allows to the dynamic rendering of HTML Pages based on passing arguments to templates.

Express JS node architecture

Getting Started

Prerequisites:

  1. Node JS
  2. MS SQL Server Database

App Setup & Execution:

Step 1: Create a package.json file.

{
  "name": "<Application Name>",//e.g.  – node_app
  "version": "0.0.0",
  "description": "<Description about your application>",
  "main": "server.js",
    "dependencies": {
        "express": "^4.14.0",
        "body-parser": "^1.15.2",
         “mssql”:”^ 3.3.0”
    },
    "scripts": {
    "start": "node server.js"
  },
  "author": {
    "name": "<Your Name>",
    "email": "<Your Email>"
  }
}

Note:  The package.json file can be created by using npm init command (recommended way).

Step 2: Create server.js file.

//Initiallising node modules
var express = require("express");
var bodyParser = require("body-parser");
var sql = require("mssql");
var app = express(); 

// Body Parser Middleware
app.use(bodyParser.json()); 

//CORS Middleware
app.use(function (req, res, next) {
    //Enabling CORS 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
    next();
});

//Setting up server
 var server = app.listen(process.env.PORT || 8080, function () {
    var port = server.address().port;
    console.log("App now running on port", port);
 });

//Initiallising connection string
var dbConfig = {
    user:  “<dbUserName>”,
    password: “<dbPassword>”,
    server: “<dbHost_URL>”,
    database:” <dbName>”
};

//Function to connect to database and execute query
var  executeQuery = function(res, query){             
     sql.connect(dbConfig, function (err) {
         if (err) {   
                     console.log("Error while connecting database :- " + err);
                     res.send(err);
                  }
                  else {
                         // create Request object
                         var request = new sql.Request();
                         // query to the database
                         request.query(query, function (err, res) {
                           if (err) {
                                      console.log("Error while querying database :- " + err);
                                      res.send(err);
                                     }
                                     else {
                                       res.send(res);
                                            }
                               });
                       }
      });           
}

//GET API
app.get("/api/user", function(req , res){
                var query = "select * from [user]";
                executeQuery (res, query);
});

//POST API
 app.post("/api/user", function(req , res){
                var query = "INSERT INTO [user] (Name,Email,Password) VALUES (req.body.Name,req.body.Email,req.body.Password”);
                executeQuery (res, query);
});

//PUT API
 app.put("/api/user/:id", function(req , res){
                var query = "UPDATE [user] SET Name= " + req.body.Name  +  " , Email=  " + req.body.Email + "  WHERE Id= " + req.params.id;
                executeQuery (res, query);
});

// DELETE API
 app.delete("/api/user /:id", function(req , res){
                var query = "DELETE FROM [user] WHERE Id=" + req.params.id;
                executeQuery (res, query);
});

Note: You can add multiple routes based on your requirement.

Step 3: Open CMD, execute npm install command.

Step 4:  After successful installation of node modules, run below command into CMD.

node server.js

CMD

The node server will start running into port number 8080 with corresponding API Routes; you can point to the below URL to test the application.

http://localhost:8080

Step 5: Testing REST APIs

We can use any of the REST Clients like Postman Chrome App or through any of the Programming languages like Java, C#, PHP, etc., to consume the APIs.

Here is the demonstration using Postman App

Postman App

Note: The complete code reference can be downloaded from the below link,

https://github.com/avinashl3175/Vm_BlogContent/blob/master/Node_API_Demo.zip

 

Android Runtime Permissions

From Android M, Google has changed the way of permissions that applications handle. Earlier, we simply mention permissions in AndroidManifest.xml, but from Android 6.0 version, we need to check every time for permission related task. Applications need to ask the permission at runtime while it is running and also have to provide enough contexts on why the permissions are required. All the permissions, though we have to declare in manifest whenever application want to access the APIs that need the runtime permission, apps has to check whether that permission has been granted or to request the required permission using support library.

Types of Permissions:

  1. Normal permission
  2. Dangerous permission

The Normal permissions do not directly affect the user’s privacy. If application lists a normal permission in its manifest, then these permissions will be automatically granted by the system upon installation. Some of the most common normal permissions are given below.

Check and change data connection: Include network state, Wi-Fi State, Bluetooth, Internet, etc.

Example:

Android permissions

The Dangerous permissions are the permissions which give application access to the user’s private data or affect the system/other apps. If you list a dangerous permission in manifest then the user has to explicitly give permission to your application.

Android permissions

Advantage of Runtime Permissions:

In Android 6.0, applications provide transparency to users.  Users have to grant permissions to applications while the application is running rather than during installation and it asks to grant the permission only when some specific function is being used within an app. At that point, users have to decide whether or not to grant their permission. But in the earlier versions of Android 6.0, a user has to grant all the app permissions before installing from the Play Store and if he doesn’t allow the permission then the system doesn’t install the application at all. As a result, many malicious apps are able to access user private data after granting the permission at installation time, which leads to a major security breach. But in Marshmallow, the user can allow or deny individual permission and the application can continue run with limited efficiencies even if the user denies a permission request. In addition, users now have the option to revoke individual app permissions after he has granted them, but in the earlier versions to Marshmallow, the user can’t revoke individual app permissions once he has granted them.

Android permissions

Permission Groups:

Different types of permissions are separated into groups based on which data or resource it requests access for. Once permission from a group has been granted then other permissions within that group do not need to be granted again. For example, permission group for SMS can send or receive the SMS. Those are two different permissions but the user only needs to allow one.

Android 6.0 Marshmallow has nine main groups of permissions:

Calendar: Read and/or write to the calendar.

Camera: Give the application the ability to access the camera.

Location: Access fine or coarse location.

Microphone: The ability to record audio.

Phone: Includes phone state, the ability to make calls, read and write to the call log and voicemail.

Sensor: The ability to use various sensors in the device, like a gyroscope.

SMS: Similar to how the phone is handled including sending and receiving texts. MMS and cell broadcasts.

Storage: Read and write to device’s external storage.

 

Enable/Disable the Runtime Permissions Manually for App

The user can deny the permissions at any time by going to the application’s Settings screen. There are some steps to enable/disable the app permissions given below.

Step1: Open your device’s Settings app.

Step2: Tap apps and find an app which you want to work with. Select it.

Step3: Tap applications permissions on the App Info screen.

Step4: You will see the list of permissions the app requests, tap on the switch to make it ON/OFF.

Runtime permissions

Permission Workflow

Android Marshmallow

Requesting Permissions at Runtime:

In Android 6.0, users allow permissions to applications while it is running, not during installation. This approach streamlines the application install process since the user does not require grant permissions when they install or update the application. It also gives the user control over the application’s functionality. Since the permissions are requested individually, the user can allow some permission and deny others permissions. For example, user can grant camera permission but can deny location permission and the application may function seamlessly.

How to Check for Runtime Permissions:

If your application requires runtime permission, you must check whether you have that permission enabled every time to perform an operation. The user is always free to revoke the permission.

  • Check the Target SDK version: If the device running is former to Android 6.0, there is no need to call new runtime permission workflows.     

Android Marshmallow

  • Check if permission granted
  1. Check whether required permission is granted. Call the ContextCompat.checkSelfPermission (Context, String) method, Context current context and String Permission.
  2. If the application has the permission, the method returns PackageManager.PERMISSION_GRANTED and the application can proceed with the operation.
  3. If the application does not have the permission, the method returns Package Manager.PERMISSION_DENIED and the application have to explicitly ask the user for permission.

runtime permissions

  • Handle Never Ask Again

ShouldShowRequestPermissionRationale (String permission): This method can be called to determine if the user denied this permission previously or not. If this method returns true, then it’s perfect time to tell the user exactly why the permission is needed before requesting it again.

If the user denies the permission request in the past and chose the Never ask again option in the permission request system dialog, this method will return false. Next time we call requestPermissions, this dialog will not appear for this kind of permission anymore. Instead, it just does nothing.

runtime permissions

The result of rational dialog will be shown when this permission is requested for the first time and also be shown if the user has ever marked that permission as Never ask again. For the next case, onRequestPermissionsResult() will be called with PERMISSION_DENIED without any permission grant dialog.

  • Request for Permission:

If the application doesn’t have the permission which requires, the application must call requestPermissions(String [ ] permissions, int requestCode) methods to ask the appropriate permissions. Pass permission array and request code as parameters.

Example: The following code checks if the application has permission to use the location service and requests the permission if necessary.

Android permissions

Android permission

  • Handle the permissions request response:

If the user has granted or denied the permission request, we have to handle response and execute the functionality according to response. This can be achieved by overriding the OnRequestPermissionsResult() in the Activity where the permission was requested. This method returns the result code for granted or denied permission.

permission Request Response

Note: Suppose, the user wants to use some APIs that need runtime permission that has not allowed yet. The function will immediately throw a SecurityException, which will cause to the application crashing.

Android permissions

permission Request

Conclusion:

Runtime Permission is a must in Android Marshmallow. The user will be happier allowing permissions because they are much more likely to install your app without a wall of permissions at the installation. The aim of this new model is to give the user full control over application’s permissions. By using this, users will soon have a better understanding of exactly why app need permission to access any features, which means less Play Store complaints and hopefully a higher download rate.

 

Material Design for Android

Introduction

In 2014, Google developed a new visual design language called Material Design for Android Lollipop and higher versions. The visual specifics in material design are amusing, and the material objects have x, y and z dimensions, which allows you to create an incredible 3D world. Material design is not about how to use dazzling colors, best images, and the elevation of the object; it is about how we create the amazing experience to users with the positive brand reality.

Google has proposed some rules and regulations while adding the material design to application to improvise its standards. Instead of using a palette selection tool that pulls colors to the content of an app, using of material design makes the Android application’s graphic layout more simplified and standard format. To be noted, the material design is not only being used for rectangular or tablet screen; it should also be used for circular watch screen, etc. So if we create a grid, then it precepts all the spacing and should match to all the types of screens, which is a must for apps that are identified everywhere.

Android Material Design

Overall to say, material design is straightforward, clear and brilliant. Because of these dazzling features, it has become an imperative for a broad number of gadgets than any other UI in history.

Goals of Material Design

  • To design the application UI like a magical paper. Let’s say, something that appears like real, appreciable objects.
  • Animations have been pulled to make the experience more lively by safeguarding the maximum amount of content is always visible.
  • With Material Design, Google also determined to robotize the experience for users.
  • Mobile rules are fundamental but touch, voice, mouse, and keyboard are all excellent input methods.

The materials take energy from the users, from their fingers, from their mouse click, their touch and use it to transform and animate.

In material design, software elements are treated as real things. For example, take paper and ink. Every pixel drawn in an application is similar to a dot of ink on a piece of paper. Assume that paper is plain and doesn’t have any color whereas the ink can be of any color. So the content color of a paper depends on the color of the ink. Likewise in Android application, it can be a menu, button or image.

And also the paper can be of any size. It might fill the whole screen, or it might even shrink to small square or round shape. So the ink will not have any restrictions. It will be throughout the paper. It just has to fit inside the paper to be visible. The papers can change its shape, split, move, join and re-size. Likewise, every application made in material design will have all these characteristics.

Principles of Material Design

1.  Material is the metaphor

A material metaphor is a bring together theory of a rationalized space and a system of motion. A metaphor is a figure of speech that specifies flashy effect to one thing by observing another thing. It is open to imagination and magic.

Material Design Principles

2. Surfaces are spontaneous and natural

Surfaces and edges provide visual hints that are familiarized in our knowledge of reality. The use of ordinary material attributes conveys to a primal part of our brain and advice us to quickly understand its need.

Material Design Surfaces

3. Dimensionality supports interaction

The basics of light, surface, and movement are keys to transfer how objects cooperate. Sensible lighting shows bond, divides space, and demonstrate moving parts.

Material Design Dimensionality

4.  One flexible design

A single underlying design system establishes interactions and space. Each device follows a different view of the same fundamental system. Each view is made custom-fit to the size and interaction appropriate for that device. Colors, iconography, hierarchy, and spatial relationships stand constantly.

Material Design Flexible Design

5.  Content is bold, graphic, and wilful

Bold content provides grouping, meaning, and focus. Cautious color choices, edge-to-edge imagery, and intentional white space create captivation and clarity.

Material Design

6.  Color, surface, and iconography highlights actions

User action is all about the significance of experience design. Color in material design is inspired by bold complexion, deep shadows, and brilliant highlights. The whole design is reconstructed by the change of points in the immediate actions.

Android Material Design Color

7.  Users introduce alteration/change

Alterations in the UI extract their energy from user actions. Motion that forces from touch respects and emphasizes the user as the best mover. It means that the widgets or material takes the energy from users’ fingers during the mouse click or on touch and that energy is used to animate to show it as reality.

Android Design User Alteration

8.  Animation is choreographed on a common step

All action takes place in one surrounding. When objects are restructured and transformed, the user will be given with the experience without collapsing the continuity of it.

Android Material Design Animation

9.  Motion provides meaning

Motion is meaningful and convenient. It helps to focus attention and preserves continuity. The following elements assists in material design for apps of Android version 5.0 (Lollipop) or higher.

Android Material Design Motion

Themes

The material theme is defined as,

@android:style/Theme.Material (dark version)

@android:style/Theme.Material.Light (light version)

@android:style/Theme.Material.Light.DarkActionBar

Android Material Design ThemesAndroid Material Design

 

To use the material theme in your apps, customize the color palette as shown below,

<resources>
<!-- inherit from the material theme -->
<style name="AppTheme" parent="android:Theme.Material">
<!-- Main theme colors -->
<!-- your app branding color for the app bar -->
<item name="android:colorPrimary">@color/primary</item>
<!-- darker variant for the status bar and contextual app bars -->
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<!-- theme UI controls like checkboxes and text fields -->
<item name="android:colorAccent">@color/accent</item>
</style>
</resources>

The following example describes how to add material design to a button

styles.xml

<resources>
<!-- Base application theme. -->
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
<!-- Customize your theme here. -->
<style name="MyButton" parent="Theme.AppCompat.Light">
<item name="colorControlHighlight">@color/calbutton_focus</item>
<item name="colorButtonNormal">@color/background_color</item>
</style>
</resources>

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height=" match_parent ">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/MyButton"
android:layout_gravity="center"
android:text="Click"
android:textAllCaps="true"
android:textColor="@color/white"/>

</LinearLayout>

Cards and Lists

Cards and Lists are the two new widgets in Android with material design styles and animation. To create cards and Lists, RecyclerView can be used, which is introduced from Android version 5.0 (Lollipop). It is an adoption of ListView, which supports various layout types and contributes performance improvements. Part of data can be shown inside the card with a constant look over apps in CardView.

An example shown below demonstrates how to add a CardView in your layout.

 

build.gradle

dependencies {
// CardView
compile 'com.android.support:cardview-v7:23.3.+'
}

activity_card.xml

<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="200dp"
android:layout_height="200dp"
card_view:cardCornerRadius="3dp">
...
</android.support.v7.widget.CardView>

 

To use RecyclerView widget in your layout, necessary attribute is shown below,

build.gradle

dependencies {
// RecyclerView
compile 'com.android.support:recyclerview-v7:23.1.1
}

activity_main.xml

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:scrollbars="vertical" />

Android Material Design Cards and Lists

Floating Action Button

Another interesting widget introduced in material design is floating action button.  This button floats on UI in a circular shape with an action attached to it. By default, its behavior is to animate on the screen as an expanding piece of material.

We can also provide shadows and elevation to the buttons. The distance between surfaces and the depth of its shadow signifies elevation. To set the elevation of a view, use the android:elevation attribute in your layouts. The bounds of a view’s background drawable determine the default shape of its shadow.

In addition to the X and Y properties, views in Android material design now have a Z property. This new property serves as the elevation of a view, which concludes the size of the shadow i.e., a view with greater Z values launches bigger shadows.

< android.support.design.widget.FloatingActionButton
android:id=”@+id/my_floatbutton”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android: layout_gravity="top|end”
android: src="@android:drawable/ic_add”
android:background=”@color/white”
android:elevation="5dp" />

14

build.gradle

dependencies{
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}

activity_main.xml

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android: layout_width="wrap_content"
android: layout_height="wrap_content"
android: layout_gravity="bottom|end" // position the floating button
android: layout_margin="@dimen/fab_margin"
android: src="@android:drawable/ic_dialog_email"/>

You can also define own background color for floating button using app:backgroundTint. The size of the button can also be defined by using app:fabSize attribute.

Floating Android Material Design

CollapsingToolbarLayout

A new widget called CollapsingToolbarLayout was also introduced from Android version 5.0 (Lollipop). This comes with an amazing animation; whenever a user scrolls up the control provides the fabulous animating effect. According to the Android documentation, CollapsingToolbarLayout is a wrapper for Toolbar which implements a collapsing app bar. It makes the header image collapse into the Toolbar, adjusting its title size and it is designed to be used as a direct child of an AppBarLayout.

To add CollapsingToolbarLayout to your layout, see the following,

build.gradle

dependencies{
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}

activity_main.xml

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
.....
.....
</android.support.design.widget.CollapsingToolbarLayout>

Android Material Design Collapse

Conclusion

Google developed material design to bring together the user experience from different Google platforms. Totally, material design made the user interaction smooth, simpler and greater intuitive. When you think about material design, it has so many technologies, which will only create the impression for users while using apps during interactions. The physical world is the very big part of the material design. So all in all, what do you think of Material Design in Android? Don’t you think it’s the best part to unite and enhance the user experience while using the Android application?