Showing posts with label unique implementation. Show all posts
Showing posts with label unique implementation. Show all posts

Friday, May 19, 2017

Apartment: Save the Electricity: A plan to minimize/simplify the "Borewell Water Supply process"

Just AUTOMATIC


Save Electricity


Changes in Borewell Water Supply: -
=======================

*) Existing Process of Borewell Water Supply.... strictly sequential process....... as follows. 
-> Borewell Motor sends water from Borewell to 'Borewell Sump Tank'.
-> 'Borewell ST-OT Motor' sends water from 'Borewell Sump Tank' to 'Borewell Overhead Tank'.

*) Proposed Process of Borewell Water Supply.... individual process....... as follows.
-> Borewell Motor sends water directly from Borewell to 'Borewell Overhead Tank'.
-> In emergencies (Borewell Motor Fails, etc.), 'Borewell ST-OT Motor' sends water from 'Borewell Sump Tank' to 'Borewell Overhead Tank'.

*) Required Changes for Proposed Process....... as follows.
-> Before making these changes, just verify the capacity of Borewell Motor, by considering the height of the Apartment as an additional parameter for measurement.
-> One 'Changeover Switch' between 'Borewell ST-OT Motor Switch' and 'Borewell Motor Switch'.  This is to avoid both motors work same time.
-> Currently, there are two Automatic controllers for Borewell Water needs; (1) for Borewell Motor, i.e., with 'Borewell Motor (ON/OFF) Sensor' in 'Borewell Sump Tank', and (2) for 'Borewell ST-OT Motor', i.e., with 'Borewell ST-OT Motor (ON/OFF) Sensor' in 'Borewell Overhead Tank'.
As 'Borewell ST-OT Motor' is required in only emergencies, Automatic controller is need not required, for 'Borewell Sump Tank' connected with 'Borewell Motor (ON/OFF) Sensor'.  So, 'Borewell Motor (ON/OFF) Sensor' has to be moved from 'Borewell Sump Tank' to 'Borewell Overhead Tank'; and remove the existing 'Borewell ST-OT Motor (ON/OFF) Sensor' from 'Borewell Overhead Tank'.  
Finally, Borewell Motor works based on 'Borewell Motor (ON/OFF) Sensor' that is in 'Borewell Overhead Tank'. 
-> There are three plans for this purpose.
  Plan-1: Manual & Cautious: Changes in 'Borewell Sump Tank' with T-detach feature.  Be cautious to fix T-detach pipe, while operating Motor(s).  This Plan can be easily verified.
  Plan-2: Semi-Manual & Cautious: Changes in 'Borewell Sump Tank' with 'T-connect Valve' feature.  Be cautious to make 'T-connect Valve' ON/OFF, while operating Motor(s).
  Plan-3: Automatic & Safe & Cool: Making separate line with 'T-connectLine Valve' feature.





*) Benefit of this Change:
-> Saving Electricity more than 70%.  Saving Electricity is nothing but producing Electricity.  
-> The Waterflow distance will be reduced.  
 - Minimum Benefit to make lesser distance with Plan-1/Plan-2: The area of 'Borewell Sump Tank'.  
 - Maximum Benefit to make lesser distance with Plan-3: [The area of 'Borewell Sump Tank'] + { [The length of the existing pipeline between (Borewell, 'Borewell Sump Tank') and ('Borewell Sump Tank', 'Borewell Overhead Tank')] - [The length of the proposed pipeline between (Borewell, 'Borewell Overhead Tank')] }.  The benefit will be more when 'Borewell Overhead Tank' is near/towards to Borewell.
-> Saving Time in lifting Water from Borewell to 'Borewell Overhead Tank'.
-> Saving Association/People Money. 
-> Process Simplification.  Now onwards, one Borewell Motor works instead of two Motors.  So, there will be only one Automatic controller, for Borewell Water needs.
-> Need to take few precautions for Plan-1/Plan-2, to avoid Motor(s) get damaged.  Plan-3 is the best without any issues.

Wednesday, October 5, 2016

Process Automation : e-Commerce : Order Management : Issue in 'Bulk Order loading Process' is Resolved, with Batch processing automation.

Just AUTOMATIC

--------------------------------------------------------------------------------------------------------------------------
e-Commerce Business Order Management
--------------------------------------------------------------------------------------------------------------------------

:: Order Loading ::


Concept:
Batch processing automation in 'Bulk Order loading Process'.

e-Commerce B2B online application:  
Enduser can select the items; and place the orders by online.  Application is having two possible ways of order processing.  (i) Manual Order Process, (ii) Bulk Order loading Process.  
In 'Manual Order Process', enduser can choose the items selectively at front-end system, while placing the order.  This process is helpful if the order is having very less/limited number of items.  
In 'Bulk Order loading Process', B2B client has to provide prior inform about the order(s) to the 'Application Administrator' in the form of specific TXT format.  Then the TXT formatted orders will be loaded in to the System.  The successful loaded orders will appear at front-end system.  Now, enduser can place the order with (selected) items, at front-end system.  This process is helpful for bulk orders; and also, if the order is having bulk number of items.  
      
Issue & Risk: 
While loading Bulk orders, the process is getting terminated after sometime by showing (DB CURSOR) ERROR, without loading all the Orders.  Very few Orders are getting loaded in this case.  Due to this, 'Application Administrator' has to restart the process all the time.  It's very hectic.

Problem Statement:
*) The issue is arising in only live System.  (1) Because, lakhs of Orders will be loaded in live system at a time.  (2) It's very difficult to reproduce the issue at Development environment.  (3) It's very difficult to verify the Resolution.

Challenges:  
*) No documentation available.  So, every step is a 'trail and make' process.  
*) Each process is the combination of multiple customizations; those are related to different Clients.  So, I need to take care about impact analysis while taking a decision at each level.  

Root Cause Analysis (Q&A): 
*) Is the issue reoccurring ?
No. The issue is occurring only when loading the bulk (lakhs of) orders at a time.    
*) Is it possible to load the specific amount of Orders based on Scheduler ?
No.  In general, Scheduler initiates the process at specific time.  But, in this 'Bulk Order loading Process' scenario, the number of Orders are variable; and, the number of Items in each Order is also variable.  The availability of Orders is not time based.  So, the Time based Scheduler may not be helpful to resolve the issue.  
*) Try for a solution at Google and Forums ?
Suitable solution is not available.

Requirement: 
*) It is required to load the specific (configured) amount of Orders, at a time.
*) The 'Bulk Order loading Process' has to be continued till all the Orders are loaded.
*) Time based Scheduler is not suitable.  
*) There is a provision to enable/disable this particular customization.

Concept for Issue Resolution: 
*) I thought about Batch processing automation in 'Bulk Order loading Process'.  
*) Whenever the 'Bulk Order loading Process' is initiated, the process selects the specific amount of Orders for loading.  Once the orders are loaded, the process reinitiates itself automatically, for next iteration of same loading process.  The process continuous till all the (available) Orders are loaded into the System.  A configuration element is required to enable/disable this particular customization.  

Concept Implementation: Simple change for Greater impact: 
*) Based on Requirements,  
Present Scenario:  Select all the Orders & Load the Orders.
Proposed Scenario: Select the specific amount of Orders & Load the Orders.  Make this process automatic till END.  A configuration element to enable/disable this.   
*) Application Changes are implemented as follows: 
-> Step 1: Instead of selecting all the Orders at a time, Application will select specific amount of Orders for loading, based on configuration.
-> Step 2: Reinitiate the Step 1 automatically, till all the (available) Orders are loaded into the System.      
-> Step 3: Make a configuration to enable/disable the Steps 1 & 2.
*) 'Bulk Order loading Process' is a Java Application program.  It is the combination of hierarchical of many Classes.  The Base Class is having the selection of Orders for loading.  The Derived Classes are having completely customized Order loading process, configured differently for different Clients.  Steps 1 & 2 are implemented at Base Class.  Reinitiating method has been overridden in Derived Classes.  So, the Concept implementation became simpler with OOP (Object Oriented Programming) Concepts, Inheritance and Polymorphism.
*) The impact analysis (to verify the concept for all the Clients' scenarios) is a major task here. 
Finally, the Issue Resolution is created a greater impact.

Benefit:
The specified issue has been resolved completely.  'Application Administrator' work became simple.  
The Results created excitement in everyone.
Thus, the concept (Batch processing automation) is very much helpful to improve the accuracy with rapidness, in 'Bulk Order loading Process' without any issues.  

Conclusion: 
The Bulk Order loading Process is completely automated, with the Batch processing automation.
In fact, 'Batch processing automation' is an everlasting load balancing concept.

--------------------------------------------------------------------------------------------------------------------------
Kudos to my Team Member Mr. Niraj Kumar for his sincere involvement.



Thursday, February 25, 2016

Patent: System and Method for Automatic naming convention of Audio files based on User preference.

Just AUTOMATIC

Bharateeya/Indian Patent Office: Application No. 2686/CHE/2014
Publication Date: 12-FEB-2016

===

System and Method for Automatic naming convention of Audio files based on User preference.

     The present invention generally relates to a computerized Speech Synthesis System. The present invention particularly relates to a computerized system for providing a method for automatic naming convention of audio files used during text-to-speech conversion, based on the user preference.

===


===

Patent: Method and System for Transliterating text from One language to Multiple language scripts.

Just AUTOMATIC

Indian Patent Office: Application No. 931/CHE/2012.  
World Intellectual Property Organization (WIPO): Patent Cooperation Treaty Application No. PCT/IN2013/000155. 
http://patentscope.wipo.int/search/en/WO2013136344 )
Publication Date: 19-SEPT-2013

===

Method and System for Transliterating text from One language to Multiple language scripts.

     The embodiments herein generally relate to a method for data processing or text processing and particularly relates to a method for processing of input text and phonetic conversions.  The embodiments herein more particularly relates to a method and system for transliterating an input text into multiple languages.

===


===

Monday, September 7, 2015

Process Automation : e-Commerce : Order Management : Order Loading and Order Extraction

Just AUTOMATIC


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



e-Commerce Business Order Management

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

:: Order Loading ::

Concept:
Order reloading Process Automation.

Existing Process: 
It's a e-Commerce B2B online application.  Enduser can select the items; and place the orders by online.  Application is having two possible ways of order processing.  (i) Manual Order Process, (ii) Bulk Order loading Process.  
In 'Manual Order Process', enduser can choose the items selectively at front-end system, while placing the order.  This process is helpful if the order is having very less/limited number of items.  
In 'Bulk Order loading Process', B2B client has to provide prior inform about the order(s) to the 'Application Administrator' in the form of specific TXT format.  Then the TXT formatted orders will be loaded in to the system.  The successful loaded orders will appear at front-end system.  Now, enduser can place the order with (selected) items, at front-end system.  This process is helpful for bulk orders; and also, if the order is having bulk number of items.  
      
Issue & Risk: 
While loading orders through 'Bulk Order loading Process', orders may 'failed to load' into the system, due to many reasons, i.e., (i) mis-configurations in the system; (ii) missing required/mandatory data at TXT; (iii) remarks in TXT formatted data; or any.    
After fixing the required configuration issues, 'Application Administrator' will reload the orders by selecting specific orders through separate tool.  It's a manual process.  It's a risk in case of handling Bulk orders.              

Challenges:
*) No documentation available.  So, every step is a 'trail and make' process.
*) Each process is the combination of multiple customizations, those are related to different clients.  So, I need to take care about impact analysis while taking a decision at each level.

Requirement
Order reloading process has to be automated.  

Issue Resolution: 
Order reloading process is incorporated as part of the basic Order loading process.  Now, 'Application Administrator' need not worry about Order reloading process.  Once the configuration issues are fixed by him/her, order loading process will collect the 'Issue-Fixed Orders'; and then, revalidate and reloaded them into the system....... automatically.       

Conclusion: 
The concept is very much helpful to improve the 'accuracy with rapidness' in 'order reloading' process.  

Benefit:
Complete 'order reloading' process is automated.


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


:: Order Extraction :: 


Concept:
IPP Order extraction Process Automation.

Existing Process: 
Once the endusers have placed the orders at front-end system, the orders will be extracted in the form of flat text files and then passed on to legacy system for processing.
    
Issue & Risk: 
While performing extraction of orders, orders may 'failed to extract' from the system, due to some specific mis-configuration reasons.    
After fixing the required configuration issues, 'Application Administrator' will make some changes at database to initiate re-extraction process.  It's a manual process.  It's a risk in case of handling Bulk orders.              

Challenge:
No documentation available.  So, every step is a 'trail and make' process.

Requirement
Order re-extraction process has to be automated.  

Issue Resolution: 
Order re-extraction process is incorporated as part of the basic Order extraction process.  Now, 'Application Administrator' need not worry about Order re-extraction process.  Once the configuration issues are fixed by him/her, order extraction process will collect the 'Issue-Fixed Orders for Extraction'; and then, revalidate and re-extract them for the legacy system....... automatically.
And also, make a provision to extract the specific order(s) at any point of time, for the convenience of 'Application Administrator'.       

Conclusion: 
The concept is very much helpful to improve the 'accuracy with rapidness' in 'order re-extraction' process.

Benefits:
Complete 'order re-extraction' process is automated.


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

Thursday, September 3, 2015

Process Automation in calculating Final Date/Time, by skipping Holiday(s) and Non-Business Hour(s).

Just AUTOMATIC

Risk: 
Application is not able to provide accuracy in (Review, Escalation, Final, Delivery, Expected End, Deadline, etc.) Date/Time calculation, as the expected Date/Time is not calculated by considering/skipping "Holiday(s) and Non-Business Hour(s)".

Problem Statement:
I have developed a program (Skip Non-Business Hours and Holidays) that will give accuracy in (review/escalation/delivery/final) Date/Time calculation, by considering/skipping "Holiday(s) and Non-Business Hour(s)".  But, the application is doing the process based on 'List of Holidays'.  As the 'list of Holidays' is get updated every year, the code of application is also need to be get updated every year.

Temporary Solution:
To avoid the code changes every year, I can configure the 'list of holidays' at the local database (or properties file).

Issue: 
Every year, 'application administrator' should be aware of this change; and (s)he has to perform this task for all applications manually.  If there is any change in the list, (s)he has to re-perform the same task once again, for all applications manually.  It's a risk.

Requirement Analysis: 
*) Application should get the 'list of holidays' from a central point.
*) 'Application administrator' should get a mail if the latest 'list of holidays' is not available at central point.
*) The 'list of holidays' need to be stored in the local database (or properties file) at once, as part of  the scheduler job.
*) Log should have the status (i.e., availability of the latest 'list of holidays').
*) Application administrator should be able to trigger the scheduler at any point of time, to get the latest 'list of holidays'.

Permanent Solution Provided: 
*) I have requested my 'Boss Prof. Ashoka M' for making the 'list of holidays' at the central point (i.e., 'global application').  So that, all other applications are get accessed the latest list, through webservice.
*) I have made the following application changes:
-> Scheduler will verify the availability of the (latest) 'list of holidays' at the "(i) local database (or properties file)" and "(ii) web-service", by comparing with present year.  This is to verify the quality of data before update.
-> The data verification and updation will be as follows:
ALERT: if the (latest) 'list of holidays' is not available at both places, i.e., at the webservice and also at the local database (or properties file); send  alert/mail to 'Application Administrator' with details.  
IGNORE: if the (latest) 'list of holidays' is available at the local database (or properties file).
UPDATE: if the (latest) 'list of holidays' is not available at local database (or properties file), and available at the webservice; store them in the database (or properties file).    
-> Log will have the status (i.e., availability of the latest 'list of holidays') with details.  
-> To get the latest 'list of holidays' at any point of time,
(i) 'Application administrator' can trigger the scheduler.  Generally, scheduler will have the update (if required) and the replace/overwrite options.                           (Or)
(ii) If 'Application administrator' removes the present data at local database (or properties file), the application gets the latest data automatically through scheduler job.

Conclusion:
The concept is very much helpful to provide accuracy in (Review, Escalation, Final, Delivery, Expected End, Deadline, etc.) Date/Time calculation, by considering/skipping "Holiday(s) and Non-Business Hour(s)".  Even, it is possible to consider/skip 'Employee Leave Days', to improve the accuracy in calculation of the availability of particular employee Date/Time.    

Benefits:
Complete process is automated.  If the valid data is available at the central point (i.e., 'global application'), all other applications are get updated automatically.

Use Cases:  (Review, Escalation, Final, Delivery, Expected End, Deadline, etc.) Date has to be calculated by skipping "Holiday(s) and Non-Business Hour(s)".
*) Project Management Applications (like Project Database Application, Project Plan Application, Project Execution/Delivery Application, etc.).
*) Workflow (with Review/Escalation process) Applications.
*) Leave Application.
*) Adieu Application.
*) e-Commerce Applications.
*) Visa Processing Applications.
*) Government ('Digital BHARAT' and 'Make in BHARAT') Applications.  



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

Kudos to my Boss 
Prof. Ashoka M
Chief Adviser, NIRAM FOUNDATION (www.niram-foundation.org)

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


Tuesday, June 28, 2011

Java program to skip Non-Business Hours and Holidays


// To Calculate Review Time by skipping Non-Business Hours and Holidays

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;

public class SkipNonBusinessHours
{

public static final int BUSINESS_START_HOUR = 9; //      9 AM
public static final int BUSINESS_END_HOUR = 18; // 6 PM

public static void main(String[] args)
{
// One Working Day means 9 Hrs
   final int WORKING_MINS_PER_DAY = 540; // Total Working Minutes per day
   final int MINUTES_PER_HOUR = 60;

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm a");

int addTime = 1;
String sDaysOrHours = "hours";   // "days";

if(sDaysOrHours.equalsIgnoreCase("days"))
{

addTime = addTime * WORKING_MINS_PER_DAY; // Converting Days to Mins
}
else if(sDaysOrHours.equalsIgnoreCase("hours"))
{

   addTime = addTime * MINUTES_PER_HOUR; // Converting Hours to Mins
}
    // Getting Present Date and Time
Calendar n_givenDateTime = Calendar.getInstance();
System.out.println("Present Date:\t\t" + sdf.format(n_givenDateTime.getTime()));

SkipNonBusinessHours time = new SkipNonBusinessHours();
time.addBusinessTime(n_givenDateTime, addTime);
System.out.println("\nFinal Date :\t\t" + sdf.format(n_givenDateTime.getTime()));
}


// Method to add Review Time (in minutes) to Given Date

public void addBusinessTime(Calendar givenDateTime, int addTimeMins)
    {
// To get Present Working Day & Hour excluding Holidays
adjustToBusinessHours(givenDateTime);

while(addTimeMins>0)
{
// Finding Business End Time On That Day
Calendar businessEndTime = Calendar.getInstance();
businessEndTime.setTime(givenDateTime.getTime());
businessEndTime.set(Calendar.HOUR_OF_DAY, BUSINESS_END_HOUR);
businessEndTime.clear(Calendar.MINUTE);

// Difference of Time in Minutes AND Conversion Milli-Seconds to Minutes
int diffMins = (int) (( businessEndTime.getTimeInMillis() -
                           givenDateTime.getTimeInMillis())/(1000*60));

if(addTimeMins < diffMins) // Adding Total Minutes to the Same Day
{

givenDateTime.add(Calendar.MINUTE, addTimeMins);
break;
}
else // Adding available Minutes to the Same Day
{

givenDateTime.add(Calendar.MINUTE, diffMins);
adjustToBusinessHours(givenDateTime);
addTimeMins = addTimeMins - diffMins;
}
}
}


// Method to skip Non-Business Hours (Before 9 AM and After 6 PM)

public void adjustToBusinessHours(Calendar givenDateTime)
{

int hourOfDay = givenDateTime.get(Calendar.HOUR_OF_DAY);

if(hourOfDay < BUSINESS_START_HOUR) // Skip to 9 AM on that Day
{

            givenDateTime.set(Calendar.HOUR_OF_DAY, BUSINESS_START_HOUR);
givenDateTime.clear(Calendar.MINUTE);
}

if(hourOfDay >= BUSINESS_END_HOUR) // Skip to Next Day 9 AM
{

            givenDateTime.add(Calendar.DATE, 1);
            givenDateTime.set(Calendar.HOUR_OF_DAY, BUSINESS_START_HOUR);
givenDateTime.clear(Calendar.MINUTE);
}

skipHolidays(givenDateTime); // skip Holidays
}


// Method to skip Holidays ( Weekends and General )

public void skipHolidays(Calendar givenDateTime)
    {
skipGeneralHolidays(givenDateTime); // General Holidays before Weekends

if(givenDateTime.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY)
        {

            givenDateTime.add(Calendar.DATE,2); // Saturday and Sunday
                                                                                  // in case of Business Hour
            givenDateTime.set(Calendar.HOUR_OF_DAY, BUSINESS_START_HOUR);
givenDateTime.clear(Calendar.MINUTE);
}

if(givenDateTime.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY)
{

            givenDateTime.add(Calendar.DATE,1); // Sunday
                                                                                // in case of Business Hour
            givenDateTime.set(Calendar.HOUR_OF_DAY, BUSINESS_START_HOUR);
givenDateTime.clear(Calendar.MINUTE);
}

skipGeneralHolidays(givenDateTime); // General Holidays after Weekends
}

// Method to skip General Holidays

public void skipGeneralHolidays(Calendar givenDateTime)
{
// Considering only given Date without Time (Temp)
Calendar givenDate = Calendar.getInstance();
        givenDate.setTime(givenDateTime.getTime());
        givenDate.set(Calendar.HOUR_OF_DAY, 0);
        givenDate.set(Calendar.MINUTE, 0);
        givenDate.set(Calendar.SECOND, 0);
        givenDate.set(Calendar.MILLISECOND, 0);

// List of General Holidays
        GregorianCalendar[] generalHolidays =  getGeneralHolidays(givenDate);

for(int i=0; i<generalHolidays.length; i++) // Check for all Holidays
        {

if(givenDate.equals(generalHolidays[i]))
            {

givenDateTime.add(Calendar.DATE,1); // Add one date to Actual Date & Time
                                                                     // in case of Business Hour
givenDateTime.set(Calendar.HOUR_OF_DAY, BUSINESS_START_HOUR);
givenDateTime.clear(Calendar.MINUTE);

givenDate.add(Calendar.DATE,1);   // Add one date to Temp Date
}
}
}

// General Holidays list

public GregorianCalendar[] getGeneralHolidays(Calendar givenDate)
{

GregorianCalendar[] genHolidays =  {
     
        new GregorianCalendar(givenDate.get(Calendar.YEAR), Calendar.JANUARY, 14),
        new GregorianCalendar(givenDate.get(Calendar.YEAR), Calendar.JANUARY, 26),
        new GregorianCalendar(givenDate.get(Calendar.YEAR), Calendar.MAY, 1),
        new GregorianCalendar(givenDate.get(Calendar.YEAR), Calendar.AUGUST, 15),
        new GregorianCalendar(givenDate.get(Calendar.YEAR), Calendar.OCTOBER, 2),
        new GregorianCalendar(givenDate.get(Calendar.YEAR), Calendar.NOVEMBER, 1),
   new GregorianCalendar(givenDate.get(Calendar.YEAR), Calendar.DECEMBER, 25)

};

return genHolidays;
}
}


Use Case:  Process Automation in calculating latest Date for the application.