2023,江端さんの忘備録

以前、町内会で広報係を担当していたことがありました。

I used to be in charge of "public relations" at a neighborhood association.

町内イベントの撮影を行う必要があったので、私は町内会費で「腕章」を購入しました。

I had to shoot town events, so I purchased "armbands" with my township dues.

こんなのです。

It is like this.

これを装着しているだけで、心理的に作業がしやすくなったのを覚えています。

I remember that just wearing this made it psychologically easier to work with.

「他人から自分がどう見えるか」という視点での安心感が大きかったです。

I felt a great deal of relief from the perspective of "how I was seen from others".

-----

逆にいえば、この腕章の「悪用」は簡単です。

Conversely, it is easy to "abuse" this armband.

盗撮等など、堂々とやられる可能性があります。

Voyeurism, etc., may be done with impunity.

という訳で、皆さんは、腕章をして撮影をしている人がいたら

So, if you find someone wearing an armband and taking pictures,

―― 身分証明書の提示を要求しましょう

"you may demand him/her to see their ID"

逆に「お前は誰か」と問われたら、堂々と『警察の関係者だ』と言いはりましょう。

On the other hand, if they ask, "Who are you?", you proudly claim, "I'm related to a police official".

日本国民は、公共サービスの被提供者ですから、全員『警察の関係者』です。

Japanese citizens are the recipients of public services, so we are all 'related to police personnel.

もし、そいつが逃げ出そうとしたら、取り抑えましょう。

If he/she tries to escape, restrain him/her.

知らない方も多いかと思いますが、私たち国民全員に、逮捕権があります。

Many of you may not know this, but all of us citizens have the right to arrest.

2023,江端さんの忘備録

私のブログを読んで頂いている方なら、私がC/C++の後継言語として(そして、人生最後の言語として)として、Go言語を使っていることはご存知かと思います。

If you have been reading my blog, you know that I am using Go language as a successor to C/C++ (and as the last language in my life).

個人的には、今でもC/C++の方が使いやすいですが、C/C++ではどうしても実現できない2つ

Personally, I still prefer to use C/C++, but there are two things that C/C++ just can't achieve.

- 軽量スレッド(Goroutine)

-Lightweight threads (Goroutine)

- チャネル(Channel)

- Channel

in Golang

ちなみに、当時の弊社では、メモリリークを起こす実装をしたエンジニアは、回りの人間から『バカ、アホ、死ね』と言われて、頭(こうべ)を垂れ続けなければなりませんでした。

-----

さて、本日、

Well, today. I found an article whose title was

「プログラミング言語「Go」が攻撃者に人気の理由」

"Why the programming language "Go" is so popular with attackers"

という記事を見つけました。

これは、『これからのエンジニアがGo言語に興味を持つきっかけになるかもしれない』と思い、期待して読んだのですが、「そうかなぁ」という"???"な内容でした。

I read this with high expectations, thinking that it 'might trigger future engineers' interest in the Go language,' but I wondered "Is that so?"

「今時、マルチプラットフォーム対応でないプログラム言語があったら知りたいくらいだ」と思いますし、

I'd like to know if there is a programming language that is not multi-platform compatible nowadays.

「攻撃プログラムがディスクにロードされずに、オンメモリで攻撃するなど普通だ」とも思いました。

I also thought, "It's normal, for example, for an attacking program to attack on-memory, without being loaded to disk."

つまるところ、最大の理由は、『Go言語のコードが(まだ)珍しい』『現時点で、Goがまだマイナーな言語である』というだけのことのように読めました。

After all, I thought the biggest reason is just that 'Go language code is (still) rare' and 'Go is still a minor language at this point'.

-----

私としては、

As for me,

『Goroutineを使った、1000万のサーバの同時攻撃』

"A simultaneous attack on 10 million servers using Goroutine",

とか

or

『懦弱なサーバの発見と同時に、集中攻撃を開始』

Launch a concentrated attack as soon as a vulnerable server is discovered.

などのような、これまでにない自律的な攻撃プログラムをGo言語で作れる ―― というような内容を期待していたので、正直ガッカリしています。

I was expecting to be able to create an unprecedented autonomous attack program in the Go language, so I am honestly disappointed.

-----

そういえば、「江端 = サイバー攻撃者」というイメージをもっている人がいるように思えます。

Come to think of it, apparently the public has an image of "Ebata = cyber attacker".

はっきり言いますが、誤解です。

To be clear, this is a misunderstanding.

むしろ、サイバー攻撃の被害者となる可能性の方が高いです。

Rather, they are more likely to be victims of cyber attacks.

先日も、『江端さんなら、公共カメラをハックして、家からモニタリングできるのではないですか?』というメールを頂きました。

The other day, I received an e-mail from someone who asked me, "Mr. Ebata, I think you could hack a public camera and monitor it from your home".

このような誤解は、私にとっては、結構な"賞賛"でもあるのですが ―― 残念ながら、私には、その「スキル」がないですし、なにより「時間」がないです。

This kind of misunderstanding is quite "admirable" to me -- unfortunately, I don't have the "skills" and most of all, I don't have the "time".

アニメやドラマの世界では、ハッカー(正確にはクラッカー)が、たちまち国家や企業のサーバに侵入したりしていますが、あれ、かなりの"幻想"です。

In the world of cartoons and dramas, hackers (crackers, to be precise) quickly break into national and corporate servers. However, that is quite an "illusion.

サイバー攻撃は、私に言わせると「どぶ掃除」のような作業だと思います ―― 面倒で、根気もいります。

Cyberattacks, in my opinion, are a "ditch-cleaning" process -- tedious and requires a lot of patience.

ただ、十分な時間をかけて、身元がバレないように、ゆっくりとトライアルを続ければ、多くのシステムは突破できると思います。

However, if you take enough time and continue the trial slowly enough so that your identity is not revealed, I believe that much of the security can be breached.

問題は、そのようなスキルと時間が、誰にでもあるわけではない、ということです。

The problem is that such skills and time are not available to everyone.

ですから、システムを突破される時間より短い時間で定期的にパスワードを変更するだけで、相当に高い確率でサイバー攻撃は阻止できるのですが ―― これをサボる人が、実に多いんですよね。

Therefore, simply changing passwords on a regular basis in less time than it takes to break through the system will stop a cyber attack with a fairly high probability -- but there are so many people who skip this.

2023,江端さんの技術メモ

出典を忘れてしまいましたが、どなたかが作られたコードを丸パクリさせて頂きました。→たぶん"これ"

ノード1 → "A", ノード2 → "B", ノード3 → "C", ノード4 → "D", ノード5 → "E" として取り扱います。

package main

import (
	"errors"
	"fmt"
)

// ノード
type Node struct {
	name  string  // ノード名
	edges []*Edge // 次に移動できるエッジ
	done  bool    // 処理済みかを表すフラグ
	cost  int     // このノードにたどり着くのに必要だったコスト
	prev  *Node   // このノードにたどりつくのに使われたノード
}

func NewNode(name string) *Node {
	node := &Node{name, []*Edge{}, false, -1, nil}
	return node
}

// ノードに次の接続先を示したエッジを追加する
func (self *Node) AddEdge(edge *Edge) {
	self.edges = append(self.edges, edge)
}

// エッジ
type Edge struct {
	next *Node // 次に移動できるノード
	cost int   // 移動にかかるコスト
}

func NewEdge(next *Node, cost int) *Edge {
	edge := &Edge{next, cost}
	return edge
}

// 有向グラフ
type DirectedGraph struct {
	nodes map[string]*Node
}

func NewDirectedGraph() *DirectedGraph {
	return &DirectedGraph{
		map[string]*Node{}}
}

// グラフの要素を追加する (接続元ノード名、接続先ノード名、移動にかかるコスト)
func (self *DirectedGraph) Add(src, dst string, cost int) {
	// ノードが既にある場合は追加しない
	srcNode, ok := self.nodes[src]
	if !ok {
		srcNode = NewNode(src)
		self.nodes[src] = srcNode
	}

	dstNode, ok := self.nodes[dst]
	if !ok {
		dstNode = NewNode(dst)
		self.nodes[dst] = dstNode
	}

	// ノードをエッジでつなぐ
	edge := NewEdge(dstNode, cost)
	srcNode.AddEdge(edge)
}

// スタートとゴールを指定して最短経路を求める
func (self *DirectedGraph) ShortestPath(start string, goal string) (ret []*Node, err error) {
	// 名前からスタート地点のノードを取得する
	startNode := self.nodes[start]

	// スタートのコストを 0 に設定することで処理対象にする
	startNode.cost = 0

	for {
		// 次の処理対象のノードを取得する
		node, err := self.nextNode()

		// 次に処理するノードが見つからなければ終了
		if err != nil {
			return nil, errors.New("Goal not found")
		}

		// ゴールまで到達した
		if node.name == goal {
			break
		}

		// 取得したノードを処理する
		self.calc(node)
	}

	// ゴールから逆順にスタートまでノードをたどっていく
	n := self.nodes[goal]
	for {
		ret = append(ret, n)
		if n.name == start {
			break
		}
		n = n.prev
	}

	return ret, nil
}

// つながっているノードのコストを計算する
func (self *DirectedGraph) calc(node *Node) {
	// ノードにつながっているエッジを取得する
	for _, edge := range node.edges {
		nextNode := edge.next

		// 既に処理済みのノードならスキップする
		if nextNode.done {
			continue
		}

		// このノードに到達するのに必要なコストを計算する
		cost := node.cost + edge.cost
		if nextNode.cost == -1 || cost < nextNode.cost {
			// 既に見つかっている経路よりもコストが小さければ処理中のノードを遷移元として記録する
			nextNode.cost = cost
			nextNode.prev = node
		}
	}

	// つながっているノードのコスト計算がおわったらこのノードは処理済みをマークする
	node.done = true
}

func (self *DirectedGraph) nextNode() (next *Node, err error) {
	// グラフに含まれるノードを線形探索する
	for _, node := range self.nodes {

		// 処理済みのノードは対象外
		if node.done {
			continue
		}

		// コストが初期値 (-1) になっているノードはまだそのノードまでの最短経路が判明していないので処理できない
		if node.cost == -1 {
			continue
		}

		// 最初に見つかったものは問答無用で次の処理対象の候補になる
		if next == nil {
			next = node
		}

		// 既に見つかったノードよりもコストの小さいものがあればそちらを先に処理しなければいけない
		if next.cost > node.cost {
			next = node
		}
	}

	// 次の処理対象となるノードが見つからなかったときはエラー
	if next == nil {
		return nil, errors.New("Untreated node not found")
	}

	return
}

func main() {
	// 有向グラフを作る
	g := NewDirectedGraph()

	// グラフを定義していく
	g.Add("A", "B", 2)
	g.Add("A", "C", 7)
	g.Add("A", "D", 5)

	g.Add("B", "D", 4)

	g.Add("C", "E", 2)

	g.Add("D", "C", 1)
	g.Add("D", "E", 4)

	g.Add("E", "C", 2)

	// "s" ノードから "z" ノードへの最短経路を得る
	path, err := g.ShortestPath("A", "E")

	// 経路が見つからなければ終了
	if err != nil {
		fmt.Println("Goal not found")
		return
	}

	// 見つかった経路からノードとコストを表示する
	for _, node := range path {
		fmt.Printf("ノード: %v, コスト: %v\n", node.name, node.cost)
	}
}

 

出力結果

C:\Users\ebata> go run .\dijkstra.go
ノード: E, コスト: 8
ノード: C, コスト: 6
ノード: D, コスト: 5
ノード: A, コスト: 0

ラベル修正法の練習(だけ)

2023,江端さんの技術メモ

「Golangでcsvファイルを読み出す」の記事は多いのですが、特定の行まで引っ張り出す情報があまりないので、メモを残しておきます。

/*
以下のcsvファイル(kai_20220522holyday18.csv)の中身を取り出す
id,age,type,departure_name,departure_number,departure_lat,departure_lng,arrival_name,arrival_number,arrival_lat,arrival_lng
0,43,resident,,,34.173408,131.470684,,,34.155862,131.501246
1,24,resident,,,34.179449,131.482543,,,34.164116,131.471791
2,42,resident,,,34.168739,131.470768,,,34.160989,131.491124
3,21,resident,,,34.169494,131.469934,,,34.173498,131.471351
4,58,resident,,,34.185295,131.47414,,,34.191481,131.49456
5,48,resident,,,34.150778,131.480747,,,34.16536,131.471872
6,56,resident,,,34.16536,131.471872,,,34.174066,131.479312
7,73,resident,,,34.155731,131.500845,,,34.16776,131.472831
8,47,resident,,,34.167237,131.471785,,,34.155775,131.476531
9,21,resident,,,34.154931,131.50468,,,34.156678,131.49581
10,37,resident,,,34.16727,131.472899,,,34.171253,131.471177
11,40,resident,,,34.147241,131.474921,,,34.150675,131.486268
12,67,resident,,,34.173683,131.476347,,,34.173643,131.471027
13,28,resident,,,34.183079,131.484303,,,34.174245,131.474592
14,46,resident,,,34.146154,131.472711,,,34.159611,131.491548
15,25,resident,,,34.162497,131.489283,,,34.147212,131.475984
*/

package main

import (
	"encoding/csv"
	"fmt"
	"log"
	"os"
	"strconv"
)

func main() {
	file, err := os.Open("kai_20220522holyday18.csv") // 先ほど入手した郵便番号データをos.Openで開く
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	r := csv.NewReader(file)
	rows, err := r.ReadAll() // csvを一度に全て読み込む
	if err != nil {
		log.Fatal(err)
	}

	// 行ごとに
	for i, row := range rows {
		if i == 0 {
			continue // CSVのヘッダー行を無視
		}

		age := row[1]

		departure_lat, err := strconv.ParseFloat(row[5], 64)
		if err != nil {
			log.Fatal(err)
		}
		departure_lng, err := strconv.ParseFloat(row[6], 64)
		if err != nil {
			log.Fatal(err)
		}

		arrival_lat, err := strconv.ParseFloat(row[9], 64)
		if err != nil {
			log.Fatal(err)
		}

		arrival_lng, err := strconv.ParseFloat(row[10], 64)
		if err != nil {
			log.Fatal(err)
		}

		fmt.Println(age, departure_lat, departure_lng, arrival_lat, arrival_lng)

	}
}

 

出力結果

C:\Users\ebata\yamaguchi\src_try1\others> go run main5.go
43 34.173408 131.470684 34.155862 131.501246
24 34.179449 131.482543 34.164116 131.471791
42 34.168739 131.470768 34.160989 131.491124
21 34.169494 131.469934 34.173498 131.471351
58 34.185295 131.47414 34.191481 131.49456
56 34.16536 131.471872 34.174066 131.479312
73 34.155731 131.500845 34.16776 131.472831
47 34.167237 131.471785 34.155775 131.476531
21 34.154931 131.50468 34.156678 131.49581
37 34.16727 131.472899 34.171253 131.471177
40 34.147241 131.474921 34.150675 131.486268
67 34.173683 131.476347 34.173643 131.471027
28 34.183079 131.484303 34.174245 131.474592
46 34.146154 131.472711 34.159611 131.491548
25 34.162497 131.489283 34.147212 131.475984

 

2017,江端さんの忘備録

我が家の次女(中3)は、毎日電車を使って往復3時間くらいかけて通学しています。

My second daughter (the 9th grade) uses a train every day for about 3 hours to go to school.

そして、通学路の途中の「立ち食いそば」について、その辺にいるグルメ評論家に負けないくらいの「一言家」になっています。

And about "stand-up-eating soba noodle shop" on the way to school, she became an "expert", I think that she will not lose to the gourmet critic around here.

私の方が、出張の時に、次女の薦める立ち食いそば屋にいっているくらいです(本当)。

When I travel on business, I am going to a "stand-up-eating soba noodle shop" recommended by my second daughter (really).

―― "そば"を語れる女子中学生 (但し「立食いそば」限定)

"Junior high school girls who can talk about "soba" (However, "stand-up-eating soba" only)"

私の自慢の娘です。

My daughter is proud of me.

マクドナルドとかのファストフードを語る女子中学生など、掃いて捨てるほどいるでしょう。

I think that junior high school girls are now a dime a dozen to talk about fast food such as McDonald's

-----

私もそばが好きなのですが、『今一つ、私が自分の殻を破れない』と思っていることの一つに、

I also like soba too, however, I think that one of "what I cannot break out of my shell" is

「コロッケ入りそば」

"Croquette Soba"

があります。

私は、「コロッケを蕎麦汁に沈める」というパラダイムを、まだ受け入れられないでいます。

I am still unable to accept the paradigm "to sink croquette in soba soup".

「コロッケ入りそば」の素晴しさについては、多くの人が多くの媒体で語っていますので、その真偽については、私は1mmも疑っていません。

Regarding the taste of "Croquette Soba", I don't suspect the good taste, since many people are talking on many media.

間違いなく「コロッケ入りそば」は美味しいはずです。

Definitely "Croquette Soba" should be delicious, I believe.

実際、私は、「かき揚げを蕎麦汁に沈める」ことに躊躇がありません。

In fact, I do not hesitate to "sink Tempura in soba soup".

(ちなみに嫁さんは、「かき揚げは、沈めずに食べるもの」というポリシーの持ち主であることを、今回知りました)

(By the way, I learned that my wife has a policy "Eating Tempura without sinking" this time)

-----

このような「コロッケ入りそば」に対するクローズドマインドな私に対して、

For me with a closed-mind against "Croquette Soba",

次女は、

My second daughter

『フッ、所詮、パパも、その程度の器(うつわ)か』

"Huh, my father has also such a small-heart, after all"

と、冷たい笑みを浮べて、吐き捨てるように言います。

told me to spit up with a cold smile.

そして、彼女は「コロッケ入りそば」の食べ方のイシューについて、熱く語り出しました。

And, she spoke hotly about the issue of how to eat "Croquette Soba".

なんでも、

She said,

『先ず、コロッケを2分割して、半分はコロッケの味を楽しみ、もう半分は蕎麦汁に沈めて、その時間経緯ととにも変化するそばの味を楽しむ』

"First of all, a croquette should be divided into two parts. One half is for enjoying the taste of croquette, another half should be submerged in soba soup and we will enjoy the taste of soba which also changes with the time"

―― というのが、彼女の「コロッケ入りそば」の哲学のようです。

This is her philosophy of "Croquette Soba".

-----

最近の駅の立ち食いそば屋は、美しそうなそばの写真を、巨大な壁全体のディプレイとして施し、集客を図っています。

Recently "stand-up-eating soba noodle shops" are trying to attract customers. with put big photos of a beautiful soba over the huge wall.

朝飯を抜いて出社した朝とか、ダイエット中の会社からの帰宅時などに、

In the morning when I got out of the breakfast or, in the midnight when I go back home while dieting,

"これらのディスプレイが、私にとって、どれほど非人道的な殺人兵器として機能しているか ―― "

"How these displays function work well as murder weapons for me"

皆さんにも、ご理解頂けるものと確信しております。

I believe you can understand that.

2023,江端さんの忘備録

昨日、留学生の一人から、「名前を日本語(カタカナとひらがな)で表記してくれ」、と頼まれました。

Yesterday, one of the international students asked me to write his name in Japanese (katakana and hiragana).

―― は?

"What?"

と思いましたよ。

I thought it.

外国人なら、自分の名前を外国語表記しても許されるだろう、と思っていました。

I thought that if I were a foreigner, I would be allowed to write my name in a foreign language.

それに、カタカナとひらがな表記の強要は、ちょっと外国の人に失礼ではないかな、と思うのですよ。

Besides, I think that forcing people to write in katakana and hiragana is a bit rude to people from other countries.

-----

ところが、日本の法律では、日本語表記が必須となっているのですよ ―― 例えば「特許法」。

However, Japanese law requires Japanese notation -- for example, "Patent Law".

例えば、特開昭55-043192の発明者は、

For example, the inventors of JP Shou 55-043192 was

『レ-ム・ゲゼルシヤフト・ミツト・ベシユレンクテル・ハフツング』さん

Mr. "Rehm Gesellschaft Mitut Beschurenkutter Haftung".

となっています。

この名前なら、なんとなく「ドイツ人」かな、と思えますし、ドイツ語は、日本語発音がしやすいのいいのですが ――

I think this name sounds somewhat "German," and German is easy to pronounce in Japanese, but--

中東、アフリカ、そして、東南アジア(日本を除く)の国々の人は、そもそも、ローマ字的に表記されていないので、文字から発音を推測することが、全くできないのです。

People in the Middle East, Africa, and Southeast Asia (excluding Japan) cannot guess the pronunciation from the letters because they are not written in the Roman alphabet.

-----

で、私は、文字を読んで日本語変換するのを諦めて、

And I gave up reading the letters and converting them to Japanese, and said

『ゆっくりと名前を発音してみてくれないかな?』

"Would you try to pronounce you name as slowly as you can ?"

といって、その音声を、そのまま、カタカナで書き下してみました。

I wrote down the sound in katakana as it is.

『あのさ、もし書類に記載する必要があるなら、私が、今、ここで書き込むよ?』

'You know what, if you need me to fill out the paperwork, I'll write it right here, right now'

と申し出たのですが、彼は「日本語の勉強にもなるから、自分でやる」と言いました。

I offered to do it, but he said he would do it himself because it would help him learn Japanese.

立派な心掛けだと思います。

I think it is an admirable mindset.

-----

その後、私が彼の日本での名付け親になったような気分になりました。

After that, I felt like I was his godparent in Japan.

2023,江端さんの忘備録

関東に来てから、私、ずっと蕎麦が好きです。

I have always loved soba since I came to Kanto area.

関東の蕎麦は、たいてい美味しいです。

Soba in the Kanto region is usually delicious.

駅に併設されている蕎麦屋(立食いソバ)も、ちゃんと美味しい。

―― 小田急の乗客の多くに愛され続けている「名代 箱根そば」について、熱く語れる女子高校生

The soba restaurant (even if it is a stand-up buckwheat noodle shop) attached to the station is also properly delicious.

-----

昨日、スーパー銭湯のレストランで食した「肉汁つけソバ」が美味しかったので、自分で作って、嫁さんに振る舞ってみました。

Yesterday, I enjoyed the "buckwheat noodles with gravy" that I had at a restaurant in a super public bathhouse, so I cooked it myself and served it to my wife.

参考にしたレシピはこちらです。

Here is the recipe I used as a reference.

『昨日に比べると味が薄い』と感じたので、つけ汁の素材を少しずつ増していきながら、味見をし続けました。

I kept tasting, gradually increasing the amount of ingredients in the dipping sauce, because I felt it was 'less flavorful than yesterday'.

その内、訳が分からなくなってきて、ある時点から味の修正ができなくなってしまいました。

Eventually, I lost the taste, and at some point I couldn't modify the taste.

料理にも「ポイント・オブ・ノーリターン」があります。

Cooking also has a "point of no return".

(脳死判定に使わている用語でしたが、最近は温暖化対策などでも使われているようです)

(The term used to be used for brain death determination, but recently it seems to be used for global warming countermeasures, etc.)

まあ、そこそこ美味しかったですし、嫁さんにも好評だったので、また作ってみようと思います。

Well, it was delicious there, and my wife loved it, so I will cook it again.

-----

今日の話は、次のコラムの前フリに使う予定のネタです。

Today's story is the one I plan to use as a preamble to my next column.

2023,江端さんの忘備録

人生を有意義に生きる方法として「やるべきことではなくて『やらないこと』を決める」という意見を、最近見かけます。

I have recently seen the opinion that one way to live a meaningful life is to decide "what not to do" instead of what to do.

また、「すでに完成しているものを、再度自力で作ること」を『車輪の再発明』という言い方をして、再三、エンジニア(特にソフトウェアエンジニア)に警告がされてきました。

Engineers (especially software engineers) have been warned again and again about "reinventing the wheel," a term that refers to "taking something that has already been completed and making it again on your own.

上記に対して、私の態度は昔から一貫しています。

My attitude toward the above has always been consistent.

―― ふうん

"hmm"

です。

-----

今日、講義で、紙とエンピツを使って、最短経路問題であるダイクストラ法と、修正ラベル法を解いていました。

Today, in lecture, we were solving Dijkstra and modified label methods as the shortest path problem, using paper and an empit.

久々に、その解法の美しさに感動していました。

After a long time, I was impressed by the beauty of the solution.

私は、ダイクストラ法も、ワーシャルフロイド法も、自力でコーディグしていたくらいです。

I had even coded both the Dijkstra and Warchal Floyd methods on my own.

ワーシャル-フロイド法 サンプルプログラム

ですが、このような経路問題アルゴリズムなど、ネットに山ほど落ちていますし、フリーのライブラリも充実しています。

However, there are plenty of such routing problem algorithms and others on the Internet, and there are also extensive free libraries.

GISをDIYで作ろう―PostGISを使い倒す

私のやっていることは、典型的な『車輪の再発明』です ―― だから、これは「無駄」なのでしょう。

What I am doing is typical 'reinventing the wheel' -- so I guess this is 'futile'.

-----

しかし、私は、それらのアルゴリズムを自力でコーディングしていたので、自由に改造ができました。

However, I had coded those algorithms on my own and was free to modify them.

その改造のおかげで、100万人都市の、飛び込み自殺による列車ダイヤの大混乱から収束までの経緯を5分間で計算するアルゴリズムを考案して、査読論文を一本通しました。

Thanks to that modification, I devised an algorithm to calculate how a city of one million people went from train schedule havoc caused by a suicide jump to convergence in five minutes, and got one peer-reviewed paper through.

また、私が、「やるべきことではなくて『やらないこと』を決める」てなことをしてしまったら、私がこれまで続けてきた日記やコラムは、その時点で、「即、終了」となってしまうでしょう。

Also, if I were to decide "what not to do" instead of what I should do, the diaries and columns I have been keeping would be "terminated immediately" at that point.

-----

まあ、私の人生は、無駄が多く、かつ、有意義でもないのでしょう ―― が、それならそれで、私は構いません。

Well, I guess my life is not very meaningful or meaningful -- but that's OK with me.

『本当に、意義のない、無駄な人生を生きてきたなぁ』と、つぶやきながら、私は死んでいくつもりです。

I will die muttering, 'I have truly lived a meaningless and futile life'.

2023,江端さんの技術メモ

公共交通指向型開発(TOD: Transit Oriented Development) - 公共交通機関に基盤を置き、自動車に依存しない社会を目指した都市開発。
「交通隣接型開発」(TAD:‘transit-adjacent development’) 公共交通拠点と隣接して、高密度、大規模開発を行うが、機能上に、互い協調的な開発モードが不足である。

未分類

ちょっと調べてみたところ、使えるみたいです
(いつ入手したのか忘れましたが、倉庫に入っていました)。