Working in the BlueMix Garage

screen-shot-2017-03-01-at-2-26-39-pmI have always been a fan of gamification and now I can be manly and say I am working in the garage, the BlueMix Garage!  You can earn points by completing different tasks in the BlueMix Garage Method site.

Top 5 things that make a SaaS product great

Screen Shot 2016-10-03 at 12.57.47 PM.pngSelling software can be really easy or really hard and the harsh reality is it depends on the product. Great sales people use to say “I can sell ice to an Eskimo” but today, with the internet, the level of global competition, and a more educated younger generation, the products  have to sell themselves. In a world of instant gratification with zero patience, and almost no tolerance for faultiness, the world of continuous development and value-add is here and it is demanded. I will not include what I consider the number one element in the list: it has to be simple to use and easy to navigate because that should be the golden rule for all software. I will focus on the “other” areas that make a product great not only to the customer but for the creator.

Here are my top 5 elements that make a SaaS product great:

1 – Platform, Availability, and Scale

In almost every discussion I have, availability and scale is always a number one concern and “is it a platform” frequently comes into question. Many times the platform question may be for API interfaces or extensions from other platforms since micro-services based architectures are the “in thing”. Questions like:

  • Do you support in place upgrades with zero down time?
  • Are you distributed and support a world wide content delivery network?
  • Can I scale up during peek times?
  • Are all the API’s REST based?

Those questions and more are almost always asked. Remember, eople are putting the IT tasks in your hands and they know the pains of their business and you better be able to answer their questions in their context.

2 – On-boarding

On-boarding needs to be dead simple. A few fields on a form, a verification email, and you should be up and running in minutes. That is the expectation today. If your SaaS product works with data, images, or videos, then uploading those assets need to be just as simple. Searching and managing those assets need to be as intuitive as using a Microsoft Office Application or using your iPhone. If it’s not, you have failed.

3 –Video Library/Training Webinars

Almost every company has a YouTube channel of some sort. But do you have self paced videos showing off your products best features? Do you have videos of your products solving a business user problem? Those are the videos customers look for. This generation searches for videos to figure things out more than ever before. Video is the new encyclopedia and that includes webinars.  Webinars play a big part in building a community around your product. It brings your customers together while giving out the latest and greatest information for how your product can help solve their problems. Recorded webinar videos are also becoming a popular reference for education and should be included in your library.

4 – Self-paced tutorials and gamification

The last two generations, mainly because of online gaming, are conditioned for being rewarded for their accomplishments. From the almost certain participation awards in AYSO and Pop-Warner to ranking systems in games like Call of Duty it is almost expected. Having self paced tutorials and badges for completing work benefits you in two ways:

1 – it entices your customers to really learn and understand your software while getting rewarded and

2 – their badges, certifications, and rewards can be posted to online social profiles like LinkedIn, an instant resume bonus!

5 – Know exactly what your customers are doing

Analytics are so critical in software today you simply can not be competitive without it. Data and the internet of things is quickly proving that big data really is BIG. So big in fact most companies have no idea how to handle the amount of data or make heads or tails of it. This is where having cognitive assistance will differentiate you from your competitors. The companies who can understand this data are the ones with the competitive advantage, they will be the winners. More and more augmented intelligence systems are coming into play – you are probably thinking, don’t you mean “artificial intelligence”? No, I really do mean augmented. I say augmented because as it stands today you most likely won’t let the computer fully make a decision for you. I am talking about serious business impacting decisions like sending out a million emails of $20 off coupons – that could get rather costly. So essentially what systems do today are suggest actions to take and a human makes the final decision – augmented intelligence. Understanding how your customers use your software is extremely important to your success. You can optimize click paths, find best/popular practices, understand customer journeys, and most of all know which features are used most and understand where to further your investment.

Three out of the five items in the list directly impact your customer. The first one directly impacts your customer and potentially their customers. The last one affects your overall product growth and strategy. I could have picked very different topics for my top five but after much reading I think these five are definitely at the top of the list. I know there are many more out there and I would really like to hear what you think should be in the top five!

Screen Shot 2016-10-03 at 1.53.32 PM.png

3000 Members now in the BlueMix LinkedIn Group!

Today, as I processed the pending membership requests on LinkedIn for the IBM Bluemix group, we surpassed 3,000 members!  In less than two years the group continues to grow and membership and activity have grown regularly each week. Keep promoting it and keep posting important material to the group!

While the group has some good discussions and examples of how BlueMix is used, if you prefer video then you should consider checking out the YouTube channel dedicated to IBM BlueMix, which is run by the Developerworks team:

Managing your BlueMix applications in Slack with Cloudbot

bluemix-slack

Slack has become a very popular collaboration tool for developers and designers. Think of LinkedIn groups combined with a Facebook or Twitter feed that is isolated to only the team members participating. It is equivalent to an on going persistent eMeeting chat that never ends, is searchable, and most of all, captures all conversations around a topic in a single place. Some argue Slack is the end of email and other collaboration techniques, specifically around projects.

In this video Yu Cao demonstrates how to setup Cloudbot for slack where you can then chat with the bot to get information about your your BlueMix applications.

“Cloudbot is a ChatOps bot platform built to be deployed on IBM Bluemix that integrates services and tools into a development or operations team’s workflow in a collaborative chat environment.” – link

 

Enabling CORS for WebSphere Commerce REST

Commerce-CORSI have two servers, one application server (JSP based) and one WebSphere Commerce server. I want to be able to call the REST API’s on the Commerce server via JavaScript served up by the application server. So my JavaScript would look like this:

$.ajax({
      url: myCommerceServerRestURL,
      method: "GET",
      crossDomain: true,
      contentType: "application/json",
      dataType: "json"
 })

The problem is, if CORS is not enabled on the WebSphere Commerce server you will receive the infamous No ‘Access-Control-Allow-Origin’ header is present on the requested resource. And the call fails.

Now WebSphere Commerce can be a little tricky if your server has a web server in front of it. You essentially have to enable it in both places – or at least that is what I had to do. If I only had to do one of these please let me know – I got tired of testing the different tips from the netverse.

I have IHS in front of WebSphere Commerce, so, after hours of playing around with different configurations I came up with these steps:

First configure httpd.conf in the IHS/conf directory and add these lines  if you want all domains to be able to access your data:

 <IfModule mod_headers.c>
        Header set Access-Control-Allow-Origin "*"
        Header set Access-Control-Allow-Methods "GET, PUT, OPTIONS"
        Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
 </IfModule>

Remember, you can always override the Access-Control-Origin with a domain or multiple domains to prevent access for everyone.

Next, you have to update the WebSphere Commerce server. You can actually see the Commerce Insights enabling documentation for this (my colleague pointed me to this, thanks J).  You will be editing the WC configuration file and the WC Search configuration file.

 <_config:configgrouping name="HttpSecuritySettings_Rest">
          <_config:property name="CORSAccessControlAllowOrigin" value="*"/>
          <_config:property name="CORSAccessControlAllowMethods" value="GET, HEAD, POST, OPTIONS, PUT, DELETE"/>
          <_config:property name="CORSAccessControlAllowCredentials" value="true"/>
          <_config:property name="CORSAccessControlAllowHeaders" value="Origin,X-Requested-With,Content-Type,Accept,Authorization,cache-control,expires,pragma,wclogonid,wctoken,wctrustedtoken,wcuserid,X-RequestId"/>
          <_config:property name="CORSAccessControlExposeHeaders" value="Access-Control-Allow-Headers"/>
          <_config:property name="CORSAccessControlMaxAge" value="3600"/> 
 </_config:configgrouping>

 

If you found this useful follow this site! I also have a YouTube channel for IBM Commerce.

Using Watson Translation service in an Eclipse SWT application Part 2

The next follow-up to the last article is the code I used to communicate with the Watson Translation service. But first I want to show the flow of the data:

So basically the SWT client sends a JSON string to the server in the body of the message. You can do this as long as you specify application/json as the Content-Type. For JSON, I use the JSON library for Java over at json.org and its been perfect. I have even begun using this library for all of my in memory objects because then I can easily serialize it out for storage or over the network.

Below you will see the primary code to send this message:

JSONObject payload = new JSONObject();
                	
payload.put("toLang", obj.get("to"));
payload.put("text", obj.get("text"));
                	                	
URL url = new URL(pet_bluemix_translation_service);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write(payload.toString());
out.close();
                         
//Now get the response
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                	
String n = in.readLine();
StringBuffer sbValue = new StringBuffer();
                	
while(n != null){
	sbValue.append(n);
	n = in.readLine();
}
in.close();
                	
final String value = sbValue.toString();

Allowing CORS from a Node-Red Bluemix application

I wrote a rating application some time ago in Node-Red and have since needed another similar application but with slightly different behavior. So I went ahead and created a new Node-Red application on Bluemix and decided to start from scratch since it was so simple to set up. This application has three requests – Get Rating, Post Rating, and Post Comment. Here is the current flow:

Image (1) rate-flow-680x422.png for post 5391

The problem I had was the requests actually respond with JSON and I could not figure out how to enable CORS!

The first thing I did was in the Image (2) cors.png for post 5391 node I added the following to the response:

Image (3) cors2.png for post 5391

And that did not work. Then, I stumbled upon this in my Cloudant dashboard in the Account Section under CORS:

 

Image (4) cloudant_admin-680x212.png for post 5391

Once I checked all domains it worked fine! I am sure I can restrict the domains appropriately but I guess I don’t understand why the CORS options are under the Cloudant section and not the base application somewhere. I would think this is a specific thing to hitting the Cloudant service directly, not through a Node-Red Node. I am very interested in hearing others opinions on this.

Update:

After using the Cloudant UI to update my profile I went back and checked the bluemix-settings.js saw it indeed added the httpNodeCors line to the profile:

httpNodeCors: { origin: “*”, methods: [‘GET’,’PUT’,’POST’,’DELETE’] },

So this is clearly the issue as I saw a similar question on developerworks but saw no example of the syntax.