Wednesday, November 04, 2009

Encroachers Hammering Project

Recent anti-encroachment drive of Mysore is an example of admirable planning and execution. The drive was directed and managed by the MCC commissioner K. S Raykar.

Planning Phase:Almost 6 months

a) to get approvals from higher ups including district minister Shobha Karandlaje

b) to develop project execution plan.

Departments Involved: MCC, MUDA, Mysore Police (KSRP, CAR, DAR...etc), Telecom Department

Project Leads: K.S Raykar( MCC Commissioner), Manivannan (DCP), Sunil Agarwal (Police Commissioner)

Project Team Structure/Resourcing:

Commanded by: 2 teams of MUDA and MCC

Executed By: 27 teams of workers!!!

The team organization and composition of each team is shown below.




Risks/ Risk Mitigation:

Stay Order from Court: The operation was started on a Sunday, early in the morning - no court is open at that time.

Influence from elected representatives: All the phone lines, land line and mobile, were jammed with help of Telecom providers - physical presence required for any kind of influence.

People gathering to protest: Jamming of phone lines prevent mobilization of people. Also, 500 policemen providing security would deter anyone raising voice.

Result: More than 450 encroachments cleared by noon!

Issues Encountered: There was protest by the elected representatives at the demolition site. The threat of arrest, and few arrests, by the police was enough to diffuse the crowd.

Post Execution: MCC Commissioner goes on a 3 day sick leave from Monday – leaving all the encroachers and their supporters with the rubble!

Monday, July 13, 2009

A Geyser Weekend

This weekend has been a Geyser weekend. All the weekend I was hunting for a geyser to buy. I realized this is not an easy task considering the kind of stuff you need to look for. Here is a small checklist of stuff you need to be aware for buying a geyser in India.

Capacity: 25-15 liters Storage - This is enough for a bathroom geyser in most household of 4 to 6 ppl. The decision in this case has to be based on the requirement since the cost difference between a 25 ltr and 15 ltr model is Rs 400.

Plastic Body (ABS) Acrylonitrile Butadiene Styrene (C8H8• C4H6•C3H3N)n plastic has very good electrical insulation properties.

Copper Drum
- Copper has special anti corrosive properties that prolongs the life of the water heater. This is useful for hard water areas.The heat retention in Copper Drum is more than that of stainless steel.

Pressure - It is recommended to select a heater with pressure withstanding capacity of 6 Kg/cm2 and above in case of high rise apartments where the pressure can build-up due to water inlet. This might be due to a pressure pump used for water or water gushing down from the overhead tank.

Adjustable Temperature - Ideal water temperature for a bath is 40- 45 degrees. This would save some money the electric bill!!

Thermal Cut-out - A fail-safe device to prevent over heating and boiling

Pressure cum vacuum release–prevents build up of excessive pressure (by releasing water) or vacuum (sucking in air) inside the tank.

Semi return device – prevents dry heating of the element by cutting off flow from the tank- ensuring that element is always immersed in water.

2-in-1 pressure cum release valve - Ensures positive and negative pressure is not created inside the tank

Ceramic Heating Element - No electric shock. It is a cartridge type element that is not in contact with water. Also the heat transfer is over a much larger surface area. The result- longer elements, life, lower salt deposits, hence ideal for hard water areas, easier to replace without draining the water.

PUF Insulation - Poly Urethene Foam prevents heat loss, retains heat longer.


Certifications & Warranty
ISI/BIS certification - A must india.
Warranty period for 5 years.
IEC international certification .
And of course 5 star energy rating!!

I happened to select a water heater with most of theses specifications - 2 years down the line i will be evaluating these criteria :)

Friday, June 19, 2009

Solving a Linear Programming Problem

Operations Research (OR) is one of the key constituents of analytics. Solving a Linear Programming Problem (LPP) is core to OR. In one of my projects we have used a Simplex solver to choose an optimal solution from a set of available solutions. Its quite interesting to see a real life LPP.

We use the SYMPHONY an open source generic MILP (Mixed-Integer Linear Programs) solver from COIN-OR.

This solver takes two inputs

  • Problem model file: The Problem Model file contains the formulation of the LPP to be solved. The file uses GMPL (a subset of AMPL) a modeling language for Mathematical Programming.
  • Input data file:This file contains the input data of the problem to be solved.

Equipped with this information I decided to solve one of the 6th Semester Engineering LPP problems.(I still have my 6th Sem OR notes!!)

Problem Statement:
A small scale hardware production plant produces Nuts, Bolts and Rivets. A box of Nuts fetches a profit of Rs 20 per fortnight. Profit per fortnight from a box of Bolts and Rivets is Rs 6 and Rs 8 respectively. A box of Nuts requires 8 hrs of Milling, 2 hrs of lathe time and 4 hrs of threading time. A box of Bolts requires 2 hrs of Milling, and 4 hrs of threading time. A box of Rivets requires 3 hrs of milling and 1 hr of lathe time. Further milling, threading and lathe can operate 250 hrs, 150hrs and 50hrs per fortnight. Find an optimal solution to maximize the profit per fortnight of production plant.

Mathematical Formulation:
Lets formulate the problem to be solved. Let x1, x2, x3 represent the optimal quantities of production of the Nuts, Bolts and Rivets per fortnight.

The objective and constraints formulated can be easily derived from the problem statement.

Objective: Maximize 20 x1 + 6 x2 + 8 x3

Milling Constraints:
8 x1 + 2x2 + 3x3 <= 250

Threading Constraints:
4 x1 + 3x2 + 0x3 <= 150

Lathe Constraints:

2 x1 + 0x2 + 1x3 <= 50

Model File:

Now we have to represent our mathematical formulation in way the Symphony solver can understand. Following is the formulation of the same problem in GMPL format.

Filename: HardwarePlant.mod

/*Input Data we need to Solve*/

/* Input Set of products */
set products;

/* Gains of the product */
param gain{i in products};

/* Milling Requirements of the product */
param milling{i in products};

/* Lathe Requirements of the product */
param lathe{i in products};

/* Threading Requirements of the product */
param thread{i in products};

/* Milling Limit*/
param millingLimit;

/* Threading Limit*/
param threadLimit;

/* lathe Limit*/
param latheLimit;


/*Variable Declarations*/
var x{i in products}, >= 0;

/*Objective*/
maximize profit: sum{i in products} gain[i]*x[i];

/*Constraints*/
subject to millingMachine: sum{i in products} milling[i]*x[i] <= millingLimit;

subject to latheMachine: sum{i in products} lathe[i]*x[i] <= latheLimit;

subject to threadMachine: sum{i in products} thread[i]*x[i] <= threadLimit;

end;
At first we take as input a set of products. Then we need the gain for each of the products. Next, we need the milling, threading and lathe requirements for the product. We also need the limits for each of the machines. Thats all the input we need to find an optimal solution.

We define a variable set x representing the quantities of each of the product. We need to determine the values of x.

Further we define the objective and constraints to choose the optimal solution.

Input Data File:

Following is the input data file from our problem statement to be used with the model file.

Filename: HardwarePlant.dat

data;

set products:= Nuts Bolts Rivets;


param gain:=Nuts 20
Bolts 6
Rivets 8 ;

param milling:=Nuts 8
Bolts 2
Rivets 3;

param thread:=Nuts 4
Bolts 3
Rivets 0;

param lathe:=Nuts 2
Bolts 0
Rivets 1;

param millingLimit := 250;
param threadLimit := 150;
param latheLimit := 50;

end;

First we provide the input set of products. This can be strings representing the name of the products.Name of the product acts as an index for the rest of the parameters

Next we specify the gain per fortnight. From the model file its evident that we need gain for every product. We specify the name of the product and gain. As mentioned above the name serves as an index into the gain set.

We use the similar approach as above and specify the values for milling, threading and lathe requirements.

Finally, we specify the scalar values for the limits.

Execution:
Using the model and input file, Symphony solver can be executed as follows

symphony -F HardwarePlant.mod -D HardwarePlant.dat

The execution produces the following output (only the relevant part shown)
Solution Cost: 700.000
+++++++++++++++++++++++++++++++++++++++++++++++++++
Column names and values of nonzeros in the solution
+++++++++++++++++++++++++++++++++++++++++++++++++++
x[Bolts] 50.000
x[Rivets] 50.000

Analyzing the output:
The solver is recommending for production of 50 bolts, 50 rivets and no nuts in a fortnight. And the optimal profit is Rs 700 per fortnight.
This is answer that matches the hand solved solution in my notes!!


Wednesday, May 27, 2009

Wednesday, May 20, 2009

ESB - Does my project need it?

A key component of the SOA architecture is ESB. Most often ESB is used as silver bullet to clean-up the Enterprise integration mesh.

I came across quite an interesting perspective after a brief session with Jim Webber, an advocate of Guerilla SOA.

From my past experience following are some of the key reasons for using an ESB.

ESB cleans-up the integration mesh (or mess)

A typical diagram of ESB based transformation is as shown above. In reality all the mesh gets into the ESB itself; ESB encapsulates the mesh. Subsequent to the ESB based solution implementation, enterprises would have to setup teams to manage the ESB and deal with the governance around the ESB usage.

Eventually there is a possibility of the mesh outgrowing the ESB and spilling over; taking the integration back to where it started. Only difference this time is that the ESB will be part of the mesh.

ESB is good for business process orchestration

This is one of major feature that attracts a lot of developers. As a result, the business process gets into the ESB. The ESB now contains the critical business process of the enterprise, apart being just an integration back bone. This makes whole system extra complex with business logic spread all over.

Other ESB vices

In general usage of ESB results in vendor lock in. Business process is always wired in using vendor specific languages.

Performance hit with ESB is significant. More dollars are spent scaling this beast.

Occasionally project requires development custom adapter/data transformers to be used with ESB - additional effort for the development team with already strict time lines.


Is ESB useless?

No, its not; but ESB is not a silver bullet.

ESB assists the project in meeting the data transformation and communication requirements. Its a good candidate for dealing with disparate protocols (FTP, IIOP, and SOAP) between the interacting systems

How do I deal my integration mess?

Business Chaos Modeling!!

As I understand, Guerrilla SOA advocates modeling the SOA integration based on the real world business process. This is an interesting perspective.

As we all know traditional software that models the business domain is the one best meeting the business requirement. Why can't we extend this to SOA?

Just model the business interactions between services. If thats a mesh, so be it. The business itself is running with so many interactions.

If a clean-up is required, then the change should originate from the business domain. This business domain change will percolate and would warrant a change in the SOA model.

I feel this is idea of modeling the business chaos among the services is so much in line with the philosophy of SOA which promotes the alignment of software systems in line with the business.

ESB can definitely not clean-up the so called chaos that originates in the business domain.

Business Process Orchestration

Business process is just business logic; why treat the process as a special entity? Implement the process like any other business logic. Such an implementation would ensure the entire business logic remains as a single unit and is more manageable.

Managing Chaos

Manageability of the solution/system post implementation is critical to any client. Although we model the business domain mesh in our system, it critical that the mesh be manageable. Monitoring and control interfaces to manage interactions are essential.

Summary

A manageable business integration (SOA), with thoughtful ESB usage would definitely make the client happy and align the implementation with business!!

Hmm...quite a change of ideas in me after getting to know about Guerrilla SOA!!


Sunday, March 08, 2009

REST/ROA - UNIX File System

I have been trying to understand the differences between REST and ROA. It seems they are useful only when they are coupled together. Specifically, they complement each other in terms the ground rules they lay down!!

REST advocates uniform interface for the system. ROA divides the entire system into resources. Everything in the system is a resource and accessed using a similar interface.

The following idea might be a little far-fetched or I might be completely wrong in understanding ROA/REST and UNIX file system!!

REST/ROA concepts might be new to enterprise application design. However, I feel such concepts have been in use in system design; though they are not referred to by the same name.

I feel UNIX file system is a good example of application of REST/ROA principles. Everything in the file system is a file any device, hard disk, console etc. are considered as files. So in the file system, file is the resource and access/usage to this resource is consistent across. Most of the operations that can be performed with a regular file can be done with any type of file.

Thursday, February 26, 2009

Variadic Macros - Quite Cool!!

For the past few days, I have been doing C/CUDA based development. A good break from the the regular Java programming.

CUDA does not support printf function in non-device emulation mode. During development we used to switch between emulation and non-emulation mode frequently. The switch was done using a compile time flag.

We needed a way to remove the all the printf calls in non-emulation mode and have them execute in the emulation mode. The solution was to use Variadic Macro (Thanks to my friend who found the existence of such a macro).

Finally our solution was:


#ifdef EMU
int log(char*msg, ...) {

va_list args;
va_start(args, msg);
return vprintf(msg, args);

}
#else
#define log(msg, ...)
#endif
We used the log variadic macro in our code. Nice learning!!