Patent Publication Number: US-10764379-B2

Title: Method, apparatus and system for enhancing a user&#39;s engagement with a service

Description:
CROSS REFERENCE TO RELATED APPLICATIONS SECTION 
     This application is a national stage application, filed under 35 U.S.C. §371, of PCT Application No. PCT/CN2013/083050, filed on Sep. 6, 2013 entitled, “METHOD, APPARATUS AND SYSTEM FOR ENHANCING A USER′S ENGAGEMENT WITH A SERVICE,” the contents which are hereby incorporated by reference in its entirety. 
     Field of the Invention 
     Embodiments of the disclosure generally relate to information technology, and, more particularly, to enhancement of user engagement to a service. 
     Background 
     User devices such as smart phones, tablets, and laptops have been widely used. A user can easily access various services with such a user device by using apps or browser. It has been of the interest of a service provider to keep users to use its application or service as often as possible, namely to make its application or service sticky. For example, WeChat is a successful messaging application that is used in China. People constantly use it every day, chatting with others and posting pictures and comments. 
     Operating systems for user devices like Windows, Android and iOS have notifications that can inform users of updates available for an application. Android and iOS send a notification immediately if one of the installed apps has new updates to the phone&#39;s notification bar. However, these conventional notifications may become too annoying and interrupt the user&#39;s experience. Sometimes they may even become like a spam. More often than not there is no need for real-time notifications, since they are not so urgent that need to be read right away. 
     Further, the conventional notifications are not based on a user&#39;s behavior or preferences, but are triggered by time and/or content. Namely, whenever a new message arrives for a user, the system will notify the user right away. However the user may not want to be notified at that time, and prefer to be notified after work on the bus or during lunch time. 
     SUMMARY 
     This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter. 
     According to one aspect of the disclosure, it is provided a method for enhancing a user&#39;s engagement or experience with a service (which is referred to as the user&#39;s active level), the method comprising: obtaining the user&#39;s current active level with respect to the service; determining a target active level; and sending the user a notification about the service at a time determined based on the user&#39;s current active level and the target active level. 
     According to another aspect of the present disclosure, it is provided a computer program product embodied on a distribution medium readable by a computer and comprising program instructions which, when loaded into a computer, execute the above-described method. 
     According to still another aspect of the present disclosure, it is provided a non-transitory computer readable medium having encoded thereon statements and instructions to cause a processor to execute the above-described method. 
     According to still another aspect of the present disclosure, it is provided a system for enhancing a user&#39;s engagement or experience with a service, the system comprising: an application configured to provide the service; a notification server configured to send the user a notification about the service at a time determined based on the user&#39;s current active level with respect to the service and a target active level. 
     These and other objects, features and advantages of the disclosure will become apparent from the following detailed description of illustrative embodiments thereof, which is to be read in connection with the accompanying drawings. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a simplified block diagram illustrating a system according to an embodiment; 
         FIG. 2  is a flow chart depicting a process of determining the time to send a notification according to an embodiment; 
         FIGS. 3A and 3B  are a flow chart and an interaction diagram depicting a process for enhancing a user&#39;s engagement with a service according to an embodiment; 
         FIG. 4  is an illustrative diagram showing the structure of a notification message according to an embodiment; 
         FIG. 5  is a diagram showing effects of different acceleration rates according to an embodiment; 
         FIGS. 6A and 6B  are a flow chart and an illustrative diagram showing a process of selecting items for a notification message according to an embodiment; and 
         FIGS. 7A to 7D  are illustrative user interfaces showing how a notification is presented to the user according to an embodiment. 
     
    
    
     DETAILED DESCRIPTION 
     For the purpose of explanation, details are set forth in the following description in order to provide a thorough understanding of the embodiments disclosed. It is apparent, however, to those skilled in the art that the embodiments may be implemented without these specific details or with an equivalent arrangement. 
     As described herein, an aspect of the disclosure includes providing enhancement of a user&#39;s engagement with a service.  FIG. 1  shows a system that is capable of enhancing a user&#39;s engagement with a service according to an embodiment. 
     As shown in  FIG. 1 , the system  100  comprises a user device  101  operably connected to an application server  102 . The user device  101  can be any kind of user equipment or computing device including, but not limited to, smart phone, tablet, laptop and PC, running with any kind of operating system including, but not limited to, Windows, Android and iOS. The user device  101  has an app  1011  installed in it, with which a user can access the service provided by the application server  102 . The service can be any kind of service including, but not limited to, news service such as Nokia Xpress Now, NBC News, social networking service such as Linkedin, Facebook, and messaging service such as WeChat, Yahoo! Mail. Alternatively, the user can also access the service with a browser installed in the user device  1011 . In this case, the application server  102  would be a web server. 
     Context information about the user&#39;s access to the service (through the app  1011  or browser) is collected and sent to the log data  103  through the application server  102 . More specifically, the context information can include any information that can be obtained, for example, time, location, information obtained by accelerometer, and information obtained by optical sensor. In an embodiment, the context information can be stored in the log data  103  as a plurality of records. Each record has a timestamp, user activity, location, accelerometer measurement, and optical sensor measurement. The location information can be GPS coordinates or cell IDs obtained by the user device  101 . Further in another embodiment, the location information can be social locations translated from the raw location data, such as “home” and “work place” by some existing location mining approaches. An example of such location mining approach has been described by Eagle, N., Clauset, A. and Quinn, J. A. in their article “Location segmentation, inference and prediction for anticipatory computing” published in AAAI Spring Symposium on Technosocial Predictive Analytics (2009). 
     The system  100  further comprises an analytics server  104  having a session analytics module  1041  configured to compute session statistics such as session start time, session end time, session duration and content that was accessed based on the information stored in log data  103 . The analytics server  104  also has an active user module  1042  configured to assess the user&#39;s active level based on the statistics of the session analytics module  1041 . 
     In an embodiment, the user active level is measured according to the user&#39;s AU number (active user number). As known in the art, AU number is a simple metric to measure the engagement of users to a service or application, which indicates the number of active users that use the application/service at least several times (predefined) within a certain number of days. For example, when AU30=100, there are 100 users that use the application/service at least once and at most 3 times within 30 days. In the embodiment, the user&#39;s active level is measured according to the user&#39;s AU number. For example, when the user&#39;s current active level is AU30, the user has accessed the service at least once and at most 3 times on average in the past 30 days. 
     The system  100  further comprises a notification server  105  capable of sending notifications to the user device  101 . The user device  101  has a notification client  1012  that receives the notifications from the notification server  105 . The notification server  105  has a notification predictor  1051  configured to determine at what time a notification is to be sent to the user device  101 . The notification predictor  105  does so in a manner described below. Further, the content of each notification is prepared by a notification content module  1052  with the help of a recommendation server  106 . New content for the notification is provided by a notification recommendation module  1061 . The notification recommendation module  1061  obtains candidate items for the notification from a trending content module  1062  that can access the log data  103 . 
       FIGS. 3A and 3B  shows a process for enhancing a user&#39;s engagement with a service according to an embodiment. As shown in  FIG. 3A , the process starts at step  3001  by collecting context information about the user&#39;s access to the service. As shown by lines  300 ,  305 ,  310  and  315  in  FIG. 3 , the application server  102  sends push requests to the user device  101  periodically, for example every 30 minutes. In response, the user device  101  sends context information back to the application server  102 . As described above, the context information can include any information about the user&#39;s access, for example, time, location, accelerometer measurement, and optical sensor measurement. Further, the location information can be social locations translated from the raw location data, such as “home” and “work place” by some existing location mining approaches. Although this embodiment is described in context of cell phone system which comprises cell base station and service provider, it is noted that the disclosed solutions can also be used in other environments, such as wireless LAN, Wi-Fi. 
     The process then proceeds to step  3005  in  FIG. 3A  where the time to send a notification is determined (lines  320  and  325  in  FIG. 3B ). Specifically,  FIG. 2  shows a process of determining the time to send a notification according to an embodiment. As shown in  FIG. 2 , firstly the user&#39;s current active level is obtained at step  205 . In this embodiment, the active level is measured according to the user&#39;s AU number. That is, the user accesses the service at least once in an AU number of days, as described above. Then at step  210  a target active level is determined. Similar to the current active level, the target active level is also expressed as an AU number. More specifically, the target AU number is less than the current AU number of the user. 
     In this embodiment, a notification is to be sent in Predictor number of days as follows.
 
predictor=β*(AU−1) α +1  (1)
 
     Here, β is used to control the saturation level to migrate the user toward becoming more active. At step  215 , β is calculated from the notification predictor. 
     For example, if the user&#39;s current AU number is 30 and the target AU number is 25, then β can be calculated as follows. 
     
       
         
           
             
               
                 
                   
                     
                       β 
                       * 
                       
                         
                           ( 
                           
                             AU 
                             - 
                             1 
                           
                           ) 
                         
                         α 
                       
                     
                     + 
                     1 
                   
                   = 
                   
                     
                       25 
                       ⇒ 
                       β 
                     
                     = 
                     
                       
                         24 
                         
                           
                             ( 
                             
                               AU 
                               - 
                               1 
                             
                             ) 
                           
                           α 
                         
                       
                       = 
                       
                         24 
                         
                           
                             ( 
                             29 
                             ) 
                           
                           α 
                         
                       
                     
                   
                 
               
               
                 
                   ( 
                   2 
                   ) 
                 
               
             
           
         
       
     
     Then, the process proceeds to step  220  where α is determined. Here, α is a value greater than zero for controlling the acceleration to migrate the user towards being more active.  FIG. 5  is a diagram showing effects of different α values according to the embodiment. A larger α value results in a higher acceleration rate for an inactive user. As shown in  FIG. 5 , the cure C has a larger α value than the cure B. When α=1, the result becomes linear, as shown by the line A in  FIG. 5 . 
     At step  225 , the frequency of notification (Predictor) is determined based on the user&#39;s current AU number, the target AU number and acceleration rate α according to the above equation (1). 
     At step  230 , it is determined whether the current AU number is greater than 1. If the current AU number is not greater than 1 (namely, the user accesses the service every day), then the process proceeds to step  250  where it is determined to send the notification in a content-based mode. Namely, the notification is sent to the user as soon as new matched content is obtained. For a very active user who accesses the service every day, it is necessary to connect him/her always with the most relevant content, rather than improving the active level. On the other hand, if the current AU number is larger than 1, then the notification is to be sent to the user in Predictor days. 
     In this way, the system can determine the date to send the notification based on the user&#39;s current active level, target active level and acceleration rate. As a result, the user can be reminded of the service without being annoyed too much. By using the acceleration rate α, an inactive user can be pushed intensively at the beginning while a more active user will not be notified too often to avoid getting annoyed. 
     Although the determining step  230  is performed after calculating Predictor in this embodiment, it is noted that this step can be performed immediately after obtaining the user&#39;s current AU number (step  205 ). Thus, if the current AU number is not greater than 1, then the process directly proceeds to step  250 , content-based notification, without performing the steps  210 - 225 . 
     In addition to the Predictor days, the time of day when the notification is to be sent can also be determined from the context information according to some embodiments. In an embodiment, the context information includes information about the time the user accesses the service. By looking at the time of the user sessions aggregated over a period of time, it can be determined to send the notification at the time of day when the user usually accesses the service. 
     In another embodiment, the context information includes more information in addition to time of access, for example, location, accelerometer measurement, and optical sensor measurement. From such context information, the user&#39;s habit or preference with respect to use of the service can be determined through context mining technologies, such as Atomic Context-aware Preference feature with Latent Dirichlet Allocation model, and Personalized Context-aware Recommendation with LDA, etc. Examples of these applicable technologies have been described by Kuifei Yu et al. in the article “Toward Personalized Context-aware Recommendation by Mining Context Logs through Topic Models” (published in PAKDD 2012, Part I, LNAI 7301, pp. 431-443, 2012). 
     Thus, the system can determine what the user was doing when accessing the service, and identify user behavior patterns and user preferences from the context information. Thus the system can determine at which time of day to send the notification, so that the notification can get most attention from the user without unpleasant interruption. 
     Furthermore, in an embodiment, when the user migrates to a larger AU number, a new target active level is determined as an AU number in between the previous target AU number and the user&#39;s current AU number. For example, if a user has an initial AU number AU30, then the notification can be sent in 26 days. If the user follows the notification and becomes AU26, another notification can be sent in 24 days after the user&#39;s access, i.e. the new target AU number is 24. This strategy can be repeated to migrate the user to become more and more active. However, if the user does not access the service after receiving the notification, for example, she becomes AU40 instead, then the next notification can be sent in 34 day, i.e. the new target AU number is set in between the previous target AU number and the user&#39;s current AU number. 
     Now refer back to  FIGS. 3A and 3B . After determining the time to send the notification, the process proceeds to step  3010  in  FIG. 3A  where the notification content is obtained (lines  330 - 350  in  FIG. 3B ). Specifically,  FIGS. 6A and 6B  show the process of selecting items for the notification according to an embodiment. In this embodiment, the notification has at least one item selected from a plurality of candidate items. While URLs are used as examples in this embodiment, the items can be anything that the user may be interested in, for example, news, updates, messages, comments, games, blogs and tweets. 
     As shown in  FIG. 6A , firstly, candidate items are obtained together with their trending scores at step  6001 . Here, candidate items can be obtained through existing trending algorithms, such as observing the significance of the recent change of user interaction, or rolling count algorithm used in Twitter. As shown in  FIG. 6B , a candidate item (URL) at a specific time t has a trending score indicating its relative popularity at that time, which can be expressed as trend_score(url,t). 
     Assume that the user has not accessed the service for a period of time since time_start, and that a notification will be sent to the user at time_end. At step  6005 , a hotness score is calculated for each candidate item as follows. 
     
       
         
           
             
               
                 
                   
                     hot_score 
                     ⁢ 
                     
                       ( 
                       
                         
                           ur 
                           ⁢ 
                           
                               
                           
                           ⁢ 
                           l 
                         
                         , 
                         t 
                       
                       ) 
                     
                   
                   = 
                   
                     
                       ∑ 
                       
                         1 
                         = 
                         time_start 
                       
                       time_end 
                     
                     ⁢ 
                     
                         
                     
                     ⁢ 
                     
                       trend_score 
                       ⁢ 
                       
                         ( 
                         
                           
                             ur 
                             ⁢ 
                             
                                 
                             
                             ⁢ 
                             l 
                           
                           , 
                           t 
                         
                         ) 
                       
                       * 
                       
                         [ 
                         
                           α 
                           * 
                           
                             ( 
                             
                               t 
                               - 
                               time_start 
                             
                             ) 
                           
                         
                         ] 
                       
                     
                   
                 
               
               
                 
                   ( 
                   3 
                   ) 
                 
               
             
           
         
       
     
     Here, [α*(t−time_start)] is used as a weight for emphasizing the recentness of an item. That is, a new item is given more weight than an old item. The calculation of hotness score can be done more efficiently in a recursive way, so that there is no need to keep history data processed in batch. For example, the data can be processed in the real time stream as follows.
 
hot_score(url, t )=hot_score(url, t− 1)+trend_score(url, t )*[α*( t −time_start)]  (4)
 
     At step  6010 , those items that the user might have seen are eliminated. This can be done as follows. For each item (URL), there is a first access time, access_time(url), indicating the time that item has been firstly reported as trending in the system. It is reasonable to assume that the user might have seen those items which had been reported as trending on or before the user&#39;s last access to the service, i.e. time_start. Thus, at step  6010 , the system eliminates those items that do not meet the requirement, access_time(url)&gt;time_start. 
     Then at step  6015 , the candidate items left are matched against a user profile that includes the user&#39;s preferences. For example, when the service is news service, the user profile may include the user&#39;s preferences, as the distribution over different categories or topics. The user profile can be learned from history data of the user&#39;s interaction with the service in the past. The candidate items are assessed and ranked according to the user&#39;s preferences. User profile matching can be achieved with conventional approaches, such as content-based or model based approaches, such as similarly measure of cosine distance, or KL divergence. 
     In another embodiment, the remaining recommendation results can further be filtered against the context information. As described above, the context information can include information about the user&#39;s access to the service, such as, time, location, accelerometer measurement, and optical sensor measurement. The context information can be used to infer physical and social context to determine the user&#39;s preferences. Thus the system can identify the user&#39;s behavior patterns and rank the candidate items based on the user&#39;s preferences and the characteristics of the items, such as content classification. One reference embodiment could be Personalized Context-aware Recommendation by only leveraging Individual user&#39;s context logs and Context-aware Popularity based Recommendation. Examples of the conventional approaches have been described by Kuifei Yu et al. in article “Toward Personalized Context-aware Recommendation by Mining Context Logs through Topic Models” (published in PAKDD 2012, Part I, LNAI 7301, pp. 431-443, 2012). 
     At step  6020 , a diversity algorithm is applied to the results to extend the coverage and minimize the content stickiness. Specifically, the system can classify the recommended items based on one or more features such as category, keywords, tags, item type, information source and item location, in order to determine similarity information associated with one or more times. Using the similarity information along with the recommendation scores of the items, the system can increase or decrease the scores to enlarge ranking order differences against adjacent homogenous or similar items. An example of such diversity algorithm has been described by Jilei Tian et al. in PCT application WO2012/142751A1 published on Oct. 26, 2012. 
     Now refer back to  FIGS. 3A and 3B . After obtaining the notification content, the process proceeds to step  3015  where the notification is sent to the user device  101  at the time determined at step  3005  (lines  355 - 365  in  FIG. 3B ).  FIG. 4  shows an example of the structure of a notification message according to an embodiment. As shown in  FIG. 4 , the notification message includes:
         message type—indicating the message is a notification;   user—identifying the user the notification is addressing to;   frequency—indicating the predicted frequency of notification; and   total number of recommended items—indicating the number of items included in the notification.       

     Further, the message also includes a number of topics, topics  1  to N. Under each topic, there can be one or more recommended items.  FIGS. 7A to 7D  show how the notification is presented to the user. As shown in  FIGS. 7A to 7D , “Nokia Xpress Now” is used as an example of the service. First, the notification is received as a message on the user device  101  that indicates that there are new items to be read ( FIG. 7A ). The items are classified into categories. The number of items that come from a certain category can be displayed in the message. This lets the user know the type of new content and prompts the user to be curious, so that the user will go to the application/service. Second, the user can tap on the message to open the app. In this example, “Nokia Xpress Now” app is opened and the list of new items is displayed ( FIG. 7B ). As described above, the new items are included in the notification message. Third, the user experience is similar to that of the regular app. In the example of “Nokia Xpress Now”, the user can first see an abstract of each item ( FIG. 7C ) and tap to view the full story ( FIG. 7D ). In this way, the embodiment can provide a simple, clear and consistent user experience. 
     As shown in the above-described embodiments, the user&#39;s engagement to the service can be enhanced by notifications based on the user&#39;s actual active level and context information, instead of the arrival of new content. If the user migrates to a smaller AU number, then the target AU number can be adjusted to be even smaller. If the user migrates to a larger AU number, then the target AU number is adjusted to be in between the previous target AU and current AU numbers. This prevents disruption and interruption to the user as the notifications are adaptive to the user&#39;s behaviour in using the app/service. The system can choose the “sweet spot” to frequently send notifications to the user without getting the user annoyed. 
     Furthermore, in terms of the content of notification, sufficiently relevant items are selected through matching the candidate items against the user&#39;s preferences, which can be obtained from the context information. Further, through eliminating those items that the user might have seen and adding weight of recentness, it is ensured that the matched items are recently trending, hot and new for the user. 
     The conventional notification basically makes the user easy to access the information. It is purely from user experience perspective, without considering users&#39; churn rate or users&#39; engagement/stickiness. According to the above described embodiments, for a possible churn user, who has not used the service for long time, the notification becomes a reminder adaptive to the user behavior. In this way, the system can avoid bothering the user too much. For example, there may be two groups of churn users: (1) those who forget to use the service due to distractions; and (2) those who do not like the service. For group (1), the reminder may have great effect, making the users start using the service again. For group (2), the reminder may not help too much, but it can at least give the users an opportunity to see that the service might be improved since then, as it is easy to access through the notification service. At least it may not hurt too much since the reminding pace follows the user&#39;s behavior and is less aggressive. 
     According to an aspect of the disclosure it is provided an apparatus for enhancing a user&#39;s engagement with a service, comprising means configured to carry out the methods described above. In an embodiment, the apparatus comprises means configured to obtain the user&#39;s current active level with respect to the service; means configured to determine a target active level; and means configured to send the user a notification about the service at a time determined based on the user&#39;s current active level and the target active level, so that the user is notified of the service without being annoyed. The user&#39;s current active level and target active level can be measured according to the user&#39;s access to the service at least once in an active user (AU) number of days. The apparatus can further comprise means configured to determine at which date to send the notification based on the user&#39;s current active level and the target active level. The AU number of the target active level can be less than the AU number of the user&#39;s current active level. 
     In an embodiment, the apparatus further comprises means configured to determine an acceleration rate. The date to send the notification is determined based on the current and target active levels, and the acceleration rate. 
     The apparatus can further comprise means configured to determine a new target active level if the user migrates to a larger AU number. The new target active level has an AU number in between the AU number of the previous target active level and the AU number of the user&#39;s current active level. 
     In an embodiment, the apparatus further comprises means configured to collect context information about the user&#39;s access to the service. The apparatus can further comprise means configured to determine at which time of day to send the notification based on the context information. The context information may comprise at least one of time, location, accelerometer measurement, and optical sensor measurement. 
     In an embodiment, the notification has at least one item, and the apparatus further comprises means configured to obtain a plurality of candidate items; and means configured to select, from the plurality of candidate items, at least one item to be used in the notification. Further, the apparatus can comprise means configured to calculate a hot score for each of the candidate items based on its trending level and recentness; means configured to eliminate those candidate items that have been firstly reported as trending before the user&#39;s last access to the service; and means configured to select at least one item from the candidate items based on the hot scores of the candidate items and/or a user profile having information about the user&#39;s preferences. The user&#39;s preferences can be determined from the context information. 
     It is noted that any of the components of the system  100  depicted in  FIG. 1  can be implemented as hardware or software modules. In the case of software modules, they can be embodied on a tangible computer-readable recordable storage medium. All of the software modules (or any subset thereof) can be on the same medium, or each can be on a different medium, for example. The software modules can run, for example, on a hardware processor. The method steps can then be carried out using the distinct software modules, as described above, executing on a hardware processor. 
     Additionally, an aspect of the disclosure can make use of software running on a general purpose computer or workstation. Such an implementation might employ, for example, a processor, a memory, and an input/output interface formed, for example, by a display and a keyboard. The term “processor” as used herein is intended to include any processing device, such as, for example, one that includes a CPU (central processing unit) and/or other forms of processing circuitry. Further, the term “processor” may refer to more than one individual processor. The term “memory” is intended to include memory associated with a processor or CPU, such as, for example, RAM (random access memory), ROM (read only memory), a fixed memory device (for example, hard drive), a removable memory device (for example, diskette), a flash memory and the like. The processor, memory, and input/output interface such as display and keyboard can be interconnected, for example, via bus as part of a data processing unit. Suitable interconnections, for example via bus, can also be provided to a network interface, such as a network card, which can be provided to interface with a computer network, and to a media interface, such as a diskette or CD-ROM drive, which can be provided to interface with media. 
     Accordingly, computer software including instructions or code for performing the methodologies of the disclosure, as described herein, may be stored in associated memory devices (for example, ROM, fixed or removable memory) and, when ready to be utilized, loaded in part or in whole (for example, into RAM) and implemented by a CPU. Such software could include, but is not limited to, firmware, resident software, microcode, and the like. 
     As noted, aspects of the disclosure may take the form of a computer program product embodied in a computer readable medium having computer readable program code embodied thereon. Also, any combination of computer readable media may be utilized. The computer readable medium may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device. 
     Computer program code for carrying out operations for aspects of the disclosure may be written in any combination of at least one programming language, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user&#39;s computer, partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. 
     The flowchart and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the disclosure. In this regard, each block in the flowchart or block diagrams may represent a module, component, segment, or portion of code, which comprises at least one executable instruction for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions. 
     In any case, it should be understood that the components illustrated herein may be implemented in various forms of hardware, software, or combinations thereof, for example, application specific integrated circuit(s) (ASICS), functional circuitry, an appropriately programmed general purpose digital computer with associated memory, and the like. Given the teachings of the disclosure provided herein, one of ordinary skill in the related art will be able to contemplate other implementations of the components of the disclosure. 
     The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the disclosure. As used herein, the singular forms “a,” “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of another feature, integer, step, operation, element, component, and/or group thereof. 
     The descriptions of the various embodiments have been presented for purposes of illustration, but are not intended to be exhaustive or limited to the embodiments disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the described embodiments.