Thursday, July 18, 2013

Personalized Business Relationships: An Empire-Building Tool

In business environments, most of us have our share of challenges associated with forming or maintaining the right symbiotic relationships with the right individuals from the right organizations or entities.  It would be a lot simpler to make or break relationships if "money" were not involved, but in today's business world, "money" is always involved in almost every aspect of a business relationship. I've pondered to find an answer to how one could craft and grow a mutually beneficial business relationship that one can sustain or maintain with smart but inexpensive investments on a long-term basis.  One approach I've come up with is not overly complicated or difficult, but requires a little bit of patience and effort.  

Like individuals have flaws in their personalities and moral values, different businesses may have different kinds of weaknesses in their guiding principles, business models, management philosophies, etc., because the world is full of imperfections that we all embrace willingly or are forced to accept unwillingly.  However, most of us must learn to accommodate one another's flaws and weaknesses as long as they don't go beyond legal boundaries and overpower the good values and characteristics that keep us being in business.

Let this other party be a client organization or a partner business entity.  Regardless, when you engage in a business relationship with another party, chances are you're likely to uncover the weaknesses that this other party is trying to improve or flaws that they are trying to hide to maintain the business relationship with you.  What should be your reaction when you become aware and certain about the facts - not biased opinions - that a client or a partner is not exactly comfortable with who they are or what they represent?

Here are a few cautionary tips or fundamental guidelines that you should observe if you want to keep this business relationship with a client or a partner:

1) Do not ever identify the flaws and weaknesses openly and put anyone on the spot with a condescending gotcha attitude because there is always a better alternative in a case like this.

2) Identify one or more areas or goals of your client's or partner's business that they are most proud of or they are most comfortable with, and see if you could establish a connection between those favorable areas and the one area that you have most trouble dealing with.

3) Build a business proposal or orchestrate a collaboration effort that overlaps among all those areas or interrelates them.  Mixing the good with the bad will give you an opportunity to get a closer look at the bad while others are busy working with the good, which in turn will allow you to formulate a remedy or find a better way of coping with the bad.

Granted following these guidelines will require a little more time, effort and patience to get something that you really want done as you have to intentionally elaborate or expand the scope of work, but the return on investment, if you execute this properly, is worth the trouble.  You will have either fixed the bad totally or found a way to conquer it to maintain a business relationship at the end of the endeavor.

Consider an equivalent scenario in a personal relationship between you and another individual.  If you already know for a fact that the other person has some form of insecurity or anxiety about something that is affecting his or her relationship with you, you should find social activities or topics that are more compatible with his or her interests and comfort level to interact and engage with this person if this personal relationship is important to you.  Doing so will allow you to observe and better comprehend what the underlying causes are and hopefully prepare you to overcome the issues in gracious manners.

Extrication is a lot easier when money is not involved, but personalizing a relationship with a client or a partner is crucially essential when there is a lot to lose from a disengagement over a business incompatibility or disagreement.  If you have to cut ties every time you disagree or dislike someone that you have already become acquainted with or have done business together, you can forget about building a business empire.  That certainly can't be your cup of tea if you have such low tolerance for incompatibility issues.







    



    

Thursday, January 24, 2013

Maps for Business: Generating Valid Signatures with Adobe ColdFusion 9


Google Maps API for Business customers need to generate a valid digital signature that needs to be passed as a URL parameter to invoke some of the web services, and Google Developers' YouTube channel has a video with step-by-step instructions on doing this in Python.

Detailed explanations on the 5 steps to generate a valid digital signature are documented on Google Developer site with examples in Python, C#, Java, etc., but not in Adobe ColdFusion: http://goo.gl/iYLPi

I recently had to help a Senior Developer generate a valid digital signature in Adobe ColdFusion 9 after watching the YouTube video above.  Please see the steps and code snippet below.

Note: You can easily convert this snippet into a User-defined Function that accepts the coordinates as the input parameters and returns the digital signature in modified Binary64, that is safe to be passed as a URL parameter.  Please make use of the function HMAC() that is available in Adobe ColdFusion 10 instead, if you're coding in ColdFusion 10: http://goo.gl/O1e2W


<cfscript>

//Step 1: Construct full URL to retrieve street view image.
google_mapapi_url = "http://maps.googleapis.com";
streetviewimage_endpoint = "/maps/api/streetview";
encodedParameters = 
'location=#URLEncodedFormat("38.909084,-77.036767")#&sensor=false&client=YOUR-CLIENT-ID-HERE';
full_url 
  = google_mapapi_url & streetviewimage_endpoint & "?" &encodedParameters;
     
//Step 2: Strip off the domain portion of the full URL.     
url_to_sign = streetviewimage_endpoint & "?" & encodedParameters;

//Step 3.1: Retrieve your private key.
privatekey = "YOUR-PRIVATE-CRYPTO-KEY-HERE";
     
//Step 3.2: Decode the private key from web-safe base 64 to binary.
privatekeyBase64 
   = Replace(Replace(privatekey,"-","+","all"),"_","/","all"); 
decodedKeyBinary = BinaryDecode(privatekeyBase64,"base64");

//Step 3.3: Sign the URL in Step 2 above using the HMAC-SHA1 algorithm.
// Get an HMAC-SHA1 signing key from the raw key bytes.
secretKeySpec = 
CreateObject("java","javax.crypto.spec.SecretKeySpec").init(
decodedKeyBinary,"HmacSHA1");
//Note: In ColdFusion 10, you can simply use HMAC() function.
Hmac 
 = CreateObject("java","javax.crypto.Mac").getInstance("HmacSHA1");

Hmac.init(secretKeySpec);

// Compute the binary signature for the request.     
encryptedBytes = Hmac.doFinal(toBinary(toBase64(url_to_sign)));

// Encode the binary signature in base 64.
signature = BinaryEncode(encryptedBytes, "base64");


//Step 4: Convert the signature into something that can be passed withihn a URL.
signatureModified = Replace(Replace(signature,"+","-","all"),"/","_","all");

//Step 5: Attach the signature to the URL parameter signature
streetimage_url =  full_url & "&signature=" & signatureModified;

</cfscript>