- 投稿日:2021-01-27T23:36:41+09:00
プロキシが影響してGoの環境構築で発生するエラーの対処
プロキシを経由している自社ネットワークで使用している開発マシンにて、VSCodeで実行できる以下コマンドでGoの開発環境を構築しようとした。
Go: Install/Update Toolsところが以下のようなメッセージが出てインストールが失敗してしまうという状況です。
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
いろいろ調べたので、共有します。
前提条件
VSCode、Gitはインストール済み
対応まとめ
GitHubの設定ファイルにプロキシ設定を追加する
先にこれを実行しましたが、事象は解消されませんでした。
git config --global http.proxy http://proxy-address:proxy-port git config --global https.proxy http://proxy-address:proxy-port git config --global http.sslVerify falseVSCodeのsettings.jsonにプロキシの設定を追加する
この対応で「Go: Install/Update Tools」が失敗する事象は改善できました。
先ほど記載したgitのプロキシ設定も依存しているのかは不明です。{ "http.proxy": "http://proxy-address:proxy-port" }感想
実はまだgo getができない状態なので、引き続き調査を進めていきます。
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
このエラーで悩んでいる方に届いてほしいです。
- 投稿日:2021-01-27T19:14:58+09:00
緯度経度の情報でポリゴン生成し、GeoJsonに変換してみよう! (Go言語)
はじめに
この記事では、特定の4箇所の緯度経度からポリゴンを生成し、GeoJsonを作成する方法をまとめたものです。
また、使用言語はGoになります。GeoJsonとは?
GeoJSONとは、JSONを基としたGISデータを記述するためのフォーマットです。
Google mapやOpen street mapなどの地図サービスも対応しているため、読み込ませるだけで、エリアを可視化できたり、ポイントの表示が可能となります。実装
orbライブラリ
今回はGoで実装を行なっていったのですが、緯度経度の情報からポリゴンを作成し、GeoJson形式にしてくれるライブラリがあります。
それがorbライブラリです。
このライブラリ、Stravaでも使われたライブラリのようです。ポリゴン
ちなみにポリゴンなのですが、GISのポリゴンというのは、ベクトルデータ(すなわち、座標値を持った点のデータ)で面を表現したものを指します。
そのため、ポリゴンを作成する際は、最低でも3つの点を必要とします。
また、注意しなければならないのは、下記のコードのように最初のポイントの緯度経度を最後にポイントとして指定しなければなりません。こうすることで、面を表現できる。
p := orb.Polygon{{{Lng1, Lat1}, {Lng2, Lat2}, {Lng3, Lat3}, {Lng4, Lat4},{Lng1, Lat1}}}main.gopackage main import ( "github.com/paulmach/orb" "github.com/paulmach/orb/geojson" ) func main() { convertGeojeson(35.681, 139.77496, 35.68563, 139.76234,35.67681, 139.76002,35.6751, 139.77165) } func convertGeojeson(Lat1 float64, Lng1 float64, Lat2 float64, Lng2 float64, Lat3 float64, Lng3 float64, Lat4 float64, Lng4 float64) { name := "エリア" // ポリゴンの作成 p := orb.Polygon{{{Lng1, Lat1}, {Lng2, Lat2}, {Lng3, Lat3}, {Lng4, Lat4},{Lng1, Lat1}}} // geojsonの作成 c := geojson.NewFeatureCollection() gp := geojson.NewFeature(p) gp.Properties["name"] = name c = c.Append(gp) b, _ := c.MarshalJSON() println(string(b)) }実行結果.geojson{ "features": [ { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [ 139.77496, 35.681 ], [ 139.76234, 35.68563 ], [ 139.76002, 35.67681 ], [ 139.77165, 35.6751 ], [ 139.77496, 35.681 ] ] ] }, "properties": { "name": "エリア" } } ], "type": "FeatureCollection" }mapに食わせてみる
結果が得られたので、このGeoJsonをmapに出力してみたいと思います。
その時に便利なのがこちらのサイトです。
GeoJsonを食わせるだけで、mapに表示してくれます。
- 投稿日:2021-01-27T15:24:52+09:00
?yawacom - ?どんな値がデータベースに入るのか
2021/01/27現在編集中
どんな値がデータベースに入るのか
アプリ内でどんな値が必要なのか,その値はどんな状態であるべきなのかをmiroに書き出しました.
テーブルは
- ユーザ情報の格納:userテーブル
- やわらかさの格納:yawarakasaテーブル
- アクセストークンの格納:access tokenテーブル
の3つを用意します.
access tokenはログイン状態の保持のために作成しています.準備
まずログインしてからデータベースを作ります.
$ mysql -uroot # rootでログインmysql> create database yawarakasa;これでyawarakasaという名前のデータベースが作られました.
確認してみましょう.mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | yawarakasa | +--------------------+どのデータベースを使うのかを指定します.
mysql> use yawarakasaテーブル作成
テーブルをMySQLで作って行きます.
まずユーザテーブルです.create_table.sqluse yawarakasa; create table user( # auto_incrementは連番を自動で入れてくれるやつ # primary keyにはすでにユニーク制約が入っとる id int(255) not null primary key auto_increment, user_name varchar(255) not null, password varchar(255) not null, sex char(1) not null, unique(user_name) );次はやわらかさテーブルです.このファイルに追記で書いていきます.
create_table.sqlcreate table yawarakasa( # yawarakasaとしてのプライマリーキーもあるとべんり # primary keyは1行目に書かないとシンタックスエラー id int(255) not null primary key auto_increment, user_id int(255) not null references user(id), yawarakasa int(255) not null, year int(4) not null, month int(2) not null, day int(2) not null );最後にアクセストークンテーブルです.これもファイルに追記で買いていきます.
create_table.sqlcreate table access_token( user_id int(255) not null references user(id), access_token varchar(255) not null, # 古いアクセストークンでアクセスできなくするために最新トークン以外消すとかするといいかも? # デフォルトで現在時刻入れとく created_at datetime default current_timestamp not null );以上のSQLをファイル実行してテーブルを作成します.ファイル名は
create_table.sqlにしました.
下記コマンドを行うことでファイルのSQL文を実行できます.mysql> source create_table.sql もしくは mysql> \. create_table.sql作られたかどうかを確認します.
mysql> show tables; +----------------------+ | Tables_in_yawarakasa | +----------------------+ | access_token | | user | | yawarakasa | +----------------------+テーブルが3つ作成されました!?
- 投稿日:2021-01-27T01:07:12+09:00
Go言語でMariaDBにinsertするとUTCで挿入される
結論
Go言語でgorpを使いMariaDBに日付型のデータをinsertしたところ、JSTのはずがUTCだったので調査したときのメモ。
結局、DB接続時にロケーション未指定というドキュメントをちゃんと読んでないのが原因...
https://github.com/go-sql-driver/mysqldb, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/db?parseTime=true&loc=Asia%2FTokyo")原因が分からなくて調査した際の各種ログ
OS
# strings /etc/localtime TZif2 TZif2 JST-9Go
gorpログ
2021/01/26 23:11:42 [SQL] begin; [] (3.78465ms) 2021/01/26 23:11:42 [SQL] insert into `t1` (`target_date`) values (?); [1:2021-01-26 23:11:42.100496 +0900 JST] (1.963555ms) 2021/01/26 23:11:42 [SQL] commit; [] (1.572656ms)gorpのログは以下のようにして出力
type GorpTracer struct{} func (t *GorpTracer) Printf(format string, v ...interface{}) { log.Printf(format, v...) } // 一部抜粋 func main() { db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/db?parseTime=true&loc=Asia%2FTokyo") if err != nil { fmt.Printf(err.Error()) } dialect := gorp.MySQLDialect{Engine: "InnoDB", Encoding: "UTF8"} dbmap := &gorp.DbMap{Db: db, Dialect: dialect} defer dbmap.Db.Close() tracer := &GorpTracer{} dbmap.TraceOn("[SQL]", tracer) }MariaDB
タイムゾーン
MariaDB [db]> SHOW VARIABLES LIKE '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | JST | | time_zone | SYSTEM | +------------------+--------+ 2 rows in set (0.011 sec)クエリログ
210126 23:11:42 11 Connect user@localhost as anonymous on t1 11 Query START TRANSACTION 11 Prepare insert into `t1` (`target_date`) values (?) 11 Execute insert into `t1` (`target_date`) values ('2021-01-26 14:11:42.100496')なお、クエリログは以下の設定で出力可能
/etc/my.cnf.d/mariadb-server.cnf[mariadb] general_log general_log_file=/var/log/mariadb/query.log# touch /var/log/mariadb/query.log # chown mysql:mysql /var/log/mariadb/query.log # systemctl restart mariadb

