2024,江端さんの忘備録

我が国のお隣りの国、韓国の2022年の出生率は"0.78"でした。

Our neighbor country, South Korea, has a fertility rate of 0.78 in 2022.

もう一度申し上げます。

I will repeat it. It is

0.78

0.78

です。

この話を聞いた時、私は、本当に

When I heard this story, I said in my mind

―― は?

"What?"

と、頭が真っ白になりました。

And my mind went blank.

私、以前、

I, before, wrote

『こんな恐しい値"0.82"は、私が知っている限り、現時点で世界中のどの国にもなく、そして、歴史上一度も登場したことはありません。』

と書きました。

執筆当時は、本当に「なかった」のです。

At the time of writing, it really "wasn't there."

-----

我が国、日本は「課題先進国」―― と言えば、聞こえはいいですが、世界のどの国家よりも「先に"地雷"を踏む運命にある国』です。

Japan is a country with advanced issues. It sounds excellent to say, but Japan is a country that is destined to step on landmines before any other nation in the world.

しかし、お隣の我が国の友好国(お隣のお隣は仮想敵国ですが)は、"地雷"どころか、"国家の存亡"が、本当にスコープに入っています。

However, our friendly neighbors (our neighbors next door are virtual enemies) have not only "landmines" but "national survival" in their scope.

近い未来、私たちは、この問題に関して、韓国に学ぶ場面が出てきます ―― その結果がどうなろうとも、です。

Soon, we will have occasions to learn from South Korea on this issue, no matter the consequences.

―― 仮にタリバンを武力で殲滅することができても、"勉強が嫌いな少女"を虐殺することは、絶対に不可能

未分類

User
以下のプログラムを実行すると、以下のようなエラーがでてきます。 [ERROR:0@0.100] global cap.cpp:643 open VIDEOIO(CV_IMAGES): raised OpenCV exception: OpenCV(4.9.0) /io/opencv/modules/videoio/src/cap_images.cpp:430: error: (-215:Assertion failed) !filename_pattern.empty() in function 'open' Traceback (most recent call last): File "/home/cam/virtual_camera/vc.py", line 32, in <module> main() File "/home/cam/virtual_camera/vc.py", line 24, in main cv2.imshow('Frame', frame) cv2.error: OpenCV(4.9.0) /io/opencv/modules/highgui/src/window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage' 対処方法を教えてください。 import cv2 def main(): # mp4ファイルのパスを指定 video_path = "192.168.1.1.mp4" # mp4ファイルを開く video_capture = cv2.VideoCapture(video_path) # カメラの解像度を設定 width = 640 height = 480 video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, width) video_capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height) # RTSPカメラのフリをするための準備 rtsp_url = "rtsp://localhost:38089/live" # RTSPサーバーのアドレス fourcc = cv2.VideoWriter_fourcc(*'H264') # ビデオコーデックを指定 rtsp_camera = cv2.VideoWriter(rtsp_url, fourcc, 30, (width, height)) # 30fpsで設定 # mp4ファイルを繰り返し再生してRTSPカメラのフリをする while True: ret, frame = video_capture.read() # フレームを読み込む if not ret: video_capture.set(cv2.CAP_PROP_POS_FRAMES, 0) # ファイルの終端に到達した場合、最初に戻る continue rtsp_camera.write(frame) # フレームをRTSPカメラに書き込む # フレームを表示(テスト用) cv2.imshow('Frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break # 後処理 video_capture.release() rtsp_camera.release() cv2.destroyAllWindows() if __name__ == "__main__": main()
ChatGPT

このエラーメッセージは、2つの主要な問題を示しています。

  1. ファイルが開けない問題:
    • このエラーは、OpenCVが指定されたビデオファイル(この場合は192.168.1.1.mp4)を開けないことを示しています。これは、ファイルパスが間違っているか、ファイルが存在しない、あるいはアクセス権限がない場合に発生する可能性があります。
    • 解決策としては、まずファイルパスが正しいかどうかを確認してください。また、ファイルが存在し、アクセス権限があることを確認してください。
  2. cv2.imshow関連の問題:
    • このエラーは、OpenCVがコンパイルされた時に必要なGUIウィンドウサポートが含まれていないことを示しています。これは通常、LinuxシステムでGUI関連のライブラリが不足しているか、あるいは適切にリンクされていない場合に発生します。
    • UbuntuやDebian系のLinuxディストリビューションを使用している場合、libgtk2.0-devpkg-configをインストールしてから、OpenCVを再コンパイルすることで解決できます。以下のコマンドを実行してください:
      sh
    • sudo apt-get update
      sudo apt-get install libgtk2.0-dev pkg-config

      その後、OpenCVをソースから再コンパイルする必要があります。これには、OpenCVのソースコードをダウンロードし、cmakeを使ってビルド設定を行い、makeコマンドでビルドを実行するプロセスが含まれます。このプロセスは時間がかかる場合がありますが、GUI機能を使うためには必要です。

      OpenCVの再コンパイルが必要かどうかを判断する前に、video_pathが正しいかを再確認し、必要に応じて修正してください。また、ビデオファイルが正しく読み込まれているかどうかを確認する別の方法として、ファイルの読み込みに成功したかどうかをチェックするためにret変数の値をログに出力することもお勧めします。

User
video_pathが正しいかを再確認の方法を教えてください
ChatGPT

video_pathが正しいかどうかを確認するには、いくつかの手順を踏むことができます。まず、指定されたパスが実際に存在するファイルを指しているかを確認する必要があります。これはPythonのos.pathモジュールを使用して簡単に行えます。以下のステップでvideo_pathの確認を行う方法を示します。

  1. ファイルの存在確認:
    • Pythonのos.path.exists関数を使用して、ファイルが存在するかどうかを確認します。
    • また、os.path.isfile関数を使用して、指定されたパスが実際にファイルであることを確認することもできます。
  2. パスの正確さ:
    • 絶対パスまたは相対パスが正しく指定されているかを確認します。絶対パスはファイルシステムのルートから完全なパスを示し、相対パスは現在の作業ディレクトリからの位置を示します。

以下のコードスニペットは、上記の検証を行う方法を示しています。

python
import os

video_path = "192.168.1.1.mp4" # ここでのパスは例としています。実際のパスに置き換えてください。

# ファイルが存在するかどうかを確認
if os.path.exists(video_path) and os.path.isfile(video_path):
print("ファイルが存在し、正しいパスです。")
else:
print("ファイルが存在しないか、パスが間違っています。")

このスクリプトを実行することで、指定されたvideo_pathが正しいかどうかを確認できます。ファイルが存在しない場合やパスが間違っている場合は、パスを修正してください。ファイルがネットワーク上にある場合(例えば、IPアドレスを含むパスを使用している場合)、そのファイルにアクセスできるかどうかを確認するためには、適切なネットワークパスまたはストリーミングURLが使用されていることを確認する必要があります。

User
ファイルが存在し、正しいパスです。 と表示されました。
ChatGPT

ファイルが存在し、正しいパスであることが確認できた場合、問題の原因は他にあります。エラーメッセージから、2つの主な問題が考えられます:

  1. OpenCVのGUI関連の機能が動作していない
    • cv2.imshowでエラーが発生していることから、OpenCVがGUIライブラリ(GTK、Qtなど)と正しく連携していない可能性があります。これは、OpenCVのインストール時にGUIサポートが含まれていない、またはGUIライブラリ自体がインストールされていないことが原因である可能性があります。
  2. ビデオキャプチャデバイスの問題ではない
    • ファイルパスが正しく、ファイルも存在するため、ビデオキャプチャデバイス(この場合はファイル)に関する問題ではありません。

解決策

既に確認したGUI関連の問題に対する解決策を再度試す価値があります。具体的には、OpenCVがGUIライブラリと正しく連携するようにするために必要な依存関係をインストールし、OpenCVを再コンパイルすることです。以下は、そのためのステップです:

  1. 必要なGUIライブラリのインストール: UbuntuやDebian系のシステムでは、以下のコマンドを実行します:
    bash
  1. sudo apt-get update
    sudo apt-get install libgtk2.0-dev pkg-config

    これにより、GUI開発に必要なライブラリがインストールされます。

  2. OpenCVの再コンパイル: OpenCVをソースから再コンパイルすることで、これらのライブラリを使用するように設定できます。これには、OpenCVのソースコードをダウンロードし、CMakeを使用してビルド設定を行い、その後ビルド(コンパイル)を実行するプロセスが含まれます。
  3. 別の表示方法の検討cv2.imshowが使用できない場合は、画像処理の結果を確認するための別の方法を検討することもできます。例えば、処理したフレームを画像ファイルとして保存してから、別の画像ビューアで開く方法があります。

GUIライブラリが適切にセットアップされていないことが原因である場合、上記のステップで問題が解決するはずです。それでも問題が解決しない場合は、OpenCVのインストール方法(pip経由、ソースからのビルドなど)や、使用しているシステムの詳細(OSのバージョンなど)に関する情報を再確認し、それに基づいて対処を検討してください。

User
OpenCVの再コンパイル方法を教えてください
ChatGPT

OpenCVをソースから再コンパイルするには、いくつかのステップを踏む必要があります。以下は、Linuxベースのシステム(特にUbuntuやDebian系)でOpenCVを再コンパイルするための一般的な手順です。このプロセスは、OpenCVを最新バージョンでビルドし、GUIサポートを含めることを目的としています。

事前準備

  1. 必要な依存関係をインストールします。OpenCVとそのGUI機能を使用するためには、いくつかのパッケージが必要です。
    bash
  1. sudo apt-get update
    sudo apt-get install build-essential cmake pkg-config
    sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo apt-get install libxvidcore-dev libx264-dev
    sudo apt-get install libgtk-3-dev
    sudo apt-get install libatlas-base-dev gfortran
    sudo apt-get install python3-dev

OpenCVのソースコードのダウンロード

  1. OpenCVとOpenCV_contrib(追加機能を含む)のソースコードをダウンロードします。
    bash
  1. cd ~
    git clone https://github.com/opencv/opencv.git
    git clone https://github.com/opencv/opencv_contrib.git

    特定のバージョンをビルドしたい場合は、各リポジトリ内でgit checkout <バージョンタグ>を実行してください。

ビルド設定

  1. ビルドディレクトリを作成し、CMakeを使用してビルド設定を行います。
    bash
  1. cd ~/opencv
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..

    このコマンドは、OpenCVをビルドするための様々なオプションを設定します。必要に応じてオプションを調整してください。

コンパイル

  1. コンパイルを実行します。このプロセスには時間がかかる場合があります。
    bash
  1. make -j$(nproc)

    -j$(nproc)オプションは、利用可能なすべてのCPUコアを使用してビルドを加速します。

インストール

  1. コンパイルが完了したら、システムにインストールします。
    bash
  1. sudo make install
    sudo ldconfig

確認

  1. OpenCVが正しくインストールされたかを確認します。
    bash
pkg-config --modversion opencv4

またはPythonから:

python
  1. import cv2
    print(cv2.__version__)

これらのステップを完了すると、OpenCVがシステムにインストールされ、GUI関連の機能も使用できるようになります。エラーが発生した場合は、エラーメッセージを注意深く読み、不足している依存関係がないかどうかを確認してください。

未分類

もう寝たいんだが、システムが寝かせてくれない。

止めるわけにもいかないし(そういう中断で、これまでいくつのシステムを壊してきたことやら)

つくづく思うのですが、パッケージは、そのインポートの前に「予想完了時刻」を示すべきだ、と思うのです

2024,江端さんの忘備録

最近、次女が、就活の為にリモートでの説明会に参加しているようです。

Recently, my second daughter has been attending remote information sessions for job hunting.

次女はリビングでパソコンを開くことがあるので、食事の時間にバッティングした時は、私は自室に食事を持ち込んで食べています。

She sometimes opens the computer in the living room, so when it butts up with meal times, I bring my meals into my room to eat.

で、まあ、その間、ちょっと説明会の内容が耳に入ってくるのですが、

And, well, in the meantime, I'm hearing a bit of a presentation,

―― いいなぁ、そんなに夢のある会社なら、私もそこに再就職したいなぁ

"I envy you. If it's such a dream company, I wish to work at the company again."

と思うことがあります。

I sometimes think that.

-----

就活生や企業のリクルート担当の方には申し訳ありませんが、これまでの私の人生を返り見るに、

With apologies to job hunters and corporate recruiters, but looking back over my life so far, I'm sorry to say this, but in my life,

『そんな夢のある会社』は、大抵の場合『夢があるだけ』ということが多い。

I've found that most of the time, the "dream companies" are just dreams.

企業説明会というのは、いわゆる『合コン』です。

A company information session is what we call a "blind date.

『夢があるだけ』の男や女の無責任な発表会場の延長 ―― と考えるのが妥当でしょう。

It is reasonable to consider it an extension of the irresponsible presentation halls of men and women who "only have dreams" -- a place for irresponsible presentations.

長く仕事を続けたいのであれば、過度な夢を持たないことが大切です。

If you want to keep your job for a long time, it is crucial not to dream excessively.

―― 私たちは、自分の人生を自分でコントロールできない

 

2024,江端さんの技術メモ

VSCode の Auto Markdownで目次や章番号が出てこなくなったら、とにかく、拡張機能の全部にチェックをつける

未分類

このプログラムでは、緯度・経度の位置情報から距離の計算を行わずに補完を行っていますが、これは私の意図したものではありません。

下記のsmall_bus_data.csvのデータを使って、私が作って欲しいプログラムのアルゴリズムを説明します。

現在1番目のデータには、12:55:00の時刻情報が入っており、30番目のデータには、13:00:00の時刻情報が入っています。
つまり、この間には、300秒の時間が経過していることになります。

次に、1番目の緯度経度と2番目の緯度経度から距離(メートル)が算出できます。
次に、2番目の緯度経度と3番目の緯度経度から距離(メートル)が算出できます。
最後に、29番目の緯度経度と30番目の緯度経度から距離(メートル)が算出できます。
これらを合計すると、合計移動距離(メートル)が算出できます。
この合計移動距離を、前述の300秒で割ると、平均の秒速が算出できます。
この秒速を使って、現在、時間情報が入っていない、2、3、4、.... 29番目の時刻が算出できますので、それを表示して下さい。

同じように、
現在30番目のデータには、13:00:00の時刻情報が入っており、39番目のデータには、13:02:00の時刻情報が入っています。
つまり、この間には、120秒の時間が経過していることになります。

次に、30番目の緯度経度と31番目の緯度経度から距離(メートル)が算出できます。
次に、31番目の緯度経度と32番目の緯度経度から距離(メートル)が算出できます。
最後に、38番目の緯度経度と39番目の緯度経度から距離(メートル)が算出できます。
これらを合計すると、合計移動距離(メートル)が算出できます。
この合計移動距離を、前述の300秒で割ると、平均の秒速が算出できます。
この秒速を使って、現在、時間情報が入っていない、30、31、.... 38番目の時刻が算出できますので、それを表示して下さい。

以下のsmall_bus_data.csvの時間情報は以下の通りです。

====== small_bus_data.csv ここから =========

1, 93, 139.62957005198, 35.36604342344, 12:55:00
2, 94, 139.62977593991, 35.36605145489,
3, 95, 139.62975577321, 35.36614821472,
(中略)
28, 180, 139.6225614208, 35.36578048832,
29, 178, 139.62231637196, 35.36565733887,
30, 179, 139.62231637196, 35.36565733887, 13:00:00
31, 178, 139.62231637196, 35.36565733887,
(中略)
38, 122, 139.62212431581, 35.36739269906,
39, 123, 139.62186543167, 35.36793117811, 13:02:00

====== small_bus_data.csv ここまで =========

まあ、それでも、私が着手開始できる程度のコードの叩き台は作ってくれましたので、まずまず満足しています。

2024,江端さんの技術メモ

以下のGo言語プログラムで、"small2_bus_data.csv"が1行のみの
1, 93, 139.62957005198, 35.36604342344, 12:55:00
を使って、を読み込ませたのですが、その結果が
1 0 0 12:55:00 [{1 0001-01-01 00:00:00 +0000 UTC {0 0}}]
となってしまいます。

package main

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

// 緯度経度の型定義
type LatLng struct {
	Lat, Lng float64
}

// 時間と緯度経度の情報を持つ構造体
type BusData struct {
	NodeID   int
	Time     time.Time
	Location LatLng
}

func main() {
	// CSVファイルを開く
	file, err := os.Open("small2_bus_data.csv")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer file.Close()

	// CSVファイルの内容をパースする
	reader := csv.NewReader(file)
	records, err := reader.ReadAll()
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// データを格納するためのスライス
	var busData []BusData

	// CSVの各行を処理する
	for _, record := range records {
		nodeID, _ := strconv.Atoi(record[0])
		lng, _ := strconv.ParseFloat(record[2], 64)
		lat, _ := strconv.ParseFloat(record[3], 64)
		timeStr := record[4]

		fmt.Println(nodeID, lng, lat, timeStr)

		// 時間のパース
		var parsedTime time.Time
		if timeStr != "" {
			parsedTime, _ = time.Parse("15:04:05", timeStr)
		}

		// データを構造体に格納
		data := BusData{
			NodeID: nodeID,
			Time:   parsedTime,
			Location: LatLng{
				Lat: lat,
				Lng: lng,
			},
		}
		busData = append(busData, data)
	}

	fmt.Println(busData)
}

で、かなり、すったもんだした結果、文字列に余分なスペースが含まれていたため であることが分かりました(このくらい自動で対処して欲しいが)。

strings.TrimSpace がキモだったようです。

修正後のプログラムは以下の通り。

package main

import (
	"encoding/csv"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

// 緯度経度の型定義
type LatLng struct {
	Lat, Lng float64
}

// 時間と緯度経度の情報を持つ構造体
type BusData struct {
	NodeID   int
	Time     time.Time
	Location LatLng
}

func main() {
	// CSVファイルを開く
	file, err := os.Open("small2_bus_data.csv")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer file.Close()

	// CSVファイルの内容をパースする
	reader := csv.NewReader(file)
	records, err := reader.ReadAll()
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// データを格納するためのスライス
	var busData []BusData

	// CSVの各行を処理する
	for _, record := range records {
		nodeID, _ := strconv.Atoi(record[0])

		// スペースをトリムしてから実数に変換
		lng, err := strconv.ParseFloat(strings.TrimSpace(record[2]), 64)
		if err != nil {
			fmt.Println("Error parsing lng:", err)
			return
		}
		lat, err := strconv.ParseFloat(strings.TrimSpace(record[3]), 64)
		if err != nil {
			fmt.Println("Error parsing lat:", err)
			return
		}
		timeStr := strings.TrimSpace(record[4]) // スペースをトリム

		fmt.Println(nodeID, lng, lat, timeStr)

		// 時間のパース
		var parsedTime time.Time
		if timeStr != "" {
			parsedTime, err = time.Parse("15:04:05", timeStr)
			if err != nil {
				fmt.Println("Error parsing time:", err)
				return
			}
		}

		// データを構造体に格納
		data := BusData{
			NodeID: nodeID,
			Time:   parsedTime,
			Location: LatLng{
				Lat: lat,
				Lng: lng,
			},
		}
		busData = append(busData, data)
	}

	fmt.Println(busData)
}

出力結果は
>go run main28.go
1 139.62957005198 35.36604342344 12:55:00
[{1 0000-01-01 12:55:00 +0000 UTC {35.36604342344 139.62957005198}}]
となり、一安心です。

2024,江端さんの忘備録

私は、人の成功を素直に喜べない、ひねくれた性格の人間です。

I am a person with a twisted personality who cannot honestly enjoy the success of others.

ですが、

However, 

『H3ロケットの打ち上げ成功』

When I learned of the successful launch of the H3 rocket

を知った時、涙が出そうなほど嬉しく思えました。

I was so happy that I almost cried when I learned of the "successful launch of the H3 rocket.

エンジニアは、失敗しつづけることが仕事です。

Engineers are in the business of continually failing.

それでも、"ちんけ"な研究員&エンジニアには、"ちんけ"なりの人類への貢献方法があるんですよ。

でも、本当に、たまに、こういう成功があるから、エンジニアはやめられない ―― と思うこともあります。

But, sometimes, successes like this make me think -- I can't stop being an engineer.

-----

月面探査機「SLIM」の月面着陸のニュースも、もちろん嬉しかったです。

Of course, I was also happy to hear the news of the landing of the SLIM lunar probe on the moon.

でも、それより私が驚愕したのは、「SLIM」の『再起動』です。

But what astonished me more was the "SLIM reboot."

『太陽電池パネルに太陽光が当たって、約9日ぶりに動き始めました』

"Sunlight hit the solar panels, and they started working for the first time in about nine days."

という記事の内容から読みとれることは、、エンジニアたちが、9日間、システムとの通信を遮断し、節電しながら再起動のタイミングまで、じっと我慢し続けた、ということです。

I read from this article that the engineers had to shut down communication with the system for nine days, saving power and holding still until it was time to reboot.

私(江端)は、会社の実験室に設営したシステムが停止すれば、あらゆる手段でアクセスを試みて、夜中であっても、出社してシステムを再起動しに行く、という、せっかちな性格です。

I (Ebata) am an impatient person, and if the system set up in the company's laboratory stops working, I try to access it by any means possible, and even if it is the middle of the night, I go to work to restart the system.

-----

『9日間の忍耐』ができるエンジニア ―― これが、SLIMプロジェクトのエンジニアの皆さんと、私の決定的な差です。

Engineers with "nine days of patience" are the critical difference between the engineers on the SLIM project and me.

言うまでもありませんが、これは『最大級の賛辞』です。

This is 'the greatest compliment'.

2024,江端さんの忘備録

基本的に、私は、モノを修復して使い続けるのが好きです。

I like to restore things and keep using them.

ケチとか、倹約とか、SDGsなどは、私のスコープ外です。

Cheapskate, frugality, SDGs, etc., are outside my scope.

私は、単に、DIYが好きで、修復が好きだけど、面倒くさがり屋で、モノのライフタイムが延ばすことに喜びを感じる変態だからです。

I am simply a pervert who likes to DIY, likes to restore but is a pain in the ass, and takes pleasure in extending the lifetime of things.

昨日も、DIYの理髪(セルフカット)をしました。

Yesterday, I also did a DIY haircut (self-cut).

で、その結果、私の頭には、3箇所のハゲができていますが、これは前向きに考えることにしています。

And as a result, I have three bald spots on my head, which I consider positive.

「江端は過度の仕事のストレスで脱毛症になったんだ → 江端の仕事を減らさないと、また江端が『抑うつ』になるぞ」と、誰かに思って貰えれば、とか(※)。

If someone thinks, "Ebata got alopecia due to excessive work stress → if we don't reduce Ebata's workload, he will become 'depressed' again" (*), or something.

(※『抑うつ』は、信じれないほど辛い病気です、冗談でこんなことを書くべきではありません(書いていますが))

(*'Depression' is a harrowing disease; I shouldn't write this in jest (although I do).)

コラムでさんざんエラそうなことを書いてきた江端の、この体たらくを知って、少しでも気が楽になって貰えれば、幸いでございます。

それはさておき。

That aside.

-----

昨日、Amazonで、ミシンについて調べていました。

Yesterday, I was on Amazon researching sewing machines.

最近は、5000円程度の安いミシンがあるようなので、購入しようかと思いまして。

I was thinking of buying a cheap sewing machine, as there seem to be some available these days for around 5,000 yen.

基本的に私は、なんでも「木工用ボンド」でくっつけて、ジーパンのライフタイムを延ばしています。

I use "wood bond" to attach everything to extend the lifetime of my jeans.

しかし、先日、私のジーパンが、この対応が難しいくらいの破れをしました。

However, the other day, my jeans broke to an extent that this was difficult.

普通に「捨てる」が一択となるような、破れ方だったのですが ―― それでは、何か「負けたような気」がしまして。

It was a rupture, where "throw-away" would generally be the only choice -- but then, I felt like I was "lost" by something.

で、ミシンについてYouTubeで勉強していたのですが、上糸とか下糸とかの設置、糸の張り巡らせ方、ミシンの操作など、―― 見ていたら目が眩みそうになりました。

So I was learning about sewing machines on YouTube, setting up upper and lower threads, tensioning the threads, operating the sewing machine, etc. I was almost dazzled by what I was seeing.

少なくとも、ミシンは「スタートボタン」だけで始められるようなものではないことは、分かりました。

I have found, at least, that sewing machines are not something I can start with the "start button."

これで、気持ちが折れました。

This broke my heart.

ミシンも、この「配線学」の中で教えて欲しかったものです。

I wish that sewing machines had been taught in this "wiring study" as well.

江端さんのひとりごと 「配線学」

-----

パソコンにUSBで接続したら、CAD画面がでてきて、そこに設計図を投入すると、勝手に動き出す ―― そういうミシンは、まだ世の中に存在していないようです。

When connected to a PC via USB, a CAD screen appears, and when a blueprint is input, the sewing machine starts working independently. However, such sewing machines do not seem to exist yet.

取り敢えず、今は、木工用ボンドでジーパンの断面を塗りたくりながら、「PC対応のUSBミシン」の登場を待つことにします。

For now, I will wait for the arrival of the "PC-compatible USB sewing machine" while painting sections of my jeans with wood glue.

2024,江端さんの忘備録

私は興味のある技術は、コストと時間に見合えば、一度試してみたい方です。

I am willing to try any technology that interests me once it is worth the cost and time.

そして、その結果は、会社の秘密情報や会社の不利益になる内容では"ない"と判断すれば、公開することがあります。

The results may be disclosed to the public if we determine that the information is not "confidential" or detrimental to the company.

これは、遵法精神でもなければ、いわんや愛社精神でもありません ―― 約束(契約)です。

This is not a law-abiding spirit or love for the company; it is a promise (contract).

忘れないでください ―― 私は「会社の犬」です。

実際、私の持ちネタは、もっと沢山あって、その中には『墓の中まで持っていく』と決めているものもあります。

I have many more stories, some of which I have decided to 'take to my grave.

それはさておき。

Aside from that.

-----

私は、興味のある技術を試すことは楽しいですが、興味のない技術をやらされることは苦痛です。

I enjoy experimenting with techniques I am interested in, but being forced to do techniques I am not interested in is painful.

実際に、直感的に『この技術はダメだ』と思えるものがあります。

I have a technique that intuitively tells me, 'This technique is no good.

例えば、バズワードと言われているものです。

For example, they are known as buzzwords.

私は、そういう技術には近付かないようにしているのですが、業務命令で、それらに取り組まなければならないこともあります。

I try to avoid those technologies, but sometimes, I have to work on them because of work orders.

予想通り、ダメダメだったこともありますが、しぶしぶ取り組んでいたら、これが意外に面白くなったりすることもあります。

Occasionally, as expected, it was a no-no, but this can be surprisingly interesting if I am reluctant to work on it.

とは言え、ダメダメでも、ダメダメでなくても、業務命令であれば、一定の成果を出さなければなりません。

Nevertheless, if it is a no-no or not, certain results must be achieved if it is a work order.

ダメダメだと思っている技術の仕事を命じられて、予想通りにダメダメな結果を出して、それを理由に上長や幹部から叱責されることがあります ―― これは理不尽で辛いことです。

I may be assigned to work on a technology that I think is no good, produce predictably bad results, and then be reprimanded by my superiors and executives for it -- this is unreasonable and painful.

何が言いたいかというと、

What I'm trying to say is,

―― 私たちは、自分の人生を自分でコントロールできない

"We are not in control of our own lives."

という、ありふれた話です

It is a common story.

今、次女が、絶賛、就活中です。

Right now, my second daughter is job hunting, to great acclaim.

それを見ながら、『彼女も、これから、自分でコントロールできない人生を歩み始めるのだな』と思うと、せつない気持ちになります。

As I watched, I felt sad, thinking, 'She, too, is going to start a life she cannot control.

それはさておき。

Aside from that.

-----

30%:50%:70%の法則 ―― 大学、高校、中学の卒業生が、3年以内に離職する比率です。

The 30%:50%:70% rule is the ratio of college, high school, and secondary school graduates who leave the workforce within three years.

これは、ここ20年間変化がありません。

This has not changed in the last 20 years.

この法則を「悲劇」と見るか、「当然」と見るかは、人によって違うと思います。

Whether one sees this law as "tragic" or "deserved" depends on one's point of view.

しかし、現在の政府の掲げている目標『労働人口の流動化』という観点から見れば、逆の見方ができます。

However, from the perspective of the current government's stated goal of "workforce mobility," the opposite can be seen.

90%:90%:90%の法則 ―― 新入社員の9割が3年以内に離職する世界の実現。これができれば、日本の労働人口の流動は確実になります。

The 90%:90%:90% rule is a world in which 90% of new hires leave their jobs within three years. If this can be achieved, the fluidity of the Japanese workforce will be assured.

もっとも、それで生産性が上がるかどうかは分かりませんが(まあ、下るでしょう。それも劇的に)。

I don't know if it will increase productivity (well, it will decrease...dramatically).

-----

労働人口の流動性は、

The mobility of the workforce is,

(1)新しく生まれた仕事が、誰にとっても楽しい仕事になるわけではない

(1) Not all newly created jobs will be enjoyable for everyone.

(2)新しく生まれた仕事に対応する為には、また最初から勉強をしなおす必要がある

(2) To cope with the newly created work, it is necessary to study all over again from the beginning.

という現実に向き合う必要があります。

We need to face the reality that

どっちにしても、労働人口の流動化は、多くの人の考える気持ち、「面倒くさい」によって阻まれている、というのは事実でしょう。

Either way, it is probably true that the mobility of the workforce is hampered by what many people consider a "hassle.

好きなことであれば、勉強しなおすことも苦痛ではないでしょうが ―― 基本的に、多くの人にとって、勉強は、苦痛です。

If it's something you love, it won't be painful to study again -- but, for many people, studying is painful.

「一度苦労して覚えたことだけを使って、残りの人生をラクして食っていきたい」と思うのは、だれにとっても自然なことなのですから。

It is natural for anyone to want to "make the rest of my life easy, using only what I have learned through hard work.