2020/06,江端さんの技術メモ

内容コマンド例
サービスの起動postgres -D /usr/local/var/postgres
デフォルトのテーブルに接続psql -d postgres
直接データベースに接続psql -d テーブル名
データベース一覧の表示\l
データベースへの接続\c データベース名
テーブルの作成create table テーブル名 (
counter int primary key,
present_station int,
departure_station int,
present_time time
);
データの書き込み
INSERT INTO テーブル名(counter, present_station, departure_station, present_time) VALUES(1, 2, 3, '12:23:34');
データの上書きUPDATE テーブル名 set present_time = '23:34:45' WHERE counter = 1;
テーブル一覧の表示\dt;
テーブル構造の表示d テーブル名;
テーブル内のデータを一覧select * from テーブル名;
指定したカラムの内容を小さい順に表示select * from テーブル名 order by カラム;
指定したカラムの内容を大きい順に表示select * from テーブル名 order by カラム desc;
表示数指定select * from テーブル名 limit 数;
表示の開始位置指定select * from テーブル名 offset 数;
カラム内の任意の文字を表示select distinct カラム名 from テーブル名;
カラム内の合計値select sum(カラム名) from テーブル名;
カラム内の最大値select max(カラム名) from テーブル名;
カラム内の最小値select min(カラム名) from テーブル名;
カラム内の平均値select avg(カラム名) from テーブル名;
データの更新update テーブル名 set 更新内容;
全データの削除delete from テーブル名;
テーブル本体の削除drop table テーブル名;
データの削除delete from テーブル名 where 条件;
テーブルのオーナーの変更alter table テーブル名 owner to オーナー名;
文字数select length(カラム名) from テーブル名;
文字列連結select concat(文字列, 文字列, ...) from テーブル名;
カラムの追加alter table テーブル名 add カラム名 データ型;
カラムの削除alter table テーブル名 drop カラム名;
カラム名の変更alter table テーブル名 rename カラム名 to 新カラム名;
カラムのデータ型を変更するalter table テーブル名 alter カラム名 type データ型;
インデックス追加create index インデックス名 on テーブル名(カラム名);
インデックス削除drop index インデックス名;
viewの作成create view ビュー名 as viewに指定するコマンド;
view一覧の確認\dv;
viewの使用方法select * from ビュー名;
viewの削除drop view ビュー名;
SQL文を外部ファイルに書いて実行する時に使う\i ファイル名

2020/06,江端さんの技術メモ

osm_railway_linestringの場所がさっぱり分からないので、とりあえずOpenMapTilesがあやしいので、「OpenMapTiles Map Server を使ってサイトに地図を埋め込む」を、そのまま真似てみる

https://qiita.com/kmdsbng/items/fe9239e96afe29eb893c をそのまま実行

タイルデータをダウンロードする
https://openmaptiles.com/downloads/

Downloads > Asia > Japan > Tokyo から 東京エリアをダウンロードする

OpenMapTiles Map Serverを起動する
タイルデータを置いたディレクトリで以下の docker コマンドを実行

docker run --rm -it -v $(pwd):/data -p 8080:80 klokantech/openmaptiles-server

C:\Users\ebata\Desktop\hirohakama_sim>docker run --rm -it -v $(pwd):/data -p 8080:80 klokantech/openmaptiles-server
Unable to find image 'klokantech/openmaptiles-server:latest' locally
latest: Pulling from klokantech/openmaptiles-server
c5e155d5a1d1: Pull complete 221d80d00ae9: Pull complete 4250b3117dca: Pull complete 3b7ca19181b2: Pull complete 425d7b2a5bcc: Pull complete 69df12c70287: Pull complete ea2f5386a42d: Pull complete d421d2b3c5eb: Pull complete da30b29849e7: Pull complete 737fbec6f196: Pull complete e4745ce6fed7: Pull complete 28b22a8cf232: Pull complete Digest: sha256:1a6fec0108fa78cf778d385205b4b0197b8c599fb91f9e08a1f114af9df75584
Status: Downloaded newer image for klokantech/openmaptiles-server:latest
docker: Error response from daemon: create $(pwd): "$(pwd)" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.

あ、Windows10のコマンドプロンプトでは、$(pwd)が解釈できないみたいなので、

C:\Users\ebata\Desktop\hirohakama_sim>docker run --rm -it -v ~/data -p 8080:80 klokantech/openmaptiles-server としてみたら

C:\Users\ebata\Desktop\hirohakama_sim>docker run --rm -it -v ~/data -p 8080:80 klokantech/openmaptiles-server
/usr/lib/python2.7/dist-packages/supervisor/options.py:298: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
'Supervisord is running as root and it is searching '
2020-06-29 15:43:52,652 CRIT Supervisor running as root (no user in config file)
2020-06-29 15:43:52,652 INFO Included extra file "/etc/supervisor/conf.d/openmaptiles.conf" during parsing
2020-06-29 15:43:52,655 INFO Creating socket tcp://localhost:8081
2020-06-29 15:43:52,656 INFO Closing socket tcp://localhost:8081
2020-06-29 15:43:52,663 INFO RPC interface 'supervisor' initialized
2020-06-29 15:43:52,663 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2020-06-29 15:43:52,664 INFO supervisord started with pid 1
2020-06-29 15:43:53,669 INFO spawned: 'wizard' with pid 8
2020-06-29 15:43:53,674 INFO spawned: 'xvfb' with pid 9
Starting OpenMapTiles Map Server (action: run)
2020-06-29 15:43:54,196 INFO success: wizard entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2020-06-29 15:43:54,196 INFO success: xvfb entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
Config file not found!
Starting installation…
Installation wizard started at http://:::80/
List of available downloads ready.

で、このまま、で停止した状態。

ブラウザで http://localhost:8080/ にアクセス

"CONTINUE"を押下

"CONTINUE"を押下

"SAVE & RUN THE SERVER"を押下

Click here to get the download keyを押下

上記のKeyをコピペして、"START DOWNLOAD"を押すと

てな画面がでてくる。

"OPEN MAP SERVER"を押下した後、http://localhost:8080/をすると以下の画面が出てくる。

疲れた。今日はここまで。

2020/06,江端さんの技術メモ

------- PostgresのpostGISに、鉄道情報も入れる --------

omsのデータには、鉄道情報入っていません(と思う osm2pgrouting にtrainを取り出すオプションがなかったので) ―― ので、国土地理院からダウンロードする

https://nlftp.mlit.go.jp/ksj/index.html から 鉄道時系列(ライン)(ポイント)を探して、ここからファイル(N02-08.zip)をPCにダウンロードして解凍する。中身はKS-META-N02-08.xmlと、N02-08.xml が入っている。

ところが、xmlファイルは、postgresにインポートできないのでshpファイルに変換する必要がある。

で、https://nlftp.mlit.go.jp/ksj/jpgis/jpgis_tool.html にある、「国土数値情報XML-シェープ変換ツール」をダウンロードしてインストールする。私の場合、64Bit版OSに対応した変換ツールはこちらからダウンロードできます。(ksjtool_64_v1.8.zip 約18MB)をダウンロードした。

で、先程のN02-08.xmlを変換すると、N02-08_EB02.dbf、N02-08_EB02.shp、N02-08_EB02.shx、N02-08_EB03.dbf、N02-08_EB03.shp、N02-08_EB03.shx が生成される。

(どういう訳か、shp2pgsqlがなくて、apt-get install shp2pgsql にも失敗するので)、QGIS3を使って、PostgresのDBにつっこむ。

N02-08_EB02 を選んで、OKを押下して、さらにN02-08_EB03を選んで、OKを押下する(2つインポートする)

以下を見ると、N02-08_EB02は路線情報が、N02-08_EB03は駅の情報が入っているみたい

ただ、selectしようとすると、変なエラーがでるので、テーブルの名前を変更した方がいい(が、今日は疲れたので、ここまで)

selectでは、テーブルの名前は小文字で、"-"も使えないようである。QGISから、以下のように変更した。

------- ところが鉄道の路線情報が、geometry型で、何が何やらさっぱり分からん --------

例えば、新百合ヶ丘駅から五月台駅までのルートは、以下のような情報が入っている

hirohakama_sim2=# select geom from n02_08_eb02 where id = 6328;

0105000020E610000001000000010200000012000000E97DE36BCF6F6140CDCCCCCCCCCC4140E4141DC9E56F614006D847A7AECC41400D8E9257E76F61400DFD135CACCC4140BEBC00FBE86F6140A27A6
B60ABCC4140404D2D5BEB6F61401422E010AACC414045F0BF95EC6F6140A99F3715A9CC4140923F1878EE6F614062F3716DA8CC41400708E6E8F16F61401B47ACC5A7CC4140ABECBB22F86F6140F870C97
1A7CC414055F65D11FC6F61401B47ACC5A7CC414014ED2AA4FC6F61403F1D8F19A8CC414072A774B0FE6F6140A99F3715A9CC414047ACC5A70070614038F8C264AACC414075C8CD700370614031D3F6AFA
CCC4140130A117008706140B1E1E995B2CC4140C3B645990D70614006F52D73BACC414043C5387F13706140E23B31EBC5CC4140003ACC9717706140A2D11DC4CECC4140
(1 row)

これが訳が分からんのだが、QGISではちゃんと曲線も含めて表示される。

地物情報としては、両端の位置情報は入っているが、カーブの情報とかどうやて表現しているんだ?

なんか、色々探しているうちに、こんなのが出てきた。(参考 http://www.jurigis.me/2015/02/07/select-in-postgis/)

hirohakama_sim2=# select ST_Astext(geom) from n02_08_eb02 where id = 6328;
MULTILINESTRING((139.49407 35.6,139.4968 35.59908,139.49699 35.59901,139.49719 35.59898,139.49748 35.59894,139.49763 35.59891,139.49786 35.59889,139.49828 35.598
87,139.49904 35.59886,139.49952 35.59887,139.49959 35.59888,139.49984 35.59891,139.50008 35.59895,139.50042 35.59902,139.50103 35.5992,139.50166 35.59944,139.5023
8 35.59979,139.50288 35.60006))
(1 row)

エクセルで、この座標を並べて、QGIS3と比較してみた。

中間状態が、座標で表示されていることが分かった。

hirohakama_sim2=# select ST_Length(geom) from n02_08_eb02 where id = 6328;
st_length
0.009214722968728321
(1 row)

 

これだと、デカルトの長さになるらしい。これをメートルに変換するには、以下の様にする。

hirohakama_sim2=# select ST_Length(Geography(ST_Transform(geom,4326))) from n02_08_eb02 where id = 6328;
st_length
852.3697682752311
(1 row)

で、次は駅の情報。駅は、n02_08_eb03(×n02_08_eb02)に入っている。

五月台駅は、こんな感じ。

hirohakama_sim2=# select * from n02_08_eb03 where id = 3106;
id | geom | rac | int | lin | opc | stn
3106 | 0105000020E610000001000000010200000002000000E97DE36BCF6F6140CDCCCCCCCCCC4140A857CA32C46F614030478FDFDBCC4140 | 1
2 | 4 | 多摩線 | 小田急電鉄 | 五月台
(1 row)

で、駅の端点は、こんな感じで出てくる。

hirohakama_sim2=# select ST_Astext(geom) from n02_08_eb03 where id = 3106;
st_astext
MULTILINESTRING((139.49407 35.6,139.4927 35.60046))

hirohakama_sim2=# select ST_Length(Geography(ST_Transform(geom,4326))) from n02_08_eb03 where id = 3106;
st_length
134.22648323273413
(1 row)

ふーん、五月台駅って、134メートルなんだ

結論 geometryのフォーマットはさっぱり分からんが、関数使って取り出せるなら、それで良しとしよう。

課題 鉄道のgeometryを使った最短経路問題を解くのメソッドってあるのかな? pgr_dijkstra()とか・・・

http://kenpg.seesaa.net/article/385517945.html を、後で試してみること

2020/06,江端さんの技術メモ

■全部のDockerを止める
C:\Users\ebata>docker ps -aq | xargs docker stop

■全部のDockerを消す
C:\Users\ebata>docker ps -aq | xargs docker rm (これやると、これまでの設定も全滅するので注意)

(ちなみに2つを纏めてやる方法は、>docker prune と教えて貰いました )

■作りなおす
C:\Users\ebata>docker run -d --name postgres122 -e POSTGRES_PASSWORD=test -p 5432:5432 postgres:12.2

■確認(スキップしてもいい)
C:\Users\ebata>docker container ls

■確認(シェルに入れることを確認する(しなくてもいい))
C:\Users\ebata>docker exec -ti postgres122 bash

■ファイルコピー(やらなくてもいいが、やらないと後の話に繋がらない)
C:\Users\ebata>docker cp c:\routing-20200221.sql postgres122:/tmp/

■コンテナに入る(やらなくてもいい)
C:\Users\ebata>docker exec -i -t postgres122 /bin/bash

■コピーされているかを確認する
root@839317f0bb70:/# cd tmp
root@839317f0bb70:/tmp# ls
で、
routing-20200221.sql
が表示されたので成功

■ローカル(例えば C:\Users\ebata)に以下のdocker-compose.ymlを作成する

version: '3.7'

services:
db:
image: pgrouting/pgrouting:v3.0.0-dev-postgresql_12
expose:
- 5432
ports:
- 15432:5432
volumes:
- db_data
- ./shared:/shared
db_data:
image: busybox
volumes:
- /data/db

■次のコマンドを実施する
C:\Users\ebata>docker-compose up -d

■DBの作成
C:\Users\ebata>docker-compose exec db createdb -h db -U postgres routing

■postgisのインストール(これが失敗するみたい)
C:\Users\ebata>docker-compose exec db psql -h db -U postgres -d routing -c 'CREATE EXTENSION pgrouting CASCADE; CREATE EXTENSION hstore;'

■ダンプしたsqlの取り込み
C:\Users\ebata>docker-compose exec db psql -h db -U postgres routing -f /shared/routing-20200221.sql

■作られたDockerの確認
C:\Users\ebata>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64101530c199 pgrouting/pgrouting:v3.0.0-dev-postgresql_12 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:15432->5432/tcp ebata_db_1
f5ae64d47096 busybox "sh" About a minute ago Exited (0) About a minute ago ebata_db_data_1
d7838161c2f9 postgres:12.2 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:5432->5432/tcp postgres122

----- ここから次のフェーズに入る ------

■ログインする
C:\Users\ebata>docker container exec -it ebata_db_1 bash

■psqlに入る
C:\Users\ebata>docker container exec -it ebata_db_1 bash
root@64101530c199:/#
root@64101530c199:/#
root@64101530c199:/# psql -U postgres
psql (12.0 (Debian 12.0-2.pgdg100+1))
Type "help" for help.

postgres=#

postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
routing | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)

■d1というDBを作る
postgres=# CREATE DATABASE d1;

■d1に接続
postgres=# \c d1
You are now connected to database "d1" as user "postgres".

■postGISのインストール
d1=# CREATE EXTENSION postgis;
CREATE EXTENSION
d1=# CREATE EXTENSION pgrouting;
CREATE EXTENSION

■テーブルを作成する
d1=# CREATE TABLE edges (id serial, source int, target int, cost int);
CREATE TABLE

■値を入力する
d1=# INSERT INTO edges (source, target, cost) VALUES (1, 2, 7), (1, 3, 9), (1, 6, 14), (2, 3, 10), (2, 4, 15), (3, 4, 11), (3, 6, 2), (4, 5, 6), (5, 6, 9); ← 端点ノード1、端点ノード2、コスト
INSERT 0 9

■最短コスト計算をする
d1=# SELECT seq, node, edge, cost FROM pgr_dijkstra('SELECT id, source, target, cost FROM edges', 1, 5, directed:=false); ← ノード1からノード5までの最短コストを算出する
seq | node | edge | cost
-----+------+------+------
1 | 1 | 2 | 9
2 | 3 | 7 | 2
3 | 6 | 9 | 9
4 | 5 | -1 | 0
(4 rows)
1->3->6->5の最短コストが出てくる。

--------- Dockerで作ったpgRoutingにosmファイルをインポートする ---------

(一回psqlをログアウトしてから、再度 psql -U postgres でログインした)

■データベース新規作成
psqlでデータベースを新規作成する(以下、データベース名をca_simとする)。
postgres=#CREATE DATABASE ca_sim;

■データベース拡張
psqlに入って次のコマンドを実行する。

postgres=# \c ca_sim
postgres=# create extension postgis;
postgres=# create extension pgrouting;

■kashiwanoha.osmを読み込む
C:\Users\ebata\Desktop\20190327_casim_final\environment>docker cp kashiwanoha.osm ebata_db_1:/db_data

■osm2pgrouting をインストール(が、できると思わなかったので、かなり驚いた)

root@70fa5aa3a11d:/# apt-get update
root@70fa5aa3a11d:/# apt-get install
root@70fa5aa3a11d:/# apt-get install osm2pgrouting

■kashiwanoha.osmをインポート

root@70fa5aa3a11d:/# osm2pgrouting -f /db_data/kashiwanoha.osm -c /usr/share/osm2pgrouting/mapconfig_for_cars.xml -d ca_sim -U postgres

■sqlファイルをシェルから実施する(これ実施中→うまくいなかいが、後の処理で回収できる(はず))

root@70fa5aa3a11d:# psql -f /db_data/make_bus_route_table.sql -d ca_sim -U postgres

--------- QGISでの表示の為のパスワードの設定 --------

■root@19e323b3f7c1:/# psql -U postgres

とした状態で、

postgres=# alter role postgres with password 'c-anemone';

■と打ち込んだ後、psqlからログアウトして、別のコンソールから、

C:\Users\ebata>docker stop postgres122

C:\Users\ebata>docker start -a postgres122

この後、間違っても、"docker ps -aq | xargs docker rm"なんぞやらんように。ここまでの設定が吹き飛ぶ

===== このままPCを落して寝ると、次の日、DBが落ちているので、立ち上げ直す

C:\Users\ebata>docker start -a postgres122

C:\Users\ebata>docker container exec -it postgres122 bash

root@19e323b3f7c1:/# psql -U postgres

とした状態で、

postgres=# alter role postgres with password 'c-anemone';

と打ち込んだ後、psqlからログアウトして、別のコンソールから、

C:\Users\ebata>docker stop postgres122

C:\Users\ebata>docker start -a postgres122

次は、ebata_db_1の方を使えるようにする。

C:\Users\ebata>docker start -a ebata_db_1 ← pgRoutingで作ったDockerのDB
C:\Users\ebata>docker container exec -it ebata_db_1 bash ← ログインできる

root@19e323b3f7c1:/# psql -U postgres

postgres=# alter role postgres with password 'c-anemone';

C:\Users\ebata>docker stop ebata_db_1

C:\Users\ebata>docker start -a ebata_db_1

これで、QGIS3 や pgAdmin4からアクセスできるようになる(というか、"なった")

------- PostgresのpostGISに、鉄道情報も入れる --------

omsのデータには、鉄道情報入っていません(と思う osm2pgrouting にtrainを取り出すオプションがなかったので) ―― ので、国土地理院からダウンロードする

https://nlftp.mlit.go.jp/ksj/index.html から 鉄道時系列(ライン)(ポイント)を探して、ここからファイル(N02-08.zip)をPCにダウンロードして解凍する。中身はKS-META-N02-08.xmlと、N02-08.xml が入っている。

ところが、xmlファイルは、postgresにインポートできないのでshpファイルに変換する必要がある。

で、https://nlftp.mlit.go.jp/ksj/jpgis/jpgis_tool.html にある、「国土数値情報XML-シェープ変換ツール」をダウンロードしてインストールする。私の場合、64Bit版OSに対応した変換ツールはこちらからダウンロードできます。(ksjtool_64_v1.8.zip 約18MB)をダウンロードした。

で、先程のN02-08.xmlを変換すると、N02-08_EB02.dbf、N02-08_EB02.shp、N02-08_EB02.shx、N02-08_EB03.dbf、N02-08_EB03.shp、N02-08_EB03.shx が生成される。

(どういう訳か、shp2pgsqlがなくて、apt-get install shp2pgsql にも失敗するので)、QGIS3を使って、PostgresのDBにつっこむ。

N02-08_EB02 を選んで、OKを押下して、さらにN02-08_EB03を選んで、OKを押下する(2つインポートする)

以下を見ると、N02-08_EB02は路線情報が、N02-08_EB03は駅の情報が入っているみたい

ただ、selectしようとすると、変なエラーがでるので、テーブルの名前を変更した方がいい(が、今日は疲れたので、ここまで)

selectでは、テーブルの名前は小文字で、"-"も使えないようである。QGISから、以下のように変更した。

2020/06,江端さんの技術メモ

(昨日の続きです)

(Continuation from yesterday)

COCOAのセキュリティや個人情報の流出が心配なら、いっそのこと Contributorとして参加させて貰えばいいかな、と思いつきました。

If I am worried about COCOA's security and the release of your personal information, I came up with the idea that I might as well go to Contributor.

まあ、ソースコード開発は無理としても、テスターくらいなら役に立つかもしれません。

Well, even if I can't do source code development, it might be useful, at least for testers.

とは言え、もうリリースされているし、今後バージョンアップでもない限り、私がでしゃばる場面はないかもしれません。

However, it's already released, and unless it's an upgrade in the future, there may not be a situation where I'm going to be stuck with it.

まだソースコードをちゃんと読んでいる訳ではないのですが、オープンソースとして公開されているという時点で、「個人情報が抜かれる」とか「政府に監視される」とかをチェックするのが面倒くさくなってきたのです。

I haven't read the source code properly yet, but I am tired of checking for "personal information being pulled out" or "government surveillance" just because it's published as open source.

これは、「テスト前に、人のノートのコピーを取っただけで安心してしまう」という、あの心理に似ています。

This is similar to a peace of mind of "just getting a copy of someone's notes before a test".

そもそも、私は、オープンソースの開発者は信じることができきます(これは理屈ではありません)。

To begin with, I can believe (not in theory) that open source developers are believable.

それと、政府首脳の、あの絶望的なITリテラシーを見ている限り、

And, as far as the heads of government are concerned, that hopeless IT literacy, I have a tremendous amount of trust in the government that

『現政府に、ITを使った陰謀を企てられるほどの知性も度胸もない』

"The current government lacks the intelligence and nerve to pull off an IT conspiracy"

という、政府に対する絶大な信頼があります。

最近、巷で騒がれている元大臣の選挙違反事件についても、そのIT情報の取り扱い(証拠隠滅)は、酷いものです。

According to the election fraud case of a former minister, their handling of IT information (destruction of evidence) is terrible.

地検によってパソコンから証拠のデータを復元させられるなど ―― 私なら、その事実で、恥かしくて転げ回りそうです。

"The district attorney's office can have evidence recovered from your computer"、If I were him, I would be so embarrassed with crying.

-----

COCOAのインストールは個人の自由ですが、私はインストールをお勧めしたいと思います。

Installing COCOA is a personal choice, but I would recommend that you install it.

特に、接客業の人には、感染リスクを見える化できる、という点で、働き方の工夫へのモチベーションが上がると思います。

Particularly for those in the hospitality industry, I believe that the ability to visualize the risk of infection will increase motivation to devise new ways of working.

また、通勤通学での電車やバスを利用する人などは、「やっぱりラッシュ時の乗車は怖いんだなぁ」と怖い思いをすることで、時差出勤や、在宅勤務や、あるいは、自転車やバイクを使った通勤などの検討のきっかけになるかもしれません。

Also, people who use trains and buses to commute to work or school can be afraid of riding at rush hour. This may lead you to consider staggered work, telecommuting, or even biking or biking to work.

加えて、長期間の多くの人の利用によって「これはヤバい」「これはヤバくない」が、ハッキリとしてくるかもしれません。

In addition, the use of many people over a long period of time may make it clear that "this is bad" or "this is not bad".

なにより、PCR検査や抗体検査ほどに面倒ではない、という点がいいです(インストールするだけです)。

The best part is that it's not as cumbersome as PCR or antibody testing (just install it).

-----

もし、私から陽性反応が出るようなことがあれば、即座に登録します。

If I get a positive reaction from me, I will register it immediately.

もちろん、「市民としての義務と貢献」という観点もあります。

Of course, there is also the perspective of "civic duty and contribution".

加えて、「エンジニアとしての義務と興味」という気持ちもあります。

In addition, there is a feeling of "duty and interest as an engineer".

部屋に閉じ込もっている2週間の間、私のスマホから出ている通信メッセージのハックを続ける予定です。

During the two weeks I'm locked in my room, I will continue to hack the communication messages coming out of my phone.

2020/06,江端さんの技術メモ

* [Dockerのあれこれを断捨離する](https://qiita.com/ksato9700/items/b0075dc54dfffc64b999)
* [dockerでいらないimage,container,networkを一括削除する](https://qiita.com/mom0tomo/items/911b92cc18871f52a2a0)

2020/06,江端さんの技術メモ

コンテナを一括削除する

$ docker ps -aq | xargs docker rm

イメージを一括削除する

$ docker images -aq | xargs docker rmi

2020/06,未分類,江端さんの技術メモ

「COCOAが「まもりあいJapan」のコードをベースにしている」という誤記を記載して、現在、COCOAのコードを探していましたが、どうやら、https://github.com/Covid-19Radar/Covid19Radar がソースコードの場所のようです。

現在、パッケージ一式をダウンロードして、読んでいます。

2020/06,江端さんの技術メモ

ここを↓をご参照下さい

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

Wikipediaによりますと、

まもりあいJapanとは、新型コロナウイルス感染症(COVID-19)において陽性患者と濃厚接触した恐れのある人に通知を送るアプリとしてコード・フォー・ジャパンが開発し、Github上に公開したもの。2020年5月8日に厚生労働省が「新型コロナウイルス陽性判定者との濃厚接触ほか各種関連情報を迅速に通知するスマートフォンアプリ」を公式に導入することを決定し、これを受けて開発を取りやめた

となっなっており、以下の「まもりあいJAPAN」のコードと同じか、ベースとしている という、以下の記事は間違っております。訂正してお詫び申し上げます。

以下は、私の記録の為に残しますが、取扱にはご注意下さい。

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

ここから↓は無視して下さい。

新型コロナウイルス接触確認アプリ(COCOA) COVID-19 Contact-Confirming Applicationが公開されています。

このアプリのソースコードは公開されている、「まもりあいJAPAN」コードと同じか、ベースとしているもののようです。

簡単にコードレビュー(本当に概要だけですが)したので、公開します。

本当のことを言えば、政府による個人情報の収集などの機能が組み込まれていないか、位置情報のトラックなどされていないかが心配だったので、調べました。

現在のところ、COCOAが「まもりあいJAPAN」のコードに100%準拠しているか確認が取れていません(これは、私がサボっているからです)し、そもそも「まもりあいJAPAN」も、現時点では、コードを眺めただけ(私がサボっているからです)、という状況なので、確たることは言えませんが、現時点では大丈夫ではないか、という所感を持っています。しかし ――

私が「見張っている」ということは、気にしておいて下さいね > 関係者各位皆様

まあ、政府が、個人情報の収集なんぞをやっていることがバレたら(通信パケットだけなら、発見は簡単です)、内閣は勿論、与党も吹き飛ぶのは間違いないと思うので、そういう意味でも、まあ、大丈夫ではないかと思っています。

私(江端)は、先程ダウンロードを完了しました。

で、今、ちょっと触っているのですが、ふざけて「陽性情報の登録」をするような奴がいたら、私が、草の根分けても、そいつを探し出します

(もちろん、仕組みとしては「できない」ハズですけど、激怒している時の私であれば、何をしでかすか分かりません(色々なことを思い付くことがあります)。お忘れなきよう)

ちなみに、各国のアプリについては、こちらを御参照下さい。

2020/06,江端さんの技術メモ

c:\Users\ebata\Desktop\codelab-master>set GOOS=js
c:\Users\ebata\Desktop\codelab-master>set GOARCH=wasm
c:\Users\ebata\Desktop\codelab-master>go build -o main.wasm
package main

import (
    "fmt"
    "syscall/js"
)

type Test struct {
    Num int
}

func (t *Test) Print(this js.Value, args []js.Value) interface{} {
    fmt.Println(t)
    return nil
}

func (t *Test) Twice(this js.Value, args []js.Value) interface{} {
    t.Num *= 2
    return nil
}


func (t *Test) Add(this js.Value, args []js.Value) interface{} {
    t.Num += args[0].Int()
    return nil
}

func (t *Test) GetNum(this js.Value, args []js.Value) interface{} {
    return js.ValueOf(t.Num)
}

func registerCallbacks() {
    var test = &Test{
        Num: 1,
    }
    js.Global().Set("test", js.ValueOf(
        map[string]interface{}{
            "Print": js.FuncOf(test.Print),
            "Twice": js.FuncOf(test.Twice),
            "Add":    js.FuncOf(test.Add),
            "GetNum": js.FuncOf(GetNum),
        },
    ))
}

func main() {
    c := make(chan struct{}, 0)
    registerCallbacks()
    <-c
}
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Go wasm</title>
</head>

<body>
    <script src="wasm_exec.js"></script>
    <script>
        const go = new Go();
        WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
            go.run(result.instance);
        });
    </script>
    <script>
        function getNum(){
            console.log(test.getNum())
        }
    </script>
    <button onClick="test.Print();" id="runButton" >print</button><br>
    <button onClick="test.Twice()" id="runButton">twice</button><br>
    <button onClick="test.Add(1)" id="runButton">add</button><br>
    <button onClick="test.GetNum()" id="runButton">get test.Num</button><br>
</body>
</html>