Symfoware

Symfowareについての考察blog

Ubuntu + Android Studioで実機をUSBに接続してデバッグ

簡単に出来るだろうと思っていたら、思いの外はまったのでメモ。

こちらを参考にしました。
ハードウェア端末上でアプリを実行する
【Ubuntu】Android Studio で実機をデバッグ機として利用する
Android Studioで実機デバッグするには?
USBドライバ , adb 実機でデバイスが認識しない時 (ubuntu / linux / android)



Ubuntu側の設定



Android端末をUSB接続した状態で「lsusb」を実行。


$ lsusb
Bus 002 Device 006: ID 0b05:7781 ASUSTek Computer, Inc.
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 056e:0101 Elecom Co., Ltd
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub




Android端末のIDを控えておきます。
私の場合、ASUSだったので「0b05」になります。

この「USB ベンダー ID」はこちらのベージでも確認できます。
ハードウェア端末上でアプリを実行する


管理者権限で「/etc/udev/rules.d/51-android.rules」を作成。


$ sudo vi /etc/udev/rules.d/51-android.rules




記載する内容は以下の通り。


SUBSYSTEM=="usb", ATTR{idVendor}=="[調べたUSBベンダーID4桁]", MODE="0666", GROUP="plugdev"



私の場合はこうなりました。


SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0666", GROUP="plugdev"




ファイルを作成したら権限を付与。


$ sudo chmod a+r /etc/udev/rules.d/51-android.rules




ここで一回OSごとリブートしました。
(この手順は不要かも)




Android実機の設定



[設定]から[端末情報]を選択。
※設定後にスクリーンショットをとったので、「開発者向けオプション」が表示されていますが、
最初は表示されていません。

796_01.png


[ソフトウェア情報]を選択。

796_02.png


[ビルド番号]を連打します。(7回タップらしい)

796_03.png

すると、開発用のモードに移行したことを示すダイアログが表示されました。
(スクリーンショット撮り忘れ)


てっきり、これでもう実機デバッグOKな状態になったものと思いハマりました。
改めて、[設定] - [開発者向けオプション]を選択

796_04.png


「USBデバッグ」の項目をONに変更します。

796_05.png


これでAndroid Studioの実行するターゲットに表示されるようになりました。

796_06.png

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/09/03(日) 23:25:24|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Linux inotifywait でファイルの更新を監視し、コマンドを実行する

apidocをDebian 9にインストールしました。
APIドキュメント生成ツール apidoc をDebian 9にインストール

ソースコードを更新したら自動的にドキュメントも更新して欲しい。



inotifywait



こちらが参考になりました。
inotifywait を使って,ファイルが作成されたらアクションを起こすスクリプトを書く

inotify-toolsをインストール


# apt install inotify-tools




更新管理用のスクリプトを作成します。


# vi /var/dev/api_watch.sh




内容は以下の通り。


#!/bin/bash
# required package: inotify-tools
api_dir=/var/dev/php
doc_dir=/var/dev/apidoc

events=(-e CREATE -e MODIFY -e DELETE)
while inotifywait ${events[@]} $api_dir; do
apidoc -i $api_dir -o $doc_dir
done




ソースフォルダ内、ファイルの「作成(CREATE)」「変更(MODIFY)」「削除(DELETE)」を監視。
イベントが発生したら、apidocコマンドを実行してドキュメントを更新します。


実行権限を付与して監視を実行。


# chmod +x api_watch.sh
# ./api_watch.sh
Setting up watches.
Watches established.





適当にphpのコメントを修正して保存します。


  1. <?php
  2. /**
  3. * @api {get} /user/:id Request User information
  4. * @apiName GetUser
  5. * @apiGroup User
  6. *
  7. * @apiParam {Number} id Users unique ID.
  8. *
  9. * @apiSuccess {String} firstname Firstname of the User.
  10. * @apiSuccess {String} lastname Lastname of the User.
  11. * @apiSuccess {String} tel tel number of the User.(ここを追加)
  12. */




ドキュメントが更新されました。

794_01.png





systemdによる自動実行



systemdに登録して、バックグラウンドで自動実行するようにしておきます。

過去記事のこちらを参考にしました。
Ubuntu Systemdでプログラムをサービス起動する(窓使いの憂鬱)


設定ファイルを作成。


# vi /etc/systemd/system/api_watch.service




内容は以下の通り。
生成したドキュメントをwebサーバーで公開する場合は、UserとGroupにwww-dataを指定すると良いかもしれません。


[Unit]
Description = apidoc create daemon

[Service]
ExecStart = /var/dev/api_watch.sh
Restart = always
Type = simple

# 実行ユーザーを指定する場合
#User=www-data
#Group=www-data

[Install]
WantedBy = multi-user.target





サービスとして認識されているか確認


# systemctl list-unit-files --type=service | grep api_watch
api_watch.service                     disabled




サービスを有効化


# systemctl enable api_watch




サービス開始


# systemctl start api_watch




サービスが起動しているか確認


# systemctl status api_watch




phpのコメントを変更して動作を確認します。

794_02.png

ちゃんと監視が行われているようです。

テーマ:サーバ - ジャンル:コンピュータ

  1. 2017/09/03(日) 16:40:32|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

APIドキュメント生成ツール apidoc をDebian 9にインストール

APIドキュメント生成ツール「apidoc」
http://apidocjs.com/

Debian 9にインストールしてみます。
こちらを参考にしました。
PHPでのAPIドキュメント作成ツール(RESTful APIとソースコードドキュメント生成)



node,npmのインストール



node製のツールなので、nodejsとnpmをインストールします。

こちらを参考にしました。
How to Install Latest Nodejs & NPM on Debian 9/8/7


# apt install curl
# curl -sL https://deb.nodesource.com/setup_8.x | bash -
# apt install nodejs




node,npmともに最新版がインストールできました。


# node -v
v8.4.0

# npm -v
5.3.0







apidocのインストールとドキュメントの生成



npmの準備ができたら、apidocをインストールします。


# npm install apidoc -g




インストールできました。


# apidoc -h

Usage: /usr/bin/nodejs apidoc [options]






ドキュメントの生成コマンドは以下の通り


apidoc -i [ソースのディレクトリ] -o [ドキュメントの出力ディレクトリ]




/var/dev/php/sample.phpを作成。
以下の内容を記載しました。


  1. <?php
  2. /**
  3. * @api {get} /user/:id Request User information
  4. * @apiName GetUser
  5. * @apiGroup User
  6. *
  7. * @apiParam {Number} id Users unique ID.
  8. *
  9. * @apiSuccess {String} firstname Firstname of the User.
  10. * @apiSuccess {String} lastname Lastname of the User.
  11. */




APIドキュメント出力用のディレクトリを作成。


# mkdir -p /var/dev/apidoc




APIドキュメントを出力します。


# apidoc -i /var/dev/php -o /var/dev/apidoc




こんなファイルたちが生成されました。

793_01.png


index.htmlを開くと、APIドキュメントが閲覧できます。

793_02.png



※2017/9/3追記

ドキュメント生成の自動化はこちら。
Linux inotifywait でファイルの更新を監視し、コマンドを実行する




【参考URL】

http://apidocjs.com/
PHPでのAPIドキュメント作成ツール(RESTful APIとソースコードドキュメント生成)
How to Install Latest Nodejs & NPM on Debian 9/8/7

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/09/03(日) 16:16:29|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Ubuntu Server 16.04にMariaDB 10.0をインストール

こちらを参考にしました。
Ubuntu 16.04 LTS : MariaDB : インストール : Server World


インストールと初期設定



aptでインストール


$ sudo apt install mariadb-server-10.0




念の為、デフォルトの文字コードを確認


$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf




105行目付近。utf8mb4になっていればOK


character-set-server = utf8mb4
collation-server     = utf8mb4_general_ci






初期設定



mysql_secure_installationで初期設定を事項します。


$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
     SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here. [Enter]

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

# rootパスワードを設定するか
Change the root password? [Y/n] Y
New password: [設定したいrootパスワードを入力]
Re-enter new password: [設定したいrootパスワードを再度入力]
Password updated successfully!
Reloading privilege tables..
... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

# 匿名ユーザーの削除
Remove anonymous users? [Y/n] Y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

# rootユーザーのリモートアクセス拒否
Disallow root login remotely? [Y/n] Y
... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

# テストデータベースの削除
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

# 特権情報のリロード
Reload privilege tables now? [Y/n] Y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!





ログインしようとするとエラーになります。


$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'




この事情については、こちらが参考になりました。
Ubunt 16.04でMariaDBをインストールするとパスワードが変


接続用のユーザーを作ったほうが速いです。
sudo付きでmysqlに接続します。


$ sudo mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 41
Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>





CREATE USERでユーザーを作成し、権限を付与
コンソールを終了します


MariaDB [(none)]> CREATE USER admin IDENTIFIED BY 'P@ssw0rd';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL ON *.* TO admin@'%' IDENTIFIED BY 'P@ssw0rd';
Query OK, 0 rows affected (0.00 sec)


MariaDB [(none)]> quit
Bye





改めて作成したユーザーで接続(sudoは不要)
データベースやテーブルの作成。データのinsertやselectが行えるようになります。


$ mysql -uadmin -pP@ssw0rd
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 45
Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database sample;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use sample;
Database changed
MariaDB [sample]> create table test(id int, value varchar(100));
Query OK, 0 rows affected (0.32 sec)

MariaDB [sample]> insert into test(id, value) values(1, 'test');
Query OK, 1 row affected (0.07 sec)

MariaDB [sample]> select * from test;
+------+-------+
| id | value |
+------+-------+
|    1 | test |
+------+-------+
1 row in set (0.01 sec)

MariaDB [sample]>



テーマ:サーバ - ジャンル:コンピュータ

  1. 2017/08/27(日) 22:25:20|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

axios phpプログラムへpostした時のデータ


  1. axios.post('http://192.168.1.103:8000/api.php', {mode:'list'})




こんな感じで、phpプログラムに対しでデータをpostしてみました。
php側では、$_POST['mode']で値が取得できるだろうと思っていたのですが、
どうもbodyにjsonが書き込まれた状態でデータが送信されるようです。

PHPでHTTP POSTされたJSON本文のbodyを受け取る方法

こちらを参考に、こんなプログラムにしたら値を受け取ることができました。


  1. <?php
  2. if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  3.     header('Access-Control-Allow-Origin: *');
  4.     header('Access-Control-Allow-Headers: Content-Type');
  5.     header('Access-Control-Allow-Methods: GET, POST');
  6.     exit();
  7. }
  8. header('Access-Control-Allow-Origin: *');
  9. header('Content-type: application/json; charset=UTF-8');
  10. $result = [];
  11. // bodyの値に設定されているjsonデータを取得
  12. $param = json_decode(file_get_contents('php://input'), true);
  13. switch ($param['mode']) {
  14.     case 'list':
  15.         $result = mode_list();
  16.         break;
  17. }
  18. echo json_encode($result);
  19. function mode_list() {
  20.     $result = [
  21.         ['id' => 1, 'name' => '一番'],
  22.         ['id' => 2, 'name' => '二番'],
  23.         ['id' => 3, 'name' => '三番'],
  24.         ['id' => 4, 'name' => '四番'],
  25.         ['id' => 5, 'name' => '五番']
  26.     ];
  27.     return $result;
  28. }


テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/07/30(日) 17:22:14|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ