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

同僚:「その人は結婚しているのか?」

Colleague: "Is the person married?"

と聞かれることがあります。

may ask me sometimes.

江端:「知らん。聞いたことないし、興味もない」

Ebata: "I don't know. I've never heard of it and I'm not interested."

と、私は答えています。

has answered.

これ、フリではなく、私は心底、他人に興味がなく、さらに言えば、その人の「結婚」なんぞに、全く興味が湧かないのです。

This is not pretending, and I'm really not interested in other people, and moreover, I'm not interested in that person's "marriage" at all.

そういう感性を、どっかに置き忘れてしまったかのようです。

It seems that I have left that kind of sensibility somewhere.

その人間の「家族」に至っては、本当にどーでもいい。

When it comes to the human "family," I really don't care.

飛行機の中で、子どもや孫の写真などを見せてくる外国人は、少なくなかったです。

There were many foreigners showing me photos of children and grandchildren on the plane.

こんな時、私は、「彼らの期待通りの反応をして上げられなくて、申し訳ない」という気持になります。

At times like this, I feel like "I'm sorry I didn't get the reaction you were expecting".

―― 被写体に未成年らしき人間が映っている写真

"A photo of a human subject that appears to be a minor"

以外の感想、一切なし、です。

I have no other impressions.

-----

最近、Webブラウザに「婚活サイト」の広告がよく出てきます。

Lately, I've been seeing a lot of ads for "marriage activity sites" in my web browser.

まあ、最近はターゲティング広告が殆どですので、ある広告を見れば、芋づる的に同じような広告が出てきます。

Well, these days most of the ads are targeted, so if I look at a certain ad, a similar ad will appear easily.

例えば、エロサイトの広告が頻繁に出てくる場合、その人がエロサイトの広告を見ていることの証拠となります。

For example, if I often see ads for erotic sites, it's evidence that I am watching ads for erotic sites.

-----

ということは、私が「婚活サイト」の広告を良く見ていることになりますが ―― まあ、見ているかもしれません。

This means that I often look at ads on "marriage hunting sites", well, maybe you are.

結婚というのは、机上/数値シミュレーションとして、なかなか興味深い分野なのです。

Marriage is, a as desktop/numerical simulation, very interesting field

(続く)

(To be continued)

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

私、将棋のルールを、完全に知っているとは言えません。

I can't say that I know Shogi rules completely.

週末のNHKの将棋対局は、3秒でチャンネルを替えます。

NHK's Shogi games on the weekend change channels in 3 seconds.

誰が何の将棋のタイトルを取ろうが、全く興味ありません。

No matter what Shogi title whoever gets, I'm not interested at all.

-----

ところが不思議なことに、将棋のコミックやアニメは、かなり好きです。

However, mysteriously, I really like Shogi comics and anime.

「将棋めし」「リボーンの棋士」「3月のライオン」「りゅうおうのおしごと」なんでもござれです。

"Shogi Meshi", "Reborn Shougi Player", "March Lion", "Ryuou's Work", etc.

自分でも良く分かりません。

I'm not sure for the reason.

「二人零和有限確定完全情報ゲーム」

"Two people zero sum limited to determine the complete information game"

だからなぁ、と思うこともあるのですが、それなら、「囲碁」だって、「チェス」、「オセロ」だって好きになってもいいはずです。

I sometimes think that the reasons are natures of the game, however, I also think "Go", "chess", and "Othello" are also acceptable.

それに、将棋だって「千日手」みたいな、ルールが決っていない、例外もあります。

Also, Shougi also has exceptions, like a rules of "Sennichite".

-----

勝負ごとに手を出せない、私のようなヘタレにとっては、「零和ゲーム(勝ちと負けが確定的に決まるゲーム)」に人生を賭ける人間に対して、憧れがあるのかなぁ ―― などと、考えることがあります。

I think that for for cowards like me, who cannot bet my life for a game, I have a longing for a person to bet on their life in a "zero-sum game (a game in which winning and losing are definitely decided)"

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

先週の日曜日、期日前投票をする為に、嫁さんと長女を伴って、指定の施設に行きました。

Last Sunday, I went with my wife and senior daughter to a city facility to vote before the deadline.

運動不足解消も兼ねて、片道30分を歩くことにしました。

We decided to walk 30 minutes each way to get some exercise.

場所も時間も正しかったのですが、期日が早すぎました。

The location and time were correct, but the date was wrong.

投票日は7月5日、期日前投票の開始は6月30日からでした。

Voting day was July 5, and pre-voting began on June 30.

勝手に「10日くらい前から」と決めつけていた私が悪いのですが ―― しかし、そんなに短期間だったかな?

I was wrong to decide "from 10 days ago" unilaterally, however, was it such a short time?

私は、毎回、期日前投票をしているので、今回の期間には違和感を感じました。

I feel uncomfortable with this time period because I have pre-voted every time.

-----

ちょっと調べてみました。

I searched a little.

公職選挙法の第48条の2第6項6号に、第39条の読み替えがあって ―― 早い話が、

There is a replacement of Article 39 in Article 48-2, Paragraph 6, Item 6 of the Public Offices Election Law, anyway,

市役所だけは、公示の翌日からやらなければならないけど、それ以外の投票所については、「市町村の選挙管理委員会の指定した期間」と、選管の裁量に任されているようです。

Only the city hall must start from the day after the announcement, however, regarding other polling stations, it seems that it is up to municipal election committee that means, "the period decided by the municipal election committee".

『コロナ禍の影響で期間を短くしたのかなぁ』とか思いましたが、さらに調べたてみた結果、行政区で対応がバラバラのようです。

I wondered if they shortened the period due to the corona disaster. As a result of further investigation, it seems that the administrative districts have different responses.

例えば、足立区は「(コロナ禍の感染リスクを減らす為に)前回の全期間受付は1カ所だったが、今回は10カ所すべてを全期間開ける」としているようです。

For example, Adachi Ward has decided to open all ten locations for the full period of time this time, whereas the previous time, only one location accepted applications for the full period of time (in order to reduce the risk of transmission of corona virus).

-----

まあ、本件、家族で、1時間弱の散歩をしただけのイベントとなりました。

Well, this event was for my family to walk for less than an hour.

なんか悔しかったので、途中のスーパーで、特に必要もない「サバの切り身」と「納豆」を購入して帰宅しました。

I was frustrated, so I went to a supermarket on the way and bought some mackerel fillets and natto (fermented soybeans) that I didn't need. And then we went home.

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".