PowerBI -Fix: The import List.ConformToPageReader matches no exports. Did you miss a module reference?

Did you wake up this morning finding PowerBI failure messages in your inbox?

Then you are probably not the only one. Your Gateway is out of date and left you with errors on your Datasets on PowerbI.


Some datasets are not able to refresh due to a module not being found, but testing your connections all seems to be working fine ...or not? It does not cleary indicate something is wrong with your gateway, it just gives you a friendly suggestion to update, but all connections are A OK!

What you need to do is install the recently released (let me do a wild guess, last Sunday I...?) gateway version number: 3000.66.4 november 2020

Once you update your (on-premise) gateway server and give it a restart. You will be able to refresh all your reports.

Thank you Microsoft for keeping us busy today!


IBM Watson assistant – Live web chat integration

IBM has launced a new feature as add on to the virtual assistant: Web chat - Live agent. IBM is really putting some work in becoming the best virtual assistant.
This functionallity can switch a user from a chatbot conversation directly to a real human agent.

This is the second feature, next to the search skill (Discovery), that can really boost your chatbot game. Since your chatbot can now be a single point of contact for all your customers!

The web agent is an of the shelf integration, just add a script provided by IBM, no developer or programming skills are needed.

How do you integrate it on your own website?
You need to look up the Live Engage integration in the catalog on IBM cloud. You will need a plus or premium plan. You will be able to escalate conversations to this platform out of the box using Web Chat.

Just put the script element in the header of the website page you want it to display your assistant:

<html>
<head></head>
<body>
    <title>My Test Page</title>
    <p>The body of my page.</p>
    <!-- put copied script elements here -->
    </body>
</html>

This is how the UI looks like for an agent. It can see the history of the current chat and respond real time to the customer.


Golang and that strange asterisk and ampersant

When learning Golang and coming from other (scripting) languages, that asterisk and ampersant may strike as a bit odd.

This is a beginner Golang post!

Let's start with a basic Golang program outline and in the main func, let's create a variable named a and assign it the value Three-toed sloth.

package main
import (
    "fmt"
)
func main() {
  a := "Three-toed sloth"
  fmt.Println(a)
}

Notice the : before the = and that no type was specified. The Go compiler is able to derive the type based on the literal value of the variable. So it knows it's a string.

I could also have declared the variable like this:

var a string = 'Three-toed sloth

Ok, so the program will return:

Three-toed sloth

So you see that a is assigned a value of Three-toed sloth. It has stored that value in memory. And we can get the memory address by adding the & (ampersant).

Like this:

package main
import (
    "fmt"
)
func main() {
  a := "Three-toed sloth"
  fmt.Println(a)
  fmt.Println(&a)
}

This will return:

Three-toed sloth
0xc0000861c0

We can get the types like so:

fmt.Printf("%T\n",a)
fmt.Printf("%T\n",&a)

Adding this to our func will return:

 string
*string

We can also get the value of what is stored on that memory address like so (with the asterisk!):

  b := &a
  fmt.Println(*b)

This will return:

Three-toed sloth

And finally we can do:

    fmt.Println(*&b)

Now what would that return?

Exactly:

0xc0000861c0

Anyways, here is the complete code of this very useful exercise:

package main
import (
    "fmt"
)

func main() {
    a := "Three-toed sloth"
    fmt.Println(a)
    fmt.Println(&a)
    fmt.Printf("%T\n",a)
    fmt.Printf("%T\n",&a)
    b := &a
    fmt.Println(*b)
    fmt.Println(*&b)
}

So the gist of this post comes down to:

  1. The & will give you the memory address
  2. The asterisk (*) will give you the value stored at an address, aka the pointer to the memory location where the value of the variable is stored.

Now consider this piece of code without any pointers:

package main
import (
    "fmt"
)

func main() {
    x := 100
    blah(x)
    fmt.Println(x)
}

func blah(y int) {
    fmt.Println(y)
    y = 12
    fmt.Println(y)
}

This will return

100 # from blah
12 # from blah
100

But when we change the signature of 'blah' so that it will take in a memory address instead of an actual int

package main
import (
    "fmt"
)

func main() {
    x := 100
    blah(&x)
    fmt.Println("From main: ", x)
}

func blah(y *int) {
    fmt.Println("1.From foo:", y)
    *y = 12
    fmt.Println("2.From foo:", y)
}

This will return

1.From foo: 0xc00001c0c8
2.From foo: 0xc00001c0c8
From main:  12

That value will be never be the value of 100 because the blah function assigns the memory address the value of 12.

Finally a tip for a great Golang mentor: https://twitter.com/Todd_McLeod


Protected: Simple JSON codes mockup voor Watson Assistant

This content is password protected. To view it please enter your password below:


IBM Cloud platform Watson API – CLI Tools Error: NO CF API endpoint set

IBM Watson is a really good AI platform.
But since development of the Watson Platform goes so quickly, they keep pushing new updates and workspaces.
If you are a developer, this can be quite time consuming, since you need to keep rebuilding the former workspace now called Skills and APi configurments.
This last Update to V2 and the deprecation of the bluemix environment gave me quite a few headaches.

To save you from the hassle, here is an example how you can rebuild a Watson assistant and Watson discovery API with the cloud CLI Tool.

c:\Program Files\IBM\Cloud\bin>ibmcloud cf push
FAILED
No CF API endpoint set.
Use 'ibmcloud target --cf-api ENDPOINT [-o ORG] [-s SPACE]' to target Cloud Foundry, or 'ibmcloud target --cf' to target it interactively.

it's because you are still pointing to the old bluemix link:
c:\Program Files\IBM\Cloud\bin>ibmcloud api https://api.eu-gb.bluemix.net
Setting api endpoint...
API endpoint https://api.eu-gb.bluemix.net is going to be deprecated. Use https://cloud.ibm.com.

here is what you do:
c:\Program Files\IBM\Cloud\bin>ibmcloud api https://cloud.ibm.com
c:\Program Files\IBM\Cloud\bin>\ibmcloud login
now your ENDPOINT is set to the cloud.ibm.com
Now set the right environment for discovery:
c:\Program Files\IBM\Cloud\bin>ibmcloud target --cf-api api.eu-gb.cf.cloud.ibm.com

Now you can (re-)do al your CF functions