In this article I will demonstrate how to get up and running with one of the Bluemix/Watson service examples. I will be using the example provided by IBM in their documentation as the basis for the article but the way in which I achieved the final goal was quite different from the way that they explained it in the example.
This example will use:
I could have added BS words as an attention seeking headline, and it would fit because there is so much I want to show in this one post (it is probably should be 5 separate posts). But I figured that it’s probably better to have a more description title about what this is really about (more googlable that way). So be warned this is a longer post than normal because of all the pictures. Going through this experience helped me better understand Git, Webstorm (and how it uses Git), Jazz Hub and Bluemix.
Creating an example of using the Bluemix Watson service.
Earlier this week IBM announced that they added the Watson API as a service to Bluemix. I honestly have no idea what I would ever use this for in my line of business but the coolness factor is huge!
In this post I am going to demonstrate how I was able to create the example service without using the same process as laid out in the IBM documented example. As this is a long post (lots of pictures) I will be discussing the separate parts in other posts.
There are also other ways of creating your App from scratch (for example Create an App, select node.js as a runtime and then bind the Watson service.) The reason I did the example this way was to highlight that you do not always have to start with a new service. I needed a node.js runtime, and it happened that one of my services already provided that (the DataCache starter service). That’s kinda cool and kinda the point of Bluemix!
1) Log into Bluemix
Your should be presented with your dashboard.
2) Create an App
Select the Node.js runtime
Name the App (in my case the App is called xominoWatsonQandA and the Host is xominoWatsonQ)
3) Add a service – Watson Question and Answer
4) Assign meta-data to the new service
- Give the service a name – you will need this later so don’t over complicate this (qa-service)
- The Watson service is currently in Bluemix as a Beta at time of writing
5) Confirm you have an application
Now we have the pieces necessary to build the application on.
- A Node server
- The Watson service.
6) Make sure you have a Jazz Hub account
If you do not already have a Jazz Hub account then go and create one here https://hub.jazz.net/
NOTE: The Jazz Hub site uses your IBM login userid and your Jazz Hub password – do yourself a HUGE favor and make the password the same as your IBM account and if you ever change the password on your IBM account you have been warned 🙂
Here is a shot of my Jazz Hub account before we start – note no “xominoWatsonQandA”
7) Add your new application to Jazz Hub
Select the “Add GIT” option on the top right of your App dashboard
8) Confirm existing service code?
The next prompt asks me if I want to create starter code in the new Git Source Control repository. In this case I do not – un-check it.
9) Go to your new source control Git repository
Click on the Jazz Hub URL displayed on the right hand side.
The Add Git link will be replaced with a link to the repository. Click on the link to go to there. We will look at Edit Code in another post.
10) Get the URL of the repository
In the picture below you can see over on the right there is a link for the Git URL – click on that and copy the URL.
11) Open Webstorm IDE
As I was working my way through this example I wanted to learn more about how Webstorm functions as a Git client. You can use Source Tree or the Git command line if you prefer.
You need to ensure that Git is enabled in Webstorm before you proceed. it is not configured out of the box. The instructions for enabling git are found here https://www.jetbrains.com/webstorm/webhelp/using-git-integration.html. You will need to have Git installed before hand. Follow the ssh key instructions and it will show you how.
12) Checkout the new repository
Select Checkout from Version Control > Git form the Webstorm VCS menu option
Paste the URL from the Jazz Hub site into the Vcs Repository URL
Select Clone and a new project is created within Webstorm and as you can see, the files downloaded are those from the repository on Jazz Hub
12) Download the example code and add to the local repository
Following the example site, download the sample file qa-nodejs-sample.zip. Unzip it locally and drag the files into the repository directory created by Webstorm in the previous step.
Clicking back into Webstorm you will see the files refresh in the project – they all appear “red” because although the files are in the repository directory they are not current added to the Git configuration, it does not know they exist.
13) Add the files to the local Git repository
Right click on the project and add the directory as follows.
The files will all turn green
14) Edit the manifest.yml file
Within Bluemix the manifest,yml file is the key to holding everything together. It contains the “services” and the application they are used in. In my case the service name for Watson was qa-service and the application is xominoWatsonQandA.
Save the Manifest file
You can also see from the manifest file command “node app.js“. If you look into the other files currently in the example you will find app.js. This tells Bluemix how to start the application.
15) Commit the files to the local repository
Right click on the project name – select Git > Commit Directory
In this case I chose to Commit and Push back to the repository
Webstorm then does a stupidity check on your files (we all need that)
And then Webstorm tells you that you are stupid!!
My commit comments are “Modified manifest and all files”
We get confirmation that the files were committed and pushed up to the Jazz Hub repository
16) Confirm Jazz Hub
You can now see by refreshing your Jazz Hub page that all the files are now in the server repository. You can also see next to my picture in the middle “Manifest change and all files” as the last commit comment.
Then comes the really cool and completely not Command Line experience. In the top right of the page you can see Build and Deploy….
17) Build and Deploy
You will be taken to a page where you can see the results of the build and deploy. Jazz Hub is very smart and self aware. If you have un-committed changes within your repository it will not let you Deploy. That is for another day though.
Note: what’s interesting is that the Deploy to URL which I cannot change is xominoWatsonQandA.mybluemix.net not what I would expect as xominoWatsonQ.mybluemix.net which is the route I gave the application in the first place. Turns out I not have two routes to the same App. I can see this back on my bluemix dashboard as there is now a (+1) next to my routes options!
So note to self, name your route the same as the application name!
19) You now own Watson
Click on the route link back on your Bluemix dashboard and you now have a running example of the Watson Heathcare service
In this example we saw a LOT of cool new features, concepts and ideas for Domino developers and you know that we have barely scratched the Bluemix, Webstorm, Jazz Hub surface. I learned a significant amount of new and cool things from going through this process. The first time from scratch it took about 90 minutes to figure out what I was doing. The second time I went through it, even taking all the screenshots for the blog it took 25 minutes.
We only changed two lines in one file to make this work – anyone can do this !!
Like I said at the top of the article, I have no idea how I would use Watson in the day job but that was not the purpose for doing this example. These “services” are componentized capabilities which we can take advantage of. Imagine the growth possibilities as more and more services are added to Bluemix. This has got to be fun to watch and follow along. Remember IBM are investigating putting Domino into Bluemix.
The Watson Cloud REST API information is available here http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/#!/Question_Answer
This is so cool 🙂