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

私は、自動車のタイヤ交換(ノーマルタイヤ / スノータイヤ)を自分でやっています。

I have been doing my own car tire changes (stock tires / snow tires).

自分用のメモとして動画をYouTubeに上げています(注:音声が出ます)

I'm posting the video on YouTube as a note for myself (note: audio is available).

必要な機材の購入は、自動車ディーラーでのタイヤ交換1回分の料金で足り、大変コストパフォーマンスが良いからです。

The purchase of the necessary equipment is sufficient for the cost of one tire change at a car dealership, which is very cost-effective.

が、それ以上に、タイヤ交換というのは「楽しい」のです。

More than that, changing a tire is "fun".

まあ、年に2回しかやらないから、そう思えるのかもしれませんが(業務としてやるなら大変だと思います)。

Well, maybe the reason why I feel happy is that I only do it twice a year (it's hard work if I do it as a job).

「楽しいことなら、みんなと共有すべきだ」と思っています。

I think if it's fun, it should be shared with everyone.

そこで、嫁さんに「タイヤ交換のやり方」を教えようとしたら、丁重に断わられました。

However, when I tried to teach my wife how to change a tire, she politely refused.

-----

「そんなこと言って・・・私が死んだ後、どうするんだ!」

"You said that... what are you going to do after I'm dead!"

と言ったところ、私以外の家族全員が言いました。

After I said, the family members except me said

「どうするって・・・、普通にディーラーに行くよ」

"We are going to go to the dealership as normal"

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

pgRoutingをはじめて使ってみた」を、そのまま試させて頂いた

C:\Users\ebata>docker start -a ebata_db_1 ← pgRoutingで作ったDockerのDB
C:\Users\ebata>docker container exec -it ebata_db_1 bash ← ログインできる
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)
postgres=# CREATE DATABASE d1; ← d1というログインできる
CREATE DATABASE
postgres=# \c d1 ← d1に接続
You are now connected to database "d1" as user "postgres".
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の最短コストが出てくる。

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

C:\Users\ebata>docker pull postgres:12.2
12.2: Pulling from library/postgres
bc51dd8edc1b: Pull complete
d2b355dbb6c6: Pull complete
d237363a1a91: Pull complete
ff4b9d2fde66: Pull complete
646492d166e7: Pull complete
828b1f103a3a: Pull complete
2ab9e3c9583f: Pull complete
4ab234e8a047: Pull complete
71b084e0c62f: Pull complete
bf30bd092a82: Pull complete
2aa61e9feb4e: Pull complete
aa5eca126d57: Pull complete
7046b64d69a3: Pull complete
a851dbb990ce: Pull complete
Digest: sha256:c5423e0febf82c33b5dc69aacd70d64418144db7bd355fa4ca30e6e5430b4123
Status: Downloaded newer image for postgres:12.2
docker.io/library/postgres:12.2

C:\Users\ebata>docker run -d --name postgres122 -e POSTGRES_PASSWORD=test -p 5432:5432 postgres:12.2
839317f0bb705daf5eac55cc6b4f74e0cbc49ff2f64e1efc9dd5e4d3f03e6515

C:\Users\ebata>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
839317f0bb70 postgres:12.2 "docker-entrypoint.s…" 17 seconds ago Up 14 seconds 0.0.0.0:5432->5432/tcp postgres122

C:\Users\ebata>docker exec -ti postgres122 bash

2.準備
Windows10 BOX のC:\直下に、routing-20200221.sql を置いておく

3.ファイルのコピー
C:\Users\ebata>docker cp c:\routing-20200221.sql postgres122:/tmp/
でDockerの内部にコピー

4.コンテナに入る
C:\Users\ebata>docker exec -i -t postgres122 /bin/bash

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

6.ローカルに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

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


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


10.postgisのインストール
C:\Users\ebata>docker-compose exec db psql -h db -U postgres -d routing -c 'CREATE EXTENSION pgrouting CASCADE; CREATE EXTENSION hstore;'


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

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

can’t find package “github.com/lib/pq”

と、

Dockerで作ったpostgreSQLへの外部クライアントからのアクセス方法

を実施して、GoのプログラムからPostgreSQLサーバ(Docker版)にアクセスすることができました。

/*
go build -gcflags "-N -l" main.go

uft-8でセーブ

まず、以下の手順でテーブルを作っておく
 
C:\Users\yrl-user>psql -h localhost -U postgres	

postgres=# create database blogapp;

postgres=# \l		
postgres=# \connect blogapp(データベース名)
 
以下をコピペしてテーブルとその内容を直接書き込む
 
create table users (
	   id serial primary key,
	   name varchar(255),
	   score real,
	   team varchar(255)
					);
 
insert into users (name, score, team) values
('taguchi', 5.5, 'red'),
('fkoji', 8.3, 'blue'),
('dotinstall', 2.2, 'blue'),
('sakaki', 5.0, 'green'),
('sasaki', 4.6, 'red'),
('kimura', 4.7, 'green');
 
blogapp=# \dt
blogapp=# \d users(テーブル名)
 
データベースのテーブルの中身を確認する
blogapp=# select * from users; // 検索の基本形
 
*/



package main

import (
    "fmt"
    "database/sql"
    _ "github.com/lib/pq"
    "os"
)

// ----------------------------------------------------------------

func checkError(err error) {
	if err != nil {
		fmt.Fprintf(os.Stderr, "fatal: error: %s", err.Error())
		os.Exit(1)
	}
}

func main() {
    fmt.Fprintln (os.Stderr,"*** start ***")

	db, err := sql.Open("postgres", "user=postgres dbname=blogapp password=c-anemone sslmode=disable")

	checkError(err)
    defer db.Close()

	sql_str := "select id,name,score,team from users order by id"

    rows, err := db.Query(sql_str)
    if err != nil {
        fmt.Println(err)
        }

    defer rows.Close()

    for rows.Next() {
        var id string
        var name string 
        var score float32
        var team string 
        if err := rows.Scan(&id,&name,&score,&team); err != nil {
            fmt.Println(err)
        }
        fmt.Printf ("%s\t%s\t%f\t%s\n",id, name,score,team)
    }

    if err := rows.Err(); err != nil {
        fmt.Println(err)
        }

    fmt.Fprintln (os.Stderr,"*** end ***")
}

出力結果

*** start ***
1	taguchi	5.500000	red
2	fkoji	8.300000	blue
3	dotinstall	2.200000	blue
4	sakaki	5.000000	green
5	sasaki	4.600000	red
6	kimura	4.700000	green
*** end ***

ようやく一安心できました。

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

「DockerのpostgreSQLの起動方法」で、postgreSQL(ポスグレ)サーバは作れたのは良かったのですが、クライアント(例 pgAdmin4)からアクセスできないことが分かりました。どうやら原因は、パスワードがない、ということのようです。fe_sendauth: no password suppliedが消えません。

私は、CとかGoのプログラムから、ポスグレを使おうとしていますが、pgAdmin4からアクセスできないとなると、多分、「CとかGoのプログラムからは動せない」と思いました。

ロールやらなんやらを追加する方法もあるようですが、私は、ポスグレの運用は、できるだけ手を抜きたいし、そもそもポスグレを外部公開する予定はないので、セキュリティもスカスカでかまいません(もちろん、SSHなんぞも不要)。

そこで、Dockerのポスグレにパスワード("c-anemone")を追加しました。

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

と再起動をしました。

その後、pgAdmin4のCreateの設定画面にパスワードを入力したら、

さくっとログインできました。

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

米澤穂信さんの氷菓シリーズ外伝(?)「ふたりの距離の概算」より抜粋

Excerpts from Honobu Yonezawa's "hyouka" series outside story "Estimating the Distance Between Us"

======

「黒い猫でも白い猫でも菓子をくれるのはいい猫だ」

"Black cat or white cat, it's a good cat to give me candy."

大日向はきょとんとした顔になった。

Ohinata frowned.

「えっと、周恩来」

"Let's see, Zhou Enlai"

「李登輝だろ」

"It's Li Teng-hui"

横から伊原が口を挟む。

Ihara speaks from the side.

「蒋介石じゃなかったけ」

"It wasn't Chiang Kai-shek, was it?"

やりとりを聞いて、千反田が無理に笑うようなひきつった表情になった。

Hearing the exchange, Chitanda got a twitchy look that made her laugh unreasonably.

「ええと、その、ホー・チ・ミンですよね」

"Um, it's, uh, you know, Ho Chi Minh."

なんとかボケようとしている。悪いことをした。ちなみに俺は本当に忘れていたのだが、話をしているうちに思い出した。トウ小平だ。("トウ"は、登におおざと)

Somehow she's trying to blur. I did something wrong for her. Incidentally, I had really forgotten about it, but as we were talking, I remembered it. This is To Kohei.

======

という話に登場してくる歴史上の人物について、次女(高校3年生)が全く知らなかったので、正直、青冷めました。

My second daughter, a senior in high school, had no idea about the historical figures featured in the above story. I went out of the blue, to be honest.

江端:「おい、『氷菓』の登場人物は、全員、高校2年生だぞ」

Ebata: "Hey, the characters in Hyouka are all 2nd year high school students.

次女:「『氷菓』の登場人物はフィクションだよ。あんな知識を日常的に持っている高校生はいない」

Second daughter: "The characters in "Hyouka" are fiction. No high school student has that kind of knowledge on a daily basis.

江端:「当時の私は、全部答えられたぞ」

Ebata: "I could have answered all of those questions back then!

次女:「それは、パパが偏った知識を持っていたからだ」

Second daughter: "That's because you had biased knowledge.

江端:「そんなことはない。ママだってちゃんと答えられる」

Ebata: "It's not like that. Even your mom can answer that question properly.

と、この話題を、嫁さんに振ったら、

And when I mentioned the subject to my wife, she said

嫁さん:「もちろん、それらの名前は全部知っている。ただ、その人が、何をした人かを忘れただけ」

Wife: "Of course, I know all those names. I just forgot who and what they did.

江端:「それを『答えられない』というんだ」

Ebata: "It's "I cannot answer".

と、ツッコんだところに、さらに、次女がツッコんできました。

In addition, the second daughter interrupted me.

次女:「というか、パパ、その人物の名前を知っていたからといって、何だというの?」

Second daughter: "Well, Dad, just because I knew the person's name, doesn't make it any less important.

江端:「何だか、それくらいのことを知っていないと、めちゃくちゃヤバい気がするんだが」

Ebata: "Somehow, I feel like I'm in deep serious if you don't know that much about it.

次女:「それは、パパの思い込みだ。そんなことより、『お菓子のレシピ』の内容を知らない方が、私達の世界では遥かにヤバい。パパは、お菓子について論じることができる?」

Second daughter: "That's what you think. It's far worse in our world to not know the contents of the "cake recipe". Dad, can you argue about sweets?"

江端:「1mmも論じることができないな」

Ebata: "I can't argue it at all"

次女:「歴史上の人物よりも、お菓子のレシピの方が有用性があり、有用性があるものが正解でしょう」

Second daughter: "There's more utility and usefulness in a cake recipe than in a historical figure, and something useful would be the right thing to do.

江端:「確かに、私は、これまで、そう主張してきたと思う」

Ebata: "Certainly, I think I've been arguing that

-----

どの教師も、『自分の教えている教科こそが重要だ』と言います。

Any teacher says, "It's the subject I am teaching that's important."

それは、教師たちの自分の存在意義と尊厳を守る為の、「矮小な自己防衛」とも言えます。

It can also be described as "petty self-defense" to protect the teachers' sense of existence and dignity.

実際に、歴史の教師は「歴史が重要だ」と言い続けていますが、はっきり言います―― 「古代エジプトのファラオが誰であろうか、その国が滅びようが、それが何だと言うのか」

In fact, history teachers keep saying "history is important," but let's be clear "Whoever the pharaohs of ancient Egypt were, whether their country perished or not, what does it matter?

つまるところ、嫁さんの名言「リトマス試験紙が何色になろうが、それがどうだと言うの」と同じ話です。

In short, it's the same story as my wife's famous quote, "It doesn't matter what color the litmus test paper is.

知識に有用性を求めるのであれば、「実学に基づく利益回収モデル」が唯一の正解です。

If you want usefulness in knowledge, a "profit-recovery model based on actual learning" is the only correct answer.

長女:「自分の知っていることを、世の中の基準のように論じることは、"暴力"なんでしょう?」

Eldest: "It's violence to argue what you know as if it's the world's standard, isn't it?

と、纏められてしまいました。

-----

この話のことも、思い出していましたが ――

I was thinking about this story...

『間違っているのは、私なのか?』

"Am I wrong?

と、暫くの間、深い懐疑の闇に沈んでいました。

For a while, I sank into a deep darkness of skepticism.

未分類

所要時間2時間の簡易調査(裏取り不完全につき引用は止めた方がいい)

未分類

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

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

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

量子コンピュータよ、もっと私に“ワクワク”を

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

The quantum computer, give me more excitement.


先月「私の「量子コンピュータ」のコラムの内容を監修して頂ける方を探しております」という日記を掲載しました。

In last month's diary, I wrote, "I am looking for a person who can supervise the contents of my column on "Quantum Computer".

私は、「ウソ」と分かった上で「ウソ」を書くことには、抵抗がない人間ですが、「ウソ」かどうか分からないことを、「ウソ」かどうか分からないことを分からないままに書くことが、どうにも気持ち悪いのです。

I'm not one of those people who is reluctant to write a "lie" when I know it's a "lie", however I can't help but feel uncomfortable writing something that I don't know if it's a "lie" or not without knowing if it's a "lie" or not.

詳しくは、今回のコラムの中で記載していますが、今回から、ご協力をして頂ける方(「量子コンピュータ大好きのTUさん、通称『量オタのTさん』」)にご登場して頂けることになる、かなり安堵しております。

The details are described in this column. I'm very relieved to see that one of my collaborators (Mr. TU who loves quantum computers, a.k.a. "Mr. T who is a quantum geek") will appear from this column.

それはさておき。

Aside from that.


最近、イラスト作成に、かなり時間がかかるようになってきました。

Lately, I've been taking a lot of time to create illustrations.

私がコラムを書くときは、全体構成(目次のようなもの)→図表作成→本文執筆→協力者の皆さんへの査読依頼→イラスト作成、という順番で作業をしているのですが、最近は、イラスト作成に結構な時間がかかりました。

When I write a column, I work in the following order: overall structure (like a table of contents), creation of figures and tables, writing the text, requesting reviewers, and creating illustrations. Lately, I've been spending quite a bit of time creating illustrations.

今回の場合は、イラストのコンセプトを「井戸の中の猫」としたところまでは良かったのですが、これをどういう風に描いたものか、結構悩みました。

In this case, the concept of the illustration was "the cat in the well", which was good, but I was quite worried about how to draw it.


いずれにしても、「シュレーディンガー方程式」から、無限匹のネコが無秩序に登場してくる「猫カフェ」のコンセプトを導いた人物は、私が世界で最初の1人、と自負しております。

Anyway, I am proud that I am one of the first people in the world to come up with the concept of a "cat cafe" in which an infinite number of cats appear in a haphazard manner from the "Schrodinger Equation".

これからは、「シュレーディンガーの猫」に倣い、境界条件確定時の「シュレーディンガー方程式」から導き出せる量子エネルギーの離散状態ことを、

From now on, following Schrodinger's cat, the discrete state of quantum energy derived from the Schrodinger equation when the boundary conditions are fixed will be called

「江端の猫カフェ」

"Ebata's Cat Cafe"

と、称呼して下さい。

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

よく忘れるのでメモしておく。

C:\Users\ebata>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19e323b3f7c1 postgres:12.2 "docker-entrypoint.s…" 2 months ago Exited (255) 2 months ago 0.0.0.0:5432->5432/tcp postgres122
70fa5aa3a11d pgrouting/pgrouting:v3.0.0-dev-postgresql_12 "docker-entrypoint.s…" 2 months ago Exited (255) 2 months ago 0.0.0.0:15432->5432/tcp ebata_db_1
78c979ee1238 busybox "sh" 2 months ago Exited (0) 2 months ago ebata_db_data_1
C:\Users\ebata>docker start -a postgres122
PostgreSQL Database directory appears to contain a database; Skipping initialization
2020-05-24 15:58:13.237 UTC [1] LOG: starting PostgreSQL 12.2 (Debian 12.2-2.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
2020-05-24 15:58:13.250 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2020-05-24 15:58:13.250 UTC [1] LOG: listening on IPv6 address "::", port 5432
2020-05-24 15:58:13.290 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-05-24 15:58:13.352 UTC [24] LOG: database system was interrupted; last known up at 2020-03-12 10:28:44 UTC
2020-05-24 15:58:13.535 UTC [24] LOG: database system was not properly shut down; automatic recovery in progress
2020-05-24 15:58:13.568 UTC [24] LOG: redo starts at 0/166F4D8
2020-05-24 15:58:13.569 UTC [24] LOG: invalid record length at 0/166F5C0: wanted 24, got 0
2020-05-24 15:58:13.569 UTC [24] LOG: redo done at 0/166F588
2020-05-24 15:58:13.730 UTC [1] LOG: database system is ready to accept connections
C:\Users\ebata>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19e323b3f7c1 postgres:12.2 "docker-entrypoint.s…" 2 months ago Up 13 minutes 0.0.0.0:5432->5432/tcp postgres122
C:\Users\ebata>docker container exec -it postgres122 bash
root@19e323b3f7c1:/# ls
bin boot dev docker-entrypoint-initdb.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@19e323b3f7c1:/# psql -U postgres
psql (12.2 (Debian 12.2-2.pgdg100+1))
Type "help" for help.
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
ca_db | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | 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)
postgres-# \c ca_db
You are now connected to database "ca_db" as user "postgres".

その他、viを使いたければ、

root@19e323b3f7c1:/#apt-get update

root@19e323b3f7c1:/#apt-get install vim