2023,江端さんの忘備録

本日、家族でアイスクリームを食べていた時のことです。

When I was eating ice cream with my family today,

娘から、

my daughter said

『ジャニーズに、自分の子どもを入所させた親たち』

"Parents who have enrolled their children at Janny's."

という観点を提示されて ―― 衝撃を受けました。

I was presented with the perspective that -- I was shocked.

はじめて、この事件を『自分の視点から見えた』と思えました。

I could 'see' the case from my view for the first time.

-----

もちろん、この事件は「ジャニーズなんとか」という名前の、運よく鬼籍に入って逃げ切った、鬼畜の所業です。

Of course, this case is the work of a demon named "Johnny's Something," who was lucky enough to get away with his death.

被害者、そして被害者の保護者に、1mmの過誤も瑕疵もありません。

There was not a single millimeter of error or defect on the victim's or guardian's part.

ですが、被害者当人はもちろんですが、その親たちの、悔しさ、悲しさ、そして、その怒りは、私には想像もできません。

However, I cannot imagine the parents' frustration, sadness, and anger, not to mention the victims themselves.

もし、嫁や娘が、こんな形で陵辱されたら ―― 多分、私は『私を止めない』。

If my wife or daughter were to be humiliated this way -- maybe I wouldn't 'stop me.'

-----

この本の中に、古代中国、春秋時代の呉の政治家であり軍人でもあった、伍子胥の話が出てきます。

In this book, there is a story about Corporal Castle, a politician and soldier of the Wu Dynasty in ancient China during the Spring and Autumn period.

彼は、父と兄が楚の平王によって処刑されたため、楚を逃れて呉に亡命しました。

He fled Chuxing and went into exile in Wu after his father and brother were executed by King Ping of Chuxing.

そして、16年後、呉の将軍となった伍子胥は、楚の都郢を陥落させました(紀元前506年)。

Sixteen years later, Corporal Castle, now a general of Wu, fell the capital city of Chu (506 B.C.).

平王は既に死んでいたので伍子胥は王墓を暴き、平王の死体を300回に及び鞭打って恨みを晴らした ―― これが、「死者に鞭打つ(死屍に鞭むちうつ)」の語源になっています。

Since Ping Wang was already dead, Corporal Castle uncovered the royal tomb and whipped Ping Wang's corpse 300 times to settle his grudge -- this is the origin of the phrase "whipping the dead."

-----

同じようなことが、今の我が国で起こったとしても、私は驚きません。

I would not be surprised if something similar happened in our country today.

―― 驚くことに、あの学校は組織的な"ジャニーズ(児童性虐待)"をしていました。

2023,江端さんの忘備録

本当に一所懸命やっているんだけど、法律で定められている時間内では、仕事の量と質から考えても絶対に間に合わない ――

I am working hard, but I will never make it within the legal time frame, given the quantity and quality of the work I have to do.

これって、誰のせい?

Whose fault is this?

私(の無能)のせい?

Is it my (incompetence) fault?

-----

10年前、30年前、そして、有史以来、人類がずっと問い続けてきたことを、リタイアをスコープに入ってきている今でさえ、自分の問題として、自問していることに腹が立ちます。

I am angry that even now, as I am scoping my retirement, I am asking myself the same question humanity has been asking since ten years ago, 30 years ago, and since the beginning of time, as my problem.

もしかしたら、『人間って、本質的にバカなの?』と思ってしまいます。

Perhaps, 'Are humans inherently stupid?' I think.

太陽にブラックホールが突っ込んでくる日が、明日やって来たとしても、今の私は歓迎します(by さよならジュピター(故小松左京先生))。

Even if the day when a black hole crashes into the sun comes tomorrow, I would welcome it now (by Byebye Jupiter (the late Sakyo Komatsu)).

さよならジュピター

2023,江端さんの忘備録

今日、丸一日かけて苦労して実装したプログラムが

Today, after a full day of hard work, the program that I implemented,

- 予想通りに、動いたのだけど、

- As expected, it worked,

- 予想通りのパフォーマンスを発揮しませんでした。

- It did not perform as expected.

残念ながら、この実装は却下になりました。

Unfortunately, I have had to dismiss the implementation.

時間のない中での、こういう一日は ―― 本当に痛い。

In the absence of time, a day like this really hurts.

2023,江端さんの技術メモ

Go言語で、redisを使って2つの型の異なるデータをブロードキャストしている場合、その受信している部分を1つのswitchで受けとるにはどうしたら良いですか

を、異なるエージェントで、異なるメッセージを受信できるか試してみた件。

 

// C:\Users\ebata\tomioka3B\src\others\main28.go
// 2つのクロック(goroutine)を用意して、異なるエージェントで受けとれるかどうかの実験

package main

import (
	"encoding/json"
	"fmt"
	"sync"
	"time"

	"github.com/gomodule/redigo/redis"
)


type Clock_Info struct {
	VirtualTime time.Time
	RealTime    time.Time
}

type SubClockInfo_2 struct {
    // 異なるデータ型のフィールドをここに追加
    SomeField string
    AnotherField int
}

func BaseClock() {

	// 接続
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	// スタート時刻を指定
	startTime := time.Date(2023, 10, 1, 7, 0, 0, 0, time.UTC)

	// 1秒値を保持する変数
	seconds := 0

	var ci Clock_Info

	// ループを開始
	for {
		// 現在の時刻を計算
		ci.VirtualTime = startTime.Add(time.Duration(seconds) * time.Second)
		ci.RealTime = time.Now()

		// 現在の時刻を表示
		// fmt.Println("シミュレータの時刻:", ci.VirtualTime.Format("2006/01/02 15:04:05"))
		// fmt.Println("現在の時刻:", ci.RealTime.Format("2006/01/02 15:04:05")) // "2006/01/02 15:04:05"はフォーマットの形を真似るもので、内容に意味なし

		// パブリッシュ
		json_ci, _ := json.Marshal(ci)
		r, err := redis.Int(conn.Do("PUBLISH", "ClockInfo_1", json_ci))
		if err != nil {
			panic(err)
		}
		fmt.Println(r)

		// 5秒待つ (実際は、0.05秒くらいだが、確認用に長くしている)
		time.Sleep(5000 * time.Millisecond)

		// 1秒値を増加させる
		seconds++
	}
}


func SubClock() {  // 実験用に追加(時間ではなく、単なる文字列と数値を送り込むだけ)

	// 接続
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		panic(err)
	}
	defer conn.Close()


	// 1秒値を保持する変数
	seconds := 0

	var sci2 SubClockInfo_2

	// ループを開始
	for {
		// 現在の時刻を計算
		sci2.SomeField = "ebata is great"
    	sci2.AnotherField = seconds

		// パブリッシュ
		json_sci2, _ := json.Marshal(sci2)
		r, err := redis.Int(conn.Do("PUBLISH", "SubClockInfo_2", json_sci2))
		if err != nil {
			panic(err)
		}
		fmt.Println(r)

		// 7秒待つ (実際は、0.05秒くらいだが、確認用に長くしている)
		time.Sleep(7000 * time.Millisecond)

		// 1秒値を増加させる
		seconds += 1 
	}
}



func person_1(person_num int, wg *sync.WaitGroup) {
	defer wg.Done()
	// 接続
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		panic(err)

	}
	defer conn.Close()

	psc := redis.PubSubConn{Conn: conn}
	psc.Subscribe("ClockInfo_1") // 2つに増やした

	for {	
		switch v := psc.Receive().(type) { // redisのメッセージを受けとると、ここでロックが外れる

		case redis.Message:

			switch v.Channel{

			case "ClockInfo_1":  // ブロードキャスト"ClockInfo_1"のメッセージは、こっちでキャッチ
				ci := new(Clock_Info) 
        		_ = json.Unmarshal(v.Data, &ci)
        		fmt.Println("Person_1:", person_num, "VirtualTime (ClockInfo_1):", ci.VirtualTime)

			case "SubClockInfo_2": // ブロードキャスト"SubClockInfo_2"のメッセージは、こっちでキャッチ
        		subClockData := new(SubClockInfo_2)
        		_ = json.Unmarshal(v.Data, &subClockData)
        		fmt.Println("Person_1:", person_num, "SomeField (SubClockInfo_2):", subClockData.SomeField)
         		fmt.Println("Person_1:", person_num, "AnotherField (SubClockInfo_2):", subClockData.AnotherField)


    	}
		
		case redis.Subscription:
			fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)

		case error:
			return
		}
	}

}

func person_2(person_num int, wg *sync.WaitGroup) {
	defer wg.Done()
	// 接続
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		panic(err)

	}
	defer conn.Close()

	psc := redis.PubSubConn{Conn: conn}
	psc.Subscribe("SubClockInfo_2") // 2つに増やした

	for {	
		switch v := psc.Receive().(type) { // redisのメッセージを受けとると、ここでロックが外れる

		case redis.Message:

			switch v.Channel{


			case "ClockInfo_1":  // ブロードキャスト"ClockInfo_1"のメッセージは、こっちでキャッチ
				ci := new(Clock_Info) 
        		_ = json.Unmarshal(v.Data, &ci)
        		fmt.Println("Person_2:", person_num, "VirtualTime (ClockInfo_1):", ci.VirtualTime)

			case "SubClockInfo_2": // ブロードキャスト"SubClockInfo_2"のメッセージは、こっちでキャッチ
        		subClockData := new(SubClockInfo_2)
        		_ = json.Unmarshal(v.Data, &subClockData)
        		fmt.Println("Person_2:", person_num, "SomeField (SubClockInfo_2):", subClockData.SomeField)
         		fmt.Println("Person_2:", person_num, "AnotherField (SubClockInfo_2):", subClockData.AnotherField)
    	}
		
		case redis.Subscription:
			fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)

		case error:
			return
		}
	}

}


func main() {

	wg := sync.WaitGroup{}

	//wg.Add(1)
	//go BaseClock(&wg)
	go BaseClock()
	go SubClock()

	for i := 0; i < 5; i++ { // 5人
		wg.Add(1)
		go person_1(i, &wg)
	}

	for i := 0; i < 5; i++ { // 5人
		wg.Add(1)
		go person_2(i, &wg)
	}


	wg.Wait()
	fmt.Println("end of ... main()")
}

ちゃんと動くみたいです。

2023,江端さんの技術メモ

"SubClockInfo_2" チャンネルから受信したデータを処理するために、新しい構造体を定義します。異なるデータ型に合わせて構造体を定義し、Unmarshal でデータを解析します。

"SubClockInfo_2" チャンネルからのメッセージを受け取るために、person 関数内の switch ステートメントを更新します。具体的には、"SubClockInfo_2" チャンネルのデータ型に合わせて処理を分岐させます。

このようにすることで、"SubClockInfo_2" チャンネルから異なる型のデータを受信し、それに応じた処理を行うことができます。異なるデータ型ごとに適切な構造体を用意し、Unmarshal でデータを解析しましょう。

// C:\Users\ebata\tomioka3B\src\others\main27.go
// 2つのクロック(goroutine)を用意して、一つのswitchで受けとれるかどうかの実験

package main

import (
	"encoding/json"
	"fmt"
	"sync"
	"time"

	"github.com/gomodule/redigo/redis"
)


type Clock_Info struct {
	VirtualTime time.Time
	RealTime    time.Time
}

type SubClockInfo_2 struct {
    // 異なるデータ型のフィールドをここに追加
    SomeField string
    AnotherField int
}

func BaseClock() {

	// 接続
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	// スタート時刻を指定
	startTime := time.Date(2023, 10, 1, 7, 0, 0, 0, time.UTC)

	// 1秒値を保持する変数
	seconds := 0

	var ci Clock_Info

	// ループを開始
	for {
		// 現在の時刻を計算
		ci.VirtualTime = startTime.Add(time.Duration(seconds) * time.Second)
		ci.RealTime = time.Now()

		// 現在の時刻を表示
		// fmt.Println("シミュレータの時刻:", ci.VirtualTime.Format("2006/01/02 15:04:05"))
		// fmt.Println("現在の時刻:", ci.RealTime.Format("2006/01/02 15:04:05")) // "2006/01/02 15:04:05"はフォーマットの形を真似るもので、内容に意味なし

		// パブリッシュ
		json_ci, _ := json.Marshal(ci)
		r, err := redis.Int(conn.Do("PUBLISH", "ClockInfo_1", json_ci))
		if err != nil {
			panic(err)
		}
		fmt.Println(r)

		// 5秒待つ (実際は、0.05秒くらいだが、確認用に長くしている)
		time.Sleep(5000 * time.Millisecond)

		// 1秒値を増加させる
		seconds++
	}
}


func SubClock() {  // 実験用に追加(時間ではなく、単なる文字列と数値を送り込むだけ)

	// 接続
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		panic(err)
	}
	defer conn.Close()


	// 1秒値を保持する変数
	seconds := 0

	var sci2 SubClockInfo_2

	// ループを開始
	for {
		// 現在の時刻を計算
		sci2.SomeField = "ebata is great"
    	sci2.AnotherField = seconds

		// パブリッシュ
		json_sci2, _ := json.Marshal(sci2)
		r, err := redis.Int(conn.Do("PUBLISH", "SubClockInfo_2", json_sci2))
		if err != nil {
			panic(err)
		}
		fmt.Println(r)

		// 7秒待つ (実際は、0.05秒くらいだが、確認用に長くしている)
		time.Sleep(7000 * time.Millisecond)

		// 1秒値を増加させる
		seconds += 1 
	}
}




func person(person_num int, wg *sync.WaitGroup) {
	defer wg.Done()
	// 接続
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	psc := redis.PubSubConn{Conn: conn}
	psc.Subscribe("ClockInfo_1", "SubClockInfo_2") // 2つに増やした

	for {	
		switch v := psc.Receive().(type) { // redisのメッセージを受けとると、ここでロックが外れる

		case redis.Message:

			switch v.Channel{

			case "ClockInfo_1":  // ブロードキャスト"ClockInfo_1"のメッセージは、こっちでキャッチ
				ci := new(Clock_Info) 
        		_ = json.Unmarshal(v.Data, &ci)
        		fmt.Println("Person:", person_num, "VirtualTime (ClockInfo_1):", ci.VirtualTime)

			case "SubClockInfo_2": // ブロードキャスト"SubClockInfo_2"のメッセージは、こっちでキャッチ
        		subClockData := new(SubClockInfo_2)
        		_ = json.Unmarshal(v.Data, &subClockData)
        		fmt.Println("Person:", person_num, "SomeField (SubClockInfo_2):", subClockData.SomeField)
         		fmt.Println("Person:", person_num, "AnotherField (SubClockInfo_2):", subClockData.AnotherField)
    	}
		
		case redis.Subscription:
			fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)

		case error:
			return
		}
	}

	/*
	for {
		ci := new(Clock_Info)
		switch v := psc.Receive().(type) {
		case redis.Message:
			_ = json.Unmarshal(v.Data, &ci)
			fmt.Println("Person:", person_num, "VirtualTime:", ci.VirtualTime)
			//fmt.Println("Person:", person_num, "RealTime:", ci.RealTime)

		case redis.Subscription:
			fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)

		case error:
			return
		}
	}
	*/

}

func main() {

	wg := sync.WaitGroup{}

	//wg.Add(1)
	//go BaseClock(&wg)
	go BaseClock()
	go SubClock()

	for i := 0; i < 5; i++ { // 5人
		wg.Add(1)
		go person(i, &wg)
	}

	wg.Wait()
	fmt.Println("end of ... main()")
}

出力結果はこんな感じになり、期待した通りの動きをしているようです。

Person: 1 VirtualTime (ClockInfo_1): 2023-10-01 07:00:03 +0000 UTC
Person: 3 VirtualTime (ClockInfo_1): 2023-10-01 07:00:03 +0000 UTC
Person: 0 VirtualTime (ClockInfo_1): 2023-10-01 07:00:03 +0000 UTC
Person: 4 VirtualTime (ClockInfo_1): 2023-10-01 07:00:03 +0000 UTC
Person: 2 VirtualTime (ClockInfo_1): 2023-10-01 07:00:03 +0000 UTC
5
Person: 1 VirtualTime (ClockInfo_1): 2023-10-01 07:00:04 +0000 UTC
Person: 0 VirtualTime (ClockInfo_1): 2023-10-01 07:00:04 +0000 UTC
Person: 3 VirtualTime (ClockInfo_1): 2023-10-01 07:00:04 +0000 UTC
Person: 2 VirtualTime (ClockInfo_1): 2023-10-01 07:00:04 +0000 UTC
Person: 4 VirtualTime (ClockInfo_1): 2023-10-01 07:00:04 +0000 UTC
5
Person: 3 SomeField (SubClockInfo_2): ebata is great
Person: 3 AnotherField (SubClockInfo_2): 3
Person: 0 SomeField (SubClockInfo_2): ebata is great
Person: 0 AnotherField (SubClockInfo_2): 3
Person: 1 SomeField (SubClockInfo_2): ebata is great
Person: 1 AnotherField (SubClockInfo_2): 3
Person: 4 SomeField (SubClockInfo_2): ebata is great
Person: 4 AnotherField (SubClockInfo_2): 3
Person: 2 SomeField (SubClockInfo_2): ebata is great
Person: 2 AnotherField (SubClockInfo_2): 3
5
Person: 3 VirtualTime (ClockInfo_1): 2023-10-01 07:00:05 +0000 UTC
Person: 4 VirtualTime (ClockInfo_1): 2023-10-01 07:00:05 +0000 UTC
Person: 1 VirtualTime (ClockInfo_1): 2023-10-01 07:00:05 +0000 UTC
Person: 0 VirtualTime (ClockInfo_1): 2023-10-01 07:00:05 +0000 UTC
Person: 2 VirtualTime (ClockInfo_1): 2023-10-01 07:00:05 +0000 UTC
5
Person: 3 SomeField (SubClockInfo_2): ebata is great
Person: 3 AnotherField (SubClockInfo_2): 4
Person: 0 SomeField (SubClockInfo_2): ebata is great
Person: 4 SomeField (SubClockInfo_2): ebata is great
Person: 4 AnotherField (SubClockInfo_2): 4
Person: 1 SomeField (SubClockInfo_2): ebata is great
Person: 1 AnotherField (SubClockInfo_2): 4
Person: 0 AnotherField (SubClockInfo_2): 4
Person: 2 SomeField (SubClockInfo_2): ebata is great
Person: 2 AnotherField (SubClockInfo_2): 4
5

以上

2023,江端さんの忘備録

今年、大リーグで、日本人選手がホームラン王を獲得したことで、嫁さんがとても喜んでいます。

This year, a Japanese player won the home run king in the big leagues, which made my wife very happy.

嫁さんが喜んでいるのを見ると、私は幸せな気分になるので、私も一緒に喜んでいます。

Seeing my wife happy makes me happy, so I come to be pleased with her.

それに、日本や世界の人を幸せにしたことは、とても素晴しいことだと思っています。

Besides, I think it is wonderful that I have made people in Japan and worldwide happy.

子どもたちが、このようなヒーロに憧れを持つことも、大変良いことだと思っています。

I believe that it is also very good for children to have this kind of admiration for heroes.

本当です。

It is true.

-----

ただ、私は、自分の子どもであれば、

However, for my children,

こちらのアニメ(グラゼニ)も見せたい

I want to show them this anime (Grazeni) as well.

です。

今、YouTubeで無料配信しています。

The anime is now available for free on YouTube.

私は、子どもには、夢と現実のバランス感覚も持っていてもらいたいと思うのです。

I want my children to have a sense of balance between dreams and reality.

アイドルや芸人として喰っていける確率については、こちらのページとその次のページをご参照下さい。

For more information on the probability of making a living as an idol or comedian, please see this page and the following pages.

「夢」とは、結構な頻度で人生を潰しかねない「毒」にもなります。

"Dreams" can also be "poison" that can often destroy their lives.

そして、その現実を子どもに伝えるのは、大人の責務です。

And it is the responsibility of adults to communicate this reality to children.

『なぜ、本人の年齢や体力を配慮しない、ランナーの体を壊すようなことを"前提"とした走行計画を立案し、それを強行し、それを放映するのか』

2023,江端さんの忘備録

今も、抑うつに関して、調べ続けています。

I am continuing to research depression.

(1)他人の目を気にしない ―― しかし、そもそも、私、他人の目は気にしない方です。

(1) I don't care what other people think -- but to begin with, I don't care what others think.

(2)ジコチューになる ―― しかし、私は、文句なしの自己中心的な人間であると、他人から言われ、その自覚もあります。

(2) Self-centered -- However, others have told me that I am unquestionably self-centered and aware of it.

その他、運動をする、旅行にでる、ゆっくり休むなど、色々紹介されていますが、私については上手く行っていません。

Other things mentioned, such as exercise, travel, rest, etc., have not worked for me.

-----

ただ、私に関しては、

However, as for me, I feel that

■他人からの評価を気にする

"I care what others think of me."

というのは、当っている気がします。

is true.

無茶な量の仕事が来ている時でも、そうでない時でも、私は、精一杯やります ―― 私は、手の抜き方が下手です。

I do the best I can, even when an absurd amount of work is coming in, and even when it's not -- I'm not good at cutting corners.

しかし、無茶な量の仕事がきている時には、当然、その仕事のパフォーマンスが落ちます。

However, when an absurd amount of work is coming in, the performance of that work will naturally suffer.

パフォーマンスが落ちれば、仕事のアウトプットは質も量も悪くなります。

If performance declines, work output will be poor in quality and quantity.

となれば、他人から、江端は「無能」で「サボっている」と思われているかもしれません。

If this is the case, others may think Ebata is "incompetent" and "slacking off."

-----

しかし、私は、他人から『「無能」とか「サボっている」と思われているかもしれない』ことには、耐えられないのです。

However, I wouldn't say I like that others might think I am incompetent or slacking off.

特に、大嫌いな奴に関しては、

Especially when it comes to people I hate, I come to think that

『あいつにバカにされることだけは、どうしても我慢できない』

"I just can't stand it when he makes fun of me."

という気持ちになります。

-----

しかし、良く考えてみれば、この話は、上記(1)の「他人の目を気にしない」に含まれているような気がします。

However, on second thought, I think this story is included in (1) above, "not worrying about what others think."

そして、これは、私に外界の認識の誤認に基づいているような気がします。

And this seems to be based on a misperception of the external world.

間違いなく、肥大した自我による"被害妄想"です。

It is definitely "paranoia" caused by a bloated ego.

なぜなら、私を含め、私たちは、他人のことなんか、かなり「どーでもいい」はずですから。

Because we, including myself, should pretty much "not give a shit" about other people.

-----

上記から考えるに、私が乗り越えなければならない課題は、

From the above, the challenges I have to overcome are,

■自分が、他人から"無能"と思われる(かもしれない)ことを、気にしないこと

- Do not worry about what others think of me as "incompetent."

であり、さらに言えば、

and furthermore,

■自分は"無能"でいいし、そう評価されても構わない、と思えるようになること

- Come to think that it is okay to be "incompetent" and that it is okay to be evaluated as such.

かもしれない、と考え始めています。

I am beginning to believe that it might be.

-----

まあ、実際のところ、ここ十数年コラムを書き続けてきて、『自分の知らないことが、世の中には恐しい程ある』というということを、思い知っています。

After writing columns for over a decade, I have realized that "there is a frightening amount of things in the world that I don't know.

小さなこと一つのことを学ぶのに、膨大な量の本を読み、計算をし、考察をし、ロジックを組み立てなければならない、という事実に驚き続けてきました。

I have been continually amazed that to learn one small thing, one has to read vast amounts of books, do calculations considerations, and construct logic.

これらを鑑みるに、上記の考えを、さらにもう一歩進めて、

In light of the above, I think I should take the above picture one step further and raise our awareness to the level of

■人間は、誰もが"無能"であるので、誰もが他人に期待をしてはならない

"Everyone is "incompetent," so no one should expect anything from others.

というベレルまで、意識を高めるべきなのだろうな、と思っています。

-----

とまあ、ここまで論じた上で、以下のようにまとめるのも、どうかとも思うのですが、

And, well, after discussing this so far, I'm not sure if I can summarize it as follows,

結局のところ、私は

After all, the root of this problem lies in the fact that I can't get away from the thought,

『嫌いなヤツは、何をどうしようとも、嫌いである』

"I don't come to like someone I don't like."

という思考から離れられないところに、この問題の諸元があるんだろうなぁ、と思っています。

-----

一体、江端は何をしているんだ? と思われているかもしれません。

You may be thinking, "What in the world is Ebata doing?

実は、これ、抑うつの対応方の一つである「言語化」という作業の一つです。

This is one of the ways to deal with depression, a process called "verbalization."

『ITニグレクト』

2023,江端さんの忘備録

劣化した無線通信環境を作って実験する必要があったのですが、この「劣化した無線通信環境」というのが、なかなかに難しいのです。

It was necessary to experiment by creating a degraded wireless communication environment. However, this "degraded wireless communication environment" is quite tricky.

TCとかを使って、ちゃっちゃとやってしまえば簡単だと思うのですが、『自然な環境(?)』というのを試してみたいという意見もあり、今、ドタバタとやっています。

I think it would be easy to do it quickly using a TC, but some want to try a "natural environment(?)," and we are in the doldrums.

ジャンク箱に入っていたラズパイ3Bを引っ張り出して、速攻でネットワークエミュレータ(TC)を作ってみた件

終端装置を近い位置に置くと通信品質に差が出てこないし、遠い位置に置くと通信測定ソフト(iPerf3)が動かない。

If the terminating devices are close together, there is no difference in communication quality; if they are far apart, the communication measurement software (iPerf3) does not work.

色々試した結果、ベットマットレスや布団をを障害物につかうと、ギリギリ測定可能なレベルまで通信品質を落すことができることが分かりました。

After various trials, we found that using a bed mattress or futon as an obstacle could reduce the quality of communication to just barely measurable levels.

-----

ちなみに、アルミ箔やら、金属の箱を使って、通信中継装置や終端装置を包んだ実験では、

Incidentally, in an experiment using aluminum foil and metal boxes to wrap communication repeaters and terminating equipment,

―― 通信レベルが"改善"してしまいました

the communication level was "improved."

正直、頭を抱えました。

Frankly, I had my head in the sand.

-----

エンジニアではない多くの皆さんは、企業の実験は、潤沢な資金のある高度な装置を使ったテストをしていると思われているかもしれませんが ――

Many of you who are not engineers may think corporate testing is done with well-funded, sophisticated equipment, but

現場のテストのリアルなんて、こんなもんです。

the reality of field testing is like this.

2023,江端さんの技術メモ

[サーバ側] Windows10
https://iperf.fr/iperf-download.php#windows からダウンロード
インストールとかではなくて、バイナリが直接解凍される

[クライアント側] Ubuntu22.04
$ sudo apt install iperf3

使い方
[サーバ側] iperf3.exe -s
[クライアント側]iperf3.exe -c 192.168.11.167(サーバのIPアドレス等)


構成1

サーバ側の表示はこんな感じでした。

C:\Users\maoeb\iperf-3.1.3-win64>iperf3.exe -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.11.125, port 33940
[  5] local 192.168.11.167 port 5201 connected to 192.168.11.125 port 33946
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  8.85 MBytes  74.2 Mbits/sec
[  5]   1.00-2.00   sec  5.86 MBytes  49.0 Mbits/sec
[  5]   2.00-3.00   sec  4.79 MBytes  40.2 Mbits/sec
[  5]   3.00-4.01   sec  5.13 MBytes  42.9 Mbits/sec
[  5]   4.01-5.00   sec  5.10 MBytes  42.8 Mbits/sec
[  5]   5.00-6.00   sec  8.65 MBytes  72.8 Mbits/sec
[  5]   6.00-7.01   sec  5.84 MBytes  48.7 Mbits/sec
[  5]   7.01-8.00   sec  5.06 MBytes  42.6 Mbits/sec
[  5]   8.00-9.01   sec  5.25 MBytes  43.9 Mbits/sec
[  5]   9.01-10.00  sec  8.37 MBytes  70.6 Mbits/sec
[  5]  10.00-10.02  sec   194 KBytes  84.6 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.02  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.02  sec  63.1 MBytes  52.8 Mbits/sec                  receiver

構成2

C:\Users\maoeb\iperf-3.1.3-win64>iperf3.exe -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.15, port 39780
[  5] local 192.168.1.8 port 5201 connected to 192.168.1.15 port 39784
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  11.2 MBytes  94.2 Mbits/sec
[  5]   1.00-2.00   sec  10.9 MBytes  91.2 Mbits/sec
[  5]   2.00-3.00   sec  11.3 MBytes  94.9 Mbits/sec
[  5]   3.00-4.00   sec  11.3 MBytes  94.9 Mbits/sec
[  5]   4.00-5.00   sec  11.3 MBytes  94.9 Mbits/sec
[  5]   5.00-6.00   sec  11.3 MBytes  94.9 Mbits/sec
[  5]   6.00-7.00   sec  11.3 MBytes  94.9 Mbits/sec
[  5]   7.00-8.00   sec  11.3 MBytes  94.8 Mbits/sec
[  5]   8.00-9.00   sec  11.3 MBytes  94.9 Mbits/sec
[  5]   9.00-10.00  sec  11.3 MBytes  94.9 Mbits/sec
[  5]  10.00-10.01  sec  85.5 KBytes  89.1 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.01  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.01  sec   113 MBytes  94.5 Mbits/sec                  receiver

構成3

劣化通信環境を使う上での工夫

-----------------------------------------------------------
Accepted connection from 192.168.11.125, port 39260
[  5] local 192.168.11.167 port 5201 connected to 192.168.11.125 port 39270
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.01   sec  4.23 MBytes  35.0 Mbits/sec
[  5]   1.01-2.01   sec  3.69 MBytes  31.2 Mbits/sec
[  5]   2.01-3.00   sec  4.46 MBytes  37.4 Mbits/sec
[  5]   3.00-4.00   sec  4.41 MBytes  37.1 Mbits/sec
[  5]   4.00-5.00   sec  3.74 MBytes  31.4 Mbits/sec
[  5]   5.00-6.00   sec  4.13 MBytes  34.5 Mbits/sec
[  5]   6.00-7.00   sec  4.39 MBytes  36.9 Mbits/sec
[  5]   7.00-8.01   sec  4.14 MBytes  34.5 Mbits/sec
[  5]   8.01-9.00   sec  4.23 MBytes  35.7 Mbits/sec
[  5]   9.00-10.00  sec  5.12 MBytes  42.9 Mbits/sec
[  5]  10.00-10.02  sec   153 KBytes  74.3 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.02  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.02  sec  42.7 MBytes  35.7 Mbits/sec                  receiver


安定した、劣化環境を作るのは、これで、なかなか難しい。

2023,江端さんの忘備録

私、プロ野球の仕組みについては、全く知らないと言っても過言ではありません。

I am not exaggerating when I know nothing about how professional baseball works.

ドラフト会議というものが、『巨人一強』という弊害から作られた、という話を聞いたことがあるくらいです。

I have heard that the draft conference was created out of the evils of the "Giants' monopoly."

なんでも、読売ジャイアンツが1965年(昭和40年)から1973年(昭和48年)まで、9年間連続してプロ野球日本シリーズを制覇していたそうです。

The Yomiuri Giants won the Japan Series of professional baseball for nine consecutive years, from 1965 to 1973.

で、私は、小学生の頃、巨人ファンの友だちに、『読売ジャイアンツがいかに強かったか』という話を、うんざりするほど聞かされました。

So, when I was in elementary school, my friends who were Giants fans told me stories about how strong the Yomiuri Giants were to the point that I was sick and tired of hearing them.

「選手が『監督。今日はどうしますか?』と尋ねると、巨人の監督が『うん。今日は勝て』と言った」

"When The players asked the Director, 'Director, what do you want to do today?' he said, 'Win today's game.'"

と、自慢気に語ってきました。

He bragged about it.

ただ、この話、現時点で裏が取れていません。ただ、私は、この話を、複数の人間から聞いたような気がします。

I have not been able to corroborate this story at this time. However, I think I have heard this story from more than one person.

-----

当時の私は、子ども心に『こんな醜悪は話は聞いたことがない』と、思いました。

At the time, I thought to myself as a child, 'I have never heard such an ugly story.'

当時の読売ジャイアンツが、その財力と人気によって、優秀な選手を集めて、プロ野球とゲームを一方的に支配していた、ということだからです。

This means that the Yomiuri Giants at that time attracted the best players and unilaterally dominated professional baseball through their financial power and popularity.

―― なんで、彼(友だち)はこんな話で、自慢ができるんだ? むしろ"醜聞"として隠すべきストーリだろう?

"How can he (my friend) brag about such a story? Isn't it instead an "ugly story" that should be hidden ?"

と、思ったものです。

I thought.

大相撲の八百長試合と同じことです。

This was the same story as the fixed Sumo game.

(こちらは論文)

(This is a paper)

-----

という訳で、この話("今日は勝て")は「架空の話が、勝手に一人歩きした」ものなのかもしれません。

So this story ("Win the today's game") may be a "fictional story that has taken on a life of its own."

どなたか、裏取りの済みの真偽をご存知の方は、御一報下さい。

If anyone knows the truth with evidence, please let us know.

―― あいつら、馬鹿