Using my domain,, on DNS as example.

Here are some output of nslookup:

Server: DNS used since we didn’t explicitly say which one to use
“Non-authoritative answer” because is not directly on this server
Address: this is the IP returned for
To get rid of the word “Non-authoritative”, we do:

nslookup.exe -qt=mx MX preference = 10, mail exchanger =
Therefore, emails to go to host, which is also my email server name.

“Registered hosts” or “glue records” is to avoid loop when name server used is subdomain, e.g. I don’t need this since I use Google Domains nameservers instead of my own, e.g.

remote kafka

The official demo,, shows how to run kafka with everything on localhost.
Here are the steps to run kafka server remotely. is the server, which runs kafka zookeeper and brokers on ubuntu in aws
WSL, a windows desktop, runs kafka producer and consumer on WSL ubuntu on local windows

On both AWS and WSL:
download kafka tar ball and extract: 57M
extract to: /mnt/ebs/rio/opensrc/kafka/kafka_2.12-2.3.0
install java. I got OpenJDK 64-Bit Server VM build 11

On AWS, server side:
export KAFKA_OPTS=””
otherwise it’s IPV6
edit so that:
otherwise client report error: Connection to node 0 (localhost/
start zookeepter:
bin/ config/
start server:
bin/ config/

On WSL, client side:
Send message:
bin/ –broker-list –topic test
type some text, ctrlD to exit
Check message received:
bin/ –bootstrap-server –topic test –from-beginning
ctrlC to exit

Roku ECP

Roku TV can be controlled by ECP External Control Protocol.
For example, by running a curl command, a channel can be started or switch to playing another video.
Here are two sample commands:
1. start channel and playing the gym video:
Cmd: curl -d ” ‘’
“contentID=Gym” is to tell channel which piece of video to play once started.
2. while channel is already running, switch to another video, which is dance party.
curl -d ” ‘’

How it is done:
Firmware interpret “launch/dev” as launching the channel whose channel ID is “dev”
Firmware passes {contentId: Gym, type: mp4} to channel entry function Main(args) so that channel knows what to do, e.g. what video to play.
Firmware interpret “input?contentID=Party” as sending {contentID: Party} to the current running channel so that channel, through roInput, knows what to do, e.g. in this case, switching to video called Party.

EcpThe channel source code:
The screen recording:, which show the TV on left, and my linux box on the right.