2023,江端さんの忘備録

「今回の旧統一教会に対する解散請求は、日本国政府における憲政上の汚点である」という、旧統一教会の主張を、私は認める。

I accept the former Unification Church's assertion that "this request for dissolution against the former Unification Church is a constitutional disgrace in the Japanese government."

100%同意する。

I agree with you 100%.

本来、こんなことはあってはならない。

This should never have happened.

民主主義社会において、宗教の自由に対する公権力の発動など、本当にあるべきことではない。

In a democratic society, there really should be no such thing as an invocation of public power against religious freedom.

-----

だが、これまで(数十年間)、何度も、何度も、何度も、『そういうことはやめろ』と言い続けたにも関わらず、全く改善しなかったお前たちが、この『憲政上の汚点』を許した。

But you people, who have not improved at all despite my telling you over and over and over again (for decades) to 'stop doing that kind of thing,' have allowed this 'constitutional disgrace.'

全ての宗教の自由に対する脅威を、お前たちが作った。

You have created a threat to the freedom of all religions.

この恐るべき罪深さを ―― 今こそ、思い知れ。

This horrendous sinfulness -- now, think of it.

----- 参考文献 -----

----- References -----

(A)統一教会の独自かつ斬新な解釈

(A)Unique and novel interpretation by the Unification Church

(B)統一教会の教義

(B)Doctrine of the Unification Church

(C)教団から脱退させないメソッド

(C)Methods to keep believers from leaving the cult

(D)統一教会の"霊感商法"の考え方

(D)The Unification Church's "Inspirational Commerce" Concept

結論:『統一教会の運営は、(自分の全財産を自分の意思で差し出せるような)狂信的な信者を”作り出せる”か否かにかかっている』

Conclusion: "The Unification Church's operation depends on whether or not it can "create" fanatical believers (who are willing to give up their entire wealth).

「統一教会」というワードが含まれる最近の江端の日記一覧

2023,江端さんの忘備録

『やりたいことがあることは、多分、それだけで人を不幸にするなぁ』と思います。

I think, 'Having something you want to do probably makes you unhappy.'

うん、私(江端)は今、精神状態が良くない ―― そう思って読んで下さい。

Yeah, I (Ebata) am not in a good state of mind right now -- please read it as such.

読むと、うつが伝染るかもしれないので、読むのを止めるのも良いかと思います。

It would be a good idea to stop reading it, as depression may be contagious.

----

やりたいことは、多くの場合、上手くいかないからです。

Because what I want to do often doesn't work.

やりたいことをやるためのプロセスで、色々苦労します。

I struggle a lot with doing what I want to do.

そして、やりたいことを、途中で断念するのは、もっとも苦しいことです。

And giving up on something I want to do in the middle of a project is the most painful thing I can do.

加えて、やりたいことをやりとげた後でも、それで幸せになれるわけでもありません。

In addition, even after I have done what I want, it does not mean I will be happy.

人間、やりとげたことは、簡単に忘れてしまうものです。

People quickly forget what they have accomplished.

そして、次のやりたいことが、自分を苦しめることになります。

And the next thing I want to do is torment myself.

無限ループの呪いのような気がします。

It feels like a curse of an endless loop.

―― うん、やっぱり、私(江端)は今、精神状態が良くないようです。

-- Yeah, I guess I (Ebata) am not in a good mental state right now.

-----

何が言いたいかというと、

What I'm trying to say is,

『自分のやりたいことが分からない』という方は、多分、ご自分のことを「不幸な人間」と思っているかもしれませんが ――

If you're saying, 'I don't know what I want to do,' you probably think you're unhappy," but....

『意外に、それは最高の人生なのかもしれないですよ』ということを、お伝えしたくて。

I wanted to tell you, 'Surprisingly, that may be the best life.

-----

こういうことを言い出す私(江端)は、珍しいと思いますので、ちゃんと記録に残して置くことにします。

It is unusual for me (Ebata) to say this, so I will properly put it on record.

あるいは、これからずっと、ネガティブ江端がデフォルトになるかもしれませんが、まあ、それならそれで、仕方ありません。

Or maybe the negative Ebata will always be the default, but it cannot be helped.

ポジティブ江端 vs ネガティブ江端 ―― どっちが勝つかな?

-----

なんか、こういう「よわよわ江端」は、読者の皆様に、評判良いようです(応援メール、ありがとうございます)。

This kind of "Weak Ebata" seems well accepted by our readers. (Thank you for your supportive emails.)

喜んでもいられませんが、それでも、私の日記が、誰かの心を軽くしているなら、こんな私でも役にたっているのですよね。

I can't be happy about it, but if my diary has lightened someone's heart, even me, like this is useful, isn't it?

2023,江端さんの忘備録

テレビを見ている嫁さんに、

I said to my wife, who was watching TV,

江端:「なんで、VIVANTは、北朝鮮拉致被害者の救出作戦を行わないんだろう」

Ebata: "Why doesn't VIVANT conduct rescue operations for North Korean abductees?"

と言ったところ

And she just replied, watching TV,

嫁さん:「そうだね」

"Yes, they do."

と、生返事をされました。

-----

フィクションの「イリーガル」を描くのであれば、ここまで振りきってもいい思う。

They can swing so far if they depict "illegal" in fiction.

ただ、裁判所は、「VIVANT」や「スケバン刑事」の活動を、絶対に認可しないと思います(高度な政治的圧力があれば別かもしれませんが)。

ロケ地は<北>の平壌(まあ、当然、北朝鮮は拒否するでしょうが)。

The location is Pyongyang (well, North Korea will refuse).

韓国<南>との共同制作で(あの国こそ、拉致の最大被害国です(500人近くにおよぶそうです))。

It will be a joint production with South Korea (that country is the biggest victim of abduction (nearly 500 people are said to have been abducted)).

この「VIVANT:拉致被害者奪還作戦編」の、日本国内視聴率は、史上最高になるでしょう。

The domestic viewership of "VIVANT: Operation to Retrieve the Kidnapped Victims" will be the highest in Japan.

もちろん、前例のない「もの凄い外交問題」にもなるような気がしますが ―― 下手すると核ミサイルが飛んでくるかもしれません。

Of course, I feel it will be an unprecedented "tremendous diplomatic problem" -- if we are not careful, nuclear missiles may be launched at us.

-----

でも、映画で「シュリ」や「シルミド」があるし、日本でも「KT」とか上映されていたんだから ―― 悪くない企画だと思うのです。リスクも凄いけど。

But we know "Suri" and "Silmido" in Korean movies, and "KT" and others were shown in Japan -- I think it's not a bad project. The risk is significant, though.

2023,江端さんの技術メモ

今回の実験のケースでは、

192.168.11.232/ 255.255.248.0 / 192.168.11.1 あたりにすれば良いのであろう(多分)。

 

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)).

さよならジュピター

2007,江端さんの忘備録

小松左京先生の数多い名著の中でも、群を抜いて優れている著作「さよならジュピター」を読まないまま、研究所に入所してきた若者がいることを知って、結構ショックを受けています。

すでに入手困難本になっているのかもしれませんし、若い世代には、その世代の代表的なSF作品があるだろうから、上記の評価は的を得ていないと思います。

先日古本屋で文庫本を入手して、十何年ぶりに読んだのですが、まったく時代を感じさせない、本当に見事な作品。

舞台が2200年でありながら、「加速度消滅装置」やら「ワープ」やら「タイムリープ」みたな、エネルギー保存法則を無視するようなデタラメな装置を持ち込まず、この21世紀でも十分通用する、無理のない技術の設定が大好きです。

-----

余計なお世話かもしれませんが、エンジニアの独身男性の諸君。

君と結婚を渋っている女性に、この本を勧めてみてはどうでしょうか。

『その主人公の「本田英二」は、要するに俺のことだ!』と彼女に言い切っても良いと思うのです(少なくとも私は許します)。

技術を愛する我々は、皆、宇宙の彼方のフロンティアを目指すエンジニアだと思うのです。

ちょっと我々は早く生まれてきてしまいました。

せめて、私達は、次の世代のエンジニアを、地球という楔から解き離すようにがんばりましょう。

エンジニアに「市場調査」だの「長期技術展望」だのという、下らない検討をさせる世界から脱却させる為にも。

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

以上