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,江端さんの忘備録

週末、ホームページで、営業日時と時間を調べてから、嫁さんと市民プールに行きました。

At the weekend, I went to the public swimming pool with my wife after checking the website for opening times and hours.

しかし、施設の窓口で「土日はお休み」と言われました。

However, I was told at the facility's office that they are closed on weekends.

無駄と知りつつ『ホームページを調べて来たのだけど』と抗議をして、やむなく帰宅しました。

Knowing it was useless, I complained, "we came to check the website" and then we were forced to go home.

実は、以前にも、プールの営業時間変更も更新されていなかったので、すでに市役所には抗議のメールを送付していました。

In fact, I had already sent an email to City Hall protesting the change in the pool's hours of operation, as it hadn't been updated previously.

「市役所の対応済み」を信じた私が、「間抜け」だったということになります。

I was "dumb" for believing that "City Hall has already handled it.

-----

市役所も、コロナ禍対策でてんてこ舞いだろうし、ホームページの更新に手が回らない、という苦しい事情は理解できます。

The city hall must be busy with measures to deal with the corona epidemic, and I can understand the difficult situation that they have not been able to update their website.

しかし、折角の「市民からの通知」を活かさないことは、問題あると思います。

However, I think there is a problem with not taking advantage of the occasional "citizen's notice".

ただ、私、この理由、分かっています。

But I know the reason for this.

『ホームページの更新なんぞ、3分もあれば足る(あるいはコロナ対策ページに誘導するリンクを1行付ければ足る)』と思うのですが ――

It would take me 3 minutes to update the home page (or one line of link that takes people to the anti-corona page).

実際のところ、市役所の職員は、専門の業者の手を通さねば、ホームページの更新ごときができないのです。

As a matter of fact, City Hall employees have to go through a professional contractor to update their website.

正確に言えば、

To be exact,

(1)稟議上(あるいは契約上)の手続で、職員にホームページ作成の権限がない

(1) The staff does not have the authority to create the website due to a request for approval (or contractual issues).

か、

(2)職員にホームページ作成のスキルがない

(2) Staff do not have the skills to create a website.

のいずれか、あるいは、その両方です。

Either or both.

-----

私、もの凄く心配しています。

I'm terribly worried about it.

これから、台風や水害、それに地震などが発生すれば、市民にとって、市役所のホームページからの災害情報や避難情報は、「最後の砦」です。

From now on, if a typhoon, flood, or earthquake occurs, disaster and evacuation information on the city hall's website will be the last line of defense for the citizens.

ホームページの最新の情報は、現場担当者がその場の判断で、それこそ、分単位で更新して貰えなければ、本当に困るのです。

The latest information on the website needs to be updated on a minute-by-minute basis, by the field personnel at their discretion.

しかし、市役所は、リアルタイムのホームページの更新に、きちんと対応できるのでしょうか?

But will City Hall be able to respond properly to real-time website updates?

-----

正直なところ、文部科学省には「プログラミング教育」なんぞより、子どもには、「htmlファイル(テキストファイルでも構わん)の作成と、サーバへのアップロード」を教育要領に入れて欲しい。

Honestly, I wish the Ministry of Education, Culture, Sports, Science and Technology (MEXT) would include "creating html files (or text files)" and "uploading to the server" in the educational guidelines rather than "programming education".

私は、市役所の職員に、ホームページ作成のスキル向上なんぞは期待していません。

I don't expect City Hall employees to improve their web site development skills in any way.

せめて、ブログ型のテキストベースの情報発信ぐらいは、できるようにしておいて欲しいのです。

At the very least, I hope that they should be able to send out text-based information.

かっこをつけている場合じゃありません。

This is not the time to be cool.

行政の貧しい情報開示リテラシーで、情報不足→被災→死亡などとなったら、私は、泣くにも泣けません。

I will not be able to even cry with the administration's poor disclosure literacy by a lack of information, disaster, death, etc.

-----

さて、私、上記のクレームを、本日、市役所にメールで送付して『対応が終ったらメールで連絡下さい』と付けておきました。

Well, I, I emailed the above complaint to city hall today and added, "please email me when you're done responding".

さあ、この対応、何日で返事がくるか? あるいは黙殺されるか?

Now, how many days does it take to respond to this response? Or will they ignore me?

その結果は、近日中にお知らせします。

The results will be announced soon.

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,江端さんの忘備録

以前、「臨場感システムを作る」という話をしました ―― が、すでに作られていました("#ひとり大声援"で検索)

I talked about the "realistic sensations presence system" before -- but it was already in the works ("#Loud Cheer")

しかも、システムエンジニアでもない、アマチュアの方にです。

by not a professional engineer but an amateur.

もっとも、このシステムは、正しい意味での「臨場感システム」ではありません。

However, this system is not a "realistic sensations presence system" in the proper sense of the word.

双方向もなく、リアルタイムでもなく、単に応援映像を同期を取って、合成するだけのシステムです。

The system is not bidirectional or real time, but simply synchronizes and composes the cheering video.

それでも、この応援映像は、無人観客で開催される野球場の電光掲示板に表示されることになったそうです。

Still, the cheering video will be displayed on an electronic billboard at the baseball stadium, which will be held in an unattended audience.

-----

このシステムが、私に与えた衝撃はハンパではなかったです。

The impact this system has had on me has been tremendous.

私がショックを受けたのは、「技術」ではなく「着想」です。

What shocked me was not the "technology" but the "inspiration".

双方向、リアルタイムで、キチンと閉じたシステムしか考えられなかった私は、「一方的に応援歌を届ける」という発想に全く至れなかったのです。

I could only think of a two-way, real time, neatly closed system, and I could not come up with the idea of "delivering a one-way cheer" at all.

もちろん、私でも同程度のシステムやコンテンツを作ることはできたかもしれませんが、それは大した問題ではありません。

Of course, I could have created the same level of systems and content, but that's not a big deal.

「一方的に応援歌を届ける」という野球ファンの思いと、そしてそれを感謝を込めて受けとる球団の思いを、私は、1mmも気がつくことできなかった ――

I couldn't have noticed that both the desire of baseball fans to "deliver a one-sided cheer song", and the thought of the team receiving it with gratitude.

これは、社会システムを考えなければならない研究員にとっては、致命的な失点であると言えます。

This is a fatal flaw for researchers who have to think about social systems.

-----

もっとも、このシステムを提案したところで、会社が事業ベースで開発をすることはなかったと思います(ペイしないから)

I don't think the company would have been able to develop this system on a business basis (because it wouldn't pay).

また、私が、週末エンジニアモードで、開発のContributorになる、ということもしなかっただろうと思います(私、プロ野球に興味がありません)。

I also don't think I would have been an development contributor in weekend engineer mode (Because I'm not interested in professional baseball).

しかし、この一件、「無償の行為」という考え方を持てなかった、私の完全な敗北です。

But for this case, I am completely defeated because I couldn't have the idea of a "gratuitous act".

2020/06,江端さんの忘備録

(昨日の続きです)

(Continuation from yesterday)

私の基本スタンスは、「やられたら、やりかえせ」であり、「江戸の敵を、長崎のみならず、世界中どこでもで討つ」であり、「後ろから背中を撃ってきた奴の背中をさらに撃つ」です。

My basic stance is "If you get hit, hit back", "I will take on the enemies of Edo, not only in Nagasaki, but anywhere in the world", and "I will shoot him in the back after he shoots me in the back".

この最低のポリシーは、「報復の無限連鎖」を導くだけのようにも見えますが、実は結構な「自分への抑制力」にもなっているのです。

This lousy policy may seem to only lead to an "endless chain of retaliation," but it's actually quite a bit of "restraint on myself" as well.

(1)私のような考え方をする人間は、少なくないはずだ

(1) There must be more than a few people who think like me.

(2)恨みを買うような批判の仕方をすると、どこでどんな報復されるか分かったもんじゃない

(2) If I criticize people in a way that causes resentment, I don't know where I am going to get retribution.

(3)故に、当時の状況や社会通念、相手の心象風景を可能な限り探り、最大限の配慮をした上で、ロジカルに、証拠(数値等)をつけて批判を行う

(3) Therefore, I should explore the circumstances and social conventions of the time and the mental picture of the other person, as much as I can. criticize people with the utmost care, logically and with evidence (numbers, etc.).

つまり、自分の中の「夜叉」を上手く使うことで、上手い(狡猾な)批判をするモチベーションが作れるのです。

In other words, I can create motivation to be a good (and cunning) critic by using the "demon" in you well.

-----

私は、批判されると、その内容が正当であろうが不当であろうが、不愉快に感じて、直ちに戦闘体制に入る、かなり「最低な人間」です。

I'm a pretty "lousy person", whenever I'm criticized I feel uncomfortable and immediately go into combat mode even if the criticism is right.

しかし、その「最低」を究(きわ)めることによって、逆に得られるものもあるのです。

However, there is something to be gained by getting to the bottom of that "minimum".

私は、無理して「いいひと」を目指しません ―― そもそも、私、そういう努力はできません。

I'm not going to force myself to be a good person -- To begin with, I can't make the effort like that.

私は、クレバーでロジカルでクールな「最低な人間」を目指し、これからも「後ろから背中を撃ってきた奴の背中をさらに撃つ」を続けます。

I will continue to be a clever, logical, cool "lousy person" and continue to "shoot the guy in the back who shot me in the back some".

2020/06,江端さんの忘備録

最近、新型感染ウイルスに対する、具体的な対応を提唱し実施した人物を、結果から批判する記事やコメントが目立ちます。

Recently, there have been a number of articles and comments criticizing those who have advocated and implemented a specific response to the new virus.

これらの記事やコメントは ――

In response to these articles and comments,

『燃えさかる家屋の前から逃げ去った奴が、その後、現場検証の時、消火の手順に難癖を付けるような』 ―― すさまじい下品さを感じます。

A person who ran away from a burning house, says "difficulty with firefighting procedures" during a subsequent site inspection. I feel that it's tremendously vulgar.

―― 全てが終った後で、安全なところから、闘ってきた人の背中を撃つ

"Shooting someone who has fought back from a safe distance, after everything is done"

まさに、これです。

This is exactly it.

-----

まあ、私も、自分で言うのもなんですが、「燃えさかる家屋の前に、無理矢理押し出されたこと」があり、同じように「何とか鎮火した挙句に、難癖を付けられた」という経験があります。

Well, in my experiments, I was once forced out in front of a burning house. And I've had the same experience of "I've managed to put out the fire, and after that I've had a difficult time with it".

私は、こういう「後ろから背中を撃ってきた」人物を、生涯、絶対に許さないことに決めています。

I am determined to never forgive these "shoot me in the back" people for the rest of my life.

もちろん、私は、社会人ですから(そして、若いころは劇団員でしたから)、日常生活での「外面似菩薩、内心如夜叉(げめんじぼさつ、ないしんにょやしゃ)」は、徹底しています。

Of course, I'm a working man (and I was a theatergoer in my youth),so in daily life, "Fair face, foul heart" is a thoroughgoing practice.

-----

ただ、これらが、「背中を撃つ」行為であるとしても、全ての批判を全て止めてしまっては、物事を良くしてくことができないことは事実です。

However, it's also true that even if these are "shots in the back" acts, you can't make things better if you stop all the criticism.

私のコラムなんぞ、他者への批判が全体の半分を占めていると思います。

According to my columns, I think criticism of others makes up half of the content.

つまり「闘ってきた人の背中を撃つ」ことをしてきたのは、他の誰でもないこの私です。

In other words, it is me who "shoots people in the back who have been fighting".

しかし、私は「他者の批判を行っている者(私)は、他者からの批判を甘受しなければならない」 などとは、1mmも思っていないのですよ。

But I don't believe at all that "those who are criticizing others (me) must indulge in criticism from others".

(続く)

(To be continued)

2020/06,江端さんの忘備録

在宅勤務が続き、昼飯は自宅で自炊しています。

I continue to work at home and cook my own lunch at home.

ここのところ、家族全員が自宅にいることが多くなり、夕食を一緒に食べる機会がぐっと増えました。

These days the whole family is home more and more often, and we have much more opportunities to eat dinner together.

しかし、昼飯については、各自が自分の好きな時間に、好きなものを作って食べています。

However, as for lunch, each of us cook and eat what we want at our own time.

どうしても簡単な麺類になってしまうのですが、これもずっと続くと、さすがに飽きてきます。

It's inevitably going to be a simple noodle dish, and I get bored indeed.

-----

江端家では、ストックされている非常食の中で、賞味期限が経過したものを、嫁さんが、籠にいれてキッチンに置くようにしています。

In the Ebata's house, my wife put the stocked emergency foods, which are past their expiration date into baskets and place them in the kitchen.

家族は、そこから好きなものを取り出して食べていますが、こちらも保存食の性質上、レトルトの食材になります。

My family takes what they want out of it and eats it. Due to the nature of preserved foods, they are retort foods.

レトルトと言えば、カレーライスでしょう。

Speaking of retorts, curry and rice would be the best.

私がカレーをカレールーから作ると、私以外の家族が食することができない激辛カレーになります。

When I make a curry from a curry roux, it's a very hot curry that no other family member can eat except me.

しかし、レトルトカレーは、私に言わせれば、全く「辛くない」。

However, for me, the retort curry is not "spicy" at all.

-----

で、まあ、レトルトカレーを自分流にアレンジしています。

And, well, I have my own take on retort curry.

フライパンに、唐辛子とニンニクを刻んだものを入れて軽く炒めた後、そこに100g程度の鶏肉とナスを一口大に切って投入。

In a frying pan, lightly fry the chilies and chopped garlic, then add about 100g of Cut the chicken and eggplant into bite-sized pieces and throw them in.

鶏肉に火が通ったら、レトルトカレーをぶちまけて具とからませた後、ホウレンソウを手で千切って、しんなりとなるまで炒めて、

最後に、ババロネソースを投入して完成です。

After the chicken is cooked, pour the retort curry on it and mix it with the ingredients, cut the spinach into strips by hand and fry it until it becomes soft, and finally, throw in the Bavarone sauce.

まあ、それでも、レトルトカレーの域を出ることはないのですが ―― 結構、いけます。

Well, still, it's never out of the range of retort curry -- it's pretty good.

在宅勤務で、昼飯がマンネリになっている人は、一度お試し下さい。

If you work at home and are in a lunch rut, give it a try.

マリーシャープス ハバネロソース HOT 148ml

2020/06,江端さんの忘備録

本日は、コラムがリリースされた日なので、日記はお休みです。

Today, new my column is released, so I take a day off.

踊るバズワード ~Behind the Buzzword(3)量子コンピュータ(3):

量子ビットを初期化する ~さあ、0猫と1猫を動かそう

Dancing Buzzword-Behind the Buzzword (3) Quantum Computer (3)

Initializing the Quantum Bit - Now let's move the 0cat and 1cat!

-----

いずれ、娘たちが、我が家を去る時がくるはずです ―― 就職か、結婚か、あるいは別の理由かは分かりませんが。

The time is coming when our daughters will leave our home -- whether it's for a job, marriage, or some other reason. I don't know.

子どもは、親を踏み台として、親を見捨てて、親と逆の方向に向かって、跳ばなければなりません。

The children must leap in the opposite direction of the parent, abandoning the parent as a stepping stone.

親は、子どもが飛翔する為のエネルギーとして、使い尽されることで、その任を終えるのです。

Parents finish their charge by being used up as energy for their children to fly.

私が、同じように親を踏み台としてきたように。

Just as I have used my parents as a stepping stone in the same way.

―― とまあ、それはさておき。

Aside from that.

-----

長女と次女がいなくなった後、我が家には、結構なスペースが生じます。

After my senior and junior daughter are gone, our house will have quite a bit of space.

子ども部屋を2つ壁をぶち抜いたら、そこに「量子コンピュータ」を設置できるかな、とか考えています。

I'm wondering if I could set up a "quantum computer" in the children's room if I busted out the wall.

取り敢えず、スペースとしては。

For now, as for space.

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.