Thursday, August 25, 2016

IRI - Internationalized Resource Identifier

IRI extends the concept of URI (Universal Resource Identifier) to include characters from the universal character set. 

URI’s are limited to ASCII character set which makes it hard for users not familiar with English language to understand and use it


IRI makes it possible for users to access web using their own language alphabets

--------------------------------------------------------------------------------------------------------------

Tuesday, August 23, 2016

Hypermedia API

An API is a contract or an agreement between the provider and the consumer. This agreement decides the protocol, mechanism, input and the output of an API.

There are many different types of API’s. The programming language itself comes with a rich set of API which can be leveraged for performing common functions.

Then there are API’s that can be consumed across machines. The RPC, SOAP & REST provides mechanism for the API’s to be consumed from across the machines and over the web.

REST API’s has become quiet popular because of their simplicity and unambiguous mechanism
through which it exposes its various operations. But REST has a few limitation
  1.  The vocabulary is not standardized in REST. The input and the output parameter names are specific to the provider and the same parameter might mean a different thing when it comes to another provider
  2. It doesn’t lead to self-discovery of API’s. Knowing the API for creating a product doesn’t reveal any information about what else can be done with that provider. May the provider also provides API to view, update and delete the product? The API signature of these operations needs to be known to the developer in advance for him to build those functions

The Hypermedia API address these two major problem with the REST. It provides a standard vocabulary for all providers and consumers to use. And it provides mechanism for exposing follow up operations that can be performed.


And it does this by including hyperlinks within the response, pointing to the endpoints for other operations, hence the name Hypermedia API.

-------------------------------------------------------------------------------------------------------------------------

Monday, August 15, 2016

Poly-paradigm programming

This refers to the use of multiple styles of programming for an application. Object oriented, functional, procedural, query based, message oriented languages can be used together for building an application.

Over the years, we have seen the evolution of different styles in programming. It has been largely procedural in the early days. Then functional programming started gaining popularity.

Soon object oriented programming become popular leading to modelling real world entities as objects in the software world.

Query based programming come into prominence to standardize and make it easy to interact with the database. Similarly message oriented programming came about to make it easy to send and receive asynchronous messages.

Though the trend has been to adopt the popular paradigm at the start of the project, it was soon realized that each paradigm has its own advantages and disadvantages. And it has become common to adopt different paradigms for different areas of the application, selecting the most suitable paradigm for the specific area.


Majority of polyglot programming uses languages adopting different paradigms to take advantage of each to solve specific problem areas.

-----------------------------------------------------------------------------------------------------------------------

Tuesday, August 9, 2016

Polyglot Programming

This refers to the use of multiple programming languages for an application. The idea is to use the language that best fits for developing the functionality.

The concept of polyglot programming has been around for quite some time now. Any dynamic web application includes coding in HTML, Javascript apart from a main language. Any app that requires database for storing data uses SQL to store, update and query data apart from a main language.

Single language for the whole app was in main stream during the 80’s and early 90’s when a language like C, COBOL, … is used for everything done by the app, right from delivering the UI to persisting the data in the database.

Increasingly there is a move to the adoption of multiple languages, even for the main language used the app development. 

Threading intensive functionality can use a language that support easy and efficient management of threads. 

Similarly IO intensive functionality can use a language that good at handling IO.

With the arrival of micro-services and containerization, the adoption of polyglot programming is expected to increase.

-----------------------------------------------------------------------------------------------------------------------

Monday, August 8, 2016

Polyglot persistence

This refers to the system that uses different databases for each of its components. The idea is to choose the database that best fits the needs for a particular component.

The flexibility of RDBMS have led to a scenario where over the years, it has become a default choice for persistence. In some cases, RDBMS is severely constraining and we have been addressing it by having a layer of abstraction on top of the RDBMS solution. Some examples of the abstractions that we have used are
  • Having a caching layer that reads from the database
  • Storing files as byte arrays and having functions that converts files to byte arrays & back
  • Building data access layer to map complex object to relational model

The emergence of different varieties of NoSQL databases has given us the choice to choose from a wide variety of options.

A complex enterprise application comes with multiple modules & functionalities, all its data needs may not be met with a single persistence technology. It would be beneficial to pick the right database for each.


The solution that includes multiple databases for its persistence needs is referred to as polyglot persistence

--------------------------------------------------------------------------------------------------------------------

Scale cube

The scale cube describes a three dimensional scalability model based on x, y & z axis scalability.

X-axis scalability is scaling a system by running multiple clones of the system behind a load balancer. Each clone takes part of the load, thus helping in sharing the load across the clones. This is the widely adopted and easily implementable scaling model.

Y-axis scalability is scaling a system by splitting it based on functionality. Each set of functionally related modules are deployed to gather.

Z-axis scalability is scaling the system by splitting them based on the data it handles. For example, handling of data based on region, customer type, etc. Here data is partitioned and each instance handles requests to its specific data set.

------------------------------------------------------------------------------------------------------------------------------------------------

Wednesday, August 3, 2016

Compute optimized & Memory optimized instances


Though I initially came across only these two terms, when exploring found that these are just two of the six different family of instances offered by Amazon EC2

The other four are
  1. General purpose
  2. Storage optimized
  3. Micro instances &
  4. GPU instances


Let me keep the focus on Compute optimized & memory optimized instances in this writing

Compute optimized instances are instances that are suited for running CPU intensive applications (heavy traffic webservers, batch processing, compute intensive engineering applications, etc.). They have higher vCPU to memory ratio and are offered at the lowest cost per vCPU

Memory optimized instances on the other hand are best suited for memory intensive applications (high performance in-memory databases, in-memory analytics applications, etc.). These instances are offered at lowest cost per GB of RAM compared to its peers

--------------------------------------------------------------------------------------------------------------------------

Tuesday, August 2, 2016

Gartner Hype cycle

What happens when a new promising technology gets introduced?

How it pans out to become a mainstream technology of choice?

What cycle it goes through?

When it’s safe to be adopted?

These are some of the questions that Gartner hype cycle tries to provide answers to

The cycle talks about the five phases a technology goes through

Trigger: Early prototypes gets people interested. Though yet to be proven, there is a lot of excitement and publicity at this stage

Expectation: This is when the success stories of early adopters comes out. The initial success of few takes the expectation on the new technology to the peak, tempting others to adopt it  

Disillusionment: When the initial excitement fails to yield the expected returns. Many fail at this stage, investment reduces to a minimum.

Enlightenment: The technology gets more widely understood and its benefits becomes clear. New robust products begin to appear, learning from the previous set of failures.

Productivity: The technology starts to pay off and attracts widespread adoption.  

Gartner hype cycle is a graphical representation of these five phases a technology goes through from its trigger till its widespread adoption

-------------------------------------------------------------------------------------------------------------------------

Monday, August 1, 2016

Thrift

Developed at Facebook, its first technical paper was released in Apr 2007. Too late to be listed as a tech term to know about now, but let me continue for those who are catching up with this term.

It’s released to open source and is now a project at Apache software foundation.

Thrift is a framework for implementing RPC in services with cross language support. It provides an Interface definition language (IDL) and has tools to generate code from the IDL in a language of our choice. The client and the server code can be in different languages.

What this means for a developer is
- On the server, use the generated code to actually implement the functionality
- On the client, call the generated stub passing in the appropriate parameters to invoke the function 

The marshalling & un-marshalling of the parameters and return types irrespective of the languages used on the client and server side is taken care of under the hoods by the Thrift framework.

More details at https://thrift.apache.org/

--------------------------------------------------------------------------------------------------------------------------