Nanoservices : The future of software architecture
Why Saas products should adopt Kissmetrics?
What is Kissmetrics?
Kissmetrics is a web analytics tool that provides key insights and user interaction on the website. It gives a clear analysis of user activities on your website and collects the data of every visitor which helps to turn your insights into sales.
Features:
- It is a real-time data monitoring tool.
- The implementation of email campaigns helps to increase engagement and sales. Not only delivers automated emails to customers but also creates different segments of customers to send targeted emails. In addition, using insights it is possible to understand customer behavior and can surface key insights that help to make better decisions. It can be easily integrated with third-party applications.
- One of the important features of the Kissmetrics analytical tool is event tracking. It tracks the important events happening in the application.
- Campaign Management feature allows a user to analyze and track marketing campaigns.
- Conversion Tracking feature can track customer conversion rate.
- Goal tracking allows users to track progress which can help the user to reach business objectives.
- User interaction tracking identifies and tracks the visitors’ interaction on the website.
- Kissmetrics tracks the time that a visitor spends on the website.
- Report generation is one of the key features of Kissmetrics, It gathers data and generates reports.
- Kissmetrics allows analysis and tracks more than one website.
- Kissmetrics has a notifications feature that alerts the user when predefined criteria are met.
- Heatmap is one more feature in Kissmetrics which shows where users have clicked on a page.
- Data export feature is available.
- Unlimited Group Contact Lists.
- Don’t have to go around searching for figures. It has a powerful dashboard.
- Easy to use. Simply sign-up for an account and can customize accordingly. Add a java snippet under <head> tag of the source code of the website for tracking.
Drawbacks:
- High learning curve.
- UI – the user interface is not very user friendly.
- Dashboard options are limited.
- Limited integration capabilities.
- It takes more time to implement especially if you have a complicated website with too many different events.
- It is expensive. The cost is really not affordable for a small business or startup.
Pricing:
Kissmetrics offers multiple packages with various features in the range of $199 – $499 per month. You can check pricing and packages here.
Custom Solution for Tracking User Activities and Events:
Pixel tracking method is used to track events and user actions. Adding the tracking pixel can be done by an HTML code, which contains an external link to the server. When the user visits a website, this code is processed by their browser, which follows that external link. This method allows one to track visitor’s information. The following data is tracked using pixel:
- Operating System and device type.
- Time spent on the website.
- Browser Information.
- Ip address.
- Location of the user.
- Activities on the site during a session.
Conclusion:
Kissmetrics is one of the best analytical tools in the market that helps saas product companies track conversions. More than 6523 companies are using this tool. Big Brands like eBay, Accenture, and WordPress are few examples who use the Kissmetrics tool.
We have an expert team of engineers who can help you to configure Kissmetrics and provide a custom analytical solution. Please feel free to connect in case of any queries.
Single Page Application: Things to know
A few years ago, when we used to have browsers with poor javascript performance, every page used to come from the server. For every click, there used to be a new request-response cycle from the browser to the server.
Today there are several frontend JavaScript frameworks available, that helps in creating an application as a single page application. User Only loads the application code(JavaScript, HTML, CSS) once, and when the user interacts with the application, JavaScript intercepts the browser events and rather than making a new server request, the client requests some JSON or performs an action on the server but the page that User sees is never completely wiped away.
A single-page application(SPA) is an app that works inside a browser and doesn’t require page reloading during use. Such applications are there in everyday use. These are, for instance: Gmail, Google Maps, Facebook.
Benefits of Single Page Applications
1. Production deployment and Versioning:
Single Page Applications are very easy to deploy in Production. It is mainly one index.html file, with a Javascript bundle and a CSS bundle.
Deploying the front-end as SPA has the advantage of versioning and rollback. It is done by versioning the build output.
2. User Experience:
In SPA, once the page is loaded for the first time, no more HTML gets sent over the network, rather data gets requested from the server(or posted to the server).This takes significantly less time and bandwidth than constantly sending HTML(as happens in case of traditional multi-page applications). This leads to an improved user experience due to less number of full-page reloads and better performance due to less bandwidth consumption.
3. Caching Capabilities:
A single-page app can cache any local data effectively. A SPA sends just one request to a server then stores the response it receives. Then it can use this data and work even offline. If a user has poor connectivity, local data can be synchronized with the server when the connection allows.
4. Debugging with Chrome:
It’s easy to debug a SPA with Chrome since such apps are developed on frameworks like Angular and React. These frameworks have their Chrome Developer tools that make debugging much easier than with MPAs. Besides, SPAs allow you to monitor network operations and investigate page elements and data associated with them.
Challenges
1. Search Engine Optimization:
SPAs provide poor SEO optimization. This is because single-page apps work on JavaScript and download data based on the request from the client-side. The URL doesn’t change and different pages don’t have their unique URL addresses. It’s hard to optimize these websites for search engines since most pages can’t be scanned by search bots.
2. Security issues:
Single-page apps are less immune to cross-site(XSS) scripting attacks than are multi-page apps. Using XSS, hackers can inject client-side scripts into web applications. One security issue is the exposure of sensitive data. If developers aren’t careful about what data is contained in the initial page load, they can easily send data that shouldn’t be exposed to all users. The whole of a SPA isn’t generally visible in the browser, which can provide a false sense of security. One more reason that SPAs can be insecure is missing access control at the functional level. Since developers move features and logic off the server and out to the client, it’s really easy to provide a client with access to functions that they shouldn’t be permitted to use.
3. Browser History:
SPA doesn’t save visitors’ jumps between states. A browser only takes the user to the previous page but not to the previous state in an app.
Single Page Application Development Frameworks
Single page application development needs frameworks that can handle the grand application architectures required for rich web apps.
Below are a few popular Frameworks for Single page application development.
1. Angular:
Introduced by Google, Angular is the most used framework for Single page application development. The extensive amount of built-in functionality allows developers to design and control applications for nearly every kind of task. It reduces code as well as allows the easy maintenance and scaling of applications over time.
2. React:
React is Introduced by Facebook and extensively used on Instagram. It is a powerful library that can handle most types of applications. Along with Flux (ReactJs’s application pattern for building user interfaces) React establishes a firm code base through web components to create web applications that would function wonderfully even in large-scale, constrained, or high resource-consuming environments.
3. Knockout:
Knockout works on the MVVM approach of application architecture that helps developers to better organize their code. It also allows the application and server synchronization while putting in necessary mechanisms to build large single-page web applications. The scalable architecture allows developers to design applications that can easily scale up or down depending on their user base. However, Knockout often requires few other libraries like RequireJs, DurandalJS, PagerJs to create a full-fledged single page application development framework.
4. Backbone:
The legacy single page application development framework is very popular amongst developers as it provides the necessary flexibility through the MVC model while also supporting collections that allow for variations to program architecture. By notably reducing the data tie-ups to the DOM, Backbone allows developers to create structural code that can be easily modified to reflect changes in the DOM.
Major Features of Angular
1. Cross-Platform:
With Angular, Developers can create progressive web applications (PWA). PWA, using modern web capabilities, offers an app-like experience to the users. Based on the needs, the Developer can deploy the app as native as well as progressive. The hybrid mobile SDK called Ionic can ship the apps to the app store and deploy the same to the mobile web as PWA.
2. Optimum Performance:
The loading time of Angular apps is faster than any other front end framework in the industry. It loads at a very good speed with any new component router. Further, As per user’s loading and rendering requirements the code gets split automatically.
3. Less Code Framework:
Angular is a low code framework compared to the other front end technologies. Developers don’t need to write separate code to link the MVC layers. Also, the directives are isolated from the app code. These all together automatically minimize the development time.
4. Two-Way Data Binding:
Two-Way Data Binding is another effective feature of Angular. The View layer and the Model layer stays in perfect synchronization. For every change in data in the model, the view reflects the change, similarly, for any change in view, the model is updated.
5. Dependency Injection:
The built-in dependency injection of Angular makes application development easier for developers.
6. Directives:
Developers can create custom HTML tags serving as custom widgets with the help of directives. Developers can use these to decorate behavior-driven elements. As per the needs, DOM attributes can also be manipulated with the help of directives.
7. Angular CLI (Command Line Interface):
Angular CLI is the command-line interface for Angular. It helps to automate the development workflow. The common Angular CLI commands like ng-new or ng-add supports the developers to discover ready-made features with ease.
Conclusion:
This article gives an overview of Single page applications(SPA) with Advantages and challenges. It also provides an insight into the most popular frameworks available for developing single-page applications, and features of Angular, one of the most used frameworks for developing SPA. We at Neova have the expertise for developing dynamic SPA using the latest frameworks like Angular and React.
Payment Gateway Integration: Things to know
An online payment gateway (PG) is a bridge between the user’s bank account and the portal where the user wants to transfer his money. It is a software that authorizes the user to do an online transaction through modes of payment like a credit card, debit card, net banking, UPI, or the many online wallets that are available these days.
It is a third party that transfers money securely from the bank account to the merchant’s payment portal. It works behind the scenes to handle online transactions safely and securely.
Different payment gateways available in market
- PayPal
- Amazon Pay
- PayU
- CCAvenue
- RazorPay
- PayTM
- Citrus
How Payment Gateway works
A payment gateway focuses to secure the sensitive information given by the user throughout the process. It does so by encrypting the credit card or bank details given by the user
Step 1: A customer places the order and then presses the Submit button, or its alternative button, on the website.
Step 2: The website or the booking/e-commerce platform takes the user to a payment gateway where he enters all the relevant information about the bank or the card. The Payment Gateway then takes the user directly to the page of the bank or a 3D secure page, asking for the transaction to be authorized.
Step 3: Once authorized, the bank checks whether the customer has a sufficient amount in the account to complete the transaction.
Step 4: Accordingly, The payment gateway sends a response to the merchant. If the response from the bank is a “No’”, then the merchant sends an error message to the customer, telling them about the relevant issue. If the response from the bank is a “Yes”, then the merchant seeks the transaction from the bank
Step 5: The bank settles the amount with the payment gateway, which successively settles the amount with the merchant.
Step 6: The customer gets a confirmation message of the order being placed, once the above process is completed.
Note: The transaction of the amount involves sensitive information about a user’s bank and card details. Therefore, it is imperative to make sure that this information stays safe.
PayPal Payment Gateway Integration
PayPal is one of the renowned payment gateways and known for its highly secure network system. PayPal has provided easy to follow guidelines to integrate its product with a variety of mobile and web applications.
The integration guidelines are generally provided by the Payment Gateway itself. For example below are the steps provided by PayPal in its developer’s documentation.
Note: Before integrating the PayPal gateway, developers must set up a development environment to get OAuth 2.0 client ID and secret credentials for its environments. These credentials are used to get access tokens that authorize REST API calls.
1. Installing NuGet Package manager for PayPal
Next step is to install Nuget package manager for paypal
2. Configuration
In order to use this SDK, the application needs to be configured. SDK will attempt to look for settings specific to Pay-pal in the application’s web.config file.
<configuration>
<configSections>
<section name="paypal" type="PayPal.SDKConfigHandler, PayPal" />
</configSections>
<!-- PayPal SDK settings -->
<paypal>
<settings>
<add name="mode" value="sandbox" />
<add name="clientId" value="__CLIENT_ID__" />
<add name="clientSecret" value="__CLIENT_SECRET__" />
</settings>
</paypal>
</configuration>
3. Authentication with PayPal
Before making calls to the Rest API, developers have to generate an OAuth access token to be used with API calls.
using PayPal.Api;
// Get a reference to the config
var config = ConfigManager.Instance.GetProperties();
// Use OAuthTokenCredential to request an access token from PayPal
var accessToken = new OAuthTokenCredential(config).GetAccessToken();
4. Configuring APIContext Object
This object helps developers to customize the calls made to PayPal
var apiContext = new APIContext(accessToken);
This object can be further setup to add specific http headers and custom configuration settings.
// Initialize the apiContext's configuration with the default configuration for this application.
apiContext.Config = ConfigManager.Instance.GetProperties();
// Define any custom configuration settings for calls that will use this object.
apiContext.Config["connectionTimeout"] = "1000";
// Define any HTTP headers to be used in HTTP requests made with this APIContext object
if(apiContext.HTTPHeaders == null)
{
apiContext.HTTPHeaders = new Dictionary<string, string>();
}
apiContext.HTTPHeaders["some-header-name"] = "some-value";
5. SDK Call
Once the APIContext object is ready, developers can make a call to the API. Below is an example of how to get the details of a specific PayPal payment.
var payment = Payment.Get(apiContext, "PAY-0XL713371A312273YKE2GCNI");
Advantage of Payment Gateway
1.Security: Payment gateways use industry-standard encryption and protect sensitive data thus protecting both merchants and consumers from fraud.
2.Faster transaction processing: A payment gateway is much faster than manual processing, and customers can make the payment without the inconvenience of long waits or lines.
3.Large customer base: Payment gateways enable customers from around the world to have access to your portal and can expand your customer base exponentially.
Conclusion:
This article explains one of the most important components i.e. Payment Gateway for online businesses, How it works, Integration with benefits of using a Payment gateway for business.
At Neova we have the technical expertise to integrate Payment gateways into any online business web applications.
Implementing Expense Management using Bootstrap
Expense management refers to the systems established by a business to process, pay, and inspect employee-initiated expenses. This system tracks your daily expenses and provides comparative charts to show your expense summary.
Through this post, we will understand the essentials of Expense Management. It will cover what is Expense Management System, its key features, benefits, and later we will cover its implementation using Bootstrap front-end technology.
What is the Expense Management System?
This system acts like a calculator that allows you to analyze and calculate your daily expenses, and for better understanding provides a wide variety of GUI(Graphical User Interface) like graphs, pie charts, bar charts.
Key Features:
1. Mobile-enabled expense report tools help employees track, manage and submit expenses on the go.
2. It can easily integrate DB to eliminate data silos and reduce manual data updates.
3. Dynamic workflows reduce human interference and shorten the turnaround time of the expense management process.
4. Visual graphics-rich reports help to analyze the common business expenses to eliminate overspending and spot improvement opportunities.
5. An Instinctive dashboard that displays visual-rich reports based on priority and business needs will help these reports to informed stakeholders.
Benefits of Expense Management system:
1. Total Expense Visibility provides informationexactly what’s going on in your business at all times.
2. Big-Time Savings on creating reports on the dashboard and it will update every hour automatically.
3. When you see your success/failure key metrics in your dashboard, you intuitively start improving your results.
4. Reduced Stress due to getting notifications from the dashboard so no need to continuously watch on the system.
5. To Increase Productivity Dashboards allow you to calculate performance and show in charts.
What is bootstrap and its main features:
We have used the newest version of Bootstrap to build up the system, version 4, which is the most popular with HTML, CSS, and JavaScript framework for developing responsive, mobile-first websites. These provide new components, faster stylesheet, and more responsiveness.
Bootstrap Features:
Updated Print Styles and Utility Classes
There is a great improvement in the rendering of pages. It ensures the reasonable size of pages rather than making them fit mobile screens only.
Additive Border Utilities
It is providing additive border utilities to quickly add all borders to your components. The default border is set to a solid 1px light gray color.
New Responsive Classes
The new responsive classes .order-0 and .order-last are introduced for more control over the flexbox grid.
Added documentation
The new documentation is added for using the CSS variables. Bootstrap 4 provides 2 dozen of CSS variables as compared to the previous version.
How to Design an Expense Management system using Bootstrap?
1. First, go to the files menu in the toolbar. From files -> new -> project to create a new project.
2. This will open a new project window as shown below.

3. To Install bootstrap in the current project Right Click on project-> Manage NuGet packages->Bootstrap CSS -> click on the install button.

4. After successfully installing Bootstrap in your project you are able to see folder structure as below.

5. Now you can design your aspx pages using bootstrap in the following way.
As mentioned in the screenshot first use bootstrap.min.js and jquery.min.js in your aspx page.

I have used below given Bootstrap4 features to design web pages:-
- jumbotron class – This jumbotron class indicates a big box for calling extra attention to some special content or information.
- navbar-expand-sm – navbar vertically on small screens.
- .nav nav-tabs – Creates navigation tabs
- .nav-item – Creates tab items
- .nav-link – Styles links inside the navigation tab

You can use static value using the option tag in the following way:-

6. I have made sample pages of ‘Expense management system using bootstrap4’ as follows:-
Home Page:-

About us page:-

Expense Manager Page:-

Calculate Expense Page –

Conclusion:-
In this article, we implemented an Expense management System using Bootstrap. At Neova, we have an expert team of front end developers who can extend their services to build responsiveness mobile and web applications.
Source Code: Kindly refer below link to get code for the above-discussed project.
Trip visualization using Google APIs
Introduction
- What is Trip visualization?
- What are different features we can apply in travel domain
- Code walkthrough for visualization and output
- Technology and Integration concerns.
- Beyond Google APIs
- Conclusion
What is Trip visualization?
There is a lot of buzz going in the world to develop a successful product in the market. We need to showcase the content or context as a picture that is easier and worthy rather than describing in 100’s of words. With the latest trends we can analyze the product data and transform the data into schemas that represent visualizable units that can be represented as nice UI widgets embedded on the Dashboard.
What are different features we can apply in travel domain context
As travel domain is Hugh network we can transform a lot of data coming from travel entities into various visualization units the below are few:
PNR visualization
Representing multiple segments in PNR with travelling points as nodes.
Ex: Air segment showing journey from SFO to EWR or PNQ to DEL on map with named locations and flight icon(markers).
Car Rental Trip
Showing trip navigation path with pickup, drop-off and intermediate stops with customized markers and tooltips with fare and vehicle service class.
Spend Analyzer
Shows history with various charts like Pie, Donut, Bar charts with Expense over time period.
Trip Recommendations
We have lot of in-built options to show recommendations for the trip with various alternatives in animation mode to overcome traffic between source and destinations or flight bookings with airport multi-city (Multilevel Sankeys)
Entity Relations
We can link the entities and visualize them using Word trees to represent and provide better understanding hierarchy.
ChartWrapper
It is a Convenience class which handles loading all appropriate chart libraries and also simplifying sending queries to chart data sources, which we call this as DMT (Data Mapping Transformation).
Data visualization in AR
iPhone X has a feature to interact with heavy data and visualize in Augmented Reality with motion sensor capabilities. Ex: to Visual a cycling trip between San Jose and Auburn over mountain terrain we can visualize the data in 3D view. We have various SDKs like Mapbox for Unity, New Xcode, iPhone X, and ARKit which support in developing “Augmented Reality” apps.
1. Loading Charts library
Loader.Js file from gstatic.com (from google )
<script src="https://www.gstatic.com/charts/loader.js"></script>
2.Loading the charts
<script type="text/javascript" language="javascript">
google.charts.load('current', { packages: ['corechart'] });
google.charts.setOnLoadCallback(renderPieChart);
function renderPieChart()
{
//draw chart based on configuration
}
</script>
3.Preparing the data
<head>
<meta charset="utf-8" />
<title>Data visualization</title>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
google.charts.load('current', { packages: ['corechart'] });
google.charts.setOnLoadCallback(renderPieChart);
function renderPieChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Element');
data.addColumn('number', 'Percentage');
data.addRows([
['January', 0.73],
['February', 0.21],
['March', 0.05],
['April', 0.01]
]);
var chart = new google.visualization.PieChart(document.getElementById('dvSpendChart'));
chart.draw(data, null);
}
</script>
</head>
<body>
<div id="dvSpendChart" />
</body>
4.Customizing
We can customize the content and display the data in a more effective manner.
Ex: we can provide a 3D look to the pie chart for better user experience by changing the above code slightly.

PNR Trip visualization with Google maps
The right side image depicts a PNR segment having flight connectivity with multiple places.
Integration of Maps API
Google Maps platform is set of multiple API’s and SDK for different platforms managed by Google Cloud Platform console (GCP) , all you need is :
1. Create a billing account
On a need basis creating an account (individual or company) and mentioning a billing model.
2. Create a project
Create a project and organize the keys for consuming over different Apps.
3. Enable required API’s and SDKs
Enabling and disabling services as and when needed to reduce billing.
4. Customizing
Billing will impact if we share the API key . The following is a key place on GCP to configure billing.

Technology and Integration concerns
Developers are always passionate about creating new frameworks and more customizations due to business needs, there are always better techniques emerging with new technologies and frameworks which will improve the user experience of the product. The only key factor is identifying the need, and choosing the right thing at the right time based on resources.
Factors to consider
Product demand
- Features development
- VOC & SLA
- Resource availability
- Infrastructure Support( Migration, Scalability, Backup & recovery plans)
As a product owner, we need to commit the features to customers based on planning by balancing new features as well as addressing VOC-Voice Of Customer reported bugs and also efficiently planning the resources in each sprint and ability to Support infrastructure for scaling which can be latest development tools (VS-2013 to 2015/2019) or Firewalls and antivirus, web servers and data servers for load balancing, migrating to cloud and so on.
Technical resource skills
Need to prepare a checklist whether the team has required skill sets to improve the feature. Ex Who has proper knowledge in Angularjs or ReactJs if we start converting the project then it will be a challenge for successful deliverables with committed deadlines. In business to be successful “Promise” is a key factor.
Agile methodology and roadmap
It is always important to do annual planning for multiple quarters with a well-defined roadmap and buffer in quarter to re-assess new features to address customer needs. Maintaining scrum masters and capturing sprint reviews and retrospective meetings make the product team aware of team velocity in deciding work to be committed over the releases.
Investment and Assessment
It is a must to rethink while doing investment and compare where to invest which will give visibility and revenue, ex if we are upgrading visual studio to 2019 we will get advantage code refactoring, automatic unit test generator, dynamic test execution, performance of each code block which will give better experience to end-user than identifying performance and avoid bugs in production post-release and rolling back few features.
Identify migration impact with R & D
Most enterprise applications will not frequently keep on changing the frameworks which are popular in the market rather the R & D team will analyze the features and incorporate the same using new code branches and get it well tested and once QA certifies then push the releases to production. It also depends on using third party libraries like telerik, kendo, DevExpress and their support in fixing the issues.
Beyond chart
It is not only a chart we use or plug in representing data for visualization we need to identify and implement the right usage of each kind of chart to best fit for data. Like below
Charts
Pie chart: when we have data to compare among each ex: which GDS is most popular and have % of market share or what is spent over each quarter for travel, which vehicle class is mostly in demand by city.
Bar chart: different channels revenue over multiple time periods.
Calendar chart: deliverable features over time with resources.
Sankey charts: To show multi-city connectivity like airports and so on.
Tree maps: example if we want to show our service availability over different places , ex showing maps with corona red , green, orange zones to decide cab drivers to accept or reject rides.
Trendlines: when we want to show different events over the same time period, ex No of accidents occurred , customer rides, fuel usage and so on on a single chart.
Word Trees: A new way of providing hierarchical data ex: different countries having different providers and each provider having different vehicle classes and each vehicle with amenities and rates.
Apart from we have so many other services we can develop the trip visualization using google libraries like:
Maps Static API
A powerful map api which can be used for showing trips with pickup, drop-off and stops and markers with different vehicle classes and live traffic and directions. It provides a way to render our own layer with an overlay showing navigation path for providing safety tracking to customers( each overlay layer representing an event feature).
Place Library
Give detailed information in json format for any searched place , Auto complete integration gives flexibility to end-users in inputting addresses with less keystrokes.
Augmented Reality
There are so many popular SDKs and ARKits available in the market for integrating data and transforming into Augmented Reality for Iphone and Unity for web browsers.
Conclusion
Software development and product life cycle are never-ending and we need to keep on updating based on the business needs. Based on the size of the Product, we need to address and incorporate various frameworks and client-side libraries like Google APIs, Knockout for MVVM, React of component reusability and rendering performance, Angular to bring MVC to the client-side with WebApi as data providers. Various Micro ORMs to fetch the data faster. Caching techniques to reduce load and improve user experience and last but not least simplifying production release with less downtime using DevOps.
Corporate booking tool for business travel programs
What is CBT
Corporate booking tool aka known as CBT is mainly created to facilitate a hasslefree business relationship between the travel house and its corporate clients. The corporate profile data can be efficiently created, based on divisions such as departments, designations, user roles, and accordingly internal travel guidelines and booking workflow can be managed. The system is able to provide various reports for corporate and supplier reconciliation.
There are numerous options out there in the digital ether, so it’s obvious to get lost searching for the right fit.
What are the CBTs available in the Market?
- Amadeus cytric Travel & Expense
Bridging travel booking with expense management Amadeus cytric Travel & Expense (AcTE) is Amadeus’s new online booking tool, launched in early 2016, working on Microsoft outlook plugin integration.
- Concur
Efficient and generating transparent expense reports Concur is an online expense-based management service that consolidates and organizes travel-related expenses, also provides SAP integration which will reduce overhead for customers for consuming services from SAP.
- Egencia
Egencia is a mobile-based travel management system that is run by the customer data and funding from its parent company, Expedia. At backend it uses SOAP-based XML services for Booking.
- GetThere
GetThere, another product from Sabre Travel Network, is an online travel management system configured mainly to help companies and deal with multiple vendor agreements and complicated travel policies.
- Lola
An on-demand mobile-based platform that connects travelers directly to a team of travel managers, Lola helps both business and leisure travelers to find things like hotels, flights, and everything in between.
- HelloGbye
HelloGbye is an online platform that uses artificial intelligence to have a travel bot along your side all throughout the booking process. You just have to create a profile, set your city of origin, and you’re all set.
- TripCase
Like GetThere, Sabre has launched one more tool ‘TripCase’. The moment a trip is booked, the flight, car and hotel reservation information is automatically added to a traveler’s TripCase account. The traveler does not have to do anything, other than login to its registered TripCase account, to see its latest trip information. Any additional plans can easily be added by forwarding confirmation emails to trips@tripcase.com or manual addition to account. After TripCase account creation accessing key travel documents and information is very easy.
- Carla
CARLA is one more CBT (travel bot) available, which offers advice for planning your business trip. You can fire travel policy questions to it, such as if you’re allowed to fly in business class, and it will let you know right away because it’s “memorized” your company’s travel policy. It gives you advice on packing, advising do you need a business visa or types of adapters you should carry for international travel. While booking, Carla can give you excellent price-saving recommendations because it can combine flights with trains, for example. It helps you choose the nearest hotel to/from the airport or office and tells you the local weather of where you are traveling to.
Working of CBT
Let’s take a look at GetThere CBT tool, and understand its working.
GetThere after login looks like this
If you are going to the Airport or coming back from Airport, GetThere is wise enough to auto calculate pick up/drop of time and distance.
In the background, GetThere connect with Sabre GDS (using exposed REST API) to process the further things like fetching service provider who serves in this area with their rates
Based on provider selection, users can proceed with remaining things like providing user-specific details like name. mail id and phone number. This information can be fetched from the profile too.
Payment options like credit cards supported by providers/cash/account transfer etc.
Users can edit the existing booking details/choose different service providers or can choose different payment options. Deletion of itinerary can also be possible.
Targeting the right tool for your company
As you can imagine, the options for CBTs in the business travel world are plentiful and diverse. Picking the right tool for you or your company is an important decision and based on various company-specific factors including time, money, manpower, and flexibility. Specifically SMEs may find that CBTs are useful because they already provide some existing functions and infrastructure, which is critical especially with smaller companies or startups where the business travel process has not yet been fully established.
Whether your company uses mobile-based apps, AI travel assistants, or a fully digital booking service, it is important to have updates of the latest trends in CBTs and adjust your business travel solutions as your company grows. We’ll be sure to keep you updated as new developments occur.
Advantages of CBT
- CBT like GetThere is able to talk directly to GDS like Sabre, so it’s fast and secure, and option oriented.
- Center driven processes– Some of the available CBTs offer business travel planning, travel management, and support all under one roof. Services and information such as booking price, itinerary info, travel expenses, and emergency information (e.g., forecast weather delays) are all accessible in a single digital platform, making business trips a very smooth experience for the traveler.
- Saving Directly The booking autonomy of CBTs reduces workloads from travel agencies.
- Indirect savings. Early booking allows travelers to take advantage of lower fares/rates, while still following with company travel policy.
Compliance of Travel policy
CBTs always take care of increased travel policy compliance by making only policy-compliant options available to employees. Up to date compliance means increased savings because of in-policy booking with the company’s preferred rates.
Expense handling tools like Travog, DCSplus, ExpenseMate, OnFly will integration with CBT can perform a better job. Saving money is earning it, these tools at the backend connect with respective backend engines, to provide the best possible suggestions based on the traveler, company policy, preferences, and the past buying behavior. This will certainly make it time and money efficient for travelers to buy a trip.
Drawbacks of Corporate Booking Tools
Distributed processes– Couple of CBTs are not “all-inclusive” and won’t offer a number of services that corporate travelers need to use. To keep costs low and trips optimized is difficult now.
Installation costs: CBTs can have high initial implementation costs, depending on the specific CBT’s rates and the size of the business. However, the positive side is these rates can still be lower than those of many TMCs.
Start-up complexity: CBTs are usually compound to set up, requiring expert teams to install and manage the required tool(s). This can lead to an increase in HR costs for SMEs.
Conclusion:
Here at Neova we possess the development and testing knowledge with expertise in travel domain for various GDS system integrations. We provide solutions for Automation for web portals, SOAP-based web services, and RestAPIs. We have been working on integrating CBT like GetThere and SABRE GDS. We can help you to establish an initial setup and make you Ninja from Novice.
Integration of Location Services
Location service is used to search and retrieve any address related to Airport or landmark information with multiple components like Countrycode, State, City, Postal Code, AddressLine, etc .
This service is created using the WCF framework and can be consumed by a variety of clients.
Location service architecture:

Location service features are exposed to the clients by means of Location interface. Within the service, this interface is implemented for business rules and parsing/validation in the business layer, which makes a call to database service for handling databases. Database service has been implemented using ADO.Net to communicate with the database and on receiving the data from the database, it will send this data as a response back to the business layer.
If the data is not there in response(as received from database), a request is sent to Google API and the response received by Google API is saved to the database and after parsing and validation, response is sent to the clients, else Google API call is skipped and the response from the database is sent to the clients.
Defining Location service Interface:
public interface ILocationService
{
[WsdlDocumentation("Get geocoding information based on the address search text.")]
[return: WsdlParamOrReturnDocumentation("Returns DataTable containing specified address information.")]
[OperationContract]
DataTable GetAddressBySearchText
(
[WsdlParamOrReturnDocumentation("Expects search string to find the street address.")]
string SearchText
);
}
Calling database layer methods from business logic:
//Invoking the Data layer service method to get the street address details
DatabaseClient dbClient= new DatabaseClient();
dtSearchBasedAddresses = dbClient.GetAddressBySearchText(SearchText);
//returning the data table containing address details
return dtSearchBasedAddresses;
Example of database layer method
public DataTable GetAddressBySearchText(string SearchText)
{
try
{
//Create Db Connection
Database DBConnection = DBConnectionCertificate.GetDatabase();
using(DbCommand dbCommand= DBConnection.GetStoredProcCommand(Location_Addresses_SP, SearchText))
{
//Execute query.
DataSet dsAddresses = DBConnection.ExecuteDataSet(dbCommand);
return dsAddresses.Tables[0];
}
}
catch (Exception ex)
{
Faults.DataLayerExceptionFault objFault=new Faults.DataLayerExceptionFault(ex.Message.ToString());
throw new FaultException<Faults.DataLayerExceptionFault>(objFault,new FaultReason(ex.Message.ToString()));
}
}
Calling Google API:
1. For calling Google API, developers have to instantiate the URL by providing the expected inputs(like latitude, longitude etc) and Google API key.
var url = String.Format("{0}geocode/xml?latlng={1},{2}&sensor=false&client={3}",
ConfigurationManager.AppSettings["GoogleAPIUrl"], Latitude, Longitude, ConfigurationManager.AppSettings["GoogleClientID"]);
2.Next step is to convert the default base64 encoding in order to implement a URL safe version
url=GGA.Common.Security.GoogleSignedUrl.Sign(url,ConfigurationManager.AppSettings["GoogleSignatureKey"]);
3.Read the response
var geoCodeResponseXml = System.Xml.Linq.XElement.Load(url);
var status = geoCodeResponseXml.Element("status").Value;
Features of Location Service
Addresses
- Get geocoding information based on the address search text.
- Get place id for the specified state and/or province for a given code.
- Get addresses based on search text.
- Get cities based on state,country or search text.
- Get latitude and longitude for geocoded addresses.
- Get addresses based on latitude and longitude.
- Get a country name based on country code.
- Get states and provinces based on country code and culture code
- Address validation
- Save/Get addresses to/from cache.
- Get cached addresses based on street,city,state,country and/or postal code.
- Get Train station addresses based on station code or search text.
Airport/Airline information
- Get airport addresses information based on airport code or search text.
- Get airline details based on search text, culture code or airline code.
- Get recent airports for the specified user.
- Validation of flight based on airline code and flight number.
Routes
Get travel distance and time for a matrix of origins and destinations.The information returned is based on the recommended route between the start and endpoints, as calculated by the Google Maps API.
Timezone and Phone formats
- Conversion of the local date/time to universal date/time based on the latitude and longitude.
- Get phone formats for countries based on culture code.
Advantage of using Location service:
- Cost-saving:Location service has been implemented in such a way that for any request, data is first checked in cache or database and sent back as response to the client.Only in cases where data is not available in memory or database, Google API is called.
- Performance: As Location service is created using WCF, it is very fast as compared to other ASMX web services.
- Location service: It is interoperable and supports a variety of protocols like TCP,https,msmq, etc.
Conclusion
This article explains the architecture of Location service with few examples and provides the details of its features and advantages. This service provides a lot of location-related features and thus is very useful in applications related to the travel domain.
How to Integrate REST API with Unit testing?
Why do we need Unit testing?
● The developer knows where our code “breaks” as compared to the tester, so while developing if we implement Unit testing then we can improve code quality, so this will help in reducing bug-fixing, cost and time.
● If we ignore Unit testing it leads to higher defect fixing cost and time during System Integration and Beta testing after the application is completed. Proper unit testing done at initial stage at developer’s end saves both time and money.
What is Unit testing?
Testing an individual unit, such as a method (function) in a class, from other modules of your application. A Unit test doesn’t test the whole module; it tests the smallest unit that makes up a more significant module
Advantages:
- With Unit testing, the speed of development will be faster.
- Traditional testing involves setting breakpoints, debugging the code and providing inputs through GUI(Graphical User Interface). But Unit testing will simplify testing without GUI.
- It takes less time to find and fix the bugs during Unit testing.
- Reusable codes also reduce the effort and save time as the code needs to be modular in Unit testing and also bugs are fixed in the initial stage.
Disadvantage:
- It cannot catch broad system errors or integration errors.
Different frameworks available in market for Unit testing:
1. MSTest – It is an in-built testing framework provided by Microsoft.
2. NUNIT – It is an open-source testing framework that is entirely written in c#.
3. XUNIT – This framework supports programming language i.e JUnit for java and .net.
Let’s do a quick comparison to evaluate better framework:
NUnit VS MSTest:
- Nunit contains an [TestCase] attribute that allows implementing parameterized tests. This feature is not available in MSTest
- MsTest’s ExpectedException attribute is a bug where the expected message is never really asserted even if it’s wrong – the test will pass.
- NUnit contains an articulate version of Assert API (as already mentioned – Assert.That..)
- Nunit is much faster
- NUnit can run tests in both versions like 32 and 64 bit (MSTest only runs them in 32 bit IIRC)
- NUnit allows an abstract set of classes to be test fixtures (so you can inherit test fixtures). MsTest does not contain test fixtures.
- NUnit contains PNunit (running parallel tests with NUnit). MsTest only adds this ability in visual studio 2010 IDE
How to integrate NUnit Framework?
NUnit – provided by Microsoft.NET open-source Unit testing Framework. It provides a rich set of assertions as static methods of the Assert class. NUnit Assert class is used to determine whether a particular test method gives expected results or not. In a test method, we write code to check the business object behavior.
NUnit Features –
- Run test suites parallelly.
- Strong support for data-driven tests.
- Supports multiple platforms including .NET CORE, Compact Framework, and Silverlight.
- Every test case can be added to more than one category, to allow for selective running.
- These Tests can be run from a console runner, within Visual Studio through a Test Adapter, or 3rd party runners.
Attribute difference Test class vs Test fixture
Using the “Test fixture” attribute we can provide parameters for class but using “Test class” will allow parameters for only Test attributes method.
E.G – [TestFixture(“hello”, “hello”, “goodbye”)]
REST API:-
A RESTful API is used to send HTTP requests like GET, PUT, POST, and DELETE data through existing protocols.
Working Flow of REST Request:-
After sending a Rest request from the user it will go to API=> App layer=> Controller=> Repository=> Database Services, performs execution and sends a response back to the server.
How to Integrate REST API with Unit testing using NUnit Framework?
Step-1: Download and install Nunit3-console or follow the links given below:-https://github.com/nunit/nunit-console/releases/download/v3.10/NUnit.Console-3.10.0.zip
Step-2: Open the respective Unit testing project in Visual Studio Or Create a new Unit testing project as:
Step-3: Open NuGet Package Manager Console for that project and type following commands in the given order:
- Install-Package NUnit -Version 3.12.0
- Install-Package RestSharp -Version 103.1
- Install-Package NUnit3TestAdapter -Version 3.13.0
Perform this for each Unit testing project.
Step-4: Performing Nunit we need to declare Test class and Test attribute for function
Step-5: Build and execute the test project
Step-6: There are 2 ways of running Unit test:
1)Through Test Explorer in Visual Studio:
Click on Test tab → Select Windows tab → Click on Test Explorer
After this a new pane will open on the left side which will contain all the test cases found by the test explorer. These are the test cases which have attributes [Test] above them in a test fixture in Unit testing projects.
- You can run these test cases selectively or all together.
- You can also debug test cases by right-clicking on them and selecting the Debug option to check the workflow of a particular test case.
The NUnit 3 Test Adapter which we installed earlier, allows you to run NUnit 3 tests inside Visual Studio.
2)Through Command Prompt:
Note: Always Open Command prompt in administrator mode for running NUnit console command-line test cases
There are 3 ways of Testing:
- Test by using Default parameters
- Test by providing parameters
- Test by providing invalid parameters
1) Change directory to installation directory of NUnit console
eg: C:\WINDOWS\system32>cd C:\Program Files (x86)\NUnit.org\nunit-console
2) Sample test case
C:\Program Files (x86)\NUnit.org\nunit-console>nunit3-console.exe
--testparm:hotelbookingid=AIR
--test:"HotelBooking.DataLayer.Tests.HotelSeriviceTests.GetBookingSystemSettings"
"E:\PROJECTS\UnitTests\HotelBooking.DataLayer.Tests\bin\Debug\HotelBooking.DataLayer.Tests.dll"
Where,
--test param → parameters to be passed to test case
(If multiple parameters need to be passed following the same syntax for each param with space in between and if no parameters are required then skip this)
--test → namespace of the test case class which contain program filename and test method name
"E:\PROJECTS\UnitTests\HotelBooking.DataLayer.Tests\bin\Debug\HotelBooking.DataLayer.Tests.dll" → DLL path to Unit testing project folder
If we don’t pass any test parameters, then the tests will run with default parameters given in the code.
Conclusion
In this article, we explained how to write Unit tests for Rest API and the purpose was to get an idea about how Unit tests are written and executed and a major advantage of this Unit testing is that we know the actual rest request failed reason.
Performance Optimization Using Caching Mechanism
Let’s try an exercise. Try to remember any memories about your childhood. Now try to remember the same memory again after some time. You shall be able to remember it much quicker the second time. This happens because as soon as you recalled the memory the first time, your brain saved this information in your recent memory.
Caching works exactly the same way. Cachingenables us to store data in memory for quick access. When the data is needed again, applications can fetch the data from the cache instead of fetching it from the source. In addition, caching can also make data available when the data source is unavailable. Therefore, caching is one of the most popular performance optimization techniques which not only saves time but also increases the overall performance of an application or website.
There are two main areas for implementing caching mechanism
1. Application Caching
2. Website caching
Application cache is used to store and fetch web resources that are fetched from the web server in the first request. Getting resources from the cache is more efficient and faster than getting them from the source. This means it can be loaded instantly as no retrieving is needed and the resource will be ready to use.
In application caching, we can use the SQLDependency Class which establishes a relationship between an item stored in an ASP.NET application’s cache object and either a specific SQL Server database table or the results of a SQL query.
We can initialize dependency like:
SqlDependency = new SqlCacheDependency("DB_Name", "Column_name");
While using this class there is a possibility of
DatabaseNotEnabledForNotificationException
therefore, we need to implement try and catch blocks with the code to handle exceptions.
The CacheDependency class monitors the dependency relationships so that, when any of the dependencies change, the cached item associated with it will be automatically removed. We can implement this class as:
CacheDependency dep = new CacheDependency(fileName, dt);
cache.Insert("key", "value", dep);
if (dep.HasChanged)
{
Response.Write("The dependency has changed and the item will be removed");
}
2. Website caching means the resources from site sources are fetched in the first request and stored in the cache.
There are two main types of caching mechanisms
1. Client-side Caching
When a user visits a site for the first time, the browser stores items like CSS files and images for a specific time. Browser caching allows these saved items to be immediately available upon the next request, rather than placing a new request which needs to be sent back to the server. It will reduce the number of requests and results in faster web page loading time and improves the user experience. Browser caching is useful for reducing download time for static content like CSS, js, and images.
We can also use Local storage which enables us to store data locally in a browser. This data has no expiration date and will persist even after the browser window is closed. The following are some methods for using local storage:
- setItem() — Add key and value to local storage
- getItem() — Retrieve a value by the key
- removeItem() — Remove an item by key
- clear() — Clear all storage
For example, we can use local storage in Javascript like:
localStorage.setItem("key", value);
localStorage.removeItem(“key”);
localStorage.getItem(“key”)
localStorage.clear()
2. Server-Side Caching
This type of caching can serve many visitors from a centralized cache whenever a user visits the website. This helps us to reduce the load on the server and improves web page loading time for users. This type of cache acts on behalf of the web server and serves the users by providing them the required data without hitting app servers and database servers.
Caching is implemented through “Cache-Control” which is an HTTP header directive which is sent out in every instance of the HTTP response header. Although caching is helpful in many ways but, for security reasons, any sensitive data such as history and user account information should never be cached.
ASP.NET provides the following different types of caching :
Output Caching
Rendering a web page may involve some complex operations like accessing the database and initializing complex controls. Output caching allows us to bypass the round trip to the server, by caching data in the memory. It stores a copy of the completely rendered HTML page or part of the page which is sent to the client from the server. When the client requests for this page next time, instead of fetching the page from the server, the cached copy of the page is used to save time.
Syntax for implementation of Output Cache directive is:
<%@ OutputCache=" " Duration="10" VaryByParam="*" %>
The option VaryByParam helps you to specify the variables that would require a new cache entry. Other possible options include VaryByCustom, VaryByHeader and Location.
Data Caching
Data caching means caching data from a data source. When the cache expires fresh data is obtained from the data source and the cache is refilled.
The main aspect of data caching is caching the data source. These controls are derived from the abstract class DataSourceControl and have the following properties for implementing caching:
- CacheDuration – Sets the number of seconds for which caching will be done
- CacheExpirationPolicy – Defines the cache behavior when the cache has expired.
- EnableCaching – Specifies whether to cache data or not.
Object Caching
Object caching is to cache the objects on a page, such as data-bound controls. The cached data is stored in the server memory. It provides more flexibility than other caching techniques. The object can be of any type – a data type, a web control, a class or database object and any item can be added to the cache by assigning a key name like:
Cache["key"] = item;
REDIS Cache
Redis is an open-source NoSQL, high-speed memory data structure store. It is quick and it resides entirely in the memory with very small performance overhead. It is free for both commercial and non-commercial use under the BSD license.
It maintains data structures such as Sets, hashes, lists, strings with range queries, bitmaps, and geospatial indexes. It also has built-in support for replication, transactions, and also data persistence.
Redis allows the user to store a huge amount of data without the limitation of relational databases. Redis is written in ANSI C.
Redis is a reliable choice if your application requires to store and recover a huge amount of data and if the application is hosted on multiple servers.
The following are the benefits:
- High performance and application caching
- Simple Usage
- Very easy configuration with any application
- Supports lists of data types(hashes, lists, sets, etc)
- It provides Web UI for viewing web content
In order to install Redis, we need Cloud or Dedicated Server. The hardware requirements include 4 core CPU,16GB RAM, 1GBps Network Connection, and 2 storage devices.
Integration of Redis cache using C#.Net
Step 1: We need to download NuGet package StackExchange.Redis which will be our connector to Redis cache
public class MyRedisConnectorHelper
{
static class Redis
{
static string redisHost = "127.0.0.1";
static int redisPort = 6397;
static string redisPassword = "admin123";
static string redisConnection = string.Format("{0}:{1},password={2}",redisHost, redisPort, redisPassword);
static string connectionString;
connectionString=redisConnection,syncTimeout=30000,connectTimeout=30000,ssl=False,abortConnect=False, allowAdmin=true";
static Lazy multiplexer = CreateMultiplexer();
public static ConnectionMultiplexer Connection
{
get
{
multiplexer.Value.PreserveAsyncOrder = false;
return multiplexer.Value;
}
}
private static Lazy CreateMultiplexer()
{
return new Lazy(() => ConnectionMultiplexer.Connect
(connectionString));
}
}
}
Step 2: We can use the Redis Cache Manager as:
public class RedisCacheManager : ICacheManager, IDisposable
{
private static IDatabase db;
private readonly RetryPolicy _retryPolicy;
public RedisCacheManager(ILogger logger)
{
db = Redis.Connection.GetDatabase();
var retryStrategy = new FixedInterval(4, TimeSpan.FromSeconds(3));
_retryPolicy = new RetryPolicy(retryStrategy);
}
public T Get(string key, ref bool hasValue)
{
var serializedItem = _retryPolicy.ExecuteAction(() => db.StringGet(key));
var item = JsonConvert.DeserializeObject(serializedItem);
if (item == null)
return default(T);
return item;
}
public void Set(string key, object data, int cacheTime)
{
var expiresIn = TimeSpan.FromMinutes(cacheTime);
var serializedItem = JsonConvert.SerializeObject(data);
_retryPolicy.ExecuteAction(() => db.StringSet(key,serializedItem,expiresIn));
}
}
Another caching option we can use is Memcached. It could be preferable when caching small and static data, such as HTML code snippets. Its internal memory management is more efficient in the simplest use cases because it consumes less memory for metadata. Strings are ideal for storing data that is only read, because strings require no processing. String is the only data type supported by Memcached.
Advantages of Redis over Memcached
1. Data Types Supported:
Memcached supports data records of the simple key-value structure. The data types supported by Redis include String, List, Hash, Set, and SortedSet.
2. Memory Management Scheme
The unique thing about Redis is that all of the data storage is not in memory. Redis may swap out values that are no longer in use. These values are then made persistent into the disk and are erased from the memory. This feature of Redis can maintain much more data than system memory capacity. Memcached has a high memory management efficiency but its major defect is that it causes space waste.
3. Support of data persistence
Redis supports memory data persistence, whereas Memcached does not support the data persistence operation.
Redis with Java application:
To use Redis with Java we need to download the jar named jedis.jar and include it into the classpath.
We also need Jedis which is a client library in Java for implementing a Redis data store. It is small, fast, and fully compatible with Redis 2.8.x and above.
Now we will see how we can use Redis in-memory data store and Jedis client library in a Java application :
Step 1: We need to add maven dependency for Jedis client library like:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
<type>jar</type>
</dependency>
Step 2: We can write a simple Java application to connect to a Redis server like:
package com.eduonix.redis.example
import redis.clients.jedis.Jedis; public class RedisJavaExample { public static void main(String[] args) { //Connect to Redis server using localhost Jedis jedis = new Jedis("localhost"); System.out.println("Connection is successful"); System.out.println("Getting response: " + jedis.ping()); } }
Step 3. Now we will store a value in Redis cache as:
package com.eduonix.redis.example
import redis.clients.jedis.Jedis;
public class RedisCacheExample {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
System.out.println("Connection successful");
jedis.set("Test", "Test data 1");
//Retrieve the value from the cache
System.out.println("Stored value: "+ jedis.get("Test"));
}
}
String is the most common value stored in Redis cache and it is stored as a key-value pair.
Conclusion:
We all know that performance is a key factor when it comes to websites for providing the best experience to end-users. Caching helps with the same by acting as a mediator between server and end-user by providing data on demand quickly. There are various caching mechanisms that can be used to speed up websites or applications. Although caching may seem like an afterthought for small applications, it is very crucial for complex applications.