2024,江端さんの忘備録

『小中高生の自殺者数500人超と高止まり 厚生労働省「危機的な状況」として対策を強化』というニュースが出ていました。

There was a news article titled “The number of suicides among elementary, junior high and high school students remains high at over 500, and the Ministry of Health, Labor and Welfare is strengthening measures as a ‘critical situation’”.

ChatGPTに頼んで、過去20年間の自殺者数の推移のグラフを作ってもらいました。

I asked ChatGPT to make a graph showing the change in the number of suicides over the past 20 years.

―― たしかに、これはヤバい

That's right, this is bad.

最近の、日本の自殺者数は、ざっくり2万人強で、ティーンエージャの自殺者数は、その1/40なのですが、比率は問題ではないのです。

The number of suicides in Japan these days is roughly over 20,000. On the other hand, the number of suicides among teenagers is 1/40 of that, but the ratio is not the issue.

そもそも、社会から保護される対象であるティーンエージャの自殺者は、"ゼロ"であることが求められます。

To begin with, the number of suicides among teenagers, who are a group that society is supposed to protect, should be zero.

しかし、ここで理想論語っても仕方ありません。

But there's no point in talking about ideals here.

-----

私が、本気で「ヤバい」と思っているのは、この「線形的な増加」です。

What I think is “dangerous” is this “linear increase”.

過去50年に遡って、ChatGPTにグラフの作図を依頼したのですが、変なグラフを提出してくるので、「でたらめでもいいから、分かっている情報だけを使って、グラフを作って」と依頼したところ、以下の図を作ってくれました。

I asked ChatGPT to draw a graph for me, going back over the past 50 years, but it kept submitting strange graphs, so I asked it to “just make a graph using the information you know, even if it's random,” and it made the following diagram.

2000年より前も、小中学生の自殺者数は、それなりにありましたが、その変化は「線形ではなかった」。ガタガタしていたのですよ。

Even before 2000, there were a certain number of suicides among elementary and junior high school students, but the change was “not linear.” It was bumpy.

今から見れば、この「ガタガタ」には、色々な理由を付けられる余地があったのです。ぶちゃけ、『何が悪いのかが良く分からない』ということです。

Looking back, there was room to attach various reasons to this “bumpy.” Frankly, “I don't understand what's wrong”.

しかし、2004年以降のこの「美しい線形増加」が示す事実は、

However, the fact that this “beautiful linear increase” has continued since 2004 shows that

(1)ティーンたちを死に追いやる状況が拡大し続けていて、

(1) the circumstances that are driving teens to their deaths continue to expand, and

(2)現時点において、有効な手段が全くない、

(2) at present, there are no effective measures at all,

ということです。

----

家庭問題、学校問題、メンタルヘルス、見えない進路や将来、そして、社会的孤立やSNSの影響 などが原因として上がっています。

The causes include family problems, school problems, mental health, invisible career paths and futures, social isolation, and the influence of social networking services.

私は、2004年あたりからの線形増加から「SNSの影響」が大きいような気がしますが、これも「自分の思い込みの域」を出ていません。

I think the “influence of SNS” has been significant since the linear increase around 2004, but this is just my assumption.

現在の私には、(1)厚生労働省の「危機的な状況」という認識を共有すること、と、(2)将来への希望(子ども地獄/大人パラダイス論)を定着させる、という提案しかできません。

At the moment, the only two things I can do are (1) share the “critical situation” that the Ministry of Health, Labor and Welfare is aware of, and (2) give children hope for the future (the “Children's Hell, Adults' Paradise” theory).

―― 大人は自由だ。大人は楽しい。大人はパラダイスだ

『大人になれば、悩みは全て解決するんだ』と、嘘でもいいから(実際、嘘ですが)、ティーンエージャたちを洗脳することが必要なのではないか、と思うのです。

I think it is necessary to brainwash teenagers with the lie that “all their problems will be solved when they grow up” (actually, it is a lie).

『子どもの時代なんぞに、絶対戻りたくない』という大人が、最低、ここに二人います(嫁さんと私)。

At least two adults (my wife and I) would never want to return to their childhood.

 

2024,江端さんの忘備録

先週の週末に、「バージンロード」を娘(長女)と歩いてきた江端です。

I walked down the “aisle” with her daughter (eldest daughter) last weekend.

私は元演劇サークルのメンバーですから、「普通の父親」を演じるのは簡単なことです。

あれ、結構面倒くさい手続き(プロトコル)があるんですよ。

There are quite a few complicated procedures (protocols).

事前に『バージンロード・プロトコル仕様書』を渡して貰えれば、私は、その仕様書を何十回も読み込んで、完全に暗記して、プロトコル通りにちゃんと実施する自信がありました。

If given the “Aisle Protocol Specifications” in advance, I would have read them dozens of times, memorized them completely, and had the confidence to carry them out properly according to the protocol.

なんで、当日に、その仕様を、担当者から「口伝」で伝えられなければならないのか ―― と尋ねたところ、「場(結婚式会場)に、緊張感を発生させるため」だそうです。

When I asked why the specifications had to be conveyed by word of mouth by the person in charge on the day, I was told it was “to create a sense of tension at the venue (wedding hall).”

実際に、私、

In fact, I

・新婦(長女)のドレスの裾、ずっと踏み続けていましたし(あれ、踏まずに歩くの無理です)、

kept stepping on the hem of the bride's (eldest daughter's) dress (it's impossible to walk without stepping on it),

・新郎と一礼することなく、とっとと娘を手渡してしまいましたし(ほどんど『出荷する荷物』)

and I handed my daughter over to the groom without bowing to him (she was almost like a 'package to be shipped').

という、プロトコルブレーク(規約破り)をしてしまいました。

I broke the protocol (broke the rules) like the above.

緊張感はともかく、『予定調和通りに"させない"運用』は十分に果したと思います。

Aside from the tension, I fulfilled our goal of “not letting things go according to plan.”

-----

私、若い頃は、結婚式の司会をよく頼まれました。

When I was younger, I was often asked to officiate at weddings.

私は、結婚式の司会のシナリオを作成し、新郎と新婦の承認を得て、そこから一言一句違わぬセリフしゃべりつつ(アドリブなし)、堅苦しくない雰囲気で、場の笑いを取りながら、進行を進めることのできる『司会者』でした。

I was a wedding MC who could create a scenario, get the bride and groom's approval, and then proceed with the proceedings in a relaxed atmosphere, getting laughs from the crowd while speaking every word exactly as written (no ad-libbing).

ですから、今回も『バージンロード・プロトコル仕様書』を事前に手渡してもらったとしても、私なら、当日に上手く『しろうと』風に振舞えた、と思うのです。

So even if I had been given the “A Guide to the Protocol for the Aisle of the Virgin” in advance, I think I would have been able to operate it successfully on the day, in an amateur-like way.

-----

その後、披露宴会場で、予告なしに新婦の母(嫁さん)にスピーチがリクエストされましたが、嫁さんは当然に私にこのスピーチをぶん投げました。

After that, at the wedding reception, the groom asked the bride's mother(my wife) to give a speech without warning, but of course, my wife threw me this order.

もちろん、私は、そつなくスピーチを纒めました ―― そういうのは、私の十八番ですから。

Of course, I put together a polished speech - that's my specialty.

-----

結婚披露宴の後、長女からLINEでメッセージが届いていました。

After the wedding reception, I received a message from my eldest daughter via LINE.

『パパもめんどくさいという体は露骨に出ていながらも、さすがと言うべきシーンが何箇所もあって、もう頭が上がりません』

'Even though you were annoyed, there were many awe-inspiring scenes, and I can't help but admire you.

だ、そうです。

That's what she said.

なかなか、核心を突いた、良い謝意だと思いました。

I thought it was a good and to-the-point expression of gratitude.

2024,江端さんの技術メモ

//  G:\home\ebata\hakata\src\others\main26\main.c

/*
このプログラムは、PostGISを使用したPostgreSQLデータベースに対して、ランダムウォークを実行し、その経路をCSVファイルに記録するものです。プログラムの概要を以下に説明します。

■プログラムの目的
出発ノードと目的ノード(天神駅に近いノード)を設定し、データベース上のノード間をランダムに移動しながら、最終的に目的ノードに到達する経路を記録します。
経路をCSVファイルに保存し、各ノードの緯度、経度情報を含めます。

■主な機能と処理の流れ
1.データベースへの接続
sql.Openを使って、PostgreSQLデータベースに接続します。接続情報はconnStr変数で定義されます。
2。出発ノードと目的ノードの設定
startNodeとして、仮に32758を設定し、goalNodeとして天神駅のノードIDである40922を設定しています。

3.CSVファイルの作成
os.Createでファイルを作成し、CSV形式で書き込むための準備をします。

4.ランダムウォークの実行
performRandomWalk関数内で、出発ノードから目的ノードへと移動を行います。
各ノードの緯度と経度を取得し、CSVファイルに記録します。

5.ノード間の移動の処理
getClosestConnectedNode関数を使って、現在のノードから接続されているノードを取得し、目的地に最も近いノードを選択します。
選択の基準として、訪問回数が少ないノードを優先し、ランダム要素を加えます(袋小路の回避)。

6.経路の記録
移動したノードの情報を、performRandomWalk関数内でCSVファイルに記録します。ノードID、緯度、経度が書き込まれます。

7.座標の取得
getNodeCoordinates関数で、ノードIDに対応する緯度と経度をPostGISの関数ST_YとST_Xを使用して取得します。

8.2点間の距離の計算
calculateDistance関数で、2つの座標間の距離を計算します。地球の半径を用いて、Haversineの公式で計算しています。

■プログラムの特徴

1. 訪問回数の管理: 同じノードを何度も訪問しないように、各ノードの訪問回数を管理しています(訪問回数が多いノードは回避します)。
2. ランダム要素の導入: 最短経路だけではなく、一定の確率で他の接続ノードを選択し、袋小路を避けるように工夫しています。
3. バックトラッキング: 袋小路に入った場合に、直前のノードに戻るバックトラッキングの処理を行っています。

■プログラムの全体の流れ
1.データベース接続を確立。
2.出発ノードと目的ノードを設定。
3.CSVファイルを作成し、ヘッダーを記述。
4.ランダムウォークを実行し、ノード間を移動。
5.各ノードで緯度・経度を取得し、CSVファイルに書き込む。
6.目的ノードに到達するまで、最も適切な接続ノードを選択し続ける。

このプログラムは、ランダムウォークアルゴリズムをPostGISとPostgreSQLの地理情報を活用して実現しており、目的地に到達するまでの経路を記録する機能を持っています。

*/

package main

import (
	"database/sql"
	"encoding/csv"
	"fmt"
	"log"
	"math"
	"math/rand"
	"os"

	_ "github.com/lib/pq"
)

const (
	connStr = "user=postgres password=password host=127.0.0.1 port=15432 dbname=hakata_db sslmode=disable"
)

func main() {
	// PostgreSQLデータベースへの接続
	db, err := sql.Open("postgres", connStr)
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 出発ノードを設定(天神駅の最も近いノードを選択するなど)

	startNode := 32758 // 例として、初期ノードIDを設定
	goalNode := 40922  // 目的ノードIDを天神駅に設定

	// CSVファイルを作成
	csvFile, err := os.Create("random_walk_result.csv")
	if err != nil {
		log.Fatal(err)
	}
	defer csvFile.Close()

	writer := csv.NewWriter(csvFile)
	defer writer.Flush()

	// CSVのヘッダーを作成
	err = writer.Write([]string{"Node", "Latitude", "Longitude"})
	if err != nil {
		log.Fatal(err)
	}

	// ランダムウォークの実行
	err = performRandomWalk(db, startNode, goalNode, writer)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("Random walk completed and saved to CSV.")
}

// performRandomWalk ランダムウォークを実行し、結果をCSVに保存
func performRandomWalk(db *sql.DB, startNode, goalNode int, writer *csv.Writer) error {
	currentNode := startNode
	visited := make(map[int]int) // ノードの訪問回数を追跡
	pathStack := []int{}         // バックトラッキング用のスタック

	for currentNode != goalNode {
		// 現在のノードの緯度と経度を取得し、CSVに書き込み
		lat, lon, err := getNodeCoordinates(db, currentNode)
		if err != nil {
			return err
		}
		fmt.Printf("Node %d: Latitude: %f, Longitude: %f\n", currentNode, lat, lon)
		err = writer.Write([]string{
			fmt.Sprintf("%d", currentNode),
			fmt.Sprintf("%f", lat),
			fmt.Sprintf("%f", lon),
		})
		if err != nil {
			return err
		}
		writer.Flush()

		// 現在のノードを訪問済みとして記録
		visited[currentNode]++

		// 次のノードを取得(目的地に近づくノードを優先)
		nextNode, err := getClosestConnectedNode(db, currentNode, goalNode, visited)
		if err != nil || visited[nextNode] > 2 { // 訪問回数が多い場合バックトラック
			if len(pathStack) > 0 {
				// スタックから一つ戻る
				fmt.Printf("Backtracking from Node %d\n", currentNode)
				currentNode = pathStack[len(pathStack)-1]
				pathStack = pathStack[:len(pathStack)-1]
				continue
			}
			return fmt.Errorf("no viable path found")
		}

		// 次のノードをスタックに追加
		pathStack = append(pathStack, currentNode)
		currentNode = nextNode
	}

	// ゴールノードの座標をCSVに保存
	lat, lon, err := getNodeCoordinates(db, goalNode)
	if err != nil {
		return err
	}
	fmt.Printf("Arrived at Goal Node %d: Latitude: %f, Longitude: %f\n", goalNode, lat, lon)
	err = writer.Write([]string{
		fmt.Sprintf("%d", goalNode),
		fmt.Sprintf("%f", lat),
		fmt.Sprintf("%f", lon),
	})
	if err != nil {
		return err
	}
	writer.Flush()

	return nil
}

// getClosestConnectedNode 現在のノードから接続されているノードのうち、目的地に最も近いノードを取得
func getClosestConnectedNode(db *sql.DB, currentNode, goalNode int, visited map[int]int) (int, error) {
	// 現在のノードから接続されているノードを取得
	query := `
		SELECT target 
		FROM ways 
		WHERE source = $1
		UNION 
		SELECT source 
		FROM ways 
		WHERE target = $1;
	`
	rows, err := db.Query(query, currentNode)
	if err != nil {
		return 0, err
	}
	defer rows.Close()

	// 接続ノードのリストを作成
	type NodeDistance struct {
		ID       int
		Distance float64
	}
	var connectedNodes []NodeDistance
	for rows.Next() {
		var node int
		if err := rows.Scan(&node); err != nil {
			return 0, err
		}

		// ノードの座標を取得
		lat, lon, err := getNodeCoordinates(db, node)
		if err != nil {
			return 0, err
		}
		// 目的地との距離を計算
		goalLat, goalLon, err := getNodeCoordinates(db, goalNode)
		if err != nil {
			return 0, err
		}
		distance := calculateDistance(lat, lon, goalLat, goalLon)

		// 訪問回数が少ないノードを優先
		if visited[node] < 3 {
			connectedNodes = append(connectedNodes, NodeDistance{
				ID:       node,
				Distance: distance,
			})
		}
	}

	if len(connectedNodes) == 0 {
		return 0, fmt.Errorf("no connected nodes found")
	}

	// 目的地に最も近いノードを優先して選択
	var closestNode NodeDistance
	minDistance := math.MaxFloat64
	for _, node := range connectedNodes {
		// 最も目的地に近いノードを選択
		if node.Distance < minDistance {
			closestNode = node
			minDistance = node.Distance
		}
	}

	// ランダム選択の要素を追加(袋小路を避けるため)
	if len(connectedNodes) > 1 && rand.Float64() < 0.2 {
		return connectedNodes[rand.Intn(len(connectedNodes))].ID, nil
	}

	return closestNode.ID, nil
}

// getNodeCoordinates ノードIDに対応する緯度と経度を取得
func getNodeCoordinates(db *sql.DB, nodeID int) (float64, float64, error) {
	var lat, lon float64
	query := `
		SELECT ST_Y(the_geom) AS lat, ST_X(the_geom) AS lon
		FROM ways_vertices_pgr
		WHERE id = $1;
	`
	err := db.QueryRow(query, nodeID).Scan(&lat, &lon)
	if err != nil {
		return 0, 0, err
	}
	return lat, lon, nil
}

// calculateDistance 2つの座標間の距離を計算
func calculateDistance(lat1, lon1, lat2, lon2 float64) float64 {
	rad := func(deg float64) float64 {
		return deg * math.Pi / 180
	}
	lat1Rad, lon1Rad := rad(lat1), rad(lon1)
	lat2Rad, lon2Rad := rad(lat2), rad(lon2)
	dlat := lat2Rad - lat1Rad
	dlon := lon2Rad - lon1Rad
	a := math.Sin(dlat/2)*math.Sin(dlat/2) + math.Cos(lat1Rad)*math.Cos(lat2Rad)*math.Sin(dlon/2)*math.Sin(dlon/2)
	c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a))
	const EarthRadius = 6371e3 // 地球の半径(メートル)
	return EarthRadius * c
}

2024,江端さんの技術メモ

上記のDBはpostGISで構成されており、ways, ways_vertices_pgr があり、SQLでダイクストラ計算が行えます。

ここで以下のようなステップを行うランダムウォークをpostGISを使ったpostgreSQLを使ってGo言語で作成してみました。

(Step.1) ランダムォークの終了地点は、天神駅とする

(Step.2) 出発地点を乱数デ適当に選んで下さい。出発地点は、天神駅から1km程度の地点を適当に抽出する

(Step.3)天神駅の座標から最も近いNode(以下、これを天神ノードといいます)と、出発地点から最も近いNode(以下、これを出発ノードと言います)を抽出する

(Step.4) 出発ノードと天神ノードを直線で繋いで、出発ノードから-90度から+90度の範囲のノードを一つ選ぶ

(Step.5)上記で見つかったノードを次の出発ノードとする。正し、すでに出発ノードとしたノードを、新しい出発ノードにはできないようにする

(Step.6)上記(Step.4)に戻って、天神ノードに到着するまで、出発ノードを更新し続ける。なお更新される出発ノードは全てノド番号と緯度と座標を表示させる

というようなアルゴリズムで、ランダムウォークを作ろうとしたのですが、ダメでした。

一言でいうと「どんつき」の路地に入る→袋小路に入ってしまって、そこで動けなくなるからです。

これを回避するアルゴリズムを考えるの面倒になって、pgr_ksp()を使うことにしました。

pgr_ksp()は、最短経路問題の1、2、3、4番目を出してくれるので、これで1000番目とかを仕えば、そこそこランダムウォークになるかな、と思いまして。

// G:\home\ebata\hakata\src\others\main25\main.go

package main

import (
	"database/sql"
	"encoding/csv"
	"fmt"
	"log"
	"os"

	_ "github.com/lib/pq"
)

const (
	connStr = "user=postgres password=password host=127.0.0.1 port=15432 dbname=hakata_db sslmode=disable"
)

type PathResult struct {
	PathID int
	Node   int
	Lat    float64
	Lon    float64
}

func main() {
	// PostgreSQLデータベースへの接続
	db, err := sql.Open("postgres", connStr)
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// すべてのパス結果を一度に取得
	results, err := getPathResults(db)
	if err != nil {
		log.Fatal(err)
	}

	// 各パスIDの結果をCSVに保存
	pathIDs := []int{1, 5, 10, 100, 1000, 10000}
	for _, pathID := range pathIDs {
		filename := fmt.Sprintf("path_id_%d.csv", pathID)
		err := saveResultsToCSV(results, pathID, filename)
		if err != nil {
			log.Fatal(err)
		}
	}

	fmt.Println("CSV files created successfully.")
}

// getPathResults すべてのパス結果を取得
func getPathResults(db *sql.DB) ([]PathResult, error) {
	// クエリで指定のpath_idの結果をすべて取得
	query := `
		WITH ksp_result AS (
			SELECT * FROM pgr_ksp(
				'SELECT gid AS id, source, target, cost FROM ways',
				35382,  -- 出発ノードID
				40922,  -- 目的ノードID
				10000,   -- 上位10000本の経路を取得
				false   -- エッジの向きを考慮しない
			)
		)
		SELECT ksp.path_id, ksp.node, ST_Y(wv.the_geom) AS lat, ST_X(wv.the_geom) AS lon
		FROM ksp_result AS ksp
		JOIN ways_vertices_pgr AS wv ON ksp.node = wv.id
		WHERE ksp.path_seq > 0
		ORDER BY ksp.path_id, ksp.path_seq;
	`

	// クエリの実行
	rows, err := db.Query(query)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	// 結果をメモリに保存
	var results []PathResult
	for rows.Next() {
		var result PathResult
		err := rows.Scan(&result.PathID, &result.Node, &result.Lat, &result.Lon)
		if err != nil {
			return nil, err
		}
		results = append(results, result)
	}

	return results, nil
}

// saveResultsToCSV 指定されたpath_idの結果をCSVに保存
func saveResultsToCSV(results []PathResult, pathID int, filename string) error {
	// CSVファイルの作成
	file, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer file.Close()

	writer := csv.NewWriter(file)
	defer writer.Flush()

	// CSVのヘッダーを作成
	err = writer.Write([]string{"Node", "Latitude", "Longitude"})
	if err != nil {
		return err
	}

	// 結果をCSVに書き込む
	for _, result := range results {
		if result.PathID == pathID {
			err := writer.Write([]string{
				fmt.Sprintf("%d", result.Node),
				fmt.Sprintf("%f", result.Lat),
				fmt.Sprintf("%f", result.Lon),
			})
			if err != nil {
				return err
			}
		}
	}

	return nil
}

 

1番目、10番目、1000番目を表示してみました。
まあ、ランダムウォークという感じではないですが、私たちが移動するときも、まあ、こんな感じだと思うので、とりあえずこれで進めようかなと思います。

2024,江端さんの忘備録

本日、長女の結婚式と披露宴に出席してきました。

Today, I attended my eldest daughter's wedding and reception.

私はもともと「本当に結婚式なんてやるの?」と否定的でしたが、終わった今でもその気持ちは変わりません。

I was initially pessimistic about the whole thing, thinking, “Do they have to have a wedding?” that feeling has not changed.

ただ、娘の希望には応えるのが親というものですから、準備を進めてきました。

However, as parents, we must respond to our daughter's wishes, so we have been preparing.

- 髪を伸ばしたり(基本的に私はほぼ丸刈りに近いスポーツ刈り)
- 髪を染めたり(人生初の経験)
- オールバックにするためにジェルで髪を固めたり
- ダイエットしたり(これは人間ドック対策も兼ねていますが)

- Growing my hair out (basically, I have a close-cropped sports cut)
- Dyeing my hair (a first for me)
- Using gel to make my hair stand up in an 'all-back' style
- Dieting (this is also partly to prepare for a full medical check-up)

こうして、娘の希望に合わせて自分の見た目を変えてきましたが ―― まあ、それはいいんです。

This way, I have changed my appearance to suit my daughter's wishes, but that's okay.

---

一番気が重かったのは「バージンロード」のイベントでした。

The event that made me feel the most nervous was the “Aisle of Roses” event.

このイベントは「新婦のエスコート」や「新婦の引き渡し」と呼ばれるものだそうです。

This event is called “escorting the bride” or “handing over the bride.”

しかし、「これって、現代の価値観に合っているの?」と感じずにはいられません。

However, I can't help but wonder, “Does this fit with modern values?”

少し調べてみたところ、「父親が新婦をエスコートしてバージンロードを歩くのは、新婦のこれまでの人生を守り育ててきた象徴」とされていますが、私はそんなに娘の人生を守り育てた覚えはありません。

After researching, I found that “the father escorting the bride down the aisle is a symbol of the father protecting and raising his daughter's life until now,” but I don't remember protecting and raising my daughter's life so much.

娘は自分の力で、自分の人生を生きてきたと信じています。

I believe that my daughter has lived her own life by her strength.

私が提供したのは、資金とちょっとしたアドバイスくらいです。

All I provided was a little bit of advice and some funding.

また、「新婦を家族間で承認し、祝福する」という意味が含まれるそうですが、結婚は当事者の意思で行われるべきもので、他人の承認は必要ないと思います。

It is also said to include the meaning of “approving and blessing the bride by the family,” but I think that the will of the people involved should do marriage and that the approval of others is not necessary.

「バージンロードでの新婦の受け渡し」という表現にも違和感を覚えます。

I also feel uncomfortable with the expression “handing over the bride on the aisle.”

私の娘を「荷物扱い」するのか、と。

I thought they were treating my daughter like luggage.

こう思う父親は、私だけではないと思うのですが。

I don't think I'm the only father who thinks this.

---

とはいえ、娘の希望ですから、否応なく任務を果たしました。

However, since it was my daughter's wish, I fulfilled my duty whether I liked it or not.

何十年ぶりかの「演技」を披露した感じです。

It was like performing an “act” for the first time in decades.

私は元演劇サークルのメンバーですから、「普通の父親」を演じるのは簡単なことです。

I used to be a member of a theater club, so it's easy for me to play the role of a “normal father.”

エルカン文章第3弾 - 祝・江端智一君御成婚記念メール

---

長女のイベントが無事終わりましたが、次女は「今日以上の盛大な結婚式」を希望しているようです。

The eldest daughter's event went smoothly, but the second daughter seems to be hoping for a “more grand wedding than today's.”

私の娘たちの保守的なイベントへの情熱には驚かされます。

I'm amazed at the passion my daughters have for conservative events.

どうやら私は、もう一度「髪を伸ばし、染め、ジェルで固め、娘のエスコートをする」ことになりそうです。

I'll have to do it all again: grow my hair, dye it, gel it, and escort my daughter.

---

結婚自体が難しいこの時代に、こんな些細なことで文句を言える自分は、随分と贅沢なことを言っているんだ、と自覚してはいるんですけどね。

Nowadays, when getting married is difficult, I'm aware that I'm being selfish by complaining about such a trivial matter.

未分類

エルカン文章シリーズの中では、最高級の作品として半永久的に江端書房に保管さ れるであろう見事なレポートが提出されました。

私がレポートを書くよりずっと面白いと思うので、本「エルカン文章」を持って、 私の結婚式の御報告に換えさせて頂きます。

本日は、この文章を御笑納頂き、後日改めて御挨拶申し上げたく希望しております。

---------

それでは御笑納下さい。江端さんのひとりごと特別編、エルカン文章第3弾「祝・ 江端智一君御成婚記念メール」です。

------------------------------------------------------------------------


 


 

Tomoichi Ebata
Wed Apr 17 13:29:08 JST 1996

2024,江端さんの忘備録

私は、これまでずっと「夢」と呼ばれるもののの「害悪」や「呪い」について、散々述べてきました。

I have been talking a lot about the “harm” and “curse” of what is called a “dream.”

そして『「夢を諦める」という行為の正しさを評価し、それをいくつもある選択肢の一つとしなければならない』と、何度も繰り返し言ってきました。

I have said many times that we must evaluate the correctness of 'giving up on a dream' and consider it one of the many options available.

あなたの夢を諦めないで

私は、子どもたちに、常に「7~8割で切り上げよ。決して100%を目指すな」と言い聞かせてきました。

―― エジソン、バカ

―― 「夢を諦める」ことは、「夢を叶える」ことと同程度に有意義である

元高角三(げんこう かくぞう)という生き方

「体罰」を放棄する代償

それに、まあ、ぶっちゃけ、研究員なんぞ、「サンクコストの製造装置」といっても、いいくらいです。

21世紀に残したくない曲 100選

ただ、「夢を諦める」ことは、「失敗」ではありませんが、「大変痛い」です。

However, “giving up on your dreams” is not a “failure,” but it is “excruciating pain.”

「夢を諦めない」ほうが、圧倒的に"楽"で、痛みを感じることは"少ない"です。

It is overwhelmingly easier and you feel less pain if you “don't give up on your dreams”.

なにしろ、今迄やってきたことを止めて、新しいことを始めるのは、恐しくコストが高く、そして恐しいからです。

After all, stopping what you have been doing and starting something new is frighteningly expensive and frightening.

『あの10年、全くの無駄だった』と思うと、やはり悔しい思いはあります。

それでも、私が「夢を諦める」ことを強く勧めるのは、夢に拘泥すると、『自死に至るケース』が無視できないレベルに多いからです。

Even so, I strongly recommend that you give up on your dreams because there are too many cases of people who become so obsessed with their dreams that they end up killing themselves.

なにしろ、私は、その経験者の一人です。

After all, I am one of those who have experienced it.

(↑クリックするとコラムに飛びます)

(Click to go to the column)

-----

しかし、私が20年近く語ってきたことも、この本の説得力には遠く及びません。

However, what I have been saying for nearly 20 years is far from the persuasiveness of this book.

(↑ クリックするとAmazonに飛びます)

(Click to go to Amazon)

のんきに「夢は実現しなければ、意味がない」などと本気で考えていると ―― いずれ「自分で自分を殺すこと」になります。

If you naively think that “dreams are meaningless unless they come true,” you will eventually “kill yourself.”

マジです。

I'm serious.

逆に、そこまで至っていない人の言う"夢"なんて ―― 所詮はポップミュージックで叫ばれているような、ふわふわした願望程度のもので―― そんなものは、"夢"とは呼びません。

On the other hand, the “dreams” of people who haven't gotten that far are just wishful thinking, like the kind you hear in pop music, and I don't call those “dreams.”

2013,江端さんの忘備録

あまりにも腹が立ったので、数日、この日記をリリースするのを差し止めていましたが、数日経過しても、私の気持には揺らぎがないことを確認したので、リリースします。

------

教育現場において「体罰」に「効果」があるのはあたりまえです。

「銃を付きつけられたら、誰だって従う」という、この野蛮な理屈と同じであるからです。

私は、少くとも我が国は、

―― 「体罰」に「効果」はあるのは知っているが、それを「止めよう」と決めた国

であると思っていました。

例えば、クラウゼヴィッツを出すまでもなく「戦争は政治(外交)の延長である」のは自明です。

しかし、戦争が、どんなに優れた外交的効果が期待できたとしても、我が国は、

―― 決して戦争をしない、

―― 決して核兵器を持たない

と決めました。

本当に凄いことだと思います。

一方、

―― 我が国の教育現場は、「体罰」を絶対的な意味において封印した

この教育方針は、この「戦争放棄」の理念と並び立つ、我が国が誇る教育信条であると、私は、ずっと信じていました。

-----

「今まさに、自殺をしようとしている子供を力づくで止める為に、止むなく体罰を行使した」という、緊急避難的な状況での話なら、ともかく、だ。

高々「チームを強くする為」程度のことに、「体罰が有効だ」と、この教師は言ったそうですね。

多分、この教師は人気があって、生徒からも同僚からも信頼を得ていて、間違いなく人間として尊敬するに足ると思われている人間だろうとは思います。

なにせ「校長」から体罰を「看過」して貰っていた程の人間ですから。

だが、私は、そんなことはどうでもよいのです。

この教師は、「効果」として「体罰」をいう手段を行使した ―― この一点において、私はこの教師を絶対に許せない。

この教師は、信じられないくらい、無知で、低能で、下劣で、百万の罵声を浴びせても、まだ足りないくらいに、「最低な奴」と、私は決めつけます。

その程度の知性しかない人間が教師をやっているかと思うと、絶望的な気分になります。

『「体罰」以外のありとあらゆる手段を考えて、試して、実施して、それでも上手くいかなくて辛くて、悔しくて、そうして一人で泣く』 それが、教師だろう、と思うのです。

私は、この教師を含め、「体罰」に「効果」を求める全ての教師を、問答無用で、絶対に許しません。

-----

何度も書きましたが、私は、学生の頃、ギリギリまで迷い、最後の最後で「教職」を断念した人間です。

私は、自分のことを

『効率的な手段を求めて、簡単に「体罰」を行使するタイプの、狭量で卑怯な人間だ』

と自分自身で、よく判っていたからです。

だから私は、「教師」を選んだ奴には、絶対に優しく接しない。

教師という、この世で一番辛い職業を選んだのであれば、一番辛い道を歩け。

その覚悟がないなら、初めから教師なんか選択するな、馬鹿野郎めが。

-----

しかし、教師が生徒の全ての責任を負わされる、という今の状況は、絶対的な意味で、間違っていると思います。

「体罰」以外の方法を全て試みても、なお、思いの届かない子供もいます。

それは、もう、

―― 諦める

という選択をする時期に来ているのではないか、と思うのです。

 

それは、教師、子供、保護者、社会の全てを不幸にするものではありますが、「どっちもダメ」などと、外部の者が勝手に言うことは、甚しく卑怯であると思えるのです。

「体罰」を放棄する代償として「諦める」というのは、概ね、妥当な対価であると、私には思えます。

今回のケースに当て嵌めるのであれは、

「体罰を行使してまで強くしたチームの実力など、髪の毛程の価値もない」

で良いのです。

-----

金八先生や、GTOや、ごくせんは、どこにもいない。

どこにもいないからこそ、これらがドラマとして成立する。

そんなことは、もう誰もが知っていることです。

2012,江端さんの忘備録

たまたま見た、ドラえもんのアニメだったと思います。

ストーリは概ねこんな内容だったかと。

(1)のび太が、タイムマシンで見てきた未来を、「占い」として皆にしゃべっていた時、元高角三という小説家を目指しているもののデビューできずにいる男から、『自分が作家になれるか否かを占って欲しい』と言われる。

(2)のび太は、5年後へ見に行くが、彼は作家としてデビューできていなかったので、その旨を告げると、彼は「きっぱり諦める」といって去っていった。

(3)のび太は、再度、5年後の未来へ行って彼の様子を見にいくと、彼は、アルバイトを続けながら、小説を書き続けていた。

(4)のび太が「どうして、やめなかったのか」と尋ねると、彼は「小説を書いていることが、楽しいから」と笑顔で応えた。

(5)その時、沢山のテレビ局や新聞社の人が家にやってきて、彼の小説が文学賞を受賞したという報告を受ける。

-----

この話、(5)があっただけで、全てが台無しになった。

(4)で終っていれば、名作中の名作で終った筈なのに、「立身出世」「成功賛美」を描いただけの駄作に堕ちた、と思う。

-----

「楽しい」だけで、自分の好きなことを続け、世間に対して揺がない人生は、

『それ自体が「奇跡」と呼べる程の大成功である』

というメッセージを送れる、稀有な機会であったはずなのに、と思えるのです。

2018,江端さんの忘備録

(昨日の続きです)

(Continuation from yesterday)

では、なぜ、そのような大人や教育者がいないかというと、

So, why such adults and educators do not exist, is

多くの大人や、教育者になるような人は、そもそも、「狂気と孤独の世界で、かつ、たった一人で楽しんで生きる」という人生を生きなかった(or 生きれなかった)人だからです。

Many adults and educators, initially, have not lived their lives (or have not been able to live their lives) "In a world of madness and loneliness, and enjoy living alone."

-----

加えて、

In addition, I refer to the following facts,

(3)高い目標をかかげる夢は、概ね挫折する

(3)A dream that needs aiming high is generally broken down.

という事実にも言及しておきたいと思います。

目標のある夢の中でも、特に定量化(合格する or NOT、800点以上 or NOT)する夢は、そこに達成できない間、ずっと自分を痛め苦しめ続けます。

You will continue to suffer from aiming high, which is significantly quantifiable, such as passing or not passing and scoring over 800 points or less.

自分を痛め苦しめ続けるようなことは、継続できずに挫折します。

It is impossible to continue, and finally, it will break you down.

挫折できたなら、まだ幸運です。挫折できない場合、自分の心や体を壊し、最悪の場合、自分を殺します。

Just "breaking down" is lucky for you. If not, the dream breaks your body and mind, and, in the worst case, you will kill yourself.

これは、私の独自の調査と、私自身の体験からも明らかです。

These were based on my research activities and my experiments.

ですから、以前から私が言い続けていますが、

The following, which I have been telling you for a long time, is

―― 「夢を諦める」ことは、「夢を叶える」ことと同程度に有意義である

"Abandon of your dream is valuable for you, equal to "make your dream".

という、私のポリシーに帰着します。

That is my policy.

-----

ところで、

By the way,

次女が、現在、「バクマン」という漫画に嵌っています。

my second daughter is really into a comic named "Bakuman."

この漫画が、素晴しい作品であることを認めるものの、私は好きではありません。

I admit these comics are masterpieces, but I don't like them.