2021年12月16日木曜日

Android studio updateしたらエラーに苦しんだ

 なんと、、、

絶望的になりながら、、、這いつくばって解決のメモ

このバージョンのお話


エラー1

implementation 'com.google.firebase:firebase-ml-vision

結局、build.gradleの

// ML Kit dependencies
implementation 'com.google.firebase:firebase-ml-vision:'
// Image Labeling model.
implementation 'com.google.firebase:firebase-ml-vision-image-label-model:20.0.2'
// Face model
implementation 'com.google.firebase:firebase-ml-vision-face-model:20.0.2'
// Custom model
implementation 'com.google.firebase:firebase-ml-model-interpreter:'
// Object model
implementation 'com.google.firebase:firebase-ml-vision-object-detection-model:19.0.6'
// AutoML model
implementation 'com.google.firebase:firebase-ml-vision-automl:18.0.6'
implementation 'com.google.firebase:firebase-ml-common:22.1.2'
implementation 'com.google.android.gms:play-services-vision-common:19.1.3'
implementation 'com.google.firebase:firebase-core:20.0.1'

を、変更して

// ML Kit dependencies
//implementation 'com.google.firebase:firebase-ml-vision:'
// Image Labeling model.
implementation 'com.google.firebase:firebase-ml-vision-image-label-model:20.0.2'
// Face model
implementation 'com.google.firebase:firebase-ml-vision-face-model:20.0.2'
// Custom model
//implementation 'com.google.firebase:firebase-ml-model-interpreter:'
// Object model
implementation 'com.google.firebase:firebase-ml-vision-object-detection-model:19.0.6'
// AutoML model
implementation 'com.google.firebase:firebase-ml-vision-automl:18.0.6'
implementation 'com.google.firebase:firebase-ml-common:22.1.2'
implementation 'com.google.android.gms:play-services-vision-common:19.1.3'
implementation 'com.google.firebase:firebase-core:20.0.1'

OKになりました。つまり、、、

https://firebase.google.com/docs/android/setup?hl=ja


自動的にアップデートして非推奨ライブラリーが残っており、かつ完全な構文でなかったので、エラー

で、も、、、、上部のエラーがなくなっただけ

実はこのファイルの、エラーが発生しても、値を設定して、依存関係を定義する

    // ML Kit dependencies
    implementation 'com.google.firebase:firebase-ml-vision:24.1.0'

    // Custom model
    implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.4'

// ML Kit dependencies
implementation 'com.google.firebase:firebase-ml-vision:24.1.0'
// Image Labeling model.
implementation 'com.google.firebase:firebase-ml-vision-image-label-model:20.0.2'
// Face model
implementation 'com.google.firebase:firebase-ml-vision-face-model:20.0.2'
// Custom model
implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.4'
// Object model
implementation 'com.google.firebase:firebase-ml-vision-object-detection-model:19.0.6'
// AutoML model
implementation 'com.google.firebase:firebase-ml-vision-automl:18.0.6'
implementation 'com.google.firebase:firebase-ml-common:22.1.2'
implementation 'com.google.android.gms:play-services-vision-common:19.1.3'
implementation 'com.google.firebase:firebase-core:20.0.1'

これで、sync はOK!

でも、、、

エラー2

Unsupported class file major version 61

これは、gradleがjavaのバージョンをサポートしていないというエラー
従って、Preferences > 

javaのバージョンを下げた。
Macの 

% java --version

openjdk 17.0.1 2021-10-19

OpenJDK Runtime Environment (build 17.0.1+12-39)

OpenJDK 64-Bit Server VM (build 17.0.1+12-39, mixed mode, sharing)


17ではダメみたいで、16に下げたら

Starting Gradle Daemon...
Gradle Daemon started in 796 ms

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/7.0.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 7s

という事で、OK

Peace!!

2021年12月5日日曜日

mariadb C言語 アクセスサンプル

とりあえず、確認のためにに、下記のコードでテスト

build は、こんな感じ

 gcc -Wall -o tst tst.c -lmysqlclient -L/usr/lib64/mysql/

サンプルは以下、、、

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
int main(void){
    MYSQL *conn     = NULL;
    MYSQL_RES *resp = NULL;
    MYSQL_ROW row;
    char sql_str[255];
    char *sql_serv  = "localhost";
    char *user      = "xxxxx";
    char *passwd    = "yyyyyy";
    char *db_name   = "dddd";

    memset( &sql_str[0] , 0x00 , sizeof(sql_str) );

    // mysql接続
    conn = mysql_init(NULL);
    if( !mysql_real_connect(conn,sql_serv,user,passwd,db_name,0,NULL,0) ){
        // error
        printf(" connect error\n");
        exit(-1);
    }

    // クエリ実行

    snprintf( &sql_str[0] , sizeof(sql_str)-1 , "select * from test" );
    if( mysql_query( conn , &sql_str[0] ) ){
        // error
        mysql_close(conn);
        exit(-1);
    }

    // レスポンス
    resp = mysql_use_result(conn);
    while((row = mysql_fetch_row(resp)) != NULL ){
        printf( "%d : %s\n" , atoi(row[0]) , row[1] );
    }

    // 後片づけ
    mysql_free_result(resp);
    mysql_close(conn);
    return 0;
}

Peace!!


そりゃないだろ、、、"MariaDB-devel" だって、、、

開発環境をつくりたいので、、、

 sudo dnf install mariadb-devel

Last metadata expiration check: 2:57:12 ago on Sun Dec  5 19:09:59 2021.

Error: 

 Problem: package mariadb-devel-3:10.3.28-1.module+el8.4.0+427+adf35707.x86_64 requires mariadb-connector-c-devel >= 3.1.11, but none of the providers can be installed

  - package mariadb-connector-c-devel-3.1.11-2.el8_3.i686 requires libmariadb.so.3, but none of the providers can be installed

  - package mariadb-connector-c-devel-3.1.11-2.el8_3.x86_64 requires mariadb-connector-c = 3.1.11-2.el8_3, but none of the providers can be installed

  - package MariaDB-shared-10.6.3-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.i686

  - package MariaDB-shared-10.6.3-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.x86_64

  - problem with installed package MariaDB-shared-10.6.5-1.el8.x86_64

  - package MariaDB-shared-10.6.4-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.i686

  - package MariaDB-shared-10.6.4-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.x86_64

  - package mariadb-devel-3:10.3.28-1.module+el8.4.0+427+adf35707.x86_64 conflicts with mysql-devel provided by MariaDB-devel-10.6.5-1.el8.x86_64

  - conflicting requests

  - package MariaDB-shared-10.6.5-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.i686

  - package MariaDB-shared-10.6.5-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.x86_64

  - installed package MariaDB-shared-10.6.5-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.i686

  - installed package MariaDB-shared-10.6.5-1.el8.x86_64 obsoletes mariadb-connector-c provided by mariadb-connector-c-3.1.11-2.el8_3.x86_64

(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

 エラー、、、、

いろいろ探して、、、

$ sudo dnf -y install MariaDB-devel ;

Last metadata expiration check: 2:57:42 ago on Sun Dec  5 19:09:59 2021.

Dependencies resolved.

================================================================================

 Package              Architecture  Version                Repository      Size

================================================================================

Installing:

 MariaDB-devel        x86_64        10.6.5-1.el8           mariadb        7.9 M


Transaction Summary

================================================================================

Install  1 Package


Total download size: 7.9 M

Installed size: 49 M

Downloading Packages:

MariaDB-devel-10.6.5-1.el8.x86_64.rpm           2.8 MB/s | 7.9 MB     00:02    

--------------------------------------------------------------------------------

Total                                           2.8 MB/s | 7.9 MB     00:02     

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction test succeeded.

Running transaction

  Preparing        :                                                        1/1 

  Running scriptlet: MariaDB-devel-10.6.5-1.el8.x86_64                      1/1 

  Installing       : MariaDB-devel-10.6.5-1.el8.x86_64                      1/1 

  Running scriptlet: MariaDB-devel-10.6.5-1.el8.x86_64                      1/1 

  Verifying        : MariaDB-devel-10.6.5-1.el8.x86_64                      1/1 


Installed:

  MariaDB-devel-10.6.5-1.el8.x86_64                                             


Complete!


で、OKってなんなんだぁ

Peace!!

CentOS 8 からRocky Linux への移行とMariaDBのインストール

 僕は、日本中で動いているロボットを統合的にシステム管理している。これをRDCS Serverと呼んでいる。実体は某社のVPS上に構築している。

ところが、、、

CentOS 8 のサポートが、12月31日に終了という事で、移行の必要性があった。いろいろ調査した結果、Rocky Linuxに移行することにした。というか、、、Google、Microsoft、Amazonが支持をしているからが大きい。安易だなぁ、、、

また、これまで、自作DBで管理していたけど、思ったより管理データが多くなってきたので使い慣れているMariaDBに移行する事も決めた。

1. Cent OS 8からRocky Linux への移行

これは簡単で、Rocky Linuxが提供しているツールで10分程度で終了。

How to Migrate to Rocky Linux from CentOS Stream, CentOS, Alma Linux, RHEL, or Oracle Linux

2. MariaDB インストール

MariDBは、下記のページの通りにする。

How to Install MariaDB on Rocky Linux 8

ここに書いてあるように、defaultのままでインストールすると10.3がインストールされる。現在の最新版は10.6なので記述してあるようにインストールする。
この説明は、丁寧な説明なのでこの通りにすれば良い。

すんなりすんで、よかったです。


3. 文字コード設定

インストール直後は、設定が行われていない。

文字コードを、utf8mb4 に設定する。 詳しくはこちら

手順の抜粋

「mysql -u root -p」でMariaDBにログインします。

show variables like 'char%';
show variables like 'coll%';
show charset like "%utf8mb4%";
show collation like "%utf8mb4%";

確認後
sudo vi /etc/my.cnf.d/mysql-clients.cnf

[mysql]
default-character-set=utf8mb4  # <--- 追加

sudo vi /etc/my.cnf.d/server.cnf

[mysqld]
character-set-server = utf8mb4  # <--- 追加

sudo systemctl restart mariadb

確認をすると、、、、

MariaDB [(none)]> show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8mb3                    |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.002 sec)

MariaDB [(none)]> show variables like "%coll%";
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.001 sec)

因みに、設定前は、、、
MariaDB [(none)]> show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8mb3                    |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.003 sec)

MariaDB [(none)]> show variables like "%coll%";
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.003 sec)


Peace!!

2021年12月1日水曜日

初めての、Raspberry PiからのTwitter

 定期的にロボットの状態を把握したいので、遅ればせながらTwitterで確認できるようにした。その時の忘備録

既にある、または新しいアカウントで行う。今回は公開したく無いので新しいアカウントを作成した。

ネットの情報の通りに、https://apps.twitter.com/ にアクセスして開発者登録する。

その後、Developer Portalで、追加情報を入力した。実は、この部分がネットの情報と違った。

でも作業は同じなので、後から同じことをできるようにメモしておく。

1. twitter の設定

「Project1」を押下する



「Apply for Elevated」を押下

この後の画面で、いろいろ入力する
以下は、項目の説明

In your words

In English, please describe how you plan to use Twitter data and/or APIs. The more detailed the response, the easier it is to review and approve.


ここには英語で何をするのかを記述する。最低でも200文字が必要


僕は、複数種類のロボットの開発をしている。それらのロボットの状態を統合的に管理する必要がある。ロボットを統合管理するサーバーが、自動的に15分毎にロボット達の状態を集約して、ツイートする。そのツイートにより効率的に全体が把握できる

I am developing multiple types of robots. It is necessary to manage the state of those robots in an integrated manner. The server that manages the robots in an integrated manner automatically aggregates the states of the robots every 15 minutes and tweets them. You can grasp the whole efficiently by the tweet.


Are you planning to analyze Twitter data?

No



Will your app use Tweet, Retweet, Like, Follow, or Direct Message functionality?

Yes

Please describe your planned use of these features.

The application uses the tweet function. The robot management system aggregates and tweets every 15 minutes.

Do you plan to display Tweets or aggregate data about Twitter content outside Twitter?

これはNo

Will your product, service, or analysis make Twitter content or derived information available to a government entity?

これも、No

NEXTボタンを押下する。すると下の画面


Nextボタンを押下する



チェックして、 Submitボタン


次に、Keyデータを取得する。

API Key and Secret Regenerateボタンを押下



Access Token and Secret Regenerateボタンを押下



これで準備OK

2. Raspberry Pi の設定

sudo pip3 install twython

確認は、、、

python3 -c "import twython"

vi auth.py

consumer_key        = 'API Key'

consumer_secret     = 'API Key Secret'

access_token        = 'Access Token'

access_token_secret = 'Access Token Secret'


vi tst.py

from twython import Twython

from auth import (

    consumer_key,

    consumer_secret,

    access_token,

    access_token_secret

)

twitter = Twython (

    consumer_key,

    consumer_secret,

    access_token,

    access_token_secret

)

message = "100-100-101"

twitter.update_status(status=message)

print("Tweeted: " + message)

これで実行したらOKです。

ちなみに同じメッセージを繰り返すとエラーになる。

twython.exceptions.TwythonError: Twitter API returned a 403 (Forbidden), Status is a duplicate.


Peace!!