2021/01,江端さんの忘備録

(昨日の続きです)

(Continuation from yesterday)

それはさておき。

Aside from that.

私(たち?)は、今回の『愚か者として描かれた米国大統領』のおかげで、米国の政治システムを深く知ることができました。

I (we?) thanks to "The U.S. President Portrayed as a stupid", I was able to learn more about the U.S. political system.

特に、米国の二大政党である民主党と共和党について、その違いだけでなく、その政党の支持者の「生々しい顔」を見ることもできました。

In particular, I was able to see not only the differences between the two major political parties in the U.S., the Democratic Party and the Republican Party, but also the "real faces" of the supporters of those parties.

同時に、私は、「自分自身にいい聞かせておかなければならないことがある」とも思いました。

At the same time, I thought to myself, "There are things I need to tell myself.

それは、例えば、

For examples,

■イスラム過激派と、イスラム教の教えを、混同してはならないこと

- Do not confuse Islamic extremism with Islam.

あるいは、

or

■天皇陛下と、天皇制を、混同してはならないこと

- Do not confuse His Majesty the Emperor with the emperor system.

と同様に、

■現職大統領の人格と、米国大統領制度を、混同してはならないこと

- Do not confuse the personality of the current president with the U.S. presidential system.

であり、なにより、

and above all,

■米国共和党の党員と、連邦議会議事堂を襲撃したデモ参加者を、混同してはならないこと

- Do not confuse members of the U.S. Republican Party with the protesters who attacked the U.S. Capitol.

です。

この混同によって、私も含めた多くの人が、政治やマスコミの情宣に「つけこまれやすい」ことを知っているからです。

I know that this confusion makes it easy for many people, including myself, to be "taken advantage of" by political and media sentiments.

私、経験者です。

I'm experienced.

「混同する側」としてだけでなく、「混同される側」としても、です。

not only as a "confuser" but also as a "confused".

-----

ところで ―― 我が国でも「国会襲撃事件」があったのをご存知ですか?

By the way -- did you know that there was an attack on the Diet building in Japan?

日米安全保障条約調印阻止闘争、いわゆる、安保闘争です。

It was the struggle to prevent the signing of the Japan-U.S. Security Treaty, the so-called Security Treaty Struggle.

1959年11月27日、全国で200万人がデモや集会に参加し、全学連主流派を中心とした国会襲撃事件が起こりました。

On November 27, 1959, two million people participated in demonstrations and rallies across the country, and the attacj on the Diet took place, led by the mainstream faction of the All-Japan Federation of Student Self-Government Associations.

ここで私が問題としているのは、

The problem I have here is that my feeling of

―― 「国会襲撃」ではなく、「国会突入」という言葉を使いたい

"I want not to use the term "attack on the Diet" but "rush on the Diet."

という、私の気持ちです。

もちろん、当時は、政府与党は勿論、日本共産党すらも、彼らを『左翼暴力集団』とテッレルを貼って、非難(蔑視)していました。

Of course, at that time, not only the ruling party but even the Japanese Communist Party condemned (scorned) them, labeling them as a "leftist violent group.

つまり、私は、当時の全共闘(学生を中心とした反安保運動)について比較的良く知っていて(まだ、生まれていませんが)、国会突入した当時の学生達に「共感」できるのです。

That is to say, I know relatively well (though I was not born yet) about the Zenkyoto (student-centered anti-Apartheid movement) of that time, and I can sympathize with the students of that time who rushed into the Diet.

-----

つまり、私は、「全共闘の国会突入」には共感して、「連邦議会議事堂を襲撃したデモ参加者」を非難しているのです。

In other words, I sympathize with the "students who rushed into the parliament" and condemn the "protesters who attacked the U.S. Capitol".

この両者に違いはあるのでしょうか?

Is there a difference between the two?

もちろん、あるでしょう。

Of course there is.

それでも、私の「エンジニアリングアプローチ」の視点から見れば ―― 私は、自分がとても「不公平な人間である」と感じてしまうのです。

Still, from the perspective of my "engineering approach" -- I feel that I am being very "unfair".

未分類

/etc/apt/apt.confに

1
2
3
Acquire::http::Proxy "http://proxy server : port 番号";
Acquire::https::Proxy "https://proxy server : port 番号";
Acquire::ftp::Proxy "ftp://proxy server : port 番号";

を追記してみたら、apt-get update できるようになった。pingなどは通る。

curl http://sample.com では、コマンドも戻ってこない。

 

明日は、

(1)シェルを変えてみる。

1
2
3
export http="http://proxy server : port 番号"
export https="https://proxy server : port 番号"
export ftp="ftp://proxy server : port 番号
1
printenv | grep -i proxy

/etc/apt/sources.listの内容を確認する

 

https://qiita.com/tkyonezu/items/0f6da57eb2d823d2611d から

3. スクリプトでのインストール

+ sh -c
echo
"deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial edge"
> /etc/apt/sources.list.d/docker.list

 

https://askubuntu.com/questions/1230189/how-to-install-docker-community-on-ubuntu-20-04-lts

2021/01,江端さんの技術メモ

// simple_csv_1_socket.go
// 2021/01/14
// 対向サーバは、server22-1.go(変更なしで使えた)
// simple_cvs.go の場合、数万のエージェント全部とwebsocket通信することになるため、
// サーバとの通信用のソケットを1つに限定して、この問題を回避した。
// ただエージェントは、従来通り、全部の数(数万から十万くらい?)作成したがそれでも。動いている。
// golang まじ凄い
// 変更点は、mainルーチンで、エージェント用のソケットを作って、goroutineでエージェント用のスレッド作る時に、それを渡している点
// あと通信は、送信→受信で1セットになるように、ミューテックスロックで競合回避を行った点(まあ通信が混乱するのを回避するため)
// 普通なら、これで相当の実行速度の低下が発生するはずなんだけど、体感的には遅くなかった。
// 現状の問題点は、chromoの方が先に落ちる、ということかな。まあ、数万のオブジェクトを1秒以内に動かされたら、chromoも文句の一つも言いたかろう。
// この問題は、メモリが潤沢に搭載されているPCでなら回避できるような気がするので、当面は放置することにする
// simple_csv_1_socket.go

// 2021/01/14
// simple_cvs.go の場合、数万のエージェント全部とwebsocket通信することになるため、
// サーバとの通信用のソケットを1つに限定して、この問題を回避した。
// ただエージェントは、従来通り、全部の数(数万から十万くらい?)作成したがそれでも。動いている。
// golang まじ凄い
// 変更点は、mainルーチンで、エージェント用のソケットを作って、goroutineでエージェント用のスレッド作る時に、それを渡している点
// あと通信は、送信→受信で1セットになるように、ミューテックスロックで競合回避を行った点(まあ通信が混乱するのを回避するため)
// 普通なら、これで相当の実行速度の低下が発生するはずなんだけど、体感的には遅くなかった。
// 現状の問題点は、chromoの方が先に落ちる、ということかな。まあ、数万のオブジェクトを1秒以内に動かされたら、chromoも文句の一つも言いたかろう。
// この問題は、メモリが潤沢に搭載されているPCでなら回避できるような気がするので、当面は放置することにする

package main

import (
	"encoding/csv"
	"flag"
	"fmt"
	"log"
	"math"
	"net/url"
	"os"
	"strconv"
	"sync"
	"time"

	"github.com/gorilla/websocket"
)

// GetLoc GetLoc
type GetLoc struct {
	ID  int     `json:"id"`
	Lat float64 `json:"lat"`
	Lng float64 `json:"lng"`
	//Address string  `json:"address"`
}

// 構造体の作り方
type unmTbl struct {
	uniName string // User Name: Example  6ca....
	objType string // "Bus" or "User"
	simNum  int
	pmNum   int
	lon     float64
	lat     float64
}

var list = make([]unmTbl, 0)                                           // 構造体の動的リスト宣言
var addr = flag.String("addr", "0.0.0.0:8080", "http service address") // テスト

func main() {
	file, err := os.Open("1.csv")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	var wg sync.WaitGroup

	reader := csv.NewReader(file)
	var line []string

	// サーバとのコネクションを1つに統一

	//var upgrader = websocket.Upgrader{} // use default options
	_ = websocket.Upgrader{} // use default options

	// rand.Seed(time.Now().UnixNano())

	flag.Parse()
	log.SetFlags(0)
	u := url.URL{Scheme: "ws", Host: *addr, Path: "/echo2"}
	//log.Printf("connecting to %s", u.String())

	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
	if err != nil {
		log.Fatal("dial:", err)
	}

	for {

		time.Sleep(time.Millisecond * 1) // 0.001秒休む

		line, err = reader.Read()
		if err != nil {
			break
		}

		uniName := line[0]
		//fmt.Printf("%s\n", uniName)

		objType := line[9]
		//fmt.Printf("%s\n", objType)

		lon, _ := strconv.ParseFloat(line[8], 64)
		//fmt.Printf("%f\n", lon)

		lat, _ := strconv.ParseFloat(line[7], 64)
		//fmt.Printf("%f\n", lat)

		// 特定範囲に限定する
		//if lon > 139.744330 && lon < 139.866586 && lat > 35.574777 && lat < 35.694479 {
		if lon > 139.7583407156985 && lon < 139.81403350119444 && lat > 35.62835195825786 && lat < 35.66678018870369 {

			flag := 0

			for i := range list {
				if i != 0 && list[i].uniName == uniName { // 同一IDを発見したら
					list[i].lon = lon // 新しい経度情報の更新
					list[i].lat = lat // 新しい緯度情報の更新

					flag = 1
					break
				}
			}

			uniNum := len(list)

			if flag == 0 { // 新しいIDを発見した場合
				wg.Add(1) // goルーチンを実行する関数分だけAddする
				go movingObject(uniNum, uniName, objType, lon, lat, &wg, c)
			}
		}

	}
}

var mutex sync.Mutex

func movingObject(uniNum int, uniName string, objType string, lon float64, lat float64, wg *sync.WaitGroup, c *websocket.Conn) {

	fmt.Printf("start movingObject\n")

	defer wg.Done() // WaitGroupを最後に完了しないといけない。

	defer c.Close()

	// リストを作る前にテストをする
	//fmt.Printf("%s\n", objType)
	//fmt.Printf("%d\n", uniNum)
	//fmt.Printf("%f\n", lon)
	//fmt.Printf("%f\n", lat)

	ut := unmTbl{} // 構造体変数の初期化
	ut.uniName = uniName
	ut.objType = objType
	ut.simNum = uniNum
	ut.lat = lat
	ut.lon = lon

	gl := new(GetLoc)
	gl.ID = 0
	gl.Lat = ut.lat
	gl.Lng = ut.lon

	mutex.Lock()           // 送受信時にミューテックスロックしないと
	err := c.WriteJSON(gl) // PruneMobile登録用送信
	if err != nil {
		log.Println("write1:", err)
	}

	gl2 := new(GetLoc) // PruneMobile登録確認用受信
	err = c.ReadJSON(gl2)
	mutex.Unlock()

	ut.pmNum = gl2.ID // PrumeMobileから提供される番号

	//fmt.Printf("ut.objType=%v\n", ut.objType)
	list = append(list, ut) // 構造体をリストに動的追加

	// ここからは更新用のループ
	for {
		time.Sleep(time.Millisecond * 100) // 0.1秒休む

		// 前回との座標に差が認められれば、移動させる
		if math.Abs(list[uniNum].lat-gl.Lat) > 0.000000001 || math.Abs(list[uniNum].lon-gl.Lng) > 0.000000001 {

			fmt.Print("MOVING!\n")
			gl.Lat = list[uniNum].lat
			gl.Lng = list[uniNum].lon
			gl.ID = gl2.ID

			// 座標の送信

			mutex.Lock()
			err = c.WriteJSON(gl)
			if err != nil {
				log.Println("write2:", err)
			}

			// 応答受信
			gl3 := new(GetLoc)
			err = c.ReadJSON(gl3)
			mutex.Unlock()

		}

	}

}

2021/01,江端さんの忘備録

(昨日の続きです)

(Continuation from yesterday)

私の知る限り、このような描かれ方は、「ゴルゴ13」では非常に珍しいのです。

As far as I know, this kind of depiction is very rare in "Golgo 13".

「ゴルゴ13」の中で登場する米国大統領は、社会通念上の正義に反することを行ったとしても、そのストーリーの中に、それなりの正当化されうるだけの理由があることになっています。

The U.S. presidents in "Golgo 13" have been supposed to have a justifiable reason in their story, even if they have to do something that is against socially accepted justice.

ところが、現職の米国大統領だけは、このような「知性」を感じさせる描写が見あたらないのです。

The current president of the United States, however, is the only one who has not been portrayed as having this kind of "intelligence.

粗野で、頭が悪く、自我をコントロールできない ―― はっきり言って「三下のギャング」と同程度の取り扱いをされているように感じました。

He is crude, dim-witted, and unable to control his ego -- to put it bluntly, I felt like he has been treated on par with a "low-life gangster".

私が、今回たまたま、そのようなストーリーを読んだだけかもしれません。

Maybe I just happened to read such a story this time.

それでも、私が知る限り『愚か者として描かれた米国大統領』の話を思い出すことができません。

Still, as far as I know, I can't recall a story about a 'US President portrayed as a stupid'.

-----

「ゴルゴ13」は、連載期間50年間、シリーズ総発行部数は2億8000万部という、我が国で最も著名なコンテンツの一つです。

Golgo 13" is one of the most famous contents in Japan with 50 years of serialization and 280 million copies sold.

ここまで支持を受けてきた理由として、「ゴルゴ13」が、我が国の読者の想いや感情に、丁寧に寄り沿ってきたからだ、と思っています。

I believe that the reason why "Golgo 13" has received so much support is because it has carefully followed the thoughts and feelings of readers in our country.

ここから導かれる私の仮説は、

My hypothesis, derived from the above, is that

―― 「我が国の国民の現職米国大統領に対する評価」は、「ゴルゴ13の中で描かれている内容と同じ」

"Our people's assessment of the current U.S. president is about the same as that portrayed in Golgo 13.

です。

(続く)

(To be continued)

2021/01,江端さんの技術メモ

// simple_csv.go

package main

import (
	"encoding/csv"
	"flag"
	"fmt"
	"log"
	"math"
	"net/url"
	"os"
	"strconv"
	"sync"
	"time"

	"github.com/gorilla/websocket"
)

// GetLoc GetLoc
type GetLoc struct {
	ID  int     `json:"id"`
	Lat float64 `json:"lat"`
	Lng float64 `json:"lng"`
	//Address string  `json:"address"`
}

// 構造体の作り方
type unmTbl struct {
	uniName string // User Name: Example  6ca90e
	objType string // "Bus" or "User"
	simNum  int
	pmNum   int
	lon     float64
	lat     float64
}

var list = make([]unmTbl, 0)                                           // 構造体の動的リスト宣言
var addr = flag.String("addr", "0.0.0.0:8080", "http service address") // テスト

func main() {
	file, err := os.Open("1.csv")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	var wg sync.WaitGroup

	reader := csv.NewReader(file)
	var line []string

	for {

		time.Sleep(time.Millisecond * 1) // 0.001秒休む

		line, err = reader.Read()
		if err != nil {
			break
		}

		uniName := line[0]
		//fmt.Printf("%s\n", uniName)

		objType := line[9]
		//fmt.Printf("%s\n", objType)

		lon, _ := strconv.ParseFloat(line[8], 64)
		//fmt.Printf("%f\n", lon)

		lat, _ := strconv.ParseFloat(line[7], 64)
		//fmt.Printf("%f\n", lat)

		// 特定範囲に限定する
		//if lon > 139.744330 && lon < 139.866586 && lat > 35.574777 && lat < 35.694479 {
		if lon > 139.7583407156985 && lon < 139.81403350119444 && lat > 35.62835195825786 && lat < 35.66678018870369 {

			flag := 0

			for i := range list {
				if i != 0 && list[i].uniName == uniName { // 同一IDを発見したら
					list[i].lon = lon // 新しい経度情報の更新
					list[i].lat = lat // 新しい緯度情報の更新

					flag = 1
					break
				}
			}

			uniNum := len(list)

			if flag == 0 { // 新しいIDを発見した場合
				wg.Add(1) // goルーチンを実行する関数分だけAddする
				go movingObject(uniNum, uniName, objType, lon, lat, &wg)
			}
		}

	}
}

func movingObject(uniNum int, uniName string, objType string, lon float64, lat float64, wg *sync.WaitGroup) {

	fmt.Printf("start movingObject\n")

	defer wg.Done() // WaitGroupを最後に完了しないといけない。

	//var upgrader = websocket.Upgrader{} // use default options
	_ = websocket.Upgrader{} // use default options

	// rand.Seed(time.Now().UnixNano())

	flag.Parse()
	log.SetFlags(0)
	u := url.URL{Scheme: "ws", Host: *addr, Path: "/echo2"}
	//log.Printf("connecting to %s", u.String())

	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
	if err != nil {
		log.Fatal("dial:", err)
	}
	defer c.Close()

	ut := unmTbl{} // 構造体変数の初期化
	ut.uniName = uniName
	ut.objType = objType
	ut.simNum = uniNum
	ut.lat = lat
	ut.lon = lon

	gl := new(GetLoc)
	gl.ID = 0
	gl.Lat = ut.lat
	gl.Lng = ut.lon

	err = c.WriteJSON(gl) // PruneMobile登録用送信
	if err != nil {
		log.Println("write:", err)
	}

	gl2 := new(GetLoc) // PruneMobile登録確認用受信
	err = c.ReadJSON(gl2)

	ut.pmNum = gl2.ID // PrumeMobileから提供される番号

	//fmt.Printf("ut.objType=%v\n", ut.objType)
	list = append(list, ut) // 構造体をリストに動的追加

	// ここからは更新用のループ
	for {
		time.Sleep(time.Millisecond * 100) // 0.1秒休む

		// 前回との座標に差が認められれば、移動させる
		if math.Abs(list[uniNum].lat-gl.Lat) > 0.000000001 || math.Abs(list[uniNum].lon-gl.Lng) > 0.000000001 {

			fmt.Print("MOVING!\n")
			gl.Lat = list[uniNum].lat
			gl.Lng = list[uniNum].lon
			gl.ID = gl2.ID

			// 座標の送信
			err = c.WriteJSON(gl)
			if err != nil {
				log.Println("write:", err)
			}

			// 応答受信
			gl3 := new(GetLoc)
			err = c.ReadJSON(gl3)
		}

	}

}

2021/01,江端さんの忘備録

私、現在進行中の国際紛争についての知識は、ほぼ「ゴルゴ13」から習得しています。

I have acquired most of my knowledge about ongoing international conflicts from "Golgo 13".

もちろん、「ゴルゴ13」はフィクションストーリーですので、それらを全てを丸ごと信じることはできません。

Of course, "Golgo 13" is a fictional story, so I cannot believe them all in their entirety.

国際情勢の専門家から見れば、「ゴルゴ13」の描く国際舞台の裏表には、噴飯ものの内容もあると思います。

From the point of view of an expert on international affairs, some of the ins and outs of the international arena as depicted in "Golgo 13" are frothing at the mouth.

加えて、私個人は、国際情勢を正しく判断するだけの、情報や人脈、そしてインテリジェンスがありません。

In addition, I personally do not have the information, connections, or intelligence to correctly judge the international situation.

-----

しかし、技術分野、その中でも、コンピュータ、ネットワーク、その他のIT分野に限って言えば、それらに実際に関わっている人間として、判断できることもあります。

However, when it comes to technical fields, especially computers, networks, and other IT fields, as an engineer who has actually been involved in these fields, I can make judgments.

「ゴルゴ13」には、科学技術の解釈について、正確ではない記載が散見されます。

There are a number of inaccurate descriptions of the interpretation of science and technology in the "Golgo 13" story.

しかし、私は、それらに目くじらを立てるようなことはしません。

But I am not going to be blindsided by them.

私たち、科学技術の世界の住人は、こういうことに慣れています。

We, the inhabitants of the world of science and technology, are used to this kind of thing.

むしろ逆に、『ああ、この技術は、世の中からは、こういう風に見えているんだ』ということを知る機会を得ていると言えます。

Rather, on the contrary, I can say that I am getting an opportunity to know, 'Oh, this is how the world sees this technology.

-----

「ゴルゴ13」というのは、基本的には、「良い奴」と「悪い奴」と「愚かな奴」を分けて、その3人を対立構造で描くストーリとして構成されています。

Golgo 13 is basically a story that divides the good guys, the bad guys, and the stupid guys, and portrays the three of them in an opposing structure.

ここで「良い」「悪い」「愚か」というのは、社会通念上の「正義」「悪」「無知」とは違うものです。

Here, "good", "bad", and "stupid" are different from the socially accepted "righteous", "evil", and "ignorant".

ストーリーの中での「善意の者」と「悪意の者」と、そして「愚かな者」というスタイルで描かれます。

In the story, it is depicted in the style of "the benevolent", "the malevolent", and "the foolish".

「良い奴」は「善人顔」で描かれていて、「悪い奴」は「悪人顔」で描かれていて、「愚かな奴」は「愚かな顔」で描かれていますので、すぐに判断することができます。

The "good guys" are depicted with a "good face," the "bad guys" with a "bad face," and the "stupid guys" with a "stupid face," so I can easily judge them.

-----

で、先日、コンビニで「ゴルゴ13」の新刊にざっと目を通していたのですが、ちょっとした違和感を感じました。

So, the other day, I was skimming through the new issue of "Golgo 13" at a convenience store, and I felt something strange.

―― 現時点の現職の米国大統領が「愚かな奴」として描かれている

"The current sitting President of the United States is portrayed as a 'stupid guy'"

(続く)

(To be continued)

2021/01,江端さんの技術メモ

以下、上記記事のコピペ

Create new file をクリックして、ファイル名を path/to/.gitkeep という名前で作成します
(例えば、testsというディレクトリが必要であれば、"tests/.gitkeep"で作成できる)
すると、スラッシュで区切られたところはファイル名ではなくディレクトリ名として扱われ、path/to ディレクトリ内に .gitkeep というファイルが作成されます。このとき path/to ディレクトリがまだ存在しない場合は新しく作成されますのでこれを利用しているというわけです。
なんでディレクトリの作成をしたいだけなのに、わざわざこんなファイルを作るのかといいますと、git では空のディレクトリを add することはできないためです。 まだディレクトリに入れるファイルが何も無い場合でも何かしら入れておかないと add して git での管理ができません。

2021/01,江端さんの忘備録

現在、私は、ビットコイン(正確にはブロックチェーン)をテーマに、連載を担当しています。

I am currently working on a series of articles on the topic of Bitcoin (Blockchain, to be precise).

この連載の第一回目で、私は『ビットコインの購入と利用の体験をする』と宣言しました。

In the first article of this series, I declared that I would 'experience the purchase and use of Bitcoin'.

この公約を果たすべく、先週の金曜日の深夜に、bitFlyerという仮想通貨取引所にアカウントの作る手続を実施しました。

In order to fulfill this commitment, I went through the process of creating an account with bitFlyer, a virtual currency exchange, late last Friday.

(このプロセスについては、後日の連載でご紹介します)。

(This process will be described in a later series of articles).

日曜日の夜に、メールで住所の記載ミスを指摘されて、現在、再提出中なのですが、その後、全く連絡が来ません。

On Sunday night, I received an email pointing out a mistake in my address, and I was in the process of resubmitting it, but I haven't heard from them at all since then.

―― アンチビットコイン派として、パージされたのかな?

"As an anti-Bitcoin group, have I been purged?"

などと邪推しています。

I'm guessing evil.

まあ、そんなことはないでしょうが。

Well, I don't think so.

-----

そんなこともあって、私、今週末、ビットコインの法定通貨との換金レートをずっと監視し続けていました。

That's why I, this weekend, kept monitoring the exchange rate of Bitcoin to legal tender.

なんだか、今、凄いことになっているようです。

It seems to be a big deal right now.

これを、言語化するのであれば

If you want to put this into words...

『観測史上最大級の台風の接近を、自宅の居間の窓から見ている』

"Watching the approach of one of the largest typhoons in recorded history from the window of my living room"

ような、感じです ―― 他人事のように。

As if it were someone else's problem.

2021/01,江端さんの技術メモ

// udp_sendto.go
// go run udp_sendto.go
// golangによるudpの送信"だけ"するプログラム

package main

import (
	"fmt"
	"math/rand"
	"net"
	"time"
)

func random(min, max float64) float64 {
	return rand.Float64()*(max-min) + min
}

type unmTbl struct {
	uniNum  int
	objType string // "Bus" or "User"
	simNum  int
	pmNum   int
	lon     float64
	lat     float64
}

func main() {
	conn, err := net.Dial("udp4", "localhost:12345")
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	// 初期化
	var ut [5]unmTbl
	for i, _ := range ut {
		ut[i].objType = "User"
		ut[i].uniNum = i
		ut[i].lat = 35.653976
		ut[i].lon = 139.796821
	}

	for {
		fmt.Println("Sending to server")
		for i, _ := range ut {
			ut[i].lat += random(0.5, -0.5) * 0.00001 * 10 * 5
			ut[i].lon += random(0.5, -0.5) * 0.00002 * 10 * 5

			str := ut[i].objType + "," + fmt.Sprint(ut[i].uniNum) + "," + fmt.Sprint(ut[i].lon) + "," + fmt.Sprint(ut[i].lat) + ","

			fmt.Println(str)

			_, err = conn.Write([]byte(str))
			if err != nil {
				panic(err)
			}
			time.Sleep(3 * time.Second) // 1秒休む

		}

	}

}

// udp_recvfrom.go
// go run udp_recvfrom.go
// golangによるudpの受信"だけ"するプログラム

package main

import (
	"fmt"
	"net"
)

func main() {
	addr, _ := net.ResolveUDPAddr("udp", ":12345")
	sock, _ := net.ListenUDP("udp", addr)

	i := 0
	for {
		i++
		buf := make([]byte, 1024)
		rlen, _, err := sock.ReadFromUDP(buf)
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(string(buf[0:rlen]))
		//fmt.Println(i)
		//go handlePacket(buf, rlen)
	}
}

2021/01,江端さんの忘備録

新型コロナウイルスの「集団免疫獲得」戦略は成立しません。

The "herd immunity" strategy for the new coronavirus does not hold.

これは、すでに「轢断のシバタ」先生にご解説して頂いております。

This has already been explained by Dr. Shibata of the "Run Over"

小学生でも分かる方法で理解可能です(台形の面積を導けるのであれば)。

Even elementary school students can understand it (if you can calculate the area of the trapezoid).

----

上記のコラムに記載していますが、「集団免疫獲得」戦略を成立させる為には、

As mentioned in the column above, in order to establish a "herd immunity acquisition" strategy,

―― 毎年196万人以上の感染が必要

"More than 1.96 million people need to be infected every year"

です。

これは、政府が、積極的かつ計画的に感染を広げていなかければ成立しない数値です。

This is a number that cannot be achieved unless the government actively and systematically spreads the infection.

-----

本日までの我が国の新型コロナ感染者数は28.9万人で、死亡者は3850人です。

As of today, the number of people infected with the new coronavirus in Japan is 289,000, and the death toll is 3,850.

この数値を単純に、そのまま当てはめれば、「集団免疫獲得」戦略を成立させる為には、

If this number is simply applied as it is, in order to establish a "herd immunity acquisition" strategy,

―― 年間、2万6110人の死亡者

"26,110 deaths annually"

を前提としなければなりません。

will be needed.

さらに、この「集団免疫獲得」戦略は、中断が許されません。

Moreover, this "herd immunity" strategy is uninterrupted.

これから毎年確実に、196万人に感染して貰って、毎年、2万6110人に死んで貰わなればなりません。

From now on, we must ensure that 1.96 million people are infected every year and 26,110 people die every year.

-----

寿命死亡以外の死亡数について、私の頭の中に書き込まれている数値は、交通事故死亡者4000人/年、自殺者2万人/年です。

Regarding the number of deaths other than lifespan deaths, the numbers written in my head are 4,000 traffic fatalities / year and 20,000 suicides / year.

『この合計とほぼ同数じゃないか』と考える方は、「集団免疫獲得」戦略を主張しても良いでしょう。

Those who think that "the number is about the same as this total" may insist on a "herd immunity acquisition" strategy.

ただ、

However, they must remember

(1)新型コロナとの闘病は(闘病後も)猛烈な苦痛を伴うことと、

(1) The fight against the new corona is extremely painful (even after the fight), and

(2)ウイルスが開発されれば、「集団免疫獲得」戦略で死んでいった人は、「ただ無駄に死んだ」だけ、ということ

(2) If a virus is developed, the only person who died in the "herd immunity acquisition" strategy is "just dead in vain".

は、覚えておいて下さい。

-----

それでも、「集団免疫獲得」戦略を主張する方は、御自由にどうぞ。

Feel free to insist on a "herd immunity" strategy, even if if you know the above facts.