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.

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

江端家でも、新型コロナウイルスの家庭内感染には注意するようにしていますが、それでもやはり限界を感じます。

In the Ebata family, we try to be careful about household infection with the new coronavirus, but I still feel that there is a limit to what we can do.

家族で会話をしない訳にはいかないし、家の中で始終マスクをしているというのも難しいです。

We can't avoid talking to each other as a family, and it's difficult to wear a mask all the time in the house.

という訳で、現在、政府が「飲食時の会話を集中的に注力する」という方針と同じように、江端家もメインの対策は「飲食時」になっています。

So, just like the government's current policy to focus intensively on conversations during eating and drinking, the Ebata family has also concentrate the time of "eating and drinking".

-----

『医療崩壊直前の今』と言われていますが、『医療崩壊後の今』とは、言われていません。

It's been called "the time just before the collapse of healthcare", but not "the time after the collapse of healthcare".

やっぱり、『医療崩壊』を最初に宣言するのは、誰であっても嫌なのだろうな、と思います。

After all, I guess anyone would not want to be the first to declare the 'collapse of healthcare'.

それは、ギリシャの経済危機に乱発された言葉『デフォルト』と同じ意味だから ―― と思っています。

I think that it is the same meaning as the word "default," which was wildly used during the Greek economic crisis.

『デフォルト』とは、「国家が借金の支払い放り投げる」ということで、つまるところ「国家が国債による支払いをしないと宣言する」ことです。

"Default" means "a nation throws away its debt payments". In other words, "a nation declares that it will not make payments on its bonds".

これに準ずるとすれば、『医療崩壊』とは、「医療による人命救助ができない」ということで ―― なるほど、こんな事実は誰も受け入れたくなく、そして宣言したくないでしょう。

If we were to conform to this (default), 'medical collapse' would mean 'medical inability to save lives'. Well, no one would want to accept and declare such a fact.

だから、いつまでも『医療崩壊直前』という言葉が発せられ続いているんだろうなぁ、と思っています。

I think that is why the phrase "just before the collapse of healthcare" is still being used.

-----

江端:「とにかく、今はしのげ! 家庭内感染は避けられないかもしれないが、『今』はなんとか逃れろ! 来月か再来月なら、余裕をもって治療して貰える可能性がある!!」

Ebata: "Anyway, just keep enduring for now! Household infections may be inevitable, but for now, we've got to get away! If it's next month or the month after that, there's a chance we'll have enough time to get medic!"

というと、次女に思わぬ事を言われました。

When I said that, my junior daughter told me something I didn't expect.

次女:「あのね、私たち(ティーンエイジャ)は、自分たちの感染なんて、ほとんど恐れていないよ」

Junior: "You know, we (teenagers) are hardly afraid of our own infection.

江端:「・・・え?」

Ebata: "...What?"

次女:「私たちは、感染しても、自覚症状がないか、あるいは普通の風邪程度の症状で収まることは、もう分かっているからね」

Junior: "We already know that even if we are infected, we will either have no symptoms or we will be symptoms of a common cold"

江端:「・・・」

Ebata: "..."

次女:「私たちが、普段の日常で話題としていることは、『親に感染させない』『親を殺さない』―― これだけだよ」

Junior: "What we usually talk about is 'not infecting our parents' and 'not killing our parents' - that's all"

-----

つまり、

In short,

―― お前たち(親、高齢者)は、人(子どもたち)の感染を心配している場合か?

"Do you (parents, elderly) have time to worry about infecting others (children)?"

―― 私たち(子ども)から感染を受けないように、お前たち(親、高齢者)が自力で防衛対策を執れ

"You (parents, elderly) should come up with your own defense measures so that you don't get infected from us (children)."

ということのようです。

-----

「被保護者」から「保護者」が心配されている、という奇妙な(人類史上にも稀な)社会現象が、今、進行中です。

There is a strange (and rare in the history of mankind) social phenomenon going on right now, where the "protected" are worried about the "guardians".

今、子どもたちから心配されているのは、私たち(中年と高齢者)なのです。

It is us (the middle-aged and elderly) who are worried about children, now.