wcs-1785 how watson, bluemix, cloudant and xpages can work together in a real world application
TRANSCRIPT
How Watson, Bluemix, Cloudant, and XPages Can Work Together In A Real
World ApplicationFrank van der Linden, elstar IT
Full stack Java Developer WCS-1785
IBM InterConnect 2017 Conference
Me• Freelance Full stack Java developer
• Owner of elstar IT
• Curious of new technology
• IBM Champion 2013, 2014 and 2017
• Run (mountain) marathons
How do we proceed• HR Assistant
• Running it on IBM Bluemix
• Store it in Cloudant
• Analyse it with IBM Watson
• Show it with Charts
• Lessons learned
Frédéric Dehédin• At the time of the project: Senior Application developer
at Belsoft Collaboration AG
• @fdehedin
• http://www.fdehedin.ch/
Facts• Winner of the ICS Developer Competition 2016
• Runs on the XSP runtime on IBM Bluemix
• Store all the data in Cloudant
• Analyse jobs and job applications with IBM Watson
• Backend is pure Java, no Java Notes objects
Add ons• Cloudant connector OSGi plugin
• Take out the security issue
• Storing in and retrieving from Cloudant. JSON <—> POJO
• Can be accessed from Java backend.
• Do the heavy lifting. Don't reinvent the wheel.
Add ons• Jackson Mapper OSGi plugin
• Take out the security issue
• Used with the IBM Watson services
• Conversion of JSON to POJO
• Makes @Annotations available in Java back end
Deploy to IBM Bluemix• Fill the Bluemix Manifest file under
Application Configuration
• Will result in a yaml file
What is Cloudant• It is the cloud version of CouchDb
• It is document based
• CouchDb is created by Damien Katz
• Cloudant is bought by IBM
• Is like MongoDb or NSF a NoSQL datastore
What is Cloudant• Data stored as JSON
• View and Search ‘formula’ defined in javascript
• Replication
• Tasks
• Build in API
• No annoying limitations
• It is JSON everywhere.
• _rev and _id are reserved parameters.
• doc{}, is the actual data from application
Document
Attachment @ Cloudant• Stored as base64 encoded String
• Can be as standalone
• Or as part of Document (we choose this way)
• Store id as attachmentId, so it can be retrieved when needed
Attachment @ Cloudant• Servlet is called in application for download
• base64 data for the image tag
Services we used• Tone analyser, to get the tone of the text
• Personality Insight, to determine the personality of the job applicant
• AlchemyLanguage, to get the keywords from the Job and Job application (now "Watson Natural Language Understanding”)
Tone analyser• ToneAnalyzerRequest contain the text to analyse
• ToneAnalyzerInjector gets text from model class
Tone analyser• Post the data to IBM Watson service (1)
• Convert the response back to Java class (2)
1
2
Tone analyser• ToneAnalyzerResponse holds the results
• Use @annotations from Jackson to map JSON to properties
• Result is the source of the charts
ChartJS• Factory to produce the chart data, accepts objects
• Factory set default Chart Type, like Radar or Bar
Lessons learned• No Single Sign On service on all datacenters
• Manifest yaml file and GIT are not an happy couple
• API’s are not consistent across Watson services
• Cloudant is a very reliable, flexible and fast NoSQL datastore
• IBM Watson services are really powerful.
Lessons learned• There is no RichText on the web, it is HTML
• Handling attachments on Cloudant was a challenge. Took some time get a robust solution.
• BTW the way, we won the competition ;-)
Resources• HR Assistant on Bluemix
• https://hrassistant.eu-gb.mybluemix.net/
• HR Assistant code on GitHub • https://github.com/flinden68/HR-Assistant
• IBM Watson services
• https://www.ibm.com/watson/developercloud/services-catalog.html
• IBM Cloudant documentation • https://docs.cloudant.com/
• HR Assistant Demo • https://youtu.be/yM5Foxn9Fvg
Resources• OSGi Cloudant connector
• https://bitbucket.org/flinden68/cloudant-connector
• OSGi Jackson JSON Wrapper • https://bitbucket.org/flinden68/jackson-json-mapper-plugin
• ChartJS
• http://www.chartjs.org/
• Watson API Explorer
• https://watson-api-explorer.mybluemix.net/
Reach out to me• @flinden68
• http://www.elstarit.nl
• https://nl.linkedin.com/in/flinden68