2014,江端さんの忘備録

北朝鮮の衛星実験用のロケット発射が、国際連合安全保障理事会決議(以下、安保理決議)に違反ということで、現在国際的な非難を浴びています。

一方、日本は、あの「はやぶさ」を含めて、多くの人工衛星を打ち上げているのですが、こっちは安保理決議には引っかかっていないようです。

どこに違いがあるのかと、ちょっと気になったので、調べてみました。

-----

○「安保理決議1874」というものが、この対象らしい。

○概要は、2009年6月12日に国際連合の安全保障理事会で採択された朝鮮民主主義人民共和国(北朝鮮)に関する決議。

○背景は、北朝鮮が2009年5月25日に行った核実験。

○内容は、経済制裁、公海上、海港、空港での兵器または部品などの強制検査し、破壊する権限を加盟国に与えること。

○ちなみに、安全保障理事会を構成する国、15カ国、全会一致で可決された。

(ちなみに常任理事国とは、米国、英国、中国、仏国、露国の5カ国、非常任理事国は、持ち回りで、今は、オーストリア、ブルキナファソ、コスタリカ、クロアチア、日本 、リビア、メキシコ、トルコ、ウガンダ、ベトナムの10カ国)

と、ここまでが客観的事実。

-----

以下、私の主観。

ということは、安保理決議は、国際条約ではない。いわゆるパリ条約やTrip条約のようなものではないのです。

つまり、<北>には、この決議を遵守する法的根拠はなく、そして、守らないからといって、国際司法裁判所に引っ張られる訳でもないことです。

そもそも、その成立プロセスからして、法的拘束力が生じる訳がない。

成立プロセスを擬人化して語れば、

(1)乱暴者で、隣の家に時々火を投げつけたりする、皆から評判の悪い"K"君がいた。

(2)彼が学校を欠席していた時に、『K君がこれ以上悪いことする、またはしそうになったら、皆で文句をいってもいいし、必要ならやっつけてもいい』というルールを、「K君抜き」で作った。

(3)K君は自分で作った花火を試してみたいと思っている。けど、回りの皆が、それは、K君のクラスの友達の家を放火する為の予備的な実験だ、と決めつけて、『みんな(ただしK君を除く)で決めた、(K君にだけ使われる)ルールなのに、ルール違反だぞ』と言っている、と。

まあ、こんな感じですかね。

-----

「はやぶさ打ち上げ」と「今回の<北>のロケット打ち上げ」の間には、本質的な差はない、ということです。

ただ、「これまでの<北>の所業が悪すぎて、国際的に額面通りに信じて貰えていない」という、この一言に尽き、「北」から見れば、「卑怯な欠席裁判をやられた」と思えるでしょう。

# いや、実際には、出席してヤジっていたと思うけどさ。

そこへ行くと、我が国は国際的な優等生です。(但し戦後の常任理事国支配の体制下で、という意味ですけど)

我が国は、間違っても、人工衛星ロケットに核弾頭を乗せて、どこかの国に飛ばす、というような疑いはかけられていない訳ですよ。

-----

「北」は勝手にルールを作られるだけの所業をしてきたし、していると思う。

少なくとも、この点において、私に疑義はない。<北>を擁護する言葉など、一言もない。

しかし、だ。

(1)国際法と国内法の調整や論理の組立てで、法律の学者が実務者が、どれほど苦しい理論を作りだして、非常に長い時間を経て、それを定説にまで高めていることを知っている ―― ちょっとばかり条約や法律を勉強している私としては、

(2)

(a)現時点で、世界を100回近く全滅させる程度の核兵器を保有し、自然環境を根底から破壊するような核実験を2000回以上やってきた常任理事国ふぜいが、

(b)「安保理決議」を、国際法、または国際条約のように語り、あたかも絶対的正義のごとく主張しているという事実や、

(3)
(a)我が国は、全ての核兵器保有国(<北>は勿論、常任理事国も含む)に対して、何の後ろめたさもなく彼らを批判できる絶対的優位な立場にありながら、

(b)「安保理決議」の意義や効力について、国民に何も知らせることなく、だらだらと報道を続けるだけの我が国の政府やマスコミを、

―― 心底から、不快に思う。

2024,江端さんの忘備録

昨日、「ジョジョ・ラビット(2020)」を『楽しい映画』と称しましたが、訂正します。

Yesterday, I referred to "Jojo Rabbit (2020)" as a "fun movie," but I stand corrected.

で、私は、今日も今日とて、プログラムの量産中です。

あれは、真剣に見なければならない映画 ―― 『凄い映画』でした。

That movie had to be taken seriously -- a "great movie."

私の話を聞いて嫁さんも視聴したのですが、彼女のコメントを聞いて、私はその内容にショックを受けました。

My wife watched it after hearing me speak, and I was shocked at what she said about it.

さらに、映画に関するネットのコメント欄を読んで、5つぐらいの伏線を知って、今、衝撃を受けております。

Furthermore, after reading the online comments section about the movie, I was shocked to learn about five or so foreshadowing lines.

『コメント読みながら、その場面の意味を知って、泣きそうになる』という、訳の分からない感情に押し流されています。

I'm being swept away by an unexplainable feeling of 'I'm about to cry because I know what the scene means as I read the comments.

いずれにしても、

In any case,

―― 私の考察/洞察力は、浅すぎる

"My considerations/insights are too shallow."

と、激しい自己嫌悪に陥っています。

I am in a state of intense self-loathing.

-----

今、私の中では、「ジョジョ・ラビット」が「夢の香り」に追いつく勢いです。

"Jojo Rabbit" is catching up to "Scent of a Woman."

Let me see... It's "Scent of a woman" (セント・オブ・ウーマン(邦名「夢の香り」)

 

2024,江端さんの忘備録

私は、『コーディングしながら映画をななめ見する』という、映画を愛している人から激怒されても仕方がない、という視聴をしています。

I have a viewing practice of 'slumbering through a movie while coding,' which is something that should be infuriated by people who love movies.

それについては、堪忍して頂くととて、今日は2つばかり、映画について書きます。

I will leave it at that and write about two movies today.

(1)ラーゲリより愛を込めて(2022)

(1)"Love from the Camp"

これ、2022年の話題の邦画でした。

This was the hottest Japanese film of 2022.

妙な既視感があり、視聴後にちょっと調べてみたところ やっぱりありました。1993年にテレビで放送されていました。

I had a strange sense of déjà vu, and after watching it, I did a little research. There it was: it was broadcast on TV in 1993.

こっちの方を見たくなって、YouTubeとか探っているのですが、現時点で見つかっていません。

I'd like to see this one, and I've been exploring YouTube and the like, but I haven't found it yet.

私、この時のテレビドラマの方での衝撃がもの凄かったのです ―― 『遺言を記憶で運ぶ』というメソッド(方法)に、驚愕し、そして、深く感動いたしました。

I was shocked by the TV drama at that time -- I was astonished and deeply moved by the method of "carrying the will in memory."

まあ、そういう個人的な背景もあり、映画の方はあまり集中できませんでした(収容所がちょっとキレイすぎるなぁ、とか、いらんことが気にかかってしまいました)。

Because of this personal background, I could not concentrate much on the movie (I was bothered by unnecessary things, like the camps being a bit too beautiful).

ラーゲリーについては、個人的には、船戸与一さんの「満州国演義」がお勧めです(図書館で借りてきたのですが、重い(重量が)本でした。今は文庫になっているようです)。

Regarding Lagerie, I recommend "Manchukuo Engi" by Yoichi Funado (I checked it out from the library, but it was a heavy (weight) book. It seems to be in a library now).

そういえば、先日、実写版の「ゴールデンカムイ」についても語りましたが、私としては「蝦夷地別件」も強くお勧めします。

I recently talked about the live-action version of "Golden Kamui." I would also highly recommend "Ezochi Betsuden."

-----

(2)ジョジョ・ラビット(2020)

(2)Jojo Rabbit(2020)

以前から申し上げているように、私、現存して、公に放映されているアウシュビッツの映像は、全て見たと思っていますし、ドキュメンタリーや映画なども、落さずに見ています。

As I have said before, I believe I have seen all the existing and publicly televised images of Auschwitz, as well as documentaries and films, without dropping them.

で、まあ、

And, well,

―― 江端さんって、ナチズムの信奉者なのですか?

このような誤解もされているのですが ―― 繰り返しますが、私のスタンスは『ファッキン、ナチ』です。

There is also this misunderstanding -- again, my stance is "Fuck, Nazi."

この映画は、ヒトラーユーゲントに入る前の子ども(?)の視点から見た、ナチズムに対するコミカルとシリアスのバランスのれた、楽しい映画でした。

This film was a fun film that balanced the comical and the serious against Nazism from the point of view of a child(?) before he joined the Hitler Youth.

ナチスのコンテンツに疲れていた私には、ほっとした気持ちになれる映画でした。

I was tired of the Nazi content, and this film was a relief to me.

どちらも、アマプラで視聴できます。

Both are available on Amazon Prime.

-----

で、私は、今日も今日とて、プログラムの量産中です。

As of today, I am still in mass production of the program.

2024,江端さんの技術メモ

// NormalizeCoordinates 京急富岡駅を基準として正規化された緯度と経度を返す関数
// C:\Users\ebata\tomioka_school\src\trip_school\NormalizeCoordinates.go

package main

import (
	"fmt"
	"math"
)


func NormalizeCoordinates(referenceLat, referenceLng, lat, lng float64) (float64, float64) {
	// 1度あたりの緯度経度のメートル換算
	metersPerDegreeLat := 111319.9 // 緯度1度あたりのメートル数
	metersPerDegreeLng := 111319.9 * math.Cos(referenceLat*(math.Pi/180.0)) // 経度1度あたりのメートル数

	// 緯度と経度の差を計算
	deltaLat := lat - referenceLat
	deltaLng := lng - referenceLng

	// 正規化された緯度と経度を計算
	normalizedLat := deltaLat * metersPerDegreeLat / 100.0
	normalizedLng := deltaLng * metersPerDegreeLng / 100.0

	return normalizedLat, normalizedLng
}

func main() {
	// 京急富岡駅の緯度経度

	keikyuTomiokaLat := 35.367131726654705
	keikyuTomiokaLng := 139.62988318023088

	// 確認用の緯度経度(富岡駅のバス停)

	lat := 35.36605614545459
	lng := 139.6295094178281

	// 緯度経度の正規化
	normalizedLat, normalizedLng := NormalizeCoordinates(keikyuTomiokaLat, keikyuTomiokaLng, lat, lng)

	fmt.Printf("正規化された緯度: %.6f\n", normalizedLat)
	fmt.Printf("正規化された経度: %.6f\n", normalizedLng)
}

2024,江端さんの技術メモ

// NormalizeTime 2つの日時文字列の時間差を秒単位で計算し、600秒を1として正規化する関数
// C:\Users\ebata\tomioka_school\src\trip_school\NormalizeTime.go

package main

import (
	"fmt"
	"time"
)

func NormalizeTime(timeStr1, timeStr2 string) float64 {
	layout := "2006-01-02 15:04:05"
	t1, err := time.Parse(layout, timeStr1)
	if err != nil {
		fmt.Println("Error parsing time string 1:", err)
		return 0
	}

	t2, err := time.Parse(layout, timeStr2)
	if err != nil {
		fmt.Println("Error parsing time string 2:", err)
		return 0
	}

	duration := t2.Sub(t1).Seconds()
	normalizedDuration := duration / 600.0

	return normalizedDuration
}

func main() {
	timeStr1 := "2024-01-01 00:00:00"
	timeStr2 := "2024-02-11 23:45:00"

	normalized := NormalizeTime(timeStr1, timeStr2)
	fmt.Println("正規化された時間差:", normalized)
}

2024,江端さんの技術メモ

3次元を取り扱うDBSCANプログラム

このプログラムでは、同一座標は1つの座標として纏められてしまって、異なるユーザの座標として取り扱ってくれません。

これに対応するために修正したプログラムは以下の通りです。

// ~/tomioka_school/src/trip_school/dbscan_3d_2.go



package main

import (
	"fmt"
	"math"
)

// Point represents a 3D point with coordinates x, y, and t
type Point struct {
	User string
	X, Y, T float64
}

// DistanceTo calculates the Euclidean distance between two 3D points
func (p Point) DistanceTo(other Point) float64 {
	dx := p.X - other.X
	dy := p.Y - other.Y
	dt := p.T - other.T
	return math.Sqrt(dx*dx + dy*dy + dt*dt)
}

// Cluster represents a cluster of points
type Cluster struct {
	Points []Point
}

// DBSCAN performs density-based clustering of 3D points
func DBSCAN(points []Point, epsilon float64, minPts int) []Cluster {
	var clusters []Cluster
	var visited = make(map[string]bool)

	for _, point := range points {
		pointKey := fmt.Sprintf("%s,%f,%f,%f", point.User, point.X, point.Y, point.T)
		if visited[pointKey] {
			continue
		}
		visited[pointKey] = true

		neighbours := getNeighbours(points, point, epsilon)
		if len(neighbours) < minPts {
			continue
		}

		var clusterPoints []Point
		expandCluster(&clusterPoints, points, visited, point, neighbours, epsilon, minPts)
		clusters = append(clusters, Cluster{Points: clusterPoints})
	}

	return clusters
}

// getNeighbours returns all points within distance epsilon of the given point
func getNeighbours(points []Point, point Point, epsilon float64) []Point {
	var neighbours []Point
	for _, other := range points {
		if point.DistanceTo(other) <= epsilon {
			neighbours = append(neighbours, other)
		}
	}
	return neighbours
}

// expandCluster expands the cluster from the given point
func expandCluster(cluster *[]Point, points []Point, visited map[string]bool, point Point, neighbours []Point, epsilon float64, minPts int) {
	*cluster = append(*cluster, point)
	for _, neighbour := range neighbours {
		neighbourKey := fmt.Sprintf("%s,%f,%f,%f", neighbour.User, neighbour.X, neighbour.Y, neighbour.T)
		if !visited[neighbourKey] {
			visited[neighbourKey] = true
			neighbourNeighbours := getNeighbours(points, neighbour, epsilon)
			if len(neighbourNeighbours) >= minPts {
				expandCluster(cluster, points, visited, neighbour, neighbourNeighbours, epsilon, minPts)
			}
		}
	}
}

func main() {
	points := []Point{
		{"A", 1, 2, 0},
		{"A", 1.5, 1.8, 1},
		{"A", 5, 8, 2},
		{"A", 8, 8, 3},
		{"A", 1, 0.6, 4},
		{"A", 9, 11, 5},
		{"A", 8, 2, 6},
		{"A", 10, 2, 7},
		{"A", 9, 3, 8},
		{"B", 1, 2, 0},
		{"B", 1.5, 1.8, 1},
		{"B", 5, 8, 2},
		{"B", 8, 8, 3},
		{"B", 1, 0.6, 4},
		{"B", 9, 11, 5},
		{"B", 8, 2, 6},
		{"B", 10, 2, 7},
		{"B", 9, 3, 8},
		{"C", 1, 2, 0},
		{"C", 1.5, 1.8, 1},
		{"C", 5, 8, 2},
		{"C", 8, 8, 3},
		{"C", 1, 0.6, 4},
		{"C", 9, 11, 5},
		{"C", 8, 2, 6},
		{"C", 10, 2, 7},
		{"C", 9, 3, 8},
	}

	// epsilon := 3.0
	// minPts := 5

	epsilon := 2.5
	minPts := 5


	clusters := DBSCAN(points, epsilon, minPts)
	fmt.Println("Combined Clusters:")
	for i, cluster := range clusters {
		fmt.Printf("Cluster %d:\n", i+1)
		for _, point := range cluster.Points {
			fmt.Printf("  (%s, %.2f, %.2f, %.2f)\n", point.User, point.X, point.Y, point.T)
		}
	}
}

出力結果は以下の通りです。
C:\Users\ebata\tomioka_school\src\trip_school>go run dbscan_3d_2.go
Combined Clusters:
Cluster 1:
(A, 1.00, 2.00, 0.00)
(A, 1.50, 1.80, 1.00)
(B, 1.00, 2.00, 0.00)
(B, 1.50, 1.80, 1.00)
(C, 1.00, 2.00, 0.00)
(C, 1.50, 1.80, 1.00)
Cluster 2:
(A, 8.00, 2.00, 6.00)
(A, 10.00, 2.00, 7.00)
(A, 9.00, 3.00, 8.00)
(B, 8.00, 2.00, 6.00)
(B, 10.00, 2.00, 7.00)
(B, 9.00, 3.00, 8.00)
(C, 8.00, 2.00, 6.00)
(C, 10.00, 2.00, 7.00)
(C, 9.00, 3.00, 8.00)

2024,江端さんの技術メモ

/*
	c:\users\ebata\dscan\dscan3.go

	DBSCANアルゴリズムを実装し、3次元空間のデータ(x、y、t)をクラスタリングするシンプルなプログラムです。
	このプログラムでは、各データポイントは3次元座標(x、y、t)で表され、距離の計算にはユークリッド距離を使用します。

	DBSCANをk-meansの違いで説明します。

	DBSCAN(Density-Based Spatial Clustering of Applications with Noise)とk-meansは、クラスタリングアルゴリズムですが、そのアプローチや動作原理にはいくつかの違いがあります。

	(1)クラスタリング方法:

	- DBSCAN: 密度ベースのクラスタリングアルゴリズムであり、データポイントの密度に基づいてクラスタを形成します。各点は、一定の距離(ε、epsilon)内に最小限の近傍点数(minPts)が存在する場合、その点を中心としたクラスタが形成されます。
	- k-means: 距離ベースのクラスタリングアルゴリズムであり、データポイントの距離に基づいてクラスタを形成します。クラスタの数(k)を事前に指定し、各点を最も近いセントロイド(クラスタの中心)に割り当てます。

	(2)クラスタの形状:

	- DBSCAN: クラスタの形状は任意であり、密度の高い領域に基づいて形成されます。したがって、DBSCANは非凸形状のクラスタを処理できます。
	- k-means: クラスタの形状は円形(球形)であり、各クラスタのセントロイドからの距離に基づいて決定されます。したがって、k-meansは凸形状のクラスタを前提としています。

	(3)ハイパーパラメータ:

	- DBSCAN: ε(epsilon)とminPtsの2つのハイパーパラメータを必要とします。εは近傍点の距離の閾値を定義し、minPtsはクラスタと見なすための最小の近傍点数を指定します
	- k-means: クラスタの数(k)を指定する必要があります。

	(4)ノイズの処理:

	- DBSCAN: ノイズポイントを自動的に検出し、外れ値として扱います。密度が低い領域に存在するポイントは、任意のクラスタに割り当てられず、ノイズとして扱われます。
	-k-means: 外れ値やノイズの処理を明示的に行いません。各点は必ずどれかのクラスタに割り当てられます。

	 要するに、DBSCANは密度ベースのアルゴリズムであり、任意の形状のクラスタを検出し、ノイズを処理する能力があります。一方、k-meansは距離ベースのアルゴリズムであり、クラスタの形状が円形であることを前提としています。


*/

package main

import (
	"fmt"
	"math"
)

// Point represents a 3D point with coordinates x, y, and t
type Point struct {
	X, Y, T float64
}

// DistanceTo calculates the Euclidean distance between two 3D points
func (p Point) DistanceTo(other Point) float64 {
	dx := p.X - other.X
	dy := p.Y - other.Y
	dt := p.T - other.T
	return math.Sqrt(dx*dx + dy*dy + dt*dt)
}

// Cluster represents a cluster of points
type Cluster struct {
	Points []Point
}

// DBSCAN performs density-based clustering of 3D points
func DBSCAN(points []Point, epsilon float64, minPts int) []Cluster {
	var clusters []Cluster
	var visited = make(map[Point]bool)

	for _, point := range points {
		if visited[point] {
			continue
		}
		visited[point] = true

		neighbours := getNeighbours(points, point, epsilon)
		if len(neighbours) < minPts {
			continue
		}

		var clusterPoints []Point
		expandCluster(&clusterPoints, points, visited, point, neighbours, epsilon, minPts)
		clusters = append(clusters, Cluster{Points: clusterPoints})
	}

	return clusters
}

// getNeighbours returns all points within distance epsilon of the given point
func getNeighbours(points []Point, point Point, epsilon float64) []Point {
	var neighbours []Point
	for _, other := range points {
		if point.DistanceTo(other) <= epsilon {
			neighbours = append(neighbours, other)
		}
	}
	return neighbours
}

// expandCluster expands the cluster from the given point
func expandCluster(cluster *[]Point, points []Point, visited map[Point]bool, point Point, neighbours []Point, epsilon float64, minPts int) {
	*cluster = append(*cluster, point)
	for _, neighbour := range neighbours {
		if !visited[neighbour] {
			visited[neighbour] = true
			neighbourNeighbours := getNeighbours(points, neighbour, epsilon)
			if len(neighbourNeighbours) >= minPts {
				expandCluster(cluster, points, visited, neighbour, neighbourNeighbours, epsilon, minPts)
			}
		}
		// Add neighbour to cluster if not already in another cluster
		var isInCluster bool
		for _, c := range *cluster {
			if c == neighbour {
				isInCluster = true
				break
			}
		}
		if !isInCluster {
			*cluster = append(*cluster, neighbour)
		}
	}
}

func main() {
	// Example usage
	points := []Point{
		{X: 1, Y: 2, T: 0},
		{X: 1.5, Y: 1.8, T: 1},
		{X: 5, Y: 8, T: 2},
		{X: 8, Y: 8, T: 3},
		{X: 1, Y: 0.6, T: 4},
		{X: 9, Y: 11, T: 5},
		{X: 8, Y: 2, T: 6},
		{X: 10, Y: 2, T: 7},
		{X: 9, Y: 3, T: 8},
	}

	epsilon := 3.0
	minPts := 2

	clusters := DBSCAN(points, epsilon, minPts)
	for i, cluster := range clusters {
		fmt.Printf("Cluster %d:\n", i+1)
		for _, point := range cluster.Points {
			fmt.Printf("  (%.2f, %.2f, %.2f)\n", point.X, point.Y, point.T)
		}
	}
}

2024,江端さんの忘備録

原作者と二次著作者の間における超有名な事件といえば、「キャンディキャンディ事件」のはずですが、先日の事件と併わせた形では、この話題を見ません。

The most famous case between an author and a secondary author should be the "Candy Candy Case," but I have not seen this topic discussed in conjunction with the recent case.

もしかしたら、「これが、『業界タブー』という奴なのかもしれないなぁ」と、空気の読めない江端(私)は思っています。

Perhaps this is called an "industry taboo," thinks Ebata (me), who can't read the air.

著作権法には、『原作者最強』は絶対的ですが、利益が絡んでくると『金持ち最強』になってしまうのは、どこの世界でも同じようです。

In copyright law, 'the original author is the strongest' is absolute, but when profit is involved, 'the rich are the strongest' seems the same in every world.

-----

この問題は、創作者や研究者自身にとっても、あまり触れたくないものなのです。

This is an issue that creators and researchers do not want to touch.

私のコラムは、色々な書籍やオープンデータをベースにしていますし、私のイラストも他の方の記載されたイラストや写真を参考にしています。

My columns are based on various books and open data, and my illustrations are based on illustrations and photos described by others.

研究活動に至っては、既往研究の論文がなくては、1mmも進めることができません。

Regarding research activities, not a single millimeter of progress can be made without a paper on previous research.

逆に、私の創作物が、他の著作で引用されていることもあります(転用や盗用も山ほどあります)。

Conversely, my creations are sometimes cited in other works (and there are plenty of diversions and plagiarism).

執筆したけど特許権にできなかった私の特許明細書の一つが、70以上もの、後願の特許出願を拒絶査定に追い込んだという話も聞きました(これを、『先行発明の後願排除効』といいます)。

I have heard that one of my patent specifications, which I wrote but could not patent, has rejected more than 70 subsequent patent applications (the "effect of exclusion of subsequent applications for prior inventions").

何が言いたいかというと、『先行著作物と全く無関係な創作活動』は、『幻想である』ということです。

I am trying to say that 'creative activity completely unrelated to prior works' is 'an illusion.

-----

ともあれ、今クリエイターに求められているのは、何よりもまず創造活動そのものであることは言うまでもありません。

At any rate, what is now required of creators is, of course, first and foremost, the creative activity itself.

でも、その次に重要なのは、法律(著作権法)の勉強かもしれません。

But the next most crucial thing might be to study the law (copyright law).

面倒くさいですけど、自分の著作物と自分の命を守る為には、必要なことです。

It's a hassle, but protecting your work and life is necessary.

未分類

その1
Go言語で、250人分のエージェントを作成して、次の処理にかかろうとして
"for"
と書いただけで、
    for i := 0; i < 250; i++ {
        fmt.Println("person[", i, "].Origin:", person[i].Origin.Name, person[i].Origin.Loc.Lng, person[i].Origin.Loc.Lat)
        fmt.Println("person[", i, "].Destination:", person[i].Destination.Name, person[i].Destination.Loc.Lng, person[i].Destination.Loc.Lat)
        fmt.Println("person[", i, "].Route:", person[i].Route)
    }

と、ここまで、自動的にコードを提案された。

その2
Go言語で、
// 時速4kmの場合、1秒間に移動する距離は、
と書いたら、
Copilotが、その後ろに、
4km/h ÷ 3600s/h = 0.00111111111km = 1.11111111m
と、文案を提案してきた。
正直、怖い

2024,江端さんの忘備録

最近、「マルハラ」という新しい種類のハラスメントが話題になっているようです。

Recently, a new type of harassment called "maru-harassment" has become a hot topic.

「承知しました。」という一見、何の変哲もないフレーズの、最後の「。」が怖いということから命名されたハラスメントだそうです。

"It's O.K.." This harassment is named by youth because some fear the "." of the last of "It's O.K.."

もちろん、これを一蹴することは易いですし、反論もできますが ―― 多分、そいうことではないと思うのです。

Of course, it's easy to kick this out and argue -- but maybe that's not the point.

-----

私は、『ハラスメントとは、それを感じる者、すなわち、被害者が一方的に決めつけるもので、加害者は、それに抗弁できない』と認識しています。

I recognize that 'harassment is a unilateral decision made by the one who feels it, i.e., the victim, and the perpetrator has no defense against it.

私たちシニアは、ここ20年くらいの間、それを「セクハラ」や「パラハラ」で思い知ってきました。

We seniors have been reminded of this with "sexual harassment" and "power-harassment" for the last 20 years or so.

「セクハラ=コミュニケーション」、「パワハラ=教育」と言われた時代は、確かにあったし、その時代は、そういう取り扱いでも問題はなかったのです(正確には『当事者には大問題だったけど、世間は取り合ってくれなかった』が正しい)。

There was undoubtedly a time when "sexual harassment = communication" and "power harassment = education," and there was no problem with such treatment in those days (more accurately, "it was a big problem for the parties involved, but the public didn't take it up" is correct).

でも、時代は変わり、社会の価値観が変わり、そして、"昔"は許されても、"今"は許されない「社会悪」です。

But times change, society's values change, and what was acceptable in the past is unacceptable today.

ここで重要なのは「絶対悪(殺人や暴力)」とは異なり、「社会悪」は、日々変化し続けているということです。

It is important to note that unlike "absolute evil" (murder and violence), "social evil" is constantly changing from day to day.

で、このような、変化する社会悪にフォローできないのがシニア(具体的には、私を含む、ジジイとババア)です。

And it is the seniors (the old guys and old ladies, including me) cannot follow up on these changing social evils.

シニアの私としては、政府から「本日から施行される『社会悪』」として官報(*)を出して欲しいくらいです。

As a senior citizen, I want to see the government issue an official gazette(*) as "a 'social evil' that goes into effect today."

(*)官報とは、国の広報誌で、、法律・政令・条約などを公布する媒体として、重要な役割をもっている

(*)The Official Gazette is a government public relations magazine and plays an important role as a medium for promulgating laws, government ordinances, treaties, etc.

それはさておき。

Aside from that.

-----

「マルハラ」という観点から言えば、私のブログは「マルハラ」が満載です。

Regarding "maru-harassment," my blog is full of "maru-harassment."

私の文章は長いから、当然、句読点も山盛りです。

My sentences are long, so naturally, there is a lot of punctuation.

そして、何より、"。"を怖がる人が、耐えられるようなコンテンツではありません。

And above all, these are not the kind of content that people who are afraid of "." will be able to tolerate.

SNSのコミュニケーションツールと、ブログや小説を同じカテゴリーで語るのは無理があるかもしれませんが。

Discussing social networking communication tools, blogs, or novels in the same category may be unreasonable.

-----

ただ、この「マルハラ」とはちょっと違うのですが、思い当たることがあります。

However, I can think of something different from this "maru-harassment."

私のページには、大体一日4000人~5000人の皆さんにご訪問頂いていて、これは、ここ2~3年ほど変動がありません(PVは、その1.5~2倍程度)。

My pages are visited by roughly 4,000 to 5,000 people daily, which has not changed for the past 2 to 3 years (PV is about 1.5 to 2 times that number).

「2~3年間、変動がないことをどう考えるか 』―― これは、なかなかに難しいのです。

"How should I think about the fact that there will be no change for two to three years?" This is a tricky question.

私の文章は、独特で、基本的に内容はキツい(強烈な批判と皮肉の集大成)です。

My writing is unique, and the content is harsh (a collection of solid criticism and sarcasm).

これを毎日読み続けるのは、私ですら、結構な体力が必要です。

It takes a lot of strength, even for me, to keep reading this every day.

私のサイトは、いわば「江端ハラスメント」、"エバハラ"と命名しても良いレベルです。

My site is at the level of "Ebata harassment," so to speak, which I may name "Ebahara.

それゆえ、毎日、ご訪問して頂いている皆様は、まさに、この"エバハラ"を乗り越えた勇者である、と言えるのではないか、と思っています。

Therefore, I believe those of you who visit my pages daily are the brave ones who have overcome this "ebaharah.

少なくとも、「マルハラ」に怯える若者が入って来られるようなブログではない、と思います。

At the very least, I think it is not the kind of blog that young people frightened of "maru-harassment" can enter.

逆に言えば、このブログに集って頂いているこの4000~5000人の皆様は、この江端の"エバハラ"に相対しうる「勇者」であると認定できると思います。

Conversely, the 4,000 to 5,000 of you gathered on this blog can be identified as the "brave" who can stand up to Ebata's "ebahara.

私は、あなたのことを「勇者 ―― ビヨンド エバハラ」、省略して「エバハラ勇者」と命名したいと思います。

I want to name you "Brave -- Beyond Ebahara," or "Ebahara Brave" for short.

でも、少なくとも「エバハラ勇者」は"尊称"にはならないでしょう ―― むしろ、悪い"レッテル"になりそうです。

But at the very least, "Ebahara brave" will not be a "title" -- rather, it will be a bad "label."

これらを忌避して生きてもいいんですか ―― いいんです(楽天カードのCM風)。