2023,江端さんの技術メモ

Q: 緯度、軽度の点からなる鉄道路線のCSVデータがあるのですが、これが線の順番に並んでおらず、バラバラの順番になっています。このcsvファイルを線の順番に並び替えるGo言語プログラムを作成して下さい。

点画にすれば、こんな感じ

でも、線画にすると、こんな感じになる

で、このcsvのファイル名を、"your_csv_file.csv"として、以下のプログラムに放り込む

package main

import (
	"bufio"
	"encoding/csv"
	"fmt"
	"io"
	"math"
	"os"
	"strconv"
)

// 座標を表す構造体
type Coordinate struct {
	Latitude  float64
	Longitude float64
}

func main() {
	// CSVファイルのパス
	filePath := "your_csv_file.csv"

	// CSVファイルを読み込む
	coordinates, err := readCoordinatesFromFile(filePath)
	if err != nil {
		fmt.Println("Error reading CSV file:", err)
		return
	}

	// 座標を線の順番に並び替え
	sortedCoordinates := sortCoordinates(coordinates)

	// 結果を表示
	for _, coord := range sortedCoordinates {
		fmt.Printf("%f, %f\n", coord.Latitude, coord.Longitude)
	}
}

// CSVファイルから座標を読み込む関数
func readCoordinatesFromFile(filePath string) ([]Coordinate, error) {
	var coordinates []Coordinate

	file, err := os.Open(filePath)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	reader := csv.NewReader(bufio.NewReader(file))
	for {
		line, err := reader.Read()
		if err == io.EOF {
			break
		} else if err != nil {
			return nil, err
		}

		// CSVの各行から緯度と経度を抽出
		latitude, err := strconv.ParseFloat(line[0], 64)
		if err != nil {
			return nil, err
		}
		longitude, err := strconv.ParseFloat(line[1], 64)
		if err != nil {
			return nil, err
		}

		coordinates = append(coordinates, Coordinate{Latitude: latitude, Longitude: longitude})
	}

	return coordinates, nil
}

// 座標を線の順番に並び替える関数
func sortCoordinates(coordinates []Coordinate) []Coordinate {
	// 最初の座標をスタート地点として選択
	startIndex := 0
	sortedCoordinates := []Coordinate{coordinates[startIndex]}
	coordinates = append(coordinates[:startIndex], coordinates[startIndex+1:]...)

	// 座標を距離に基づいてソート
	for len(coordinates) > 0 {
		minIndex := findNearestCoordinateIndex(coordinates, sortedCoordinates[len(sortedCoordinates)-1])
		sortedCoordinates = append(sortedCoordinates, coordinates[minIndex])
		coordinates = append(coordinates[:minIndex], coordinates[minIndex+1:]...)
	}

	return sortedCoordinates
}

// 最も距離の近い座標のインデックスを検索する関数
func findNearestCoordinateIndex(coordinates []Coordinate, reference Coordinate) int {
	minDistance := math.MaxFloat64
	minIndex := 0

	for i, coord := range coordinates {
		distance := calculateDistance(coord, reference)
		if distance < minDistance {
			minDistance = distance
			minIndex = i
		}
	}

	return minIndex
}

// Haversine式を使用して座標間の距離を計算する関数
func calculateDistance(coord1, coord2 Coordinate) float64 {
	earthRadius := 6371.0 // 地球の半径(キロメートル)

	// 度数法からラジアンに変換
	lat1 := degToRad(coord1.Latitude)
	lon1 := degToRad(coord1.Longitude)
	lat2 := degToRad(coord2.Latitude)
	lon2 := degToRad(coord2.Longitude)

	// Haversine式による距離計算
	dlon := lon2 - lon1
	dlat := lat2 - lat1
	a := math.Pow(math.Sin(dlat/2), 2) + math.Cos(lat1)*math.Cos(lat2)*math.Pow(math.Sin(dlon/2), 2)
	c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a))
	distance := earthRadius * c

	return distance
}

// 度数法をラジアンに変換する関数
func degToRad(deg float64) float64 {
	return deg * (math.Pi / 180)
}

でてきたcsvをファイルにして表示すると、こんな感じになった。

だいぶ良くなったんだけど、変な直線が一本引かれている。

考察した結果、このプログラムは、
(Step.1) 出発点に一番近いノードを探す。
(Step.2)そのノードを次の出発点にして(Step.1)を行う
という処理をしているため、使われていないノードが、候補として残ってしまうという問題が生じる。

で、終端に至ったノードは使われていないノードの中から、一番近いノードを探してくるため、このような問題が発生してしまう、ということだろう。

対策は結構簡単で、ノード距離が異様に大きい場合は、そこで打ち切る、という処理を入れれば足る
(面倒なので、今回は、手動で削除した)

以上

2023,江端さんの忘備録

「世界中を敵に回しても」・・・? 世界中って、米軍も?

「世界中を敵に回しても」・・・? 世界中って、みたいに?

で、書いてきたように、私は「たとえ世界を敵に回しても」というセリフが嫌いです。

As I have written, I dislike the line "even if I make me against the world."

しかし、それを「国是」とする政府、国民が実在します。

However, there are absolute governments and people who make it their "national policy."

-----

ところで、我が国の若者が(もちろん全ての若者ではないが)、パレスチナ支援(当然、反イスラエル)で連帯していた時代があったのです。

By the way, there was a time when the youth of our country (not all youth, of course) were in solidarity in support of Palestine (anti-Israel, of course).

1970年代の日本の学生運動におけるパレスチナ支援は、その後の年代にも続き、パレスチナの独立と権利の追求を支える一翼を担いました。

Support for Palestine in the Japanese student movement of the 1970s continued into later years and played a role in supporting Palestine's quest for independence and rights.

抗議運動、デモンストレーション、パレスチナ解放機構(PLO)への支援、加えて、ベトナム反戦運動、など、はっきりいって、当時の大学キャンパスは、無法地帯 ―― もとい「開放区」だったのです。

Protests, demonstrations, support for the Palestine Liberation Organization (PLO), and the anti-Vietnam war movement, to name a few, the university campus at the time was a lawless zone, or rather, an 'open zone.'

残念ながら、私は、15年ほど生まれるのが遅れて、この「開放区」に立つチャンスを逸しましたが、その残滓には付き合ってきた、と思っています。

Unfortunately, I was born about 15 years too late and missed the chance to stand in this "open zone," but I believe I have kept up with the residue.

例えば、こんなやり方で。

For example, in this way.

-----

私、今、大学生をやっているのですが、私の在籍している大学は、1960~70年代に、かなり過激な活動母体として有名な大学だったらしいです。

I am a college student now, and it seems my university was a famous mother of radical activities in the 1960s and 1970s.

しかし、私が見ている限り、大学キャンパスで「パレスチナ連帯」を叫んでいる学生は、一人もいません。

However, as far as I can see, not a single student is shouting "Palestine solidarity" on college campuses.

まあ、当然ですが。

Well, naturally.

今の大学キャンパスで「パレスチナ問題」を知っている学生がいたら、私はビックリするでしょう。

I would be surprised if any student on a college campus today knew about the "Palestinian issue."

2023,江端さんの技術メモ

で「エクスポートをクリック」 → map.osmがダウンロードされる

JOSMで表示する

フィルタを選択

Ctrl-aで選択

「編集」→「座標をコピー」で、座標コピー

ここで、エディター等に(test.csvなどとして)コピーする。

【QGIS】緯度・経度をもつCSVデータを読み込み、地図に表示する

を参照して、test.csvをQGISで表示する。

このように座標が取得できているのが確認できました。

根岸線を削除する場合、JOSMで場所を指定して丹念に削除していく

で、この座標さえ取れれば、

Go言語で、BusRouteの点で繋がれた線とみなして、trackingDataの各点から、その線からの最短距離を算出するようなプログラムの改造をお願いできますか?

が使えるようになる。

ダメ。これで取得した座標は、出現順番がバラバラになっているので、補正処理が必要となる。
今回の場合、南北方向にのみ伸びているので、緯度で並べかえれば良いが、そうでない場合は、別途処理が必要となると思うが(今回は必要ないので、これは省略)

この後であれば、上記のプログラムが使えるはず。

 

ちなみに、
osmosis --read-xml map.osm --tf accept-nodes railway=* --write-xml railway_nodes.osm
osmosis --read-xml map.osm --tf accept-relations railway=* --used-way --write-xml railway_data.osm

は、上手く動かせませんでした。

 

 

2023,江端さんの忘備録

学校の強い部活動の運営管理者に対して、校長のガバナンスが全く効かない ―― というのを、私は良く知っています。

I know the principal's governance is ineffective against the school's strong club operations manager.

特に全国大会レベルの実力を持つ部活動については、現場の教師とか監督は、やり放題です。

Especially about club activities that can compete at the national tournament level, teachers and supervisors in the field can do whatever they want.

以前、私、娘を守る為に、学校と闘ったことがあります。

I, myself, have fought the school before to protect my daughter.

その事実確認について、校長と教師に供述書に署名をさせた書類を、今も自宅の金庫に保管しています。

I still have the documents that I had the principal and the teacher sign in a deposition confirming that fact in my home safe.

その学校で、再び同じ問題が発生したら、その書類を全部、世間にぶちまけまける予定です。

If the same problem occurs again at that school, I plan to blurt out the entire dossier.

-----

江端:「校長先生。あの学校に派手に飾られている『祝 全国大会出場』などと書かれている垂れ幕は、私の娘や他の子どもたちの心身を破壊し尽して得たもの ―― そういう理解でいいんですよね」

Ebata: "Principal. The banners that are flamboyantly displayed in that school that say 'Congratulations on your participation in the national tournament' were obtained by destroying the bodies and minds of my daughter and other children--is that my understanding?

校長先生:「そういう訳では・・・」

Principal: "That's not why..."

江端:「子どもたちを潰してまでして、出場する全国大会なんぞに、どんな価値があるんですか?」

Ebata: "What value is there in a national tournament that you have to destroy the children to enter?"

校長先生:「・・・」

Principal: "..."

-----

という訳で、私は、日大アメフト部の大麻使用問題についても、『理事長のガバナンスが全く効いていない』という状況がよく理解できます。

Therefore, I can understand the situation of 'the Chancellor's governance is not working at all' about the issue of marijuana use by the Nihon University football team.

ですから、「法律に抵触する行為」の発覚時点で、「理事長のガバナンスの範囲を越えた」と判断して、後は法執行機関(警察)と司法(法廷、裁判所)に丸投げですれば、いいんじゃないでしょうか。

Therefore, at the time of discovery of "acts in conflict with the law," it should be determined that "this trouble exceeded the scope of the school governance," and the rest should be left to law enforcement (police) and the judiciary (courts and tribunals).

以前、いじめの問題も、「現場(教師)が解決できないなら、とっとと諦めて、警察と裁判所に任せろ」という話をしたことがあります(が、今、この日記を探しているのですが見つけられません)。

I have said before that if the field (teachers) can't solve the problem of bullying, then give it up and let the police and courts handle it (but I'm looking for this diary now and can't find it).

-----

この機会に、一言申し上げたい。

I want to take this opportunity to say a few words.

『自分の子どもを守る為であれば、あらゆる手段をとって、全てを敵に回して、見苦しく無様に闘え。お前、その子の"親"なんだろう?』

"To protect your child, you must fight in every way possible, against everything and everyone, in an ugly and disgraceful manner. You are the child's parent, aren't you?"

将来の明るい社会の為に「あなたの『犠牲』が必要なのです」

2023,江端さんの忘備録

Q1: 自民党の政治団体のキックバックが話題になっています。このキックバックはどのような問題が発生するのか教えて下さい

Q1: There has been a lot of talk about kickbacks from LDP political groups. Please tell me what kind of problems these kickbacks can cause.

Q2: このキックバックの行為は、どの法律に抵触することになりますか

Q2: Which law would this kickback activity violate?

Q3: 我が国の法律に限定して、可能であれば条文も指定して下さい。

Q3: Please specify only the laws of our country and, if possible, also the text of the articles.

Q4: 政治資金規正法に限定して、抵触する条文を推定して下さい。

Q4: Please estimate the conflicting articles, limited to the Political Funds Control Law.

Q5: キックバックで得られた資金は、本来課税対象になるものでしょうか

Q5: Are kickback funds taxable in nature?

Q6: つまり、キックバックで得られた資金について報告がない、ということは脱税が行われたという理解で良いでしょうか

Q6: In other words, is it correct to say that there is no report on the funds obtained through kickbacks, meaning that tax evasion has occurred?

-----

私が知りたかったのは、つまるところ、この最後の質問(Q6)の回答です。

What I wanted to know, at the bottom, is the answer to this last question (Q6).

ChatGPT:「はい、キックバックで得られた資金について報告せず、かつ税務当局に課税対象として申告しない場合、それは脱税行為とみなされる可能性があります」

ChatGPT: "Yes, if you do not report the funds obtained from kickbacks and do not declare them taxable to the tax authorities, it may be considered an act of tax evasion."

ChatGPT:「脱税は、法的に重大な違法行為であり、税法に違反することです」

ChatGPT: "Tax evasion is a serious legal offense and a violation of tax law."

ChatGPT:「税金を正しく申告せず、納税を回避することは、多くの国で刑事罰の対象となります」

ChatGPT: "Failure to properly report taxes and avoid paying them is a criminal offense in many countries."

-----

ChatGPTから答えを導くには、こういう問答を繰り返して、答を引き出す必要があります。

To derive an answer from ChatGPT, we must repeat these questions and answers to elicit the answer.

ちょっと面倒ですが、掲示板やSNSなんぞより、よっぽど役に立っていると思います。

It is a bit tedious but much more helpful than bulletin boards and social networking sites.

それはさておき。

That aside.

------

最近の私は執筆活動を制限しているので、確定申告しないですが、それでも20万円を1円でも越えたら、ちゃんと自己申告して、追加納税してきたんですけどぉ~

Recently, I have been limiting my writing activities, so I don't file tax returns, but even so, if the amount exceeds 200,000 yen, I file a self-report and pay the additional tax.

ふーん、20万円どころか、1000万円を越えても、納税しないでいいんだぁ~

Hmmm...they don't have to pay taxes even if it's over 10 million yen, let alone 200,000 yen...

そういうことが、できるんだぁ~

They can do that kind of thing.

で、そういう人が、我が国の国会議員なんだぁ~

And such persons are members of our country's parliament.

国会議員って、ステキな職業だなぁ~

Being a Member of Parliament is wonderful.

(キックバックの解釈について、私が誤解しているのであれば、どなたでもご指摘下さい。頂いたご指摘は、江端ファイアウォールを通じて、公開いたします)。

(If I have misunderstood the interpretation of the kickback, anyone is welcome to point it out. I will publish your remarks through the Ebata Firewall.)

「江端ファイアウォール」とは

 

2023,江端さんの技術メモ

特別なネットワークツールを使わずに、ネットワークのトラフィックを計測する方法。
(WinDumpもWireSharkも面倒だなーと)

PowerShellから、これをコピペ(xxxx.batにする必要なし)すると、network_data.logというファイルができる

while ($true) {
    $NetworkInterfaces = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' }
 
    foreach ($NetworkInterface in $NetworkInterfaces) {
        $Statistics = Get-NetAdapterStatistics -Name $NetworkInterface.Name
        $ReceivedBytes = $Statistics.ReceivedBytes
        $SentBytes = $Statistics.SentBytes
 
        $TimeStamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        $Record = "$TimeStamp, Interface: $($NetworkInterface.Name), Received Bytes: $ReceivedBytes bytes, Sent Bytes: $SentBytes bytes"
 
        Add-Content -Path "network_data.log" -Value $Record
    }
 
    Start-Sleep -Seconds 10  # 10秒待機
}

で、network_data.logの内容は、以下の通り

PS C:\Users\azureuser> more .\network_data.log
2023-12-07 10:02:07, Interface: Ethernet 7, Received Bytes: 182088626 bytes, Sent Bytes: 1971150950 bytes
2023-12-07 10:02:07, Interface: Ethernet, Received Bytes: 183155088 bytes, Sent Bytes: 1882163584 bytes
2023-12-07 10:02:17, Interface: Ethernet 7, Received Bytes: 182107502 bytes, Sent Bytes: 1971187408 bytes
2023-12-07 10:02:17, Interface: Ethernet, Received Bytes: 183176035 bytes, Sent Bytes: 1882198919 bytes
2023-12-07 10:02:27, Interface: Ethernet 7, Received Bytes: 182141183 bytes, Sent Bytes: 1971266248 bytes
2023-12-07 10:02:27, Interface: Ethernet, Received Bytes: 183207355 bytes, Sent Bytes: 1882275443 bytes

で、ここで、"Ethernet 7"と、"Ethernet"の2つのインターフェースがあることが分かるので、

$NetworkInterfaces = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' -and $_.Name -eq 'Ethernet' }

とすると、'Ethernet' とか 'Ethernet 7'のどちらかを選ぶことができる。

未分類

会社から、セキュリティ対策の指示がでると心底うんざりします。

I am genuinely sick and tired of receiving instructions from the company about security measures.

(1)まず、資料の内容が分からない。一体何を目的に何がしたいのかがさっぱり分かりません。

(1) First of all, I don't understand what the material is about. I have no idea what they want to do for what purpose.

(2)一発で、マニュアル通りに上手く設定できた試しがない。

(2) According to the manual, I have never been able to set it up successfully in one shot.

(3)設定後に、パソコンを再起動を試みると、かなり高い確率で失敗し、最悪の場合、システムが全部壊れることもある。元の状態に戻すことすらできない。

(3) After setting up, attempts to restart the computer fail pretty, and in the worst case, the entire system can be destroyed. It is not even possible to restore the system to its original state.

ちなみに、これは『ITエンジニア』である私の話です。

By the way, this is my story as an 'IT engineer.'

そうでない人にとっては、このような指示は『悪夢』そのものでしょう。

Such instructions would be a 'nightmare' for those who do not.

-----

このような複雑な設定作業を、エンドユーザに押し付ける ―― これは、『エンジニア集団の会社』だからでしょうか?

Is it because this is a "company of engineers" that forces the end user to go through such a complicated setup process?

それなら諦めるしかないと思いますが ―― それでも、私は本当に怖いです。

Then I guess I'll have to give up, but I'm still really scared.

というか、セキュリティ対策のオペレーションに失敗した場合、その日の仕事は止まりますし、下手すると数日から一週間くらい、何もできなくなる可能性があります。

Or rather, if a security operation fails, work stops for the day, and if it is not good, you may not be able to do anything for a few days or a week.

サイバー攻撃より、酷い。

It is worse than a cyber attack.

実際、私、何度か、そういう目に遭遇しています。

Several times, I have encountered that kind of thing.

-----

今後、さらに、サイバー攻撃は巧妙かつ高度になります。そして、多分、私達はそれについて行けなくなります。

In the future, cyber attacks will become even more sophisticated and advanced. And maybe we will not be able to keep up.

攻撃者は、攻撃だけに集中できますが、私たちは、防御だけに一日を費すことは許されません。

An attacker can focus only on the attack, but we cannot allow our day to be spent only on defense.

通常業務に加えて防御もやる、というのは、相当に過酷な労働環境です。

It is a very demanding work environment, doing defense and regular work.

-----

今後、この状態を続き、セキュリティ対策がさらに難しくなり、私たちがそれについていけなくなれば、

If this continues and security measures become even more difficult for us to keep up with in the future,

―― ハッカー(クラッカー)側の一人勝ちとなる世界が到来する

-- A world in which hackers (crackers) will be the sole winners.

ような気がします。

I feel so.

-----

で、対策なんですが、

So, the countermeasure is,

■パソコン、スマホ、インターネットを全て放棄する

- Abandon all computers, smartphones, and the Internet.

というのは無理としても、

Even if it is impossible to say,

■ダイヤルアップ接続の時代まで、時間を遡る

- Tracing back time to the days of dial-up connections

ところまで退行するのは、どうかなぁ、と、かなり真面目に考えています。

I am seriously thinking that we should regress to this point.

これは、密告が奨励されたかつての社会主義国家や現在の独裁国の様ですし

 

2023,江端さんの技術メモ

ラズパイ4 + USBカメラ Webカメラ C270n HD 720P で、SRTストリームに変換してライブ映像を転送する方法(色々やってきたんだけど、この組み合わせだけがスポッと抜けていて、探すのに苦労した)

送信側
cam@cam-desktop:~$ gst-launch-1.0 v4l2src ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert ! x264enc tune=zerolatency ! mpegtsmux ! srtserversink uri=srt://:8888

受信側
cam@cam-desktop:~$ ffplay -i srt://localhost:8888

2023,江端さんの忘備録

若い人たちと一緒に研究活動に勤しんでおりますが、つくづく思うことは、

I am working with young people in my research activities, and I always think,

―― 若いって、勢いがあるなぁ

"Young people are so energetic."

です。

データを貰う為に、官公庁やベンダーに突っ込んでいく姿を見ると、ホレボレとします。

I am moved to see them running into government agencies and vendors to get data.

社会人は、誰かに何かを頼む場合には、必ず「リターン(お返し)」を準備します。

Whenever working people ask someone to do something, they always prepare a "return."

ぶっちゃけ、『それ(お返し)が一番重要』だったりします。

That (return) is the most important thing.

社会人は、自分のメリットのないことに、コストをかけないからです。

This is because working people do not spend money and time on things that do not benefit them.

-----

学生さんは、そういう視点が「ない」とは言いませんが、「薄い」とは思います。

I would not say that students "don't" have that perspective, but I think it is "thin."

正直、うらやましい。

Frankly, I envy them.

そういえば、私も、学生時代に、プラモデルの会社に乗り込んで、ラジコンカーを一台貰ってきたりしていました。

Come to think of it, when I was a student, I used to go to a plastic model company and get one of their radio-controlled cars.

ファジィカー

-----

社会人は、

It is also a fact that working people are

―― 若い人の『私心のない一生懸命』に弱い

"moved for their unselfish hard work."

というのも、また事実だったりします。

2023,江端さんの忘備録

先日、YouTubeのショートを見ていたら、私の作成した図が使われていました。

The other day, I watched a short on YouTube, and a figure I created was used.

この図は、私なりに考えて、時間をかけて作成したものです。

I have spent a lot of time thinking about and creating this figure.

引用(著作権法32条)を行うなら、『動画の中に出典(URL等)を記載すべきじゃないか?』と思っています。

If he is going to quote (Article 32 of the Copyright Act), shouldn't he 'include the reference (URL, etc.) in the video?' I think so.

-----

ちなみに、YouTubeで、"死後 脅迫 フローチャート"で、検索すると、その動画が見つかります。

By the way, if you go to YouTube and search for "postmortem threats flowchart," you will find the video clip.

―― 政治、宗教、野球、恋愛については、人と議論してはならない