AR – Augmented Reality

As is evident from the name, AR (Augmented Reality) is about augmenting the reality through the use of computer or computer aided devices. I would pull out scene from Minority Report to give an instant example of Augmented Reality:

via GIPHY

While the data is projected using computer, the images etc are moved using hand gestures. The glass screen that is seen is a real world whereas the projected images are virtual. The actions are virtual but they result into some real action. All this is achieved using Augmented Reality.

What’s Latest in Augmented Reality space?

Augmented Reality - Educational Use
Augmented Reality – Educational Use

Minority Report was in 2002. Technology is much advanced now and it several things are happening on this front. (BTW – researchers have recreated Minority Report using AR).

PokemonGo game became very popular due to usage of AR in the gaming activities (2016).

Snapchat introduced AR into their app and every phone has become a device which can create images or videos with some emojis added to the reality. Snapchat launched this feature in Sept-2017.

Alexa assisted glasses will be introduced in CES (2018). If you watch that interview, it would be an advanced version of Google Glass (2013) where person wearing the glasses would be able to talk to Alexa fitted in the glasses and responses would be projected in front of the eyes!!

Augmented Reality VS Virtual Reality

It is often easy to confuse Augmented Reality with Virtual Reality. However, there’s an important and basic difference between these two technologies. In AR, reality is augmented by computer generated inputs such as sounds / videos etc. Whereas in VR (Virtual Reality), entire environment is created with the help of computer and computer aided devices. In AR, user can see real world, whereas in VR, user is completely immersed in the virtual world.

Interesting Use Cases:

Related Links

Related Words

Virtual Reality, HMDs,  Eye Glasses, Mixed Reality, Google Glass

MapReduce

MapReduce is a programming model that allows applications to process large amounts of data in a parallel and efficient manner. It distributes the load to several different computers known as nodes.

Need for MapReduce

As usage of computers grew, the data that was getting collected also grew from KB to MB to GB. Now-a-days several applications have data which runs in petabytes or even further. With the emergence of IOT (Internet Of Things), we are talking about several billion sensors around us each producing tremendous data.

The collected data could be useful only if we can process that data and get some meaningful insights to improve the application or business. With huge amount of data, processing it on a single machine started becoming inefficient. This forced researchers to look for mechanism to automatically distribute the load across several computers and gather the final outcome to single node. Google researchers developed this technology which we know as MapReduce.

But What Is MapReduce Actually?

In simple terms, input data is mapped in a certain fashion such that it could be distributed to different nodes using a key. This mapped data is then processed in such a fashion that the output is meaningful set of data – it is referred to as data reduced to required output. And hence the name of the methodology – MapReduce.

Steps:

Typically it is considered to have 5 steps

  • Prepare the input – The system designates the processors and assigns a key to each processor known as “Mapper”. Then all the data related to assigned key (K1) is then handed over to that “Mapper”.
  • Mapping – This is a step where “Mapper” executes the user provided Map() function. Being user provided function, it knows what kind of data is being processed. This function maps various keys in the input data to create intermediate output which is a list organized by another key (K2).
  • Shuffling – In this step system brings all data related to one K2 key to a single processor referred as “Reducer”. As a result, intermediate data gets transferred to various “Reducers” based on the K2 keys.
  • Reducing – In this step, each “Reducer” processes the values for all the keys assigned to that “Reducer”. Each “Reducer” runs the user provided “Reduce()” function. This function again knows what kind of data is processed and how it should be condensed to create final output. Each “Reducer” creates their own output matching to each K2 key.
  • Final output – In this final step, the system collects all the “Reduced” data from each “Reducer” and sorts it on the basis of key K2. This is the final output.

Typical example for MapReduce is WordCount:

MapReduce - Word Count Example
MapReduce – Word Count Example (Source: https://cs.calvin.edu/courses/cs/374/exercises/12/lab/)

Opensource implementation for MapReduce is Apache Hadoop. There are several other implementations for this methodology including AWS MapReduce, CouchDB, Azure HDInsight.

Related Links:

Related Words:

Apache Hadoop, HDFS, AWS MapReduce, CouchDB, Azure HDInsight

NoSQL

NoSQL databases really mean No Relational Databases. These databases provide mechanism to store structure, semi-structured or unstructured data. However their key feature is not having the relation between different data the way it is maintained in relational databases. Many of these databases also support SQL like interface. And hence these databases sometimes are also referred as Not Only SQL.

Database
Database Auto-sharding, replication

Types of NoSQL Databases:

  • Key-Value: In this type, data is stored in key value format. Every item to be stored in the db is stored as an attribute – referred as “key” and associated value.
  • Graph – This type of database is useful for storing network like data such as social network.
  • Document Database – Each document is stored as key and associated data in value. The associated data could be in XML, JSON etc and could also be nested.
  • Wide-column stores

Advantages of NoSQL Databases:

  • Dynamic Schemas – NoSQL databases are built to insert data without any predefined schema and hence this works very well with parallel development, agile methodology. Developers can define their own requirements for data storage and could be completely independent of other teams to store in the same DB.
  • Auto-Sharding – NoSQL databases have built-in support to scale horizontally. Whereas relational databases usually scaled vertically.
  • Replication – Most NoSQL databases have support for replication of data across the instances. And this is transparent to the application.
  • Caching – Some of the NoSQL databases also provide caching which improves the performance even further.

Typical Use cases:

  • Personalization – Application can start collecting data incrementally and store it in NoSQL DB seamlessly. This would not be easy with RDBMS.
  • Real Time Big Data – NoSQL is optimized for distributed writes and hence serve as a good storage for real time big data.
  • Internet Of Things (IOT) – Billions of devices across the globe would be collecting humongous data. Such data would demand all the characteristics of a NoSQL DB.

Related Links:

Related Keywords:

Database, OLTP, OLAP, MongoDB

Chatbot

Chatbot is a computer program that communicates with a human either via audio or text. It is built with a specific purpose in mind and usually have a very narrower scope.

Chatbots
Chatbot

Is Chatbot same as Personal Assistant like Siri/Cortana?

Personal assistants like Siri or Cortana have a far wider scope. They can answer questions related to current weather conditions. Or they can tell you jokes or recommend currently running movie. Whereas chatbots have a very specific function such as selling a product or providing help related to a product. They can also guide you through FAQ. But they can’t do more than that.

Typically chatbot assumes lot of human traits. It can have a photo of its own or it can have a name of its own. A chatbot can be mentioned in a conversation or it could be called out using name. It could be added to a group conversation or one could have one-to-one chat with the chatbot.

Conversational Chatbot

This type of chatbot uses NLP (Natural Language Processing) to understand human questions and responses and responds in such a fashion that human can understand.

Rule Based Chatbot

This type of chatbot presents the information in a very structured manner and doesn’t really understand conversational language. e.g. Instead of asking “Would you like to have a pizza or pasta?”, it would prompt “Choose your option: 1. Pizza 2. Pasta” etc. NLP is missing in these types of chatbots.

Historically there have been several types of bots such as crawlers, scarpers etc. All these are automated programs and were meant to do specific tasks, but they didn’t communicate with humans directly. Chatbot is advanced version of bots where bots are communicating with Humans. Essentially they are helping humans answering their questions or even selling some products to humans.

Some chatbots can initiate conversation proactively (after first initiation by human) whereas others need humans to start the interaction everytime. Proactive feature could be used by news websites to push the top stories or breaking news to humans who had initiated chat at least once and had opted in to receive these kind of notifications.

Use cases:

  • Selling a product
  • Providing account balance to authenticated customers
  • Handle call center kind of work
  • Send top news items
  • Send movie recommendation

Developers can choose from variety of platforms and software options to build and deploy chatbots quickly.

Related Links

Related Keywords

Artificial Intelligence, NLP

AMQP

AMQP means Advanced Message Queuing Protocol. It is a protocol that is used for communication between two systems, which need to be loosely connected and potentially are heterogeneous.

What is a Message Queue?

When a subsystem (consumer) is dependent on some events occurring in some other subsystem (producer), we need to devise a way for communication between these two subsystems. IPC (Inter process communication) could be one such way, but it requires both the processes (subsystems) to run on same system. This is unlikely in distributed architecture and microservices architecture. As a result a mechanism has been devised where producer will post the events/outcome to a queue. This queue is then read by one ore more consumers. This is referred as Message Queue.

AMQP essentially allows two systems to communicate using Message Queues, but doesn’t put any dependency on the implementation of these systems. One system could be written in a C / C++ and other system could be a Java application. Such heterogeneous systems can comfortably communicate using AMQP. AMQP defines how a message should be constructed and sent over the wire, instead of defining how to implement producer and consumer. It is simply a byte stream across the network. Any consumer conforming to the data format can interpret the message. Hence this is also called as wire-level protocol.

Features of AMQP:

  • Message Orientation
  • Queuing
  • Routing
  • Reliability
  • Security

AMQP implementations allow routing such as point-to-point (one producer – one consumer) or publisher-subscriber model (one or more consumers can subscribe to messages from one or more publishers).

It is often easy to compare JMS (Java Messaging Service) with AMQP. The important difference is that JMS is an API, which defines implementation for producer and consumers, and hence it is tied with Java platform.

AMQP ensures the messages are delivered reliably and acknowledgement is obtained. Hence it forms an important aspect of the communication between producer and consumer.

A compelling example use case of Message Queue would be that of Food delivery ordering system. Typically such systems get loaded during meal hours and can’t afford to loose any orders due to errors. Posting the order data to message queue can ensure every order is processed.

Related Links:

Related Keywords

Software Architecture, AWS SQS, RabbitMQ, Apache Kafka