江端さんの忘備録

最近、新聞のチラシ広告に、

Recently, in a leaflet advertisement in a newspaper, I can find a paper,

「役所で使っていた型落ちのPCの即売会」

“Sold-out party of unfashionable PC used at the government office"

を見つけます。

このようなチラシが入っていれば、格安でPCが手に入るような錯覚になりますが、

If you read such a leaflet, you may get the illusion that you can get a PC at a cheap price.

――その値段であれば、同程度以上のPCが新品が買える

“If it is that price, you can buy a new PC of the same level or more"

というくらい、最近のPCのコストは安いです。

Recent PC prices becomes low like that.

—–

もっとも、電気量販店での店頭価格を比較にしてはダメです。

However, it is not good to compare the retail price at an electric retailer.

DELL, Lenovoなどの、有名どころの通販サイトを知っていなければなりません。

You must know famous mail order sites such as DELL and Lenovo.

加えて「納期3週間」という、発注時に製造が開始される「受注生産」を覚悟しなければなりません。

In addition, you have to be prepared for “made-to-order manufacturing" in which production is started at the time of ordering, with “delivery time of 3 weeks".

それはさておき。

Set it asaide.

—–

私が、安いPCの取得方法を教えてしまったら、その人は、幸せを感じることができなくなります。

If I tell him/her how to get the cheaper PC, He/She doesn’t come to feel happiness,

それ故、知っている人は、知らない人に、賢しく騒ぎたてるべきではないでしょう。

Therefore, a person who know well, should not make a lot of noise with bright-faced to a person who don’t know well.

私にしたって、IT回りに詳しいだけで、多分他のことでは、「役所で使っていた型落ちのPC」のようなものを買いまくっていると思います ――

For me, I know about IT well by accident. However I don’t know many things in the world, and I have bought something lke “unfashionable PC used at the government office"

例えば、不動産とか、保険契約とか、愛とか、愛や、愛です。

For example, estate, agreement for insurance and love and love or love.

「『無知の無知』という幸せを、幸せのままにしておく」という配慮は、あって然るべきです。

You should be thoughtful of keeping “Ignorance is bliss" of others.

2020/08,江端さんの忘備録

3年前にリリースした国際学会のカンファペーパーに関して、論文化のオファを受けました。

I received an offer to make a paper on the international conference paper I released three years ago.

調べてみたところ、身元もしっかりしていて、SPAMでも広告詐欺でもないようです。

I looked it up and it appears to be a solid identity and not SPAM or an ad scam.

しかし、一つ疑問なのが、オファされた論文のフィールドです。

One question, however, is the field of the offered paper.

―― 「哲学的取引 (Philosophical Transaction)」

“Philosophical Transaction"

—–

哲学とは、「人生・世界、事物の根源のあり方・原理を、理性によって求めようとする学問、あるいは経験からつくりあげた人生観」であるので、これも「技術」の一態様であるとは思っています。

Philosophy is, “the study of life, the world, and the principles of the origin of things, or a view of life created from experience", so I believe this is another form of “technology".

ですので、私は、哲学に高尚なイメージは持っていませんが、この件については、凄い違和感を感じています。

So I don’t have a lofty image of philosophy, but I do feel a terrific sense of discomfort about this offer.

まあ、最近の私の研究「人間の不満(怒り)を数値化して、システム運用に取り込む」という独自アプローチは、「哲学の分野」と言えなくはないのかもしれません。

Well, my recent work on my original approach to “quantifying human dissatisfaction (anger) and incorporating it into system operations" may be a “field of philosophy".

—–

ともあれ、意外なところからの、意外なオファでした。

Anyway, it was an unexpected offer, from an unexpected office.

『なかなか面白いイベントが飛んできたなぁ』と、ちょっと笑いました。

“That’s quite an interesting event to fly in"

I was laughing a bit.

2020/08,江端さんの忘備録

そもそも私、会社でも、ひとり実験室に閉じ込もって、特許明細書、報告書、コーディング、システム構築を行っていました。

To begin with, I was locked in a lab by myself, even at the company office, writing patent specifications and reports, coding, building a system.

コロナ禍が始まる前から、私は「会社の中で在宅勤務している」ようなものでした。

Even before the Corona disaster started, I was sort of “working at home in the office".

それでも、会議とか出張などが、私を、実験室の外側へと引き剥していました。

Still, meetings and business trips were pulling me out of the lab.

—–

最近の、在宅勤務のおかげで、労働時間が増加しています。

These days, thanks to telecommuting, working hours are increasing.

とは言え、私の場合、業務と趣味が、"0猫"と"1猫"の量子状態ですので、実質な労働時間を、正確に「観測」することができませんが。

However, in my case, my work and hobbies are in the quantum state of “0 cat" and “1 cat", so I can’t “observe" the real working hours with any accuracy.

とにかく、「切れ目」が見つからないので、ぶっつづけで、システム構築をやり続けることができてしまいます。

Anyway, since I can’t find a “break point" during working time, I can just keep on building a system.

報告書や特許明細書やカンファレンスペーパーなども、予定通り、遅滞なく提出していました。

Reports, patent specifications and conference papers were also submitted on time and without delay.

これも、私の徹底的な「アンチ・チームプレーの精神」に基づく成果だなぁ、と、しみじみと感じ入っています。

I feel deeply that this is another result of my thoroughgoing “anti-team-playing" spirit,

—–

しかしながら、体調の方も、着実に崩れてきています。

今の私は、

However, my physical condition is falling down certainly.

「ぼっち属性」+「強制的な在宅勤務」+「パソコン3台とディスプレイ5台が同時に起動しているIT環境」

“solitary attributes" + “forced telecommuting" + “IT environment with three computers and five displays running at the same time

is equal to

= 「慢性的な疲労状態」

“chronic fatigue".

という等式の中にいます。

is established now.

2020/08,江端さんの忘備録,江端さんの技術メモ

Go言語は、スレッド化による並列処理が得意という話を聞いていましたので、先日の

の"client.go"を改造して、「とりあえず、動かして、止めることができればいい」という割り切りだけでコードをごそごそを変えてみました。(server.goは変更なしで大丈夫)。 ファイルは、~/go_echo/に置くこととします。

// go run client_multi_agent.go

// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build ignore

package main

import (
	"flag"
	"log"
	"net/url"
	"os"
	"os/signal"
	"time"

	"github.com/gorilla/websocket"
)

var addr = flag.String("addr", "localhost:8080", "http service address")


var interrupt = make(chan os.Signal, 1) // Go のシグナル通知は、チャネルに os.Signal 値を送信することで行います。
			  	 		   			  	 // これらの通知を受信するためのチャネル (と、プログラムが終了できること
										 // を通知するためのチャネル) を作ります。
var	u = url.URL{Scheme: "ws", Host: *addr, Path: "/echo"} // JSON型の配列記述方法?

func main() {
	flag.Parse()     //引数の読み込み argv, argcと同じ
	log.SetFlags(0)  // ログの出力で時間の情報、この時点で0秒にセット

//	interrupt := make(chan os.Signal, 1) // Go のシグナル通知は、チャネルに os.Signal 値を送信することで行います。
//			  	 		   			  	 // これらの通知を受信するためのチャネル (と、プログラムが終了できること
//										 // を通知するためのチャネル) を作ります。

	signal.Notify(interrupt, os.Interrupt) // 指定されたシグナル通知を受信するために、 与えられたチャネルを登録
							 			   // します。

	log.Printf("connecting to %s", u.String()) // ここは単にプリントしているだけ(だろう)

	///// ここまでは共通 /////

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		

	go sub_main()
	time.Sleep(time.Millisecond * 333)  // 333ミリ秒		
	
	ticker := time.NewTicker(time.Second)  // 1秒おきに通知 (sleepと同じ)		

	for {
		select{
    	   case <-ticker.C: // tickerのチャネルはデフォルトで付いているらしい
		   case <-interrupt:  // こっちは手動割り込みだな検知だな
		        return;
		}
     }
}

func sub_main(){
	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) // これがコネクションの実施
	if err != nil {
		log.Fatal("dial:", err)
	}
	defer c.Close() // deferは、どこに書かれていようとも、関数から抜ける前に実行される

	done := make(chan struct{}) // 配列といってもいいし、並行処理用のキューといってもいい
                                // 値が入っていないとデッドロックする

	go func() {  // 受信用スレッドを立ち上げる(スレッドの中でスレッド立ち上げているが、大丈夫だろうか)
		defer close(done)
		for {
			_, message, err := c.ReadMessage() // このメソッドの返り値は3つで、最初の返り値は不要
			if err != nil {
				log.Println("read:", err)
				return
			}
			log.Printf("recv: %s", message)  // 受信したら、そのメッセージを表示する
		}
	}()

	ticker := time.NewTicker(time.Second)  // 1秒おきに通知 (sleepと同じ)
	defer ticker.Stop() // このループを抜ける時に終了する

	for {            // 無限ループの宣言かな(C/C++ で言うとろの、whileとかdoとか)
		select {
		case <-done: // doneの中に何かが入っていたら、このルーチンはリターンして終了となる
			 		 // (でも何も入っていないところを見ると、func()ルーチンの消滅で、こっちが起動するんだろう)
			return
		case t := <-ticker.C: // tickerのチャネルはデフォルトで付いているらしい
			   	  			  // 時間が入ってくるまでロックされる	 
			   	  			  // この場合1秒単位でチャネルに時間が放り込まれるのでそこで動き出す。

			err := c.WriteMessage(websocket.TextMessage, []byte(t.String())) // サーバに(時刻の)メッセージを送付する
			if err != nil {
				log.Println("write:", err)
				return
			}
		case <-interrupt:  // こっちは手動割り込みだな検知だな
			log.Println("interrupt")

			// Cleanly close the connection by sending a close message and then
			// waiting (with timeout) for the server to close the connection.

			// close メッセージを送信してから、サーバーが接続を閉じるのを
			// (タイムアウトして)待つことで、接続をきれいに閉じます

			err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
			if err != nil {
				log.Println("write close:", err)
				return
			}
			select {
				case <-done: // これも上記の"done"の説明と同じでいいかな
				case <-time.After(time.Second): // このメソッド凄い time.Secondより未来ならひっかかる
			}
			return
		}
	}
}

まあ、main()と sub_main()で同じ割り込みを使っているので、タイミングによっては、main()を止めることができず、sub_main()を個別に止めていくことになるが、とりあえず動いたので、これで良しとする。

go sub_main() と書くだけで、いきなりスレッド化させることができる手軽さは、かなり驚いた。

こんなんやこんなんで、いろいろ苦労してきたんだけど、これからも、マルチエージェントシミュレーションを自力で書いていくことを考えると、正式にGo言語に移るべきかな、と思っています。

go webassembly experiments をローカルPCで動かす とかも、いろいろやっていきたいことですし。

2020/08,江端さんの忘備録

「命短し、恋せよ乙女」というフレーズには続きがあります。

There is a continuation of the phrase “Life is short, fall in love, maiden"

♪いのち短し、恋せよ乙女、あかき唇、あせぬ間に

“Life is short, fall in love, maiden, before the red lips fade away"

♪いのち短し、恋せよ乙女、黒髪の色、あせぬ間に

“Life is short, fall in love, maiden, before the black hairs fade away"

このフレーズを見てみると、なかなか辛辣なフレーズのようです。

When I look at the phrase, it seems to be quite a harsh phrase.

今なら、セクハラの類(たぐい)に入るかもしれません。

Now, it might be a kind of sexual harassment.

—–

しかし、私の数値解析結果によれば、このフレーズは、

However, according to my numerical analysis, the phrase should be changed with

「命短し、恋せよ男」

“Life is short, fall in love, men"

という方が相応しいように思えます。

定量的には、"乙女"より、"男"の方が、2倍ほど事態が深刻です。

Quantitatively, the situation is twice as serious for a “man" than for a “maiden".

—–

という訳で、ちょっとフレーズを改造してみました。

So I modified the phrase a bit.

♪命短し、恋せよ男、臭き口臭、常ならぬ間に

“Life is short, fall in love, men, before stinky breath becomes a regular"

♪命短し、恋せよ男、少き頭髪、抜けぬ間に

“Life is short, fall in love, men, before a few heads of hair fall out"

—–

男の経年劣化は、女性よりダイナミックに発現します(本当)。

Men’s deterioration over time occurs more dynamically than women’s (true).

そして、その変化を補う手段は、女性と比べて絶望的に少ないです(事実)。

And the means to compensate for the change are hopelessly less than for women (in fact).

2020/08,江端さんの忘備録

先週、久々に会社に出社しました。

Last week, I came into work for the first time in a long time.

私は、半日、1人実験室に閉じ籠って、資料作成をしていました。

I spent half a day alone in the laboratory, working on materials.

オフィスを少し覗いてみたのですが、照明は全部落ちていて、オフィスの出入口は施錠されていました。

I took a quick peek at the office, but all the lights were off and the doorways to the office were locked.

―― もしかしたら、ずっとこのまま

“Maybe, this situation could stay that way forever"

と感じさせる風景でした。

It was a landscape that made me feel it.

それはさておき。

Aside from that.

—–

久々に、行き付けの中華料理屋で、外食したのですが、「麻婆茄子定食」の美味しさに涙が出そうになりました。

It’s been a long time since we ate out at our favorite Chinese restaurant. The deliciousness of the “eggplant set meal" almost brought tears to my eyes.

―― 茄子って、どうしてこんなに美味しいんだろう

“Why is eggplant so delicious?"

と、創造主が「茄子」という食べ物を生み出してくれたことを、感謝しながら食べていました。

We ate with gratitude that the Creator had created the “eggplant".

—–

小学生のころ、自宅に、キリスト教の布教活動をしているおばさんが、

When I was in elementary school, an old lady who was a Christian missionary came to my house.

『リンゴが丸く作られているのは何故でしょうか? それは、神様が食べやすい形状に作ってくれたからです』

“Why are apples made round? That’s because God made it into a shape that is easy to eat"

という論法で、神の存在を論じるのを、私は、以下のように論破したことがあります。

She argued for the existence of God by arguing the above phrase, however I argued against her with the followings.

■リンゴを、直方体で作ってくれた方が、パッケージの観点から有効であったはずだし、物流コストも削減できたばずですよね

– It would have been more effective from a packaging point of view if the apples were made in a rectangular shape, which would have reduced logistics costs.

■リンゴが、球形になっているのは、エントロピーの観点からいって当然だし、種の戦略としてコスト最小化にも資しているからですよ

– The reason why the apples are spherical in shape is not only because of their entropy, but also because it helps to minimize costs as a seed strategy

■そもそも果物は、昆虫たちに「果実の種(タネ)」を拡散させるために、高い糖度のものが生き残ってきただけであって、別段、人間の為に作られたものではありません ―― むしろ、人間は、果実の拡散戦略を邪魔していますねえ

In the first place, fruits with high sugar content have only survived to spread their “seeds" to insects, and they have not evolved specifically for humans. Humans are interfering with our fruit dispersal strategy.

■リンゴが丸く作ったのが神様だとしたら、神様って奴は、本当に『使えない』ですね

– If it was God who made the apple round, then God is really 'useless’ for a guy.

と言って、ニッコリ笑いました。

with smiling.

で、まあ、私の家には、宗教関係者が全く来なくなってしまったのですが。

And, well, the religious people had stopped coming at all.

—–

まあ、リンゴはともあれ、茄子を作ってくれたのなら ――

Well, aside from the apples, if making the eggplant —

神様は『使える奴』

God is a “useful guy"

と認識を改めていいかな、とか考えていました。

I was wondering if it would be good to change my perception of the situation.

2020/08,江端さんの忘備録

私は、「ディズニーランドに興味がない」と思われているようですが、正しくありません。

You seem to think I’m “not interested in Disneyland" but that’s not correct.

ディズニーランドは、待ち時間戦略、最短経路問題、 人流制御問題、とかも含めて、最新鋭の数学が投入されていることでも有名です。

Disneyland is also famous for its state-of-the-art mathematics, including wait time strategy, shortest path problem, human flow control problem, and so on.

しかも、最高レベルの安全工学技術が投入されているのも知っています。

Moreover, I know that the highest level of safety engineering technology has been put in place.

私から見れば、ディズニーランドは、最高レベルの数学とIT技術と、そして、制御工学、機械工学、人間工学、経営工学からなる、巨大トータルシステムです。

From my point of view, Disneyland is a huge total system, consisting of the highest level of mathematics and information technology, and control engineering, mechanical engineering, ergonomics and management engineering.

そして、そのシステムが、私達に仕向ける「行動変容プログラム」を「推測」し「欺く」というトライアルは ―― その勝敗はどうあれ ―― 結構な快感だったりします。

And it’s quite pleasant to try to “guess" and “fool" the system’s behavioral change program that caters to us, — whether it’s a win or a loss.

だから、ディズニーランドは楽しい ―― 見ているだけでも。

So, Disneyland is fun — even if it’s just to watch.

—–

ただ、疲れるから、わざわざ出かけるのは面倒です。

However, it is tiring to go out because it makes me tired.

テーマパークの"システム"を知る、という観点では、京都アニメーションの「天城ブリリアントパーク」は結構面白いです。

In terms of getting to know the “system" of theme parks, Kyoto Animation’s “Amagi Brilliant Park" is quite interesting.

部屋に閉じ込もっていられますし。

I can lock myself in my room.

2020/08,江端さんの技術メモ

いらんことしなければいいのですが、function.phpとかをいじって、何度かWPを壊しかけました。

という訳で、バックアップツールの"All-in-One WP Migration"を入れました。

後は、"ファイル"を選んで、PCに保存できます。

以上