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

https://note.com/nahito/n/nded6e4dd7382

購入物は、「2020年08月07日 17時37分 のメール本体」 の中に入っている

============ 以下、自分で試してみたこと =================

(Step1) github.comからリポジトリ(go_echo)を作る

(Step2) ローカルのディレクトリ(どこでもいいが、例えば、~/go_echoなら、そこ)にcdする

(準備)
>git config --global user.name
でユーザ名を確認。違ったユーザ名なら、
>git config --global user.name "正しいユーザ名"
>git config --global user.email "正しいメールアドレス"
で修正。

(masterに放り込む)
>git init // gitのディレクトリ
>git add README.md // REAME.mdに好きなことを書いておく(省略してもよい)
>git add *// 全部をローカルに保存
>git commit -m "first commit" // メッセージを付けて(ローカルに)コミットする
>git remote add origin https://github.com/TomoichiEbata/XXXXXX.git // リモートのリポジトリとリンクする
>git push → これでアップロードできる 
>git push --set-upstream origin master

で、今、

Username for 'https://github.com': TomoichiEbata
Password for 'https://TomoichiEbata@github.com': ebata_no_password
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/username/repo.git/'

となってしまった。

で、これに対して、【Git】2021年8月13日からGitでリモートにアクセスができなくなった。
を参考にしてセッテイングしました。

repoと、admin:repo_hookとdelete_repoにチェックを入れる

(ちなみにTokenの文字列はデタラメです)

とした上で、

C:\Users\ebata\money>git push --set-upstream origin master
Username for 'https://github.com':TomoichiEbata
Password for 'https://TomoichiEbata@github.com':(上記のTokenの文字列)
Enumerating objects: 30, done.
Counting objects: 100% (30/30), done.
Delta compression using up to 8 threads
Compressing objects: 100% (30/30), done.
Writing objects: 100% (30/30), 218.21 KiB | 5.20 MiB/s, done.
Total 30 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (4/4), done.
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote: https://github.com/TomoichiEbata/money/pull/new/master
remote:
To https://github.com/TomoichiEbata/money.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

で、無事ログインできました。

 

(test_branchに放り込む)
>git branch test_branch // test_brachを作る
>git branch // ブランチを確認する
*master
test_branch

てな表示が出てくる。
>git checkout test_branch // これで"test_branch"の方に移動する
(ここでgoファイルを色々変更して、test_branchへの格納をする)
>git add *.go // goファイルをローカルに保存
>git commit -m "ブランチテスト" // テストブランチのコメント
>git push origin test_branch // test_branchの方に格納される

(mergeをしてみる)
>git checkout master // masterに移動
>git merge test_branch // test_branchの内容をmasterにマージ
>git push // アップロードする
(github.comの方で色々見ることができる)

(Pull Request(プルリク)をしてみる)
プルリクとは、masterブランチと自分のブランチの差分を確認し、変なコードが混ざってないかなどをレビューする機能です。
>git branch test2_branch // test2_branchを作る
>git checkout test2_branch // test2_branchに移る
>git add *.go // goファイルをローカルに保存
>git commit -m "ブランチテスト2" // テストブランチ2のコメント
>git push origin test2_branch // test2_branchの方に格納される
で、アップロード(push)できたら、githubの画面を見る

なんか聞かれますが、めげずに「Confirm merge」ボタンをおします。これでMasterにマージされます。

(変更をPull(ダウンロード)する)
>git checkout master
>git pull​
すると、masterのコードが、ローカルにダウンロードされる。

(総括)
つまりローカルには、基本のファイルしかないのに、githubの中に、とっちらかったファイルが格納されていて、必要な時に必要なバージョンに戻れる、ということらしです。

 

 

 

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

SBI証券では、HYPER SBIというSBI証券が提供する取引ソフトを利用することでダウンロードが可能です。これまで、HYPER SBIについては条件を満たしていない場合だと月額利用料を支払う必要がありましたが、2021/10/2(土)より待望の無料化が実現しました。

との事でしたので、シミュレーション用にこのデータを頂いてくることにしました。

ちなみに、私の環境はWindows10です。


まずSBI証券のサイトにログインして、

HYPER SBI 2(国内株式版)をダウンロードします(HYPER SBIはサービス終了となるようです)

あとは、普通のアプリを同じようにインストールすればOKです。

HYPER SBI2を起動すると、こんな画面が出てきます(画面というよりはメニュー)

でてきたチャートに、6501と入力(ただの例題です)

で、「時系列」ボタンを押下します。

個別銘柄に「6501」→「日足」→「2021/06/03」(適当でいい) → 「2022/06/03」(適当でいい)→「照会」→「CSVエクスポート」

以下は、csvファイルをエクセルで表示したものになります。

あとは、これをDBに格納すれば、データを使い倒すことができます。

例:「PostgreSQLでCSVファイルをインポート/エクスポートする方法」

うーん、最近、証券会社もデータの大盤振舞いをしていて助かります。


■投資信託の情報の取得方法

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

wayを取るには、以下のコマンドを使う

utsu_tram_db=# select * from ways where name = '(仮称)宇都宮ライトレール';

で、宇都宮ライトレールのwayが取れることが分かったので(誰か知らないけど、コメント入れてくれた人、ありがとう)、あとは、updateコマンドで、costとreverse_costを、小さく(1/3くらい?)すればいけそう。

SQL文の書き方を調べよう。


いちいちDockerの中に入るのが面倒なので、windows10からpsqlでログインします。

C:\Users\ebata>psql -U postgres -p 15432
Password for user postgres:
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
Type "help" for help.

で、江端が変態的改造した宇都宮ライトレールのテーブルにコネクションします。

さあ、道から乗って、LRTに乗って、橋を渡って、道に下りられるか?(道路と鉄道の強制マージの件)

postgres=# \c utsu_tram_db
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
You are now connected to database "utsu_tram_db" as user "postgres".

utsu_tram_dbに直接改造を加えるのは怖いので、utsu_tram_db2 というレプリカを作っておきましょう。

Dockerの中にある、postgreSQLのpostGISのDBを、丸ごとコピーする方法

でも、できるのですけど、面倒なのでWindows10から直接できないか、試してみました。

【PostgreSQL】Windows に psql コマンドだけをインストールする手順

C:\Users\ebata>createdb -U postgres -p 15432 utsu_tram_db2
Password:

で、

utsu_tram_db=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+----------+----------+------------+------------+-----------------------
utsu_tram_db | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
utsu_tram_db2 | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
(12 rows)

あ、できている。凄い。(というか、createdbが使えた、といのも驚いたが)

で、MinGWのシェルから、

$ pg_dump -U postgres -p 15432 -Ft utsu_tram_db | pg_restore -U postgres -p 15432 -d utsu_tram_db2

Password:
Password:

を実施したら、passwordを2回聞かれました(珍しい)。確認したらレプリカ(utsu_tram_db2)が、できていました。こっちで、色々テストします。ちなみに、command.comではパイプ"|"が使えないみたいです。(ちなみに、pg_dump, pg_restoreが使えたことにも驚いたが)


さて、utsu_tram_db2を使って、costと、reverse_costの値を変えてみます。

現在は、こんな感じ。

utsu_tram_db2=# select cost, reverse_cost from ways where name = '(仮称)宇都宮ライトレール';
cost         |        reverse_cost
------------------------+------------------------
0.007490415761689246 | 0.007490415761689246
0.00040536575640007835 | 0.00040536575640007835
0.01932049990115761 | 0.01932049990115761
0.008712540173673398 | 0.008712540173673398
0.007102267864215258 | 0.007102267864215258
0.00684623081981901 | 0.00684623081981901
0.004139533878435676 | 0.004139533878435676
0.005101717091578247 | 0.005101717091578247
0.004405341713757751 | 0.004405341713757751
0.004776545712421741 | 0.004776545712421741

コスト値を小さくすると、ダイクストラで宇都宮ライトレールが選ばれやすくなる(はず)だけど、いくつくらいがいいかなぁ。1/3か 1/5か。とりあえず、効果が見たいから、1/5くらいで書き換えやってみよう。

utsu_tram_db2=# update ways set cost = cost * 0.2 where name = '(仮称)宇都宮ライトレール';
UPDATE 129

さて、どうなっているかな

utsu_tram_db2=# select cost, reverse_cost from ways where name = '(仮称)宇都宮ライトレール';
cost | reverse_cost
------------------------+------------------------
0.0014980831523378492 | 0.007490415761689246
8.107315128001567e-05 | 0.00040536575640007835

まだ、reverse_costの方には手を出していないので比較ができるはず。

0.0014980831523378492  ÷ 0.007490415761689246 = 0.2

おお、できている。

では、reverse_costの方も変えてしまおう。

utsu_tram_db2=# update ways set reverse_cost = reverse_cost * 0.2 where name = '(仮称)宇都宮ライトレール';
UPDATE 129

よし、これにて、cost, reverse_costの強制変換処理を完了

ちょっと問題はあるようですが、動いているようです。

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

package main

import (
	"fmt"

	"github.com/PuerkitoBio/goquery"
)

func main() {

	q, err := goquery.NewDocument("https://kabutan.jp/stock/?code=6501")
	if err != nil {
		fmt.Println("get html NG")
	}

	name := q.Find("div.company_block > h3").Text()
	fmt.Println(name)

	code_short_name := q.Find("#stockinfo_i1 > div.si_i1_1 > h2").Text()
	fmt.Println(code_short_name)

	market := q.Find("span.market").Text()
	fmt.Println(market)

	unit_str := q.Find("#kobetsu_left > table:nth-child(4) > tbody > tr:nth-child(6) > td").Text()
	fmt.Println(unit_str)

	sector := q.Find("#stockinfo_i2 > div > a").Text()
	fmt.Println(sector)

}

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

package main

import (
	"fmt"
	"log"
	"net/http"

	"github.com/PuerkitoBio/goquery"
)

func main() {
	// Request the HTML page.
	res, err := http.Get("http://kobore.net")
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	if res.StatusCode != 200 {
		log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
	}
	// Load the HTML document
	doc, err := goquery.NewDocumentFromReader(res.Body)
	if err != nil {
		log.Fatal(err)
	}
	doc.Find("input").Each(func(i int, s *goquery.Selection) {
		// For each item found, get the title
		title, _ := s.Attr("type")
		fmt.Printf("Review %d: %s\n", i, title)
	})
}

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

utsu_tram_db=# select * from ways where source =0
;
gid | osm_id | tag_id | length | length_m | name | source | target | source_osm | target_osm | cost | reverse_cost | cost_s | reverse_cost_s | rule | one_way | oneway | x1 | y1 | x2 | y2 | maxspeed_forward | maxspeed_backward | priority
| the_geom

gid | osm_id | tag_id | length | length_m | name |

source: 始点ノードの識別子

target : 始点ノードの識別子

| source_osm | target_osm |

costcost : エッジにかかる重み(負の重みは、エッジがグラフに挿入されるのを防ぎます)

reverse_cost: エッジの反対方向のためのコスト。

| cost_s | reverse_cost_s | rule | one_way | oneway |

x1 : エッジの始点のx座標

y1 : エッジの始点のy座標

x2 : エッジの終点のx座標

y2 : エッジの終点のy座標

| maxspeed_forward | maxspeed_backward | priority
| the_geom

 

・id : エッジの識別子 [int4] ・・・・source : 始点ノードの識別子 [int4] ・・・・target : 終点ノードの識別子 [int4] ・・・・cost : エッジにかかる重み(負の重みは、エッジがグラフに挿入されるのを防ぎます)。 [float8] ・・・・reverse_cost(オプション) : エッジの反対方向のためのコスト。

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

JSONで、芳賀・宇都宮LRTの路線と一般道を、停車駅の単位で接続して、LRTを道路扱いする方法にしてみました。

で、昨日の実験結果の方法

街の中に道路を作って、ダイクストラ計算ができるか試してみた件 ―― JOSMを使った道路追加の方法を試す

を使って、utsunomiya-lrt-latest-1-no_modify.osmを手動で作成しました。

そんで、もって、

OpenStreetMapから、鉄道情報(芳賀・宇都宮LRT)を引き出して、ダイクストラ計算やってみました。

を使って、道路とLRTのみのDBを作りました。

root@a2b2f7061d88:~# osm2pgrouting -f /utsu_db/utsunomiya-lrt-latest-1-no_modify.osm -c /utsu_db/mapconfig_for_cars_tram.xml -d utsu_tram_db -U postgres

これで、私は、LRTの架橋を使って、「さあ、道から乗って、LRTに乗って、橋を渡って、道に下りられるか?」を試してみます。

ターゲットとしたノードは、駅近くを選びました。

では始点の方を拡大します。

ダイクストラ計算の結果

postgres=# \c utsu_tram_db
You are now connected to database "utsu_tram_db" as user "postgres".
utsu_tram_db=# SELECT seq, node, edge, cost, agg_cost FROM pgr_dijkstra('SELECT gid as id, source, target,length_m as cost FROM ways',14779, 14266, false);
seq | node | edge | cost | agg_cost
-----+-------+-------+--------------------+--------------------
1 | 14779 | 42200 | 42.785394484227744 | 0
2 | 34 | 19785 | 7.618791492678159 | 42.785394484227744
3 | 35 | 48595 | 389.45546677917343 | 50.4041859769059
4 | 42701 | 59452 | 12.262652109536079 | 439.85965275607936
5 | 42982 | 59725 | 270.535671188774 | 452.12230486561543
6 | 42176 | 58890 | 215.43378099396782 | 722.6579760543895
7 | 42004 | 58695 | 620.3511502405348 | 938.0917570483573
8 | 42005 | 58696 | 199.48206530565716 | 1558.442907288892
9 | 42017 | 58710 | 162.9099908343982 | 1757.9249725945492
10 | 33448 | 48969 | 102.43865451629547 | 1920.8349634289475
11 | 14266 | -1 | 0 | 2023.273617945243
(11 rows)

QGISで書いてみたら、こうなった

あれ、LRTの架橋を通っていないぞ。これ前にも見たことがあるな。これかな

postGISのpgr_dijkstra()を試しているけど、理解できない現象が発生している件

 

revese_costを入れたら、ちゃんとLRT架橋を通過しました

よし、これで、道路と鉄道の強制マージに目処が付きました。

ちなみに、OpenStreetMapに実装されていなかった部分を、JSONで道路工事をした結果、ちゃんと開通していることを確認しました。

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

JOSMのノードの追加は、「上級者モード」にならないと、メニューが出てきません。

とすると、メニューが見えるようになります。

この理由は、比較的、推測しやすいです。

もし間違って、このようなデタラメな地図が、OpenStreetMapの方に反映されるようなことになれば(アップロードされれば)、世界中の地図がメチャクチャになる、からです。

今、私がやっていることは、自分のシミュレータ用に都合よく地図を改竄(かいざん)していることですから、

ですから、間違っても、この改竄した地図をアップロードしないことに注意しなければなりません。

故に、「上級者モード」ということ ―― なんだろうなぁ、と思っています。

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

こんな感じになって、困っていました。

「セキュリティ保護なし」をクリックすると、次の画面が出てきます。

">"をクリックすると、

「証明のパス」を選ぶと、こんな感じになっています。

で、問題は、この「Cisco Umbrella Root CA」が、「信頼されたルート証明機関」に入っていないことらしいです。

ところが、これはインストールして使われるものでもないらしいとか、ネットでは色々書かれていましたが、私は、この「Cisco Umbrella Root CA」を力付くで、インストールしました。

"Cisco_Umbrella_Root_CA.cer"を探し出して、そのファイルを適当なディレクトリにダウンロード。ファイルを右クリックして、「証明証のインストール」を選んで、以下を実行。

 

これで、現在のところ、問題は出てこなくなっているようです。
(セキュリティ的にどうかとも思うのですが、作業できないと困るので)

以上