mySphere Posts

Share

These are my steps to create a MySQL Docker container, i am using Docker for Mac.

1 – Create a folder to save the database. If you do not create a Docker volume you will loose your data when you restart your container.  My folder is /Users/keniocarvalho/VolumesDocker/mysqdata

2- Execute the command bellow:

docker run –name mysqldb -p 3306:3306 -v /Users/keniocarvalho/VolumesDocker/mysqdata/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest

3 – Enter on the mysql container using the command :  docker exec -it mysqldb bash

4 – Inside the container type : mysql -uroot -p. The system will ask for the password. Here the password is password.

5 – To access the database from outside the container run this commands on the mysql console:

CREATE USER ‘root’@’%’ IDENTIFIED BY ‘root’;

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ WITH GRANT OPTION;

FLUSH PRIVILEGES;

Verify the permission:

mysql> SELECT host, user FROM mysql.user;
+———–+——————+
| host | user |
+———–+——————+
| % | root |
| localhost | healthchecker |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+———–+——————+

Now you can access the mysql from outside of the container using port 3306  from any host.

Obs: This is not a setup for Production use only in your development workstation.

 

Uncategorized

Share

Last week i got back my Macbook Pro 15 2016, after 10 days.  The laptop go to service on an Apple Technical Assistance here in my city.

My first Macbook Pro (Mid 2012) works for 5 years without issues.

The first problem was the speakers. Sound was horrible.  The problem is the same described on this link.

The second problem was the battery. With only 86 cycles a message about to service the battery appears.

The third problem was #staingate. 

Apple replace all parts of my Macbook. The service is ok until now.

Lots of problems with this expensive machine. The quality is not the same anymore.

Uncategorized

Share

 

Cloud service end of marketing and end of service: Connections Cloud

Effective July 16, 2019, HCL® will withdraw from marketing all part numbers related to Connections Cloud (5725-F82), inclusive of but not limited to Verse, SmartCloud Notes, Connections S1, Connections S2, Connections Social Cloud, Connections Engagement Center, Connections Chat, Connections Meetings, Dual Entitlement,  and Domino Applications on Cloud (5900-A1K) as subscribed to under the applicable agreements.  Existing Connections Cloud customers will be able to purchase additional entitlements through the end of service date.

Effective, July 16, 2020, HCL will end service for all part numbers related to Connections Cloud.

More information here

Cloud

Share

Rules are key elements for an IoT solution. Using rules you can trigger an action or send an alert any kind of notification.
IBM update his platform and now you can create rules using a graphical interface.

The key part of a rule is the expression that will be evaluate to true or false.  The expression language are built using JSONata.
JSONata is a lightweight query and transformation language for JSON data.

The point is that IBM are using JSONata v1.4x. and the current version of JSONata is v1.6.5. The versions have lots of difference.
Yesterday i was writing a rule to get the hour for an event. If you are using v1.6.5 you can use the function $fromMilllis with picture.
$fromMillis(1510067557121, ‘[H01]’, ‘-0500’) => “10”
But Watson IoT are using v1.4x  and $fromMillis doesn’t have the picture implemented. The only way i found is to manipulate strings and i got the following expression:

$number($substring($fromMillis($state.datahora),11,1)) < 1 and $number($substring($fromMillis($state.datahora),12,1)) < 3 ? $number($substring($fromMillis($state.datahora),12,1))+24-3 : $number($substring($fromMillis($state.datahora),11,1))*10+ $number($substring($fromMillis($state.datahora),12,1))-3
$state.datahora returns an epoch timestamp.
This expression returns the hour on my timezone (-3). If anyone have a more elegant solution post on comments. I know my solution can’t be the better one, but it works.

IoT

Share

This month i am creating a Course about AI & IoT   (AI & IoT Fundamentals).

The course are about AI and IoT in general but i will use IBM Watson APIs, IBM Watson IoT and off course Node-Red and Raspberry Pi to make the excersices.

The course is 15 hours long (lots off video) plus the exercises.

Using the Keynote to generate de videos is fine but when i export the video the only option is M4V type.  To convert the videos i am usin FFmpeg.

1 – Install FFmpeg brew install ffmpeg

2 – Convert to mp4 using ffmpeg -i input.m4v out.mp4

3 – Convert to webm ffmpeg -i input.m4v output.webm

 

AI IoT MAC

Share

This is the first public beta release of Node-RED 1.0.

The changes in this release are mostly focused on the editor – and there are some significant changes in there.

More info here

Installing the beta

If you want to try out the beta, you will need specify [email protected] when you use npm to update. Without the @next you’ll still get 0.20.x.

So on a Pi you’d do:

sudo npm install -g --unsafe-perm [email protected]

IoT

Share

As of April 10, 2018, Google has deprecated Google Cloud Messaging (GCM). The GCM server and client APIs are deprecated and will be removed as soon as April 11, 2019. IBM Traveler uses GCM for push notifications with IBM Verse for Android clients. Firebase Cloud Messaging (FCM) is the new supported notification infrastructure. This flash details what actions should be taken for IBM Traveler and the IBM Verse for Android clients to support the FCM notification infrastructure.

More information on this link

Domino verse

Share

 

Node-RED 0.20 brings lots of new enhancements to the editor, some new subflow features and a complete restructure of its internal packaging.  https://nodered.org

Uncategorized

Share

Setup a Node.js development environment is easy but when you need to work in a team, the best option is document all installation steps for everyone.

Every developer must use the same setup or things can be wrong. Bellow are small steps to setup a simple Node.js development environment

1 – Setup Node.js:  https://nodejs.org/en/
2 – Setup VS Code: https://code.visualstudio.com/docs/setup/setup-overview
3 – Open VS Code create a folder and in this folder save an file as app.js
4 – Setup nodemon:
Nodemon is a utility that will monitor for any changes in your source and automatically restart your server. Perfect for development.
To install nodemom open a terminal window and go to the folder you created on step 3 and  type npm install nodemon –save-dev  on the terminal window . This will install nodemon  as development dependency
5 – change package.json to start the application using nodemon
"name": "Node Development",
"version": "1.0.0",
"description": "Just another app",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon app.js"
},
"author": "Kenio Carvalho",
"license": "ISC",
"devDependencies": {
"nodemon": "^1.18.10"
}
}
5 – Run npm init on the folder and install Express (npm install express –save) //Production dependency

6 Add the code below to app.js and sav, just to test the environment:

const express = require ('express');
const app = express();
app.use('/',(req,res,next)=>{
 
res.send('<h1>Hello from Expres</h1>')
});
app.listen(3000)

7 run npm start on the terminal

open the url localhost:3000 and you will se the page.

Uncategorized

Share

Connect an Arduino Board to a computer is a easy task right? 99% yes.  My Arduino Nano Board arrived last week and i only have time to play with this board on the last weekend.

When i try to upload a program to the board i got the following:

Arduino: 1.8.8 (Mac OS X), Board: “Arduino Nano, ATmega328P”

Sketch uses 444 bytes (1%) of program storage space. Maximum is 30720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x50
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x72
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x6f
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x67
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x72
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x61
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x6d
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x61
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x20
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x73
An error occurred while uploading the sketch

I tried on a Windows and Linux coputer with no luck but the same problem.

I read lot’s off posts in Arduino forums, some problems with MAC OS Sierra, i setup drivers  and nothing.

Today i found a solution :

Tools > Board > ATmega328P (Old Bootloader) on Arduino IDE.

The forum post https://forum.arduino.cc/index.php?topic=530807.0 has more solutions for another problem. I think is because Arduino has several clones.

 

IoT

Share

Every sensor has it’s own kind off codification
The message from the device is like this one:

{"time": "1551285775",
"deviceType": "deviceType",
"device": "xyzabcd",
"duplicate": "false",
"snr": "30.00",
"rssi": "-128.00",
"avgSnr": "19.39",
"station": "300C",
"lat": "-20.0",
"lng": "-44.0",
"seqNumber": "497",
"data": "1a24183c3801" }

The measurement are encoded on data string, a sequence of 6 bytes.
I read the sensor manual and the temperature are usin the last 4 bytes

To get the temperature value i wrote the following:

var dados = msg.payload.data //get the data value “1a24183c3801”
var v1 = dados.substring(10,11)+dados.substring(11,12)+dados.substring(8,9)+dados.substring(9,10) //get the 4 values as in the device manual
For example the value will be “0138”
The temperature will be temp = parseInt(v1,16)/100
Using the value 0138 the result is 3,12 Degrees Celsius
But if the temperatue is negative you need to test if the first bit of the meesage is 1 and use

temp = parseInt((~parseInt(v1,16) +1 >>> 0).toString(2).substring(16,32),2)/100 * -1

The formula code on the line above use twos complement format, get the last 16 bits and then convert to a decimal value

IoT

Share

Today i am working on a batch operation registering several sensors on IBM Watson IoT.

Using curl you need to encode de API KEY and API TOKEN

It easy using the MAC terminal console

To encode just type on terminal: echo -n ‘user:password’ | base64
the result is —> dXNlcjpwYXNzd29yZA==

To decode just type: echo ‘dXNlcjpwYXNzd29yZA==’ | base64 -D
the result is —> user:password

IoT