| Recent Blog Posts
Accessing Bluemix Services from Client-side Web Applications|
Mon, Aug 7th 2017 7:34a Niklas Heidloff
Bluemix is IBM’s cloud platform to build and host applications which can leverage more than 100 services, for example databases and cognitive services. The services provide APIs which require credentials. Applications which are hosted on Bluemix as Cloud Foundry apps or Docker containers can access these credentials from environment variables. This article describes how to invoke Bluemix services from client-side web applications.
Recently I described how to deploy Angular and other client
Angular Form Validations with Redux for multiple Routes|
Tue, Aug 1st 2017 8:43a Niklas Heidloff
Many frontend applications require the extensive use of forms to allow users entering information. Angular supports various mechanisms to handle forms, but I’ve struggled to figure out how to handle validations of data on different pages/routes. Below is a pattern I’ve used based on Redux which doesn’t leverage much of the Angular forms functionality but works very nicely for me.
Initially I thought that my requirements would be pretty straight forward and common for single-pag
Introducing the Conversation Inspector for IBM Watson|
Mon, Jul 31st 2017 10:10a Niklas Heidloff
My colleague Ansgar Schmidt and I have developed a new tool for developers to simplify building conversational user experiences with IBM Watson Conversation. The tool displays JSON data of REST API requests that is sent between applications and the Watson Conversation service and it allows developers to modify outgoing JSON messages.
With the tool developers can test their intents, entities and dialogs defined in Watson Conversation without having to write their own test applications or to invok
Building Serverless Web Applications with OpenWhisk|
Mon, Jul 10th 2017 2:42p Niklas Heidloff
Apache OpenWhisk is an open source cloud platform that executes functions in response to events at any scale. For example OpenWhisk can be used to run business logic in response to invocations from web and mobile apps over HTTP. This article describes how to build web applications where users can log in via their Google accounts and OpenWhisk is used to host protected APIs.
OpenWhisk on Bluemix comes with an API Gateway to manage access to APIs that have been implemented as OpenWhisk actions. Fo
Overview of Continuous Delivery Functionality in Bluemix|
Tue, Jul 4th 2017 7:05a Niklas Heidloff
For a Bluemix DevOps workshop I’ve prepared a deck that gives an overview of the Continues Delivery functionality in IBM Bluemix.
In the first part I describe why Continuous Delivery is important, what the differences are between Continuous Delivery, Continuous Integration, Continuous Deployment and DevOps as well as key concepts like automation and delivery pipelines. If you haven’t done much with Continuous Delivery yet, I suggest to watch this great introduction from Martin Fowler
Building Alexa Skills with IBM Watson and OpenWhisk|
Thu, Jun 29th 2017 8:12a Niklas Heidloff
I’ve open sourced a sample that shows how to build Alexa skills via the serverless framework OpenWhisk and IBM Watson Conversation. The sample demonstrates how to define a conversation flow declaratively via Watson Conversation dialogs and it shows how to pass context between different intents.
Here is a sample conversation flow:
User: Alexa, ask my skill what do you know about me
Alexa/Watson: I don’t know anything about you. Where do you live?
Alexa/Watson: Now I know
Great Introduction to Reactive Microservices|
Wed, Jun 28th 2017 1:26p Niklas Heidloff
Today IBM announced a new collaborative development initiative with Lightbend who provide a reactive application development platform. When trying to learn more about that platform, I’ve run into a great presentation from the Lightbend CTO Jonas Bonér where he describes the concepts behind reactive microservices.
There is a shorter version and a longer version of his talk on YouTube as well as a transcript on his blog. Here are some of my key takeaways.
Building microservices is relative
Building Slack Bots with IBM Watson Conversation|
Mon, Jun 26th 2017 8:42a Niklas Heidloff
I’ve open sourced a simple sample that shows how to leverage IBM Watson Conversation in Slack bots via the open source project Botkit. With Botkit and a Watson middleware text messages defined in Conversation dialogs can easily be used in Slack bots. My sample shows additionally how to use Slack buttons in messages and how to invoke business logic at certain stages of the conversation.
Botkit is an open source framework to build bots that can be connected to popular messaging platforms lik
New Slots Filling Functionality in Watson Conversation|
Fri, Jun 23rd 2017 1:44p Niklas Heidloff
In my previous role I worked on improvements for tooling for conversational user experiences. One of these improvements was an easy way to gather user input before actions are invoked. These typical conversation scenarios are often referred to as ‘slot filling’.
In traditional web applications users define input values in HTML forms and then click on submit buttons to invoke business logic. ‘Slot filling’ is basically the counterpart for conversational user experiences. F
Reducing Deployment Risks via Policies for Jenkins Pipelines|
Fri, Jun 16th 2017 10:42a Niklas Heidloff
Earlier this year IBM introduced a new service DevOps Insights (beta) which helps among other things to reduce deployment risks. Policies can be defined to ensure that unit tests, functional tests and other tests pass before new versions of applications are deployed.
As I blogged earlier this functionality can be used for IBM DevOps Delivery Pipelines. Additionally it can also be used for Jenkins projects since data can be sent from Jenkins to other tools like IBM DevOps Insights that are in the
Leveraging Jenkins in DevOps Toolchains on Bluemix|
Wed, Jun 14th 2017 9:31a Niklas Heidloff
As part of the IBM Bluemix Continues Delivery functionality toolchains allow the integration of third party and open source tools. One example is the usage of the automation server Jenkins to build and deploy applications rather than using the delivery pipelines provided by IBM.
In order to test this functionality I’ve run a Docker Jenkins container locally. Obviously you could also deploy Jenkins on Bluemix but I wanted to keep it as simple as possible.
In order to configure Jenkins, I s
Reduce Deployment Risks via Policies in DevOps Pipelines|
Mon, Jun 12th 2017 1:34p Niklas Heidloff
Earlier this year IBM introduced a new service DevOps Insights (beta) which helps among other things to reduce deployment risks. Policies can be defined to ensure that unit tests, functionality tests and other tests pass before new versions of applications are deployed.
The following screenshot shows the DevOps Insights dashboard with a sample application that contains two deployable units, one microservice and one web application. For each deployable unit icons indicate which tests have been ru
Integrated API Management for Cloud Foundry Apps|
Thu, Jun 8th 2017 9:53a Niklas Heidloff
Last week IBM introduced a new feature in IBM Bluemix. Developers can now easily add API management functionality to their Cloud Foundry apps hosted on Bluemix.
The end-to-end API lifecycle solution API Connect has been available in Bluemix for quick some time. With the recent addition it’s much easier to leverage this functionality since everything can be configured from the application dashboards.
I’ve just tried it for a simple sample. API definitions can be imported via Swagger/O
Integrating Tools into Bluemix DevOps Toolchains|
Wed, Jun 7th 2017 7:10a Niklas Heidloff
As part of the Bluemix Continues Delivery functionality toolchains allow the integration of third party and open source tools. Below are two samples how to leverage PagerDuty and Slack to get notifications about state changes in pipelines.
With PagerDuty you can receive text and voice messages on your smartphone and configure which teams members should be notified for certain event types.
Here is an example screenshot of my smartphone. You can take action via phone without having to log in to t
Some Pictures from Pioneers|
Wed, Jun 7th 2017 6:32a Niklas Heidloff
Last week I attended Pioneers in Vienna, Austria, to present IBM Watson and the IBM Cloud and to talk with developers. Below are some pictures.
Pioneers is a conference primarily for startups and investors. IBM provides a program where qualified startups can receive up to $120K in IBM Cloud credits.
The new team in Germany from left to right: Niklas, Steffi, Marion, Ansgar and Ethan.
The conference was held at the Hofburg Vienna.
Some more pictures from out booth.
I also brought my Anki ca
Managing Microservices on Kubernetes with Istio|
Wed, May 31st 2017 5:13p Niklas Heidloff
Last week IBM and Google announced Istio, an open platform to connect, manage, and secure microservices. Istio improves the visibility of the data flowing between the different services and the good news for developers is that you don’t have to change your code.
There is good documentation available, but in a nutshell Istio inserts proxies in pods which are called instead of the custom containers (services) directly. This allows Istio to control and monitor the requests to the services. As
GitLab now available in Bluemix|
Tue, May 30th 2017 2:51p Niklas Heidloff
I’m still catching up on all the new functionality that has been added to IBM Bluemix over the last year. One new capability is to use GitLab for source control and lightweight project management.
Earlier this year the original JazzHub functionality was sunset and new and advanced capabilities have been added to Bluemix Continues Delivery. Developers can now use GitLab and integrate it in Bluemix DevOps toolchains. Alternatively you can also use GitHub (public) as well as GitHub Enterprise
Automated Frontend Testing with Bluemix Delivery Pipelines|
Mon, May 29th 2017 10:37a Niklas Heidloff
In order to do functional end-to-end testing of web applications, Selenium is a great tool to execute automated tests on different browsers. Below is a quick introduction how to run these tests from delivery pipelines in IBM Bluemix.
Bluemix DevOps provides toolchains to build, deploy and manage applications. These toolchains can contain services provided by Bluemix as well as open source and third party tools. An example of a third party tool is Sauce Labs, which allows running Selenium based t
Deploying Node Express Apps to OpenWhisk|
Wed, May 24th 2017 1:35p Niklas Heidloff
I’m catching up with all the great new features that have been added to OpenWhisk over the last months. My colleague Lionel Villard published two articles how to run Node Express web applications in a serverless environment. Very cool.
Rather than repeating everything from Lionel’s articles, let me give you a quick summary how this works.
In the OpenWhisk action you use the openwhisk-expressjs module to send a redirect to the Express server.
const app = require('./server');
Quick Update: Excited to work as Developer Advocate again|
Mon, May 22nd 2017 1:54p Niklas Heidloff
Over the last year I’ve worked on a very interesting internal project. I’ve learned a lot about conversational experiences and it was a lot of fun. Most importantly I enjoyed working with great people in the Emerging Technologies organization.
Recently a new opportunity has come up and I’m happy to share that I will work as developer advocate again! I will be part of an international organization of advocates and will focus on developers in Germany, Austria and Switzerland. Tec
My Advice: Don’t use Angular 2+ without Redux|
Thu, Apr 13th 2017 6:34a Niklas Heidloff
Recently I have used Angular 2+ in one of my projects. There are many things I like about Angular like dependency injections, TypeScript, etc. One thing that gave me a hard time was to understand Angular’s change detection strategy. Below is a quick tip how to use Angular without having to worry (too much) about how to refresh your components.
One of the design goals of Angular 2 was to provide better performance than AngularJS which is why new features were added to reduce changes to the
Invoking OpenWhisk Actions from Angular 2 Apps|
Tue, Apr 11th 2017 2:14p Niklas Heidloff
In my last blog entry I documented how to deploy Angular 2+ apps to Bluemix via the HTTP server nginx. All that server does it to host the static files. Below I describe how to use OpenWhisk actions for server-side business logic that can be invoked from Angular apps.
In order to avoid cross origin security errors proxy servers need to be used. Fortunately both the local web server that is installed via the Angular CLI and nginx can be configured as proxies.
I’m using the same simple app a
Deploying Angular 2 Apps to Bluemix|
Tue, Apr 11th 2017 8:01a Niklas Heidloff
Over the last months I’ve done quite a lot of Angular 2 development (now Angular 4). Below is a description how to create a new Angular app and deploy it as Docker container to Bluemix in just a few minutes.
In order to create a new Angular app you can use the Angular CLI.
npm install -g @angular/cli
ng new angular-app
ng build --prod
There are several ways to deploy Angular apps to Bluemix. For example you can build a simple Node.js web server to host the files. Or y
Running the Sample App BlueChatter on Kubernetes|
Mon, Apr 10th 2017 3:56p Niklas Heidloff
Since last month Bluemix supports Kubernetes (beta) which many people consider the de-facto standard for orchestrations of containers. Some of the older and simpler Bluemix sample applications use docker-compose. Below is a description how to run those examples on Kubernetes.
Essentially the docker-compose file needs to be converted to a Kubernetes yaml file. As example I use the chat application BlueChatter. The sample is a Node.js application that leverages Redis to store session data. The fil
Orchestrating Docker Containers with Kubernetes|
Fri, Apr 7th 2017 1:37p Niklas Heidloff
Last month IBM announced the beta of Kubernetes support in the IBM Bluemix Container Service. Below is a short introduction to Kubernetes and a short description how to get started using Kubernetes on IBM Bluemix.
In a nutshell Kubernetes allows running and managing cloud native apps that consist of multiple containers. To get started you need to know some terminology. For example a ‘Deployment’ contains ‘Pods’ that can contain multiple Docker containers (but typically co
Using IBM Watson Discovery to query Unstructured Data|
Wed, Apr 5th 2017 7:32a Niklas Heidloff
In my previous blog entry I described how to use Watson Knowledge Studio to create models to identify information in unstructured data. These models can be used by the Watson services and offerings Watson Discovery, Watson Explorer and Watson Natural Language Understanding. Below is a quick intro how to use Watson Discovery to query unstructured data.
Watson Discovery is a service to extract value from unstructured data by converting, normalizing and enriching it. In order to use it you first ne
Understanding Natural Language Text via Watson Knowledge Studio|
Tue, Apr 4th 2017 2:10p Niklas Heidloff
One of the newer IBM Watson offerings that I really like is Watson Knowledge Studio. It basically allows identifying information in unstructured data. Below is a quick overview of the Knowledge Studio functionality.
Watson Knowledge Studio is not a Bluemix service but an SaaS offering to create models for custom corpora of data that can actually be deployed and used in other Watson services (more about this in another blog). These models are either machine-learning models which work more generic
Getting started with Tensorflow on IBM Bluemix|
Mon, Apr 3rd 2017 4:11p Niklas Heidloff
In order to learn Deep Learning I’ve taken an Udacity course that I can highly recommend. One reason I took that course was because I also liked the Udacity machine learning courses. Another reason was because I wanted to learn Tensorflow which to me looks like the most popular deep learning library right now.
Below is the YouTube playlist of the course. The assignments can be run locally via Docker.
Another good starting point to learn Tensorflow is the video “Tensorflow and deep l
Thu, Sep 1st 2016 4:01a Niklas Heidloff
Some people have asked why I haven’t blogged since June. Here is why …
Almost two years ago I started to work for IBM Emerging Technologies. I wanted to work in this group for multiple reasons. One reason was because some of the people in that group worked as developer evangelists for Bluemix which is what I wanted to do as well. I really enjoyed this role since I could learn a lot, since I could blog and open source samples, since I could attend developer conferences and more. As yo