2023,江端さんの技術メモ

いつも通り、2台目のパソコンにdockerを使ったDBを作成して、psqlを使って、DBアクセスを試みましたが、

postgres=# \c yoko_db
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
You are now connected to database "yoko_db" as user "postgres".
yoko_db=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+----------
public | configuration | table | postgres
public | pointsofinterest | table | postgres
public | spatial_ref_sys | table | postgres
public | ways | table | postgres
public | ways_vertices_pgr | table | postgres
(5 rows)

yoko_db=# select * from ways;
ERROR: character with byte sequence 0xe9 0xb7 0x97 in encoding "UTF8" has no equivalent in encoding "SJIS"

という見たことのないエラーが出てきました。

ローカルからアクセスしたところ問題はないようですし、As:SQL Mk-2を使ってリモートからも読めました。

A5:SQL Mk-2 トライアル(解決)

psqlでログインして、\c (テーブル) (ここの場合は、# \c yoko_db)とした後、

yoko_db=# set client_encoding to utf8;
SET
yoko_db=# \encoding
UTF8

とすることで、エラーが出てこなくなりました。

以上

 

2023,江端さんの技術メモ

type testJSON struct {
	Id      string `json:"@id"`
	Type    string `json:"@type"`
	Date    string `json:"dc:date"`
	Context string `json:"@context"`
	Title   string `json:"dc:title"`
	Note    string `json:"odpt:note"`
	Regions struct {
		Type        string `json:"type"`
		Coordinates []interface{}
	} `json:"ug:region"`
	Owl              string `json:"owl:sameAS"`
	Pattern          string `json:"odpt:pattern"`
	Busroute         string `json:"odpt:busroute"`
	Operator         string `json:"odpt:operator"`
	Direction        string `json:"odpt:direction"`
	BusstopPoleOrder []struct {
		Note        string `json:"odpt:note"`
		Index       int    `json:"odpt:index"`
		BusstopPole string `json:"odpt:busstopPole"`
	} `json:"odpt:busstopPoleOrder"`
}

の、

Coordinates []interface{}

の部分をsrting型→分割 → float64型に戻して処理しようしているのですが、

for _, e := range data {
		fmt.Println(e) // 全情報表情
		coors := e.Regions.Coordinates
		fmt.Println("len_mm", len(coors))
		for _, coor := range coors {
			fmt.Println(coor)
			str_coor := coor.(string)
			arr := strings.Split(str_coor, " ")
			lng := arr[0]
			lat := arr[1]
			fmt.Println(lng, lat)
		}
	}

[139.6249873 35.4648941]
panic: interface conversion: interface {} is []interface {}, not string

goroutine 1 [running]:
main.main()
C:/Users/ebata/yoko_bus_route/route_json.go:92 +0x694
exit status 2

というエラーが出てきて停止します ―― キャストできない。

多分対応方法はあると思うのですが、調べるのが面倒なので、C/C++で定番の、あの美しくない方法 "sprintf"を使いました

for _, coor := range coors {

			//	str_coor := coor.(string)   
			str_coor := fmt.Sprintf("%v", coor) // この段階では" [139.575019, 35.439622]"という文字列 

			arr := strings.Split(str_coor, " ") // スペース" " で arr[0], arr[1]という文字列に分離する

			str_lng := strings.Replace(arr[0], "[", "", -1) // arr[0] ("[139.575019")から、"["を消す
			str_lat := strings.Replace(arr[1], "]", "", -1) // arr[1] ("35.439622]")から、"]"を消す

			lng64, _ := strconv.ParseFloat(str_lng, 64) // float64に強制的に型変換する
			lat64, _ := strconv.ParseFloat(str_lat, 64) // float64に強制的に型変換する

			fmt.Println("lng:", lng64)
			fmt.Println("lat:", lat64)

		}

動けばいいんですよ、動けば。

2023,江端さんの忘備録

私は、「良い部下」だった、という記憶がありません。

I don't remember that I was a "good subordinate".

そのような部下であっても、『この上司、リーダーについていこう』と決めた人もいました。

Even so, I thought to decide, 'I will follow this boss and leader.

それらの人々には共通した性格がありました。

They had a common character.

―― リーダーシップがない

"No leadership"

この一言に尽きます。

This is the one word.

-----

『リーダーシップがないリーダー』は、頼りがなく、いつも心配をしなければなりませんでした。

'Leaders without leadership' were unreliable and I always had to worry.

私よりも知見がなく、そのことに対して大した拘泥(こだわり)もプライドもないようでした。

They were less knowledgeable than I was and did not seem to have any great obsession or pride in the matter.

ですから、私は、自分のことだけでなく、チーム全体の動きも気にかけばけばなりませんでした。

So I had to be concerned not only about myself but also about the team as a whole.

しかし、そのようなリーダーは、威圧的ではなく、私の話もちゃんと聞いてくれ、必要に応じて方針を変更してくれる人でした。

However, such a leader was not overbearing, but would listen to me and change policy as needed.

私の失敗を責め立てるでもなく、黙って一緒にお客さんの所に謝りに行ってくれて、その後、その事をすっかり忘れてしまうように振る舞ってくれました。

They did not blame me for my mistake, but quietly went with me to apologize to the customer and then acted as if they would forget all about it.

そのような、ボンヤリとしたマネージメントの元、私を含めチームメンバは、自律的に動き、そしてメンバ間のコミュニケーションも円滑でした。

Under such a vague management, the team members, including myself, moved autonomously, and communication among them was smooth.

一番の要因は、私が、その人のことを「個人的に好きである」ということでした。

The most important factor was that I had a "personal liking" for the person.

-----

ただ、このようなリーダーは、社会的というか、会社的には評価されにくいようです。

However, such leaders seem to be less valued socially, or company-wise.

そして、省みるに、私がそのようなリーダーに憧れても、いざ自分がリーダーになると、時間や成果に対して厳密な人間になってしまいました。

And in reflection, even though I aspired to be such a leader, when I became one, I became a person strict about time and results.

立ち位置や保身で、人間というのは、簡単に姿を変えてしまいます。

People are easily disfigured by their standing and self-preservation.

そして現実として、パワハラを発動させるリーダーが、チームの成果を上げるのは事実です。

And the reality is that leaders who initiate power harassment improve the results of their teams.

ただ、"パワハラ"に対して、"退職"という形の報復で、リーダーの権限を失墜させることができます ―― 特に若い世代は。

However, retaliation for "power harassment" in the form of "resignation" can be used to disqualify a leader's authority, especially by the younger generation.

こうして考えると、(どの世代であっても)若者の離職率の高さというのは、ある種、会社のモラルを維持する機能として働いていると言えるかもしれません。

In this way, it may be said that the high turnover rate of young people (in any era) is, in a sense, a function of maintaining company morale.

-----

総じて、『リーダーシップがないリーダー』になることは、これはこれで、相当に難しいのです。

In general, to be a 'leader without leadership' is a lot more difficult.

なぜなら『リーダーシップがないリーダー』を目指した瞬間に、そのようなリーダーにはなれなくなるからです。

Because the moment you aim to be a 'leader without leadership,' you will not be such a leader.

「のび太」という国家理念

 

2023,江端さんの技術メモ

https://ckan.odpt.org/dataset/b_busstop-yokohamamunicipal/resource/da256719-0c39-48a7-a1f2-20354e18d529

// stop_json.go
// 横浜市交通局 バス停情報 / Bus stop information of Transportation Bureau, City of Yokohama
// https://ckan.odpt.org/dataset/b_busstop-yokohamamunicipal

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
)

type stopJSON struct {
	Id        string `json:"@id"`
	Type      string `json:"@type"`
	Lng_Title struct {
		En      string `json:"en"`
		Ja      string `json:"ja"`
		Ko      string `json:"ko"`
		Zh      string `json:"zh"`
		Ja_Hrkt string `json:"ja-Hrkt"`
	} `json:"title"`
	Date              string        `json:"dc:date"`
	Lat               float64       `json:"geo:lat"`
	Long              float64       `json:"geo:long"`
	Context           string        `json:"@context"`
	Title             string        `json:"dc:title"`
	Kana              string        `json:"odpt:kana"`
	SameAS            string        `json:"owl:sameAS"`
	Operator          []interface{} `json:"odpt:operator"`
	BusroutePattern   []interface{} `json:"odpt:busroutePattern"`
	BusstopPoleNumber string        `json:"odpt:busstopPoleNumber"`
	// BusstopPoleTimetable
}

func main() {

	// JSONファイルから読み取る場合
	//file, err := ioutil.ReadFile("route.json")
	//file, err := ioutil.ReadFile("odpt_BusroutePattern.json")
	file, err := ioutil.ReadFile("odpt_BusstopPole.json")
	if err != nil {
		// エラー処理
	}

	/*
		// Webアクセスで取得する場合

		client := &http.Client{}
		req, err := http.NewRequest("GET", "https://api.odpt.org/api/v4/odpt:BusstopPole?odpt:operator=odpt.Operator:YokohamaMunicipal&acl:consumerKey=f4954c3814b207512d8fe4bf10f79f0dc44050f1654f5781dc94c4991a574bf4", nil)
		if err != nil {
			log.Fatal(err)
		}

		resp, err := client.Do(req)
		if err != nil {
			log.Fatal(err)
		}
		defer resp.Body.Close()
		if err != nil {
			log.Fatal(err)
		}

		file, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			log.Fatal(err)
		}
	*/

	var data []stopJSON

	err = json.Unmarshal(file, &data)
	if err != nil {
		fmt.Println("Unmarshal")
		log.Fatal(err)
	}

	//fmt.Println(string(file))

	// ループによる取得
	for _, e := range data {

		fmt.Println(e) // 全情報表情

		stops := e.BusroutePattern
		fmt.Println("len_stop", len(stops))

		for _, stop := range stops {
			fmt.Println(stop)
		}

	}
}

2023,江端さんの忘備録

コーディングの怖いところは、「成果」と「努力や時間」の相関が非常に小さいということです。

The scary thing about coding is that the correlation between "results" and "effort or time" is very small.

例えば、200行くらいのプログラムを30分で作ることができることもあれば、2行のプログラムに10時間~1週間も『ドはまり』する、ということがあるからです。

For example, it is possible to create a program of about 200 lines in 30 minutes, or to be "stuck" for 10 hours to a week on a program of two lines.

―― JSONのパーサーなんぞ、3時間で片付けてやるわ

"I'll finish the JSON parser in three hours"

と着手したのが、昨日の今頃。

It was only this time yesterday that I started to do it.

tagのない配列型の形式をパースするプログラムのサンプルコードを求めて、ネットで探し回り、何十回もエラーに対応し、現在、24時間(仮眠を含む)を経過しました。

I kept searching the net for sample code for a program to parse an array type format without tags. And now 24 hours (including naps) have passed while dealing with dozens of errors.

完全に「ハマりました」。

I am completely "stuck".

―― もう、ダメだ

"Oh, God, no"

やむなく、質問サイトへの投稿を覚悟しました。

Reluctantly, I was prepared to post my question on a question site.

こんなに、ハマるくらいなら、早く投稿すればいいのですが、当然、投稿するためには、その状況を正確に詳細に記載しなければならず ―― 面倒くさいのです。それに、回答して貰えるかも分かりませんし。

I wish I could post sooner rather than get into this, but of course, in order to post, I have to describe the situation in exact detail -- it's a hassle. Besides, I don't know if I'll get an answer.

その為の短いプログラムを書いていたら、どういう訳か、そのプログラムが「正しく動く」のです。

When I write a short program for that purpose, somehow the program "works" correctly.

『いやいや、このコード、昨夜、何回か試したよね?』と思うのですが、動いているのだから仕方ありません。

'No, no, no, I tried this code several times last night, didn't I?' I think, but it's working, so I can't help it.

横浜市交通局 バス路線情報の取得方法 golangによるXMLパーサー

-----

プログラムは、動作したモノだけが正義です。

The program is only justified by the things that work.

動かないプログラムは、そのコードがどんなに、美しかろうが、読みやすかろうが、文法的に正しかろうが ―― すべて「ゴミ」です。

A program that does not work, no matter how beautiful, readable, or grammatically correct the code may be -- it is all "garbage".

コーディグは「努力や時間」などというものが、一切、斟酌(しんしゃく)されない世界です。

Codig is a world where "effort and time" are not taken into consideration.

-----

最近、私のGW、夏期休暇、年末休暇は、ほぼ全日コーディングに費されています。

Lately, my GW, summer vacation, and year-end vacations have been spent almost entirely in coding.

エンジニアとして、生き残りたいからです。

Because, I want to survive as an engineer.

『自作のプログラミングコード一本で、研究原資という"タマ"を取りに行く』

2023,江端さんの忘備録

過去の日記を探していたら、

When I was searching through my past diaries,

―― 10連休で人生を変える。AIエンジニアになろう。

を見つけました。

I found the article.

これ、2019年の日記の記事です。

This is a 2019 diary entry.

先程、探してみたところ、そのサービスは今年もやっているようです。

I just looked for that service and it appears that they are doing it again this year.

-----

本ページをご覧頂いているの皆様にお願いです。

I would like to make a request to all visitors to this website.

「10連休で人生を変えて、AIエンジニアになった方」ご本人、または、その知り合いの方。

You or someone you know who "changed your/their life in 10 straight holidays and became an AI engineer."

こちらのメールアドレスに、御一報を頂ければ幸いです。

I would appreciate it if you could let me know at this e-mail address.

交通費、滞在費、100%自腹で、インタビューに参上いたしたく希望しております。

I hope to come to you for an interview at 100% of our own expense, including transportation and accommodation.

きっと有意義なインタビュー、議論ができると、確信しております。

I am confident that we will have a meaningful interview and discussion.

よろしくお願いいたします。

Thank you for your cooperation.

2023,江端さんの忘備録

以前、インタビュー番組で、俳優の大泉洋さんが、

In an interview program, actor Yo Oizumi once said,

『自分はカラッポで、やりたいものはない』

"I am empty and there is nothing I want to do"

『誰かがやって欲しいと思うことをやって、喜んでもらえるのが、嬉しいだけ』

" I am just happy to do what I think someone wants me to do, and that makes me happy"

という話を聞いて、とても腑に落ちたことを覚えています。

I remember hearing him say this on the program, and it really hit me.

-----

これに関する話を、私もいくつか書いていたような気がしましたので、過去の日記を調べてみました。

I had a feeling that I had written a few stories about this, so I checked my past diaries.

私達の多くは「やりたいこと」など持っていない。与えられた条件の中で「やれることをやるだけ」である

- "Originally, we do not have "I want to do it myself"

あなたの夢を諦めないで

- Don't give up on your dreams.

『♪ 自由に生きていく方法なんて、1通りだってないさ~ 』

"There is no way to live freely ..."

うん、やっぱり、たくさん書いていました。

Yes, I knew I was writing a lot.

------

―― 私たちには、やりたいことなどない

"There is nothing we want to do"

をデフォルトとしておくことは、正直で、ラクな生き方である、と思います。

I think that keeping this phrase as a default is an honest and easy way to live.

2023,江端さんの技術メモ

https://ckan.odpt.org/dataset/b_busroute-yokohamamunicipal


■動かなくて悩んでいたコード

// xml_parse.go
package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

type testXML struct {
	Date     string `json:"dc:date"`
	Busroute string `json:"odpt:BusroutePattern"`
}

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://api.odpt.org/api/v4/odpt:BusroutePattern?odpt:operator=odpt.Operator:YokohamaMunicipal&acl:consumerKey=f4954c3814b207512d8fe4bf10f79f0dc44050f1654f5781dc94c4991a574bf4", nil)
	if err != nil {
		log.Fatal(err)
	}

	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	if err != nil {
		log.Fatal(err)
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}

	//fmt.Println(body)

	var data testXML

	err = json.Unmarshal(body, &data)
	if err != nil {
		fmt.Println("Unmarshal")
		log.Fatal(err)

	}

	fmt.Println(data)

}

出力結果

> go run xml_parse.go
Unmarshal
2023/05/01 18:05:31 json: cannot unmarshal array into Go value of type main.testXML
exit status 1

悩むこと1時間、("type testXML"スキーマを色々いじったりしていた)

『そういえば、このjsonのデータは、違う路線データも入っているはずだよな』
→ 『ということは、複数のデータが入っていることになるよな』
→ 『 For文で取らなければ不味くないか?』

で、ググってみたら、どうやらループになるように仕込んでおかないといけないらしいことが分かりました(XMLの先頭の情報が取れるだけだと思っていた)

■動いたコード

// xml_parse.go
package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

type testXML struct {
	Date     string `json:"dc:date"`
	Busroute string `json:"odpt:BusroutePattern"`
}

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://api.odpt.org/api/v4/odpt:BusroutePattern?odpt:operator=odpt.Operator:YokohamaMunicipal&acl:consumerKey=f4954c3814b207512d8fe4bf10f79f0dc44050f1654f5781dc94c4991a574bf4", nil)
	if err != nil {
		log.Fatal(err)
	}

	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	if err != nil {
		log.Fatal(err)
		x
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}

	//fmt.Println(body)

	var data []testXML

	err = json.Unmarshal(body, &data)
	if err != nil {
		fmt.Println("Unmarshal")
		log.Fatal(err)

	}

	for _, e := range data {
		fmt.Println(e.Date)
	}

}

go run xml_parse.go
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00
2023-04-03T00:00:00+09:00"当たり"だったようです。


バス路線情報のJSONをブラウザで読みとってみました。


ここから、酷いハマり方をします(10時間くらい)。

上記のルートの位置情報の表示のコーディングがどうしても分からない。

以下は、上記のJSONを簡略化したものです(route.json)。

[
	{
		"dc:date":"2023-04-03T00:00:00+09:00",
		"dc:title":"007",
		"ug:region":
				{
					"type":"Triangle",
					"coordinates":[[139.6249873,35.4648941],[139.6237514,35.4648862],[139.623672,35.4650137]]
				},
		"owl:sameAs":"test1"
	},
	{
		"dc:date":"2023-04-03T00:00:00+09:00",
		"dc:title":"008",
		"ug:region":
				{
					"type":"LineString",
					"coordinates":[[139.667765,35.416456],[139.668006,35.416708],[139.668116,35.416788],[139.668276,35.416841]]
				},
		"owl:sameAs":"test2"
	}
]

問題は、ネストの中に入っていて、タグの名前のついていない、

"coordinates":[[139.6249873,35.4648941],[139.6237514,35.4648862],[139.623672,35.4650137]]

の部分です。

10時間くらいは戦ったかなぁ ―― もう疲れ果てて、質問サイトに投稿する為に、(上記の)JSONファイルと、このパーサープログラムを成形していました。

で、そのプログラムをテストランさせたら ―― これが動いてしまったのです。

// route_json.go

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
)

type testXML struct {
	Date    string `json:"dc:date"`
	Title   string `json:"dc:title"`
	Note    string `json:"odpt:note"`
	Owl     string `json:"owl:sameAS"`
	Regions struct {
		Type        string `json:"type"`
		Coordinates []interface{}
		//Coordinates []struct {
		//	Longitude float64 `json:"longitudes>longitude"`
		//	Latitude  float64 `json:"latitudes>latitude "`
		//} `json:"coodtinates"`
	} `json:"ug:region"`
}

func main() {
	file, err := ioutil.ReadFile("route.json")
	//file, err := ioutil.ReadFile("odpt_BusroutePattern.json")

	if err != nil {
		// エラー処理
	}

	var data []testXML

	err = json.Unmarshal(file, &data)
	if err != nil {
		fmt.Println("Unmarshal")
		log.Fatal(err)
	}

	fmt.Println(string(file))

	// ループによる取得
	for _, e := range data {

		fmt.Println(e) //
		mm := e.Regions.Coordinates

		fmt.Println(len(mm))

		for _, m := range mm {
			fmt.Println(m)
		}
	}
}

実行結果は以下の通りです。

> go run route_json.go
[
{
"dc:date":"2023-04-03T00:00:00+09:00",
"dc:title":"007",
"ug:region":
{
"type":"Triangle",
"coordinates":[[139.6249873,35.4648941],[139.6237514,35.4648862],[139.623672,35.4650137]]
},
"owl:sameAs":"test1"
},
{
"dc:date":"2023-04-03T00:00:00+09:00",
"dc:title":"008",
"ug:region":
{
"type":"LineString",
"coordinates":[[139.667765,35.416456],[139.668006,35.416708],[139.668116,35.416788],[139.668276,35.416841]]
},
"owl:sameAs":"test2"
}
]

{2023-04-03T00:00:00+09:00 007 test1 {Triangle [[139.6249873 35.4648941] [139.6237514 35.4648862] [139.623672 35.4650137]]}}
3
[139.6249873 35.4648941]
[139.6237514 35.4648862]
[139.623672 35.4650137]
{2023-04-03T00:00:00+09:00 008 test2 {LineString [[139.667765 35.416456] [139.668006 35.416708] [139.668116 35.416788] [139.668276 35.416841]]}}
4
[139.667765 35.416456]
[139.668006 35.416708]
[139.668116 35.416788]
[139.668276 35.416841]

ずっとエラーが出ていたんですが、突然表示されるようになりました。

        Coordinates []interface{}

JSONタグが付いていない問題は、これで解消できるようです。

で、(簡易版ではなく)実体のJSONファイルを使ってみても動きました。

こういうことがあるから、本当にコーディングというのは厄介なんですよね。


パースしたデータを表示してみました。

通路が(多分)順番に表示されることが確認できました。


だいたいこれで完成です。

// route_json.go
// 横浜市交通局 バス路線情報 / Bus route information of Transportation Bureau, City of Yokohama
// https://ckan.odpt.org/dataset/b_busroute-yokohamamunicipal

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
)

type testJSON struct {
	Id      string `json:"@id"`
	Type    string `json:"@type"`
	Date    string `json:"dc:date"`
	Context string `json:"@context"`
	Title   string `json:"dc:title"`
	Note    string `json:"odpt:note"`
	Regions struct {
		Type        string `json:"type"`
		Coordinates []interface{}
	} `json:"ug:region"`
	Owl              string `json:"owl:sameAS"`
	Pattern          string `json:"odpt:pattern"`
	Busroute         string `json:"odpt:busroute"`
	Operator         string `json:"odpt:operator"`
	Direction        string `json:"odpt:direction"`
	BusstopPoleOrder []struct {
		Note        string `json:"odpt:note"`
		Index       int    `json:"odpt:index"`
		BusstopPole string `json:"odpt:busstopPole"`
	} `json:"odpt:busstopPoleOrder"`
}

func main() {

	// JSONファイルから読み取る場合
	//file, err := ioutil.ReadFile("route.json")
	file, err := ioutil.ReadFile("odpt_BusroutePattern.json")
	if err != nil {
		// エラー処理
	}

	/*
		// Webアクセスで取得する場合

		client := &http.Client{}
		req, err := http.NewRequest("GET", "https://api.odpt.org/api/v4/odpt:BusroutePattern?odpt:operator=odpt.Operator:YokohamaMunicipal&acl:consumerKey=f4954c3814b207512d8fe4bf10f79f0dc44050f1654f5781dc94c4991a574bf4", nil)
		if err != nil {
			log.Fatal(err)
		}

		resp, err := client.Do(req)
		if err != nil {
			log.Fatal(err)
		}
		defer resp.Body.Close()
		if err != nil {
			log.Fatal(err)
		}

		file, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			log.Fatal(err)
		}
	*/

	var data []testJSON

	err = json.Unmarshal(file, &data)
	if err != nil {
		fmt.Println("Unmarshal")
		log.Fatal(err)
	}

	//fmt.Println(string(file))

	// ループによる取得
	for _, e := range data {

		fmt.Println(e) // 全情報表情
		coors := e.Regions.Coordinates

		fmt.Println("len_mm", len(coors))

		for _, coor := range coors {
			fmt.Println(coor)
		}

		stops := e.BusstopPoleOrder

		fmt.Println("len_ss", len(stops))

		for _, stop := range stops {
			fmt.Println(stop.Note)
			fmt.Println(stop.Index)
			fmt.Println(stop.BusstopPole)
		}

	}
}

2023,江端さんの忘備録

先程、EE Times Japanの編集担当の方から、ご依頼を受けた内容のコラムを書き上げました。

I have just finished writing a column on a request from the editorial staff of EE Times Japan.

まあ、文章を書くのはいいです。図面の作成もできます。貰ったレビューを会話風に展開するのも、まあなんとかなっています。

Well, I can do writing. Drawings can be made. I can manage to develop the reviews I get into a conversational style.

問題はイラストです。

The problem is the illustration.

イラストにかける時間が、最近シャレにならないくらい長くなっています。

The time I spend on illustrations has become uncharacteristically long these days.

江端:「"SG"とは、当然、"シュタインズ・ゲート"のことです・・・え、ご存知ない?本当に??」

-----

最近話題になっている「AIに絵を描いてもらう」を調べてみました。

I looked into the recent topic of "having an AI draw a picture".

YouTubeなどで調べてみたのですが、なんか違う。

I have looked it up on YouTube, etc., but it is something different.

私の場合、コラムの内容に一致させる絵が欲しいので、最初から、コンセプトも、欲しいキャラクターも、構図も、明解なのです。

In my case, I want a picture that matches the content of the column, so from the beginning, the concept, the characters I want, and the composition are clear.

美しい背景は不要ですし、各種の色彩効果もいりません。

There is no need for beautiful backgrounds or various color effects.

線画と色が乗っているだけのイラストでいいのです。

It can be just an illustration with line drawings and colors on it.

しかし、思い通りの絵にならない。

However, the illustration does not turn out the way I want it to.

なんとももどかしいです。

It is very frustrating.

贅沢言わなければ、もっと速くイラストを作れる(×描ける)のかもしれませんが、私は贅沢を言いたいのです。

If I didn't have to be extravagant, I might be able to create (x draw) illustrations faster, but I want to be extravagant.

-----

最近、会社の資料に、軽い線画にちょっとだけ色を付けるようなイラストをを描いてくる若手の研究員が、ちらほら現われるようになってきました。

Recently, a few young researchers have been showing up here and there to draw illustrations of light line drawings with a little bit of color in company documents.

その線画イラストの入った資料は、恐しく説得力があるのです。

The material with its line-drawing illustrations is terribly compelling.

これまで、一生懸命システム構成図を記載してきた自分が、バカみたいに思えるほどです。

I feel like an idiot for having worked so hard to describe the system configuration diagram.

―― 絵を描く能力がある人って、やっぱり凄い

-----

ネットで、イラストを描いてくれるクラウドソーシングがあります。値段も概ね妥当です。

There is a crowdsourcing service online that will draw illustrations for you. Prices are generally reasonable.

そのサービスを提供してくれる人に、コラムの原稿と、自分の希望を出して、イラストを作ってもらうことができると思います。

I think you could ask the person who provides that service to create an illustration of my column, along with a draft of my column and my wishes.

しかし、私は、自分のコラムのイラストは、自分の手で描きたいのです。

However, I want to continue to make the illustrate of my columns with my own hands.

―― 「なんで、みんな、『他人と上手くやっていける』と思えるんだろう?」

2023,江端さんの忘備録

私、基本的に人にアドバイスをしません。

I, basically, don't give advice to people.

アドバイスというのは助言であって、単なるフレーズで、実体のない空虚な音声信号です。

Advice is advice, a just phrase, an empty sound signal without substance.

『助ける行為』そのものではありません。

It is not the "act of helping" itself.

私、若い頃から、頼みもしない人から、頼みもしないアドバイスを、一方的に受けて、本当にうんざりしてきました。

Since I was young, I have been really fed up with receiving unsolicited advice from people I didn't ask for, one-sidedly.

しかし、シニアになった自分を省みると、この『頼みもしないアドバイス』を他人にしてしまう傾向が強くなるのを知っています。

However, as I reflect on myself as a senior, I know that I am more likely to give this 'unsolicited advice' to others.

ですから、努めて自分を監視するようにしています。

Therefore, I try to monitor myself.

まあ、私の場合、"ブログ"という、不特定多数の発信装置があるので、その欲望を満しているとも言えます。

Well, in my case, I have a "blog," which is an unspecified device to transmit information to a large number of people, so I can say that I am fulfilling that desire.

しかし、私のブログは『不愉快に感じる人は、ブログを読まなければよい』ので、上記の『頼みもしないアドバイス』とは、一線を画するものであると思っています。

However, I believe that my blog is distinct from the above 'unsolicited advice' because 'those who find it offensive should not read the blog'.

-----

非常に稀ではあるのですが、私は『頼まれるアドバイス』を受けることがあります。

Although it is very rare, I do get 'advice that I am asked for'.

基本的には、頼まれれば応じることにしていますが、その場合でも、頼まれた範囲内のアドバイスに留めることに努めています。

Basically, I try to respond when asked, but even then I try to keep my advice within the scope of what I am asked to do.

話題が発展して、全く別の話や、自分の自慢話や、ましてや説教にならないように、自分を監視しています。

I monitor myself to make sure that the topic does not evolve into something completely different, or into bragging about myself, much less preaching.

-----

私の自己監視方法は、2つあります。

I have two methods of self-monitoring.

(1)終了時間を決めておくこと

(1) Set an end time.

(2)相手と自分の喋っている時間の長さが"等分"となるように、会話をコントロールすること

(2) Control the conversation so that the length of time me and the other person are talking is "equally" long.

私にとって、難しいのは(2)です。

For me, the difficult part is (2).

私は、ネタの引き出しが多いのです ―― ざっくり、ブログで約4000(10年間分)、コラムが300、商用コラムが200ほどあります。ですので、ついつい、いらん話をしてしまいがちです。

I have a lot of material -- roughly 4,000 blogs (10 years worth), 300 columns, and about 200 commercial columns. So, I tend to talk about things you don't want to hear about.

ですので、これを抑制するには、(1)の時間制限が重要になってきます。

Therefore, the time limit in (1) is important to control this.

-----

ご理解頂けるかと思うのですが、私が飲み会を忌避する理由の一つは「これ」です。

As I am sure you can understand, one of the reasons I avoid drinking parties is this.

酔っぱらった上司に、飲み会の開始から解散まで、延々と自慢話をされて、説教を喰らう ―― そんな「地獄」に誰が行こうと思うものか。

A drunken boss brags and lectures you endlessly from the start of a drinking session to its breakup - who would want to go to such a "hell"?

まあ、今や立派なシニアになった私が、今さら、こんな目に合うことはないと思います。

Well, now that I am a respectable senior citizen, I don't think I will have to go through this now.

しかし、逆に、私が、こんな上司のような醜態を晒す可能性はあります。

But, on the other hand, I could be as ugly as these bosses.

『もし私がそんな醜態を晒したら』と考えると、拳銃で自分の頭を撃ち抜きたくなる衝動にかられます。

If I were to make such an abomination,' I will say, 'I would be tempted to shoot myself in the head with a pistol.

-----

もう、お分かりになりますよね。

You already know what I mean.

『拳銃で自分の頭を撃ち抜けよ』と、私に思わせるような奴がいるってことです。

It means there are persons who make me think, 'Take a pistol and shoot yourself in the head'.

飲み会における、最も優れた上司の振舞いは『しゃべらず、だまって、金だけ出す』です。

そんな感じで、今、私は、飲み会のなかったコロナ禍のこの3年間の幸せを、しみじみと実感しています。

And so I am now soaking up the happiness of the last three years of the Corona Disaster, when I did not have a drinking party.

私:「そして、世界は『飲み会』を諦める ―― アフターコロナでも」