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

私が知らないだけなのかもしれませんが(知っている人は教えて欲しいでです)、OpenStreetMapの鉄道のデータは、nodeとwayに変換できません ―― というか、変換する方法を、私には知りません(散々探したんだけど、見つからない)。

#でも、絶対にあると思うんだよなぁ。だって、鉄道と車を融合させる研究、腐るほどあるもん。これらの研究が全部、商用のGISシミュレータ使っているとは思えないんだけどな。

ちなみに私は、PostgreSQL + PostGISを使って、GISのシミュレータを作っています。

で、鉄道を路線の上で走らせたいのですが、鉄道の情報は、進行方向の順番通りには表示してくれません。

ですので、一路線を作る為には、geomをLINESTRINGで、座標単位にバラバラにする必要がありますが、問題は、geomが順番通りに表示れない、ということです。

なので、QGISとかを使って、始点・終点を探して、SQLの結果から、順番を探す、という面倒なことをやらざるを得ません。

QGIS弄っていたら、LINESTRINGの座標を得られる方法をたまたま見つけてしまったので、私の為に記録しておきます。

まず、前提はこの内容です。

「OpenStreetMapのデータから鉄道だけを抽出してGeoJSONで出力する方法」を試してみた件

OpenStreetMapのデータからosmiumを使って鉄道だけを抽出しPostGISに入力する方法(宇都宮周辺の鉄道データを使った例)を試してみた件

まず地物表示のボタンを押します。

次に、LRTの路線の最初の部分をクリックします。

次に、(派生した属性)を右クリックして、「地物をコピー」を選択します。

で、これをエディタなどに、コピペすると

wkt_geom tags
LineString (139.89970149999999194 36.55948450000000349, 139.89955630000000042 36.55885789999999957, 139.8995482999999922 36.55877879999999891, 139.89956340000000523 36.55872629999999646, 139.8996118000000024 36.55866100000000074, 139.89968200000001275 36.55861320000000347, 139.8997737999999913 36.55858750000000157, 139.89987840000000574 36.55857249999999681, 139.90136459999999374 36.55845939999999672, 139.90222030000001041 36.55839509999999848, 139.90252409999999372 36.55837619999999788, 139.90541809999999145 36.55817369999999755, 139.90668009999998844 36.55808119999999661, 139.90870390000000612 36.55791560000000118, 139.90887219999999047 36.55789959999999894, 139.90931180000001177 36.55786609999999826)

てな感じで、geomに含まれる座標がでてきます。

これを、出発地から到着地まで、間断なく続ければ、路線の連続の座標が得られる、という訳です(そこそこ面倒ですが、selectのダンプから探すよりはマシです)。

まあ、それぞれのgeomの先頭と終端は、重複する座標となるので、これを消すなどの処理は必要ですが、取り敢えず、これで鉄道の連続する座標は得られます。

この後、これらの座標をDBに放り込むなり、プログラムにベタ書きするなり、煮るなり焼くなり、色々できると思います。

とりあえず、(emacs使い倒して)csvファイルにしました。

ここからpostgreSQLにインポートするのは ―― 多分、なんかの手段があるだろう、と思う。

ここにありました。

[付録B] 地図の上に100人ほど配置してみる(メモ)

私はPostgreSQLをdockerコンテナの中に作っているので、"docker cp"でコンテナ内にcsvファイルを送り込む必要がありました。

utsu_rail_db=# CREATE TABLE "lrt"(
utsu_rail_db(# seq integer,
utsu_rail_db(# x1 float,
utsu_rail_db(# y1 float,
utsu_rail_db(# distance_m float
utsu_rail_db(# );
CREATE TABLE
utsu_rail_db=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | lrt             | table | postgres
 public | spatial_ref_sys | table | postgres
 public | utunomiya       | table | postgres
(3 rows)
utsu_rail_db=# \copy lrt from '/tmp/lrt.csv' with csv
COPY 286
utsu_rail_db=# select * from lrt;
 seq |     x1      |     y1      | distance_m
-----+-------------+-------------+-------------
   1 | 139.8997015 |  36.5594845 |           0
   2 | 139.8995563 |  36.5588579 | 55.68730112
   3 | 139.8995483 |  36.5587788 | 6.785051714
   4 | 139.8995634 |  36.5587263 | 4.769494948
   5 | 139.8996118 |   36.558661 | 7.734168448
   6 |  139.899682 |  36.5586132 | 8.800865673
   7 | 139.8997738 |  36.5585875 | 10.43856664
   8 | 139.8998784 |  36.5585725 | 11.70055883
285 | 140.0145241 | 36.572845 | 28.22469677
286 | 140.0117433 | 36.57920089 | 623.5656217
(286 rows)
以上

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

ロシア外務省が、日本人の入国禁止者63人を発表しました。

The Russian Ministry of Foreign Affairs announced that 63 Japanese nationals are banned from entering Japan.

私は入っていないようでした ―― 当然ですが。

I didn't seem to be in it -- naturally.

-----

以前、ワクチン接種証明の提示に応じないお客に対して、出入禁止(いわゆる、出禁)ができるか、について調べました。

I have previously done my own research on whether a customer who refuses to show proof of vaccination can be banned from the premises.

さて、これから「マスクをしない方は、入店を御遠慮下さい」が、「ワクチン接種を終えていない方は、入店を御遠慮下さい」に変化していくに際して、『これは、"差別"なのか?』という純粋な疑問です。

今回、再度、調べてみました。

This time, I looked into it again.

上の日記でも書いていますが、この出入禁止の法的根拠は、民法第521条「契約の自由」です。

The Russian Ministry of Foreign Affairs announced that 63 Japanese nationals are banned from entering Japan.

この521条は、現行法と抵触しない限りにおいて、自由に設定できるものであり、その範囲はかなり広いようです。

This Section 521 is open-ended, as long as it does not conflict with current law, and its scope appears to be quite broad.

"ドレスコード"や"一見さん"はもとより、個人を指定し、名指しで出禁を指定することもできるようです。

It is possible to specify a "dress code", a "first-time customer", or even to designate individuals to be banned from facilities by name.

これを無視すると、刑法(×民法)第130条に規定する建造物侵入罪・不退去罪で、警察に通報・強制退去の対象となります。

If you ignore this, you will be subject to a police report and forced eviction for the crime of trespassing and eviction from a building, as stipulated in Article 130 of the Penal Code (x Civil Code).

もちろん、名指しで出禁を指定された人は、『「契約の自由」の濫用』として、訴訟に持ち込むこともできますが、私が、ざっと調べた限り、裁判になっても、原告が敗訴しているようです(例 平成29年1月12日静岡地方裁判所沼津支部判決)。

Of course, those who have been designated as banned by name can bring a lawsuit for 'abuse of "freedom of contract"', but as far as I can tell, the plaintiffs have lost their cases in court (example: January 12, 2009 Shizuoka District Court, Numazu Branch decision).

もちろん、現行法と抵触するような出禁は、当然に無効となりますが、まあ、そういうケースは、そもそも裁判にならないのでしょう。

Of course, any entry/exit ban that conflicts with current law would obviously be invalid, but, well, such a case would probably never go to court in the first place, I think.

-----

『ロシア外務省に対して、入国禁止の不服申立(即時抗告)をする』というアクションを試してみる人、いませんか?

Is there anyone who would like to try the action of 'file an appeal (immediate appeal) against the entry ban to the Russian Ministry of Foreign Affairs'?

ロシアが採用している行政法の法体系を、全然知りませんが、ロシアの司法による『判断理由』を読んでみたいな、と思いました ―― 理由の記載なし、というケースも含めて。

I don't know the legal system of administrative law that Russia has adopted, at all, but I would like to read the 'reasons for the decision' by the Russian judiciary -- including the case of "no reasons stated".

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

先日、『本年度の私の研究のターゲット(の一つ)は「孤独」です』という話をしました。

I mentioned the other day that 'one (of) the targets of my research this year is "loneliness"'.

"ネガティブの感情" ―― フォースのダークサイド ―― の活用方法に関して、私の右に出るものは ―― 少ないと思います。

この件を嫁さんにしたら、『何だって?』と聞き返されました。

When I mentioned this to my wife, she said, 'What?' She asked me back.

嫁さんも、上記の日記に書いた通りの所感を持ったようです。

My wife also had the same impression of the place as I wrote in my diary above.

-----

昨日、ノリーナ・ハーツさんの「THE LONELY CENTURY なぜ私たちは「孤独」なのか」を読了して、今、まとめに入っています。

Yesterday I finished reading "THE LONELY CENTURY Why We Are "Lonely"" by Noreena Hertz and am now putting it together.

「LONELY CENTURY」の感想文を書いています

現在、私に期待されている(と思っている)仕事は「孤独の計測方法」ですが、これがなかなかに難しい。

The work that is currently expected of me (I think) is "how to measure loneliness", but this is quite difficult.

技術的には、各種の手段が取れます。それは現段階の技術でも十分可能な範囲なのですが、当然、プライバシーの問題と絡みあってきます。

Technically, various measures can be taken. Although this is possible even with current technology, it is naturally intertwined with the issue of privacy.

―― プライベートを干渉されたくないが、孤独でいるのもイヤだ

'I don't want my private life interfered with, but I also don't want to be alone.'

という、背反する欲望を、都合よく解決するアプローチが見つからないのです。

I cannot find an approach that conveniently resolves these disparate and conflicting desires.

普通に考えれば、『どちらかを諦めるしかない』が答えです。

Usually, the answer is 'you have to give up one or the other.

一応、「THE LONELY CENTURY」の終章に、ソリューションらしきものは記載されているのですが、「これだ!」と思えるような決定打はないようです ―― まあ、そんなものがあれば、すでに実施されているハズですが。

There is a solution in the last chapter of "THE LONELY CENTURY," but there seems to be no definitive solution -- well, if there was such a solution, it would have been implemented already.

-----

私は、『孤独には価値がある』と考えることができる人間なので、以下のようなテストには、全く躊躇がありません。

I am a person who can think that 'solitude is worth it,' so I have no hesitation in testing the following.

UCLAの孤独感尺度で、江端の孤独度を測ってみた件

TOEICに比べれば、全く抵抗ありません(むしろ受けたい)。

Compared to TOEIC, I don't have any resistance at all (I would rather take it).

-----

ちなみに、この「孤独」の問題を、(気休め程度に解決する)パラダイムシフトの方法があります。

Incidentally, there is a paradigm-shifting way to (comfortably) solve this "loneliness" problem.

「孤独」を「孤高」と読み替える ―― それだけです。

Replace "loneliness" with "isolation" -- that's it.

未分類

1. LONELY CENTURYを読んで

2. 課題

(非公開)

3. プロローグ:"ぼっち"で何が悪い?

3.1. 大丈夫だよ。きっと、もうすぐ友達はできるから

次女(小学生6年生)は、普段から、その父親の行動である「歩き読書」をやっています。

家族からは勿論、地域の住民からも「危ない」「やめろ」と言われても、

―― パパがやっているから

と、論理武装して、平然と続けています。

江端:「パパの場合は、夜中にヘッドライトを付けて、本を読んでいるから、夜道で目立つ。だから、安全なのだ」

と言っているのですが、こんな言い訳では、次女は勿論、自分ですら騙せません。

しかし、次女の行動は思わぬところから、罰を喰うことになります。

次女が、学級の仕事で、朝早く登校する必要があった為、一週間連続で、毎日一人で登校していた時のことです。

ある日の朝、横断歩道のいわゆる「緑のおじさん」から、声を掛けられたのだそうです。

―― 大丈夫だよ。きっと、もうすぐ友達はできるから

■人気のいない通学路で、

■(ひとり)ぼっちで、

■本を読みながら歩く少女

これだけの条件が整えば、「緑のおじさん」の推論が外れていたとして、誰に責めることができるでしょうか。

もっとも、

「私は『ぼっち』じゃない!」

と、次女は激怒していたようですが。

3.2. 「友達がいない」ことは問題ではない。「友達がいないように思われること」が問題なのだ

は、「次女」の名言として、私の名言集に登録されています。

その他のアニメや小説などを読んでみても、ティーンエイジャにとって、「友達」という概念は、私の目からは一種の「拷問」のように見えます。

しかし、振り返ってみるに、昔から集団行動というものが大嫌いだった私にとって、修学旅行や遠足というのは、確かに「拷問イベント」でした。

特に「班分け」という、

―― 校外において、教師が、生徒を管理する負担を減らすために存在している

責任回避システムの為、私は随分苦労させられたのを覚えています。

こういう「拷問イベント」の度に、私は「ぼっち」を回避する為に、姑息な裏工作をしなければなりませんでした。
心底、気が重くて、うんざりでしたものです。

3.3. 私の半生は、このコロナ禍の時代に向けた準備期間であったのかもしれない

思うように外出できないというだけで、多くの人にはストレスが溜る日々だと思います。
人間は社会的存在 ―― つまり、集団として存在することを前提 ―― とされているからです。
しかし、今や、「集団」ではなく、「個」として行動することが推奨される状況になっております。

ところで、私、昔から「個」というか「孤」に抵抗がなかったように思えます。
小学生の頃から、下校時は、頭の中で色々な(中二病的な)ことを考えながら、一人で歩いて帰るのが好きでした。
友人と一緒に帰らなければならない時は、「今日は、(頭の中で)話を作れない」とガッカリしたものです。

そもそも「複数の友人と遊ぶ」というのも、あまり得意ではなかったように思います。
集団を纏めなければならない立場(例:生徒会会長)にあったときでさえ、「自分は一人」という意識が離れることはありませんでした。
デートの後の計画(例:深夜のゼミの研究室に戻ってデータ解析をする)を、デートの最中に考えていました。

そして、コロナ禍が始まる以前から「孤食(ぼっち飯)」「孤読(ぼっち読書)」「孤考(一人ブレスト)」について、日記に書いてきました。
つまるところ、私は「孤」であるということに、他の人よりも高い耐性がありそうだ、ということです。

ただ、私は、これまで、その「弧」を自分の意志で選択してきました。
「弧」以外の選択肢がなくなったときにも、同じ様に考えることができるのか、全く自信がありません。

ともあれ、今や、「「孤」であるということ」が、望ましいこととして、社会から要請されています。

―― 私の半生は、このコロナ禍の時代に向けた準備期間であったのかもしれない

と思うと、なんとも言えない皮肉を感じます。

4. 孤独問題に対する動き

4.1. 新型コロナウイルス感染症のパンデミック

昨今の少子高齢化やデジタル化などに伴い、人々の社会的な関わりにはさまざまな変化が生じつつある。孤独は、その問題の一つである。

孤独問題は、1980年の新自由主義に端を発て、議論・検討され続けてきたが、この問題がクローズアップされてきたのは、2020年に新型コロナウイルス感染症のパンデミックが発生と、それに伴う、社会的な接触の厳しく制限にある。

こうした状況の中、イギリスでは2018年に「孤独担当相」が、日本でも2021年12月に内閣官房に「孤独・孤立対策担当室」が設立されるなど、社会的孤独への対策は国内外で急務となっている。

ここで重要なのが、孤独が「それ自体が問題」であることは勿論であるが、孤独が社会問題であることを、多くの人が共有する認識に至った点である。

4.2. .

5. 社会悪としての孤独

5.1. 健康問題

ヒトにおける「孤独(社会的孤立の主観的認知)」は、うつなどの心の健康だけでなく、心血管系疾患やがんの予後など、身体的健康にも悪影響を及ぼすことが知られている。マウスを使った実験でも、孤独が雄では攻撃性の増大、雌ではうつ様行動や卵巣がんの増悪を招くことが報告されている。

5.2. カルト問題

6. 個人的な害悪としての孤独

6.1. 孤独は

7. 金銭的不利益のとしての孤独

8. 必然としての孤独

8.1. 孤独はトレードオフである

私達は、物理的な一つの固体であり、厳密な意味において、リアルタイムで同時に2つ以上のコミュニティに参加できない。もちろん、会社、家族、町内会からSNSに至るまで、様々なコミュニティに属しているとも言えるし、そういう意味においては、私たちは、Aというコミュニティに属しつつ、Bというコミュニティにも同時に属する量子的存在である、とも言える。

孤独は突然やってくる

9. 孤独から導かれる最悪のシナリオ

9.1. カルトにつけこまれる

10. 孤独の計算方法

10.1. 前提

ここでは、社会全体として孤独についてのモニタリングについては論じない。それらについては、多くの研究において具体的な数値が上げられており、現時点で、それらのデータを疑う合理的な理由はない。本章における、孤独の計算とは、「個人」の孤独の計算を意味するものとする。

10.2. 自殺率

孤独の定量化で、最初に上がるのは、自殺率である。これについては論を待たない。ただ私(江端)の検討結果では、自殺に至る原因のトップ(40%箸キ50%)は、「うつ」という病気であり、これが「孤独」との相関があることは、感覚的には明らかであるが、厳密な意味では疑問はある。

が、自殺率が、孤独計算の重要なパラメタであることは、今さら検討しなくても良いと考える。

10.3. 世帯構成

世帯構成(家族や伴侶の存在)は、孤独を推定する協力なパラメタである。

10.4. 犯罪発生率

これは、孤独から導かれる「貧困」が問題とされている場合は、犯罪の種類によって、孤独を推定できる可能性がある

10.5. 肥満率

アクティビティは、孤独を測る指標となるうるが、個人差が大きいこともあるので、検討が必要である。

10.6. イベント参加率

夏祭りなどのイベントに参加する人間の数は、個人の孤独を特定するには困難であるが、地域の孤独率を算出する方法としては有用であると言える。(画像処理技術などと使えば、人数のカウント等は難しくない)

11. 用語

11.1. 新自由主義

  • 国家による福祉・公共サービスの縮小(小さな政府、民営化)と、大幅な規制緩和、市場原理主義の重 視を特徴とする経済思想のこと。
  • 資本移動を自由化するグローバル資本主義は新自由主義を一国のみならず世界まで広げたもの
  • 対立する概念は、「国家による富の再分配を主張する自由主義」または「社会民主主義」

つまるところ、国家や組織による個人への介入を排して、個人の能力と価値観に強く依拠する自由な社会、という理解で良い。裏を返せば、(1)能力主義、(2)自己責任、(3)競争是認、(4)自力解決を、強いられる社会であると言える。

もっと簡単に言えば、

  • 私に関わるな。私の考え方は私のもの。その考え方に介入し、あるいはそれを妨げること(妨害、等)することは何人たりとも許さん

  • お前のことは、お前のこと。甘えるな。自力でなんとかしろ。(国家も含み)私には関係ない

が同時に存在すること。

11.2. 反知性主義

11.2.1. 「知性主義」から見る「反知性主義」

  • 知的権威やエリート主義に対して懐疑的な立場をとる主義・思想
  • 「知性を否定する」主義ではなく、「知性主義に反対する」という主義であることに、注意すること
  • 乱暴に言えば、「知性主義」とは、科学、計算、統計などのロジックに基づく考え方であり、直感、感情、情緒等を重視しない主義、と言える。
  • さらに乱暴に言えば、知性主義は、基本的に少数のエリートの作る権力基盤のプラットフォーム、コンピュータで言うところのオペレーションシステム(OS)とも言える。
  • (江端主観で)知性主義の最大の特徴は、「見える化」できないという点にある。非常に複雑で、多くの人にとって理解できないものとして、権力のプラットフォームとして稼動し続けるものである。

11.2.2. 反知性主義の実施例とされているもの

個人的であり、主観的であり、かつ観念的であることを承知の上で、江端主観で、反知性主義の実例を上げるとすれば、以下のものが該当すると考える。

  • 選挙前に減税や弱者支援を訴えて当選を得ることを可能とする「ポピュリズム」
  • 2016年のアメリカ大統領選挙におけるドナルド・トランプの掲げた「アメリカファースト」
  • 新型コロナウイルス感染における「ワクチン陰謀論」
  • SNSを用いることで、反対意見を持つ者を簡単にフィルタリングし、極端な思想で強化・先鋭化された「ネオナチ」「イスラム原理主義」

11.2.3. 反知性主義のメリットとデメリット

ロジックで反論できなくとも「嫌なものは嫌」であり「好きなものは好き」という意見は尊重されなければならない。今となっては、タブーとなっている、人種差別、性別差別等も、当時には、それを支える強固な理論(主に権力側の)があったが、それを、反知性主義的な考え方によって、打破されてきた。

そのような意味において、反知性主義は、民主主義の根幹をなすべき考え方であると言える。

一方、反知性主義は、知性主義的なものに対する感覚的な嫌悪をベースとする傾向があるため、科学的、数学的アプローチを嫌い、比較的、簡単に陰謀論に人々を導く傾向が高い(但し、陰謀論と非陰謀論は、完全に分離できるものではなく、現時点で、陰謀論を定義する方法はない)。

このように、反知性主義は、物事を理解する、という面倒くさいプロセスを放棄することを、正当化する手段としても用いられ、ポピュリズムを容認し、カルト集団や原理主義集団を育成するという、社会悪の側面を持つ。

 

 

未分類

望んだ孤独か、余儀なくされた孤独か、その線引きをどう判断するのか。
内閣官房の担当室が着目したのが「UCLAの孤独感尺度」という指標だ。
1978年にアメリカの大学が公表し、国際的にも広く使われているのだという。
指標は、以下のような20の質問項目で構成されている。

「自分には人との付き合いがないと感じることがあるか」
「自分は取り残されていると感じることがあるか」
「自分は他の人たちから孤立していると感じることがあるか」

こうした質問に4段階の程度を回答して点数化し、孤独感を測る。
点数が高ければ高いほど孤独だということになり、最も高いのが80点で、44点以上で「孤独感が高い」、28点未満で「孤独感が低い」と判定するのだという。
(https://www.nhk.or.jp/politics/articles/feature/61791.html)

江端の孤独尺度は"56" 「孤独感が高い」でした。

80点を満点と考えると、江端の孤独度は70%ーーー  「孤独が強く出るだろう」と思ってはいたのですが、思ったほどには悪い値ではなかったな、という自己評価です。

という訳で、皆さんも、56点をベースに「江端より孤独かどうか」を測ってみませんか?

 

 

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

どうせ、また、いずれ、同じ内容で探し回ることになると思うので、今、記載しておきます

utsu_db=# SELECT seq, node, edge, cost, agg_cost FROM pgr_dijkstra('SELECT gid as id, source, target, length as cost FROM
ways',100, 600, false);
seq | node | edge | cost | agg_cost
-----+-------+-------+------------------------+-----------------------
1 | 100 | 41 | 0.0002983579226385357 | 0
2 | 18996 | 21479 | 0.0006788280602488493 | 0.0002983579226385357
3 | 6119 | 24518 | 0.00019027162164538517 | 0.000977185982887385
4 | 19331 | 6766 | 0.0010928248868793096 | 0.0011674576045327702
5 | 18976 | 21474 | 0.0003135978634977571 | 0.00226028249141208
6 | 6120 | 24519 | 0.00014212958875406848 | 0.0025738803549098374
7 | 2595 | 29737 | 0.00012339732574262452 | 0.002716009943663906
8 | 6137 | 30391 | 0.00016648675622455585 | 0.0028394072694065305

このcostの単位って何なの? 私は距離が知りたいだけなんだけど? と探し回ったら、なんのことはない、単に"length"→"length_m"にすればよかっただけでした。

utsu_db=# SELECT seq, node, edge, cost, agg_cost FROM pgr_dijkstra('SELECT gid as id, source, target, length_m as cost FROM ways',100, 600, false);
seq | node | edge | cost | agg_cost
-----+-------+-------+--------------------+--------------------
1 | 100 | 41 | 27.7006591508524 | 0
2 | 18996 | 21479 | 63.36986127215735 | 27.7006591508524
3 | 6119 | 24518 | 17.68514641657604 | 91.07052042300975
4 | 19331 | 6766 | 102.22241800670713 | 108.75566683958579
5 | 18976 | 21474 | 30.189796472672 | 210.97808484629292
6 | 6120 | 24519 | 14.342809731736027 | 241.16788131896493
7 | 2595 | 29737 | 13.438709335725413 | 255.51069105070096

ちなみに、agg_costは、距離の足し算の合計値を出してくれるので、便利です。

いちおう、GoogleマップとQGISつかって、大体の距離も合っていたので、大丈夫でしょう。

 

 

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

// go get github.com/lib/pq を忘れずに
// go run main6.go

/*
	前提は、https://ebata-books.booth.pm/items/3351408 の環境

	(1)スタート地点  139.91804656152837 36.57246810341353,
	(2)ゴール地点 139.93515104919825 36.55883778950532
	(3)とした時、この2点に最も近いノードを探し出して、
	(4)その2点をダイクストラ法で、最短距離探索をするプログラム

	分かったこと
	上記(3)のノードが、孤立ノードになっている場合があり、この場合(4)が実施できないので、
	ダイクストラに失敗する場合は、別のノードでトライアルする必要あり 
	(このコードでは展開しないけど)
*/

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/lib/pq"
)

var source int
var longitude float64
var latitude float64
var dist float64

func main() {
	db, err := sql.Open("postgres",
		"user=postgres password=password host=localhost port=15432 dbname=utsu_db sslmode=disable")
	if err != nil {
		log.Fatal("OpenError: ", err)
	}
	defer db.Close()

	// スタート地点  139.91804656152837 36.57246810341353
	rows, err := db.Query("SELECT source, x1 as longitude, y1 as latitude, ST_Distance('SRID=4326;POINT(139.91804656152837 36.57246810341353)'::GEOGRAPHY, the_geom) as dist FROM ways WHERE ST_DWithin(the_geom, ST_GeographyFromText('SRID=4326;POINT(139.91804656152837 36.57246810341353)'), 300.0) ORDER BY dist LIMIT 1")
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	for rows.Next() {

		if err := rows.Scan(&source, &longitude, &latitude, &dist); err != nil {
			fmt.Println(err)
		}
		fmt.Println(source, longitude, latitude, dist)
	}

	o_source := source

	// ゴール地点 139.93515104919825 36.55883778950532
	rows, err = db.Query("SELECT source, x1 as longitude, y1 as latitude, ST_Distance('SRID=4326;POINT(139.93515104919825 36.55883778950532)'::GEOGRAPHY, the_geom) as dist FROM ways WHERE ST_DWithin(the_geom, ST_GeographyFromText('SRID=4326;POINT(139.93515104919825 36.55883778950532)'), 300.0) ORDER BY dist LIMIT 1")
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	for rows.Next() {

		if err := rows.Scan(&source, &longitude, &latitude, &dist); err != nil {
			fmt.Println(err)
		}
		fmt.Println(source, longitude, latitude, dist)
	}

	d_source := source

	fmt.Println(o_source, d_source)

	// これが基本形
	// rows, err = db.Query("SELECT seq, node, edge, cost FROM pgr_dijkstra('SELECT gid as id, source, target,length as cost FROM ways',8889, 22848, false)")

	// この bigint なるものは、https://wp.kobore.net/%E6%B1%9F%E7%AB%AF%E3%81%95%E3%82%93%E3%81%AE%E6%8A%80%E8%A1%93%E3%83%A1%E3%83%A2/error-function-pgr_dijkstraunknown-start_vid-bigint-end_vid-bigint-directed-boolean-does-not-exist-line-7-pgr_dijkstra-hint-no-function-matches-the-given-name/ に記載がある
	rows, err = db.Query("SELECT seq, node, edge, cost FROM pgr_dijkstra('SELECT gid as id, source, target,length as cost FROM ways', $1::bigint , $2::bigint , false)", o_source, d_source)

	// こっちも稼動します
	// str := "SELECT seq, node, edge, cost FROM pgr_dijkstra('SELECT gid as id, source, target,length as cost FROM ways'," + strconv.Itoa(o_source) + "," + strconv.Itoa(d_source) + ", false)"
	// fmt.Println(str)
	// rows, err = db.Query(str)

	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	for rows.Next() {
		var seq int
		var node int
		var edge int
		var cost float64

		if err := rows.Scan(&seq, &node, &edge, &cost); err != nil {
			fmt.Println(err)
		}
		fmt.Println(seq, node, edge, cost)
	}

	if err := db.Ping(); err != nil {
		log.Fatal("PingError: ", err)
	}
}

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

// go get github.com/lib/pq を忘れずに
// go run main5.go
package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/lib/pq"
)

func main() {
	db, err := sql.Open("postgres", "user=postgres password=password host=localhost port=15432 dbname=utsu_db sslmode=disable")
	if err != nil {
		log.Fatal("OpenError: ", err)
	}
	defer db.Close()

	rows, err := db.Query("SELECT gid,tag_id,x1 FROM ways")
	if err != nil {
		log.Fatal(err)
	}

	// 139.9182893339256, 36.573831584767085

	defer rows.Close()

	for rows.Next() {
		var gid int
		var tag_id int
		var x1 float64
		if err := rows.Scan(&gid, &tag_id, &x1); err != nil {
			fmt.Println(err)
		}
		fmt.Println(gid, tag_id, x1)
	}

	if err := db.Ping(); err != nil {
		log.Fatal("PingError: ", err)
	}
}

さて

http://www.kobore.net/diary_techno/?date=20181101

の中の、点(139.9182893339256 36.573831584767085)から半径300メートル以内の全部のノードを、近い順に出せ

を、psqlで出力させると、こんな感じになります。

Golangで実施するとなると、こんなコードになります(select文のコピペで足ります)。

// go get github.com/lib/pq を忘れずに
// go run main5.go
package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/lib/pq"
)

func main() {
	db, err := sql.Open("postgres",
		"user=postgres password=password host=localhost port=15432 dbname=utsu_db sslmode=disable")
	if err != nil {
		log.Fatal("OpenError: ", err)
	}
	defer db.Close()

	rows, err := db.Query("SELECT source, x1 as longitude, y1 as latitude, ST_Distance('SRID=4326;POINT(139.9182893339256 36.573831584767085)'::GEOGRAPHY, the_geom) as dist FROM ways WHERE ST_DWithin(the_geom, ST_GeographyFromText('SRID=4326;POINT(139.9182893339256 36.573831584767085)'), 300.0) ORDER BY dist")
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	for rows.Next() {
		var source int
		var longitude float64
		var latitude float64
		var dist float64

		if err := rows.Scan(&source, &longitude, &latitude, &dist); err != nil {
			fmt.Println(err)
		}
		fmt.Println(source, longitude, latitude, dist)
	}

	if err := db.Ping(); err != nil {
		log.Fatal("PingError: ", err)
	}
}

出力結果は同じものになります。

 

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

今となってなっては、当然のように存在している、OSS(オープンソースソフトウェア)ですが、その起源は、fetchmail、emacs、そして、Linuxに遡れると思います。

OSS (Open Source Software) is now a commonplace, but its origins can be traced back to fetchmail, emacs, and Linux.

OSSが、「単なる善意のソースコードの開示ではなく、優れたソフトウェア開発モデルである」ということを提示した、最初の論(というか、コラム)が、エリック・デイモンドさんが開示した、「伽藍とバザール」だったと思います。

I think the first argument (or rather, column) that presented OSS as "not just a bona fide source code disclosure, but a good software development model" was Eric Daymond's disclosure, "The Cathedral and the Bazaar".

今日、これを読み直してみたのですが、ここには、OSSのビジネスモデルに関する言及はなかったようです。

I re-read this today and did not find any reference to the OSS business model here.

が、今や、これらについては、すでに様々なビジネスモデルが実現されており、十分な実績があります。

However, various business models have now been realized and are already well established.

-----

まあ、OSSが、当初、どれだけ酷い取り扱いをされてきたかについては、こちらの記事の、

Well, to see how badly OSS was treated in the beginning, please refer to this article.

'今となっては、ITに詳しくない人ですら知っている用語、OSS(オープンソースソフトウェア) ―― この概念が世間に公表された時、世界中のITエンジニア(私も含めて)から「アホじゃないか」と、あきれたものです'

'Nowadays, even people who are not familiar with IT know the term, OSS (Open Source Software) -- when this concept was announced to the world, IT engineers around the world (myself included) gasped and said, "Isn't that stupid?'

'プログラムのソースコードは、ソフトウェア技術の集大成です。そのソースコードを誰でも見られるようにオープンにしたら、自分の仕事をわざわざ他人にくれてやっているようなものです'

'The source code of a program is the culmination of software technology. If you make that source code open for anyone to see, it is like giving your work all the way to someone else.

あるいは、

Others include,

'その当時、Linuxのカーネルコンパイルなんかやっていたら、「江端ぁ! オモチャのOSで、遊んでんじゃねーぞ!!」と叱られたものです(本当)'

At that time, when I was compiling the Linux kernel, my boss said to me, "Ebata! Don't play with a toy OS! I was scolded by him.

などを、読んで頂ければ、分かるかと思います。

-----

で、最近、私は思うのですが

And lately, I think...

―― ソースコードが開示されたところで、所詮、他人の書いたコードは、自分には読めない

"Even if the source code is disclosed, I can't read the code written by others after all"

という、『オープンソース ≒ クローズドソース論』を、主張したいと思います。

I would like to argue that a theory of "Open Source is nearly equal to Closed Source".

I know well, that,

―― オープンソースコードの理解にかかるコストは、オープンソースコードをスクラッチから作り直す程度のコストに匹敵する

"The cost of understanding open source code is comparable to the cost of rebuilding open source code from scratch"

のです。

今回、これを逆の方向から理解できたのが、今朝の深夜でした。

It was late this morning that I was able to understand this from the opposite direction this time, by the fact of

『他人の100行のコードは理解できないのに、5年前に書いた自分の1000行のコードを、一瞬で思い出すことができた』

'I couldn't understand a hundred lines of someone else's code, but I could instantly recall a thousand lines of my own code that I wrote five years ago.'

からです。

つまり、『オープンソースコードは、その開発者とセットになった時、その価値を最大限に発揮する』ということです。

In other words, 'open source code maximizes its value when it is paired with its developers.

実際のところ、他人のオープンソースを使っていてバグが生じていたとしても、それをデバックする気持ちなど全く発生しません。

As a matter of fact, if I am using someone else's open source and a bug arises, I have no desire to debug that code at all.

このような場合、私の対応は、(1)運用で対処する、(2)そのコードの利用を断念する、(3)そのバグが、学会のワークショップで出てこないことを祈る、の3つ程度です。

In such cases, my response is about three things: (1) deal with the problem in operation, (2) abandon the use of the code, or (3) hope the bug does not come up in a workshop at a conference.

-----

もちろん、この経験は、これまで検討されてきたOSSの開発モデルやビジネスモデルを、1mmも否定するものではありません。

Of course, this my experience does not negate a single millimeter of the OSS development and business models that have been discussed.

しかし、私にとって、私のOSSとは、

But for me, my OSS is about

『過去の私と現在の私の間で行われる、共同開発』

"Collaborative development between me in the past and me in the present"

という意義が、一番大きいです。

is the most significant.

------

シュタインズゲートゼロ第18話の、レスケネン教授の

Professor Leskenen's line from Steins;Gate Zero episode 18,

「これは、私と、私による合作なんだよ ―― 時を越えた」

"This is a timeless collaboration between me and me"

は、OSS開発の意義として、加えられるべきであると思います。

should be added to the significance of OSS development.

2022/04,江端さんの技術メモ

OpenStreetMapのデータからosmiumを使って鉄道だけを抽出しPostGISに入力する方法(宇都宮周辺の鉄道データを使った例)

を、参考にさせて頂いて、試しているのですが、うちのosmiumは、

root@c517fca5dec0:/usr/bin# osmium export -f pg -o utsunomiya-railway-latest.pg utsunomiya-railway-latest.osm.pbf
Set output format with --output-format or -f to 'geojson', 'geojsonseq', or 'text'.

といって、pgファイルを作ってくれません。色々調べたのですが、どうにも上手くいかずに、別の方法を探しています。

で、ちょっと興味本位で、

root@c517fca5dec0:/usr/bin# apt install osm2pgsql

をやってみたら、コンテナの中に、サクッとインストールされたので、これを使う方向で検討しています。

------

>docker container exec -it utsunomiya_db_1 bash

で入ったのですが、osm2pgsqlとかosmiumはインストールできなかったのですが、apt update, apt install, apt upgrade, などを叩き込んで、

>apt install osm2pgsql

>apt install osmium-tool  (×osmium)

>apt install postgresql

を強行しました。

こうしたら、上記のエラー(Set output format with --output-format or -f to 'geojson', 'geojsonseq', or 'text'.)が見えなくなりましたので、osm2pgsqlの方向は見合わせることにしました

よし、続行だ。

この後、アップデートすると動かなくなるので、アップデートを中途半端に行って(完璧にしない)で、pgファイルを作って、インストールに成功。

その後、上記参照ページのSさんから教えて頂いた

utsu_rail_db=# select geom, tags->>'railway' as railway, tags->>'name' as name from utunomiya where tags->>'name' like '%宇都宮ライトレール';

を実施しました。

| construction | (仮称)宇都宮ライトレール
0102000020E6100000070000000725CCB43D7D61408EA2186A5E474240E9CD4D40387D61406409C61C5F474240C6490625317D61407055230560474240197DBBDB2B7D6140A5AA645B61474240BB1171CE237D614050BA3EBD63474240970E8C721F7D6140A95B2CFB644742
4055FBCFF5187D6140B3171B0467474240

| construction | (仮称)宇都宮ライトレール
0102000020E610000008000000BE5B0F15197D61400686072868474240B3075A81217D6140BA50549165474240419B1C3E297D6140B53D30366347424063AD461B2C7D6140685E697462474240CC7C073F317D6140638DC4156147424009E29755337D6140ECB886BE604742
405A2A6F47387D6140E7CD3C146047424069520ABA3D7D6140B130444E5F474240

| construction | (仮称)宇都宮ライトレール
(74 rows)

と、出てきました。

ーーーようやく、宇都宮GISデータベース目処が付きました。