2025,江端さんの技術メモ

TC帯域を設定して、レイテンシーを設定した後、パケロスや遅延を設定する場合、だいたい、こうやるのですが、

sudo tc qdisc add dev eth0 root handle 1: tbf rate 10mbit burst 10kb latency 500ms
sudo tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 10000ms loss 1%

RTNETLINK answers: No such file or directory と言われます。

Webで調べてみたところ、山のように、同じ"悲鳴"が飛んでいました。

で、解決方ですが、ChatGPTが、逆転の発想のやりかたを教えてくれました。

# 既存の設定を削除
sudo tc qdisc del dev eth0 root (何か表示されるが無視する)

# `netem` を root にして、まずパケットロスを設定
sudo tc qdisc add dev eth0 root handle 1: netem loss 1% delay 10000ms

# その上に `tbf` を適用
sudo tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 10mbit burst 10kb latency 500ms

つまるところ、ルールの親と子を引っくり返す、という手法です。

まあ、理由は不明ですが、これで動いているようです。

2025,江端さんの技術メモ

例題: 水道の蛇口に例える

ネットワークの「ビットレート (bitrate)」と「帯域 (bandwidth)」 の違いを、水道の蛇口に例えて説明します。


1. 帯域 (bandwidth) = 水道管の太さ

  • 水道管の太さが 「ネットワークの帯域」 に相当する。
  • 例えば 「10Gbpsの回線」 というのは 「直径10cmの水道管」 に相当する。
  • 「最大で10Gbps流せる」 という意味だが、実際にどれくらい流すかは別の話。

2. ビットレート (bitrate) = 水の流量 (蛇口の開き具合)

  • 蛇口をどれくらい開くかが 「ビットレート」 に相当する。
  • 例えば tcrate 5mbit を設定すると、蛇口を半分だけ開くようなイメージ。
  • 回線が10Gbps(帯域)でも、実際に使うのは5Mbps(ビットレート)に制限される。

3. tc を使った制限の具体例

(1) 10Gbpsの回線を持つPC (帯域 = 10Gbps)

  • 例えば、自宅のネット回線が 10Gbps だったとする。
  • しかし、tc を使って rate 5mbit に制限すると、実際のデータ転送は 5Mbps しか出ない。

(2) tc で 5Mbps のビットレート制限

sudo tc qdisc add dev eth0 root tbf rate 5mbit burst 10kb latency 1ms

この設定をすると、10Gbpsの回線を持っていても、実際の転送速度は 5Mbps に制限 される(=蛇口を少ししか開かない)。

(3) tc で 5Mbps ~ 10Mbps の変動を許可

sudo tc qdisc add dev eth0 root handle 1: htb default 10
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 5mbit ceil 10mbit
  • 最低 5Mbps最大 10Mbps まで許可 する設定。
  • 普段は5Mbpsだが、ネットワークに余裕があれば 最大10Mbps まで利用可能

4. 結論

項目 水道の例 ネットワークの意味
帯域 (bandwidth) 水道管の太さ 利用可能なネットワークの最大容量 (例: 10Gbps)
ビットレート (bitrate) 蛇口の開き具合 実際に流せるデータ速度 (例: 5Mbps)
  • 帯域は「最大でどれくらい流せるか」 を決める(物理的な上限)。
  • ビットレートは「実際にどれくらい流すか」tc で調整できる。

2025,江端さんの技術メモ

OBSの録画時にCPU負荷が増大し、操作が困難になる場合、以下の設定を調整することで負荷を軽減できます。


1. 録画のエンコーダを変更

設定 → 出力 → 録画 → エンコーダ

  • 「ハードウェアエンコード (NVENC, QuickSync, AMF)」を使用する
    • NVIDIANVENC (H.264)
    • Intel CPU内蔵GPUQuickSync H.264
    • AMD GPUAMF
    • ハードウェアエンコードがない場合x264のプリセットを変更(後述)

      私の場合、エンコードするハードウェアがにないからスキップ


2. 録画の品質を下げる

設定 → 出力 → 録画

  • 録画品質:低品質、ファイルサイズ優先
  • 録画フォーマット: mp4(またはflv)
  • エンコーダ設定: CBR (固定ビットレート)
    • ビットレート: 1500~2500kbps(画質が多少荒くなるが負荷が下がる)
    • キーフレーム間隔: 2秒
    • CPUプリセット: 「ultrafast」(x264使用時のみ)

      録画の方には、上記メニューに該当するものがなかったので、こちらもスキップ

3. 解像度とフレームレートを下げる

設定 → 映像

    • 基本 (キャンバス) 解像度: 1280×720
    • 出力 (スケーリング) 解像度: 640×360 または 854×480
    • FPS: 30 FPS または 24 FPS

      出力は最低値に、FPSは手動で10fps位まで落した→ 動作が軽くなって、マウス操作ができるようになった

2025,江端さんの技術メモ

OBSでブラウザ全体が表示されず、一部が大きく拡大されてしまう場合、以下の点を確認してください。

1. ソースのプロパティを確認

  • OBSの「ソース」リストでブラウザをキャプチャしているソースを右クリック → 「変換」→「画面にフィット」 を選択
  • これで画面全体がOBSのプレビューに収まるか確認

    # 私は、ここで解決したので、以下省略

2025,江端さんの技術メモ

VSCodeでCSVファイルの文字エンコーディングを Shift_JIS(SJIS) にする方法はいくつかあります。


① VSCodeの「文字コードの変更」機能を使う

  1. CSVファイルを開く
  2. 画面の右下に エンコーディング(例: UTF-8, UTF-16など) が表示されているのでクリック
  3. 「エンコーディングの変更」 を選択
  4. 「Shift_JIS」または「Japanese (Shift_JIS)」を選択
  5. 「エンコードされた内容を保存」 をクリックし、Shift_JIS形式で保存

2025,江端さんの技術メモ

VSCodeからCSVファイルをExcelで開く方法

VSCodeから直接 Excel を起動してCSVファイルを開く方法はいくつかあります。


① ターミナルからExcelを起動する(Windows)

方法 1: start コマンドを使用

VSCodeのターミナル(PowerShell または コマンドプロンプト)で以下を実行

start excel output.csv
  • output.csv は開きたいCSVファイルの名前
  • これでExcelが起動し、CSVファイルが開かれる

2025,江端さんの技術メモ

Windows 11 に WSL2 をインストールし、Ubuntu をデフォルトOSに設定し、Docker をインストールする手順を説明します。

1. 背景

Docker for Windowsが、有償化されて、(現場が)困ったことになっています。

ChatGPTにDocker for Windows と Docker Desktop の違いについて教えてもらいました

で、これを回避する方法として、「WSLのLinuxを利用して、Dockerを利用する方法」がある、という話を聞き『あ、盲点』と思い、さっそく環境構築をノートPCでやってみました(本番PCでコケるのは怖かったので)。


2. WSL2 のインストール

2.1. WSL の有効化

管理者権限で PowerShell または コマンドプロンプトを開き、以下のコマンドを実行します。

wsl --install

これにより、WSL2 とともに Ubuntu が自動でインストールされます。

WSL のバージョンを確認するには

wsl --list --verbose

もし、既に WSL1 になっている場合、以下のコマンドで WSL2 に変更できます:

wsl --set-version Ubuntu 2


3. Ubuntu をデフォルトOSに設定

インストールされている WSL のディストリビューションを確認:

wsl --list --verbose
デフォルトを Ubuntu にする:
wsl --set-default Ubuntu

4. Docker のインストール

WSL2 上の Ubuntu に Docker をインストールします。

4.1. パッケージの更新更新

sudo apt update && sudo apt upgrade -y

4.2. Docker のインストール

sudo apt install -y docker.io

4.3. Docker のサービスを開始

sudo systemctl enable --now docker

4.4. Docker グループへのユーザー追加

sudo usermod -aG docker $USER

適用するには、一度ログアウトするか、以下を実行:

newgrp docker

4.5. Docker の動作確認

docker run hello-world

「Hello from Docker!」と表示されれば成功です。


5. Docker Compose のインストール

sudo apt install -y docker-compose

6. Docker デーモンを WSL2 内で実行

通常、Windows 上で Docker Desktop を使う方法もありますが、WSL2 内で直接 Docker を動かしたい場合は systemd を有効にします。

6.1. WSL2 で systemd を有効化

sudo nano /etc/wsl.conf

以下の内容を追加:

[boot] systemd=true

保存して WSL を再起動:

wsl --shutdown

再度 WSL を起動して systemctl が使えることを確認:

systemctl list-units --type=service

6.2. Docker の自動起動

sudo systemctl enable --now docker

これで、WSL2 + Ubuntu + Docker の環境構築が完了しました。

7. Docker for Windowsのコンテナイメージをtarで固めて展開する

これは、以下を参考にして下さい。

Dockerコンテナのイメージをセーブして先方に送る方法

$ sudo docker load < 20240828_shajyo.tar

のあたりから続けます。

これをwslで実行すると、docker imageができます。

8. ちょっと変なことが起っている話

ところで、この段階で、ちょっと不思議なことが起こりました。

docker for windowsを起動すると、WSL内のdocker imageの名称が変わります(理由不明で、変なのですが、動くなら、まあ構いません)。

で、それだけでなく、docker imagesで、Docker for windowsのイメージが全部登場してきます。

なんだか良く分かりませんが、これが出てくるのであれば、「Docker for Windowsのコンテナイメージをtarで固めて展開する」をサボれるかもしれません(誰か確認したら教えて下さい)。

で、あとは、Docker for Windowsで作成した時と、同じディレクトリに移動して、

docker-compose restart

をすると、無事に動き出しました。

9. 総括

なんだか良く分かりませんが、Docker for Windowsを使っている環境であれば、それを残した状態で、この作業すると、随分手を抜けるかもしれません

移行した後に、Docker for Windowsをアンインストールすれば良いでしょう。

お試しあれ。

言うまでもありませんが、無保証です。


「ちょっと変なことが起っている話」の理由

Docker for Windows を起動すると、WSL 内で動作している Docker イメージの内容が変化する可能性があります。以下の理由が考えられます。


1. Docker for Windows は WSL 2 をデフォルトで使用

Docker for Windows(Docker Desktop)は、デフォルトで WSL 2 ベースのエンジン を使用します。
これにより、WSL 2 で管理されている Docker のデーモン(dockerd)が Docker Desktop の管理下に入る ため、起動時に設定や状態が変更されることがあります。


2. Docker デーモンの変更

Docker for Windows を起動すると、WSL 内の Docker の設定が次のように変わる可能性があります。

  1. Docker デーモンが変わる
    • もともと wsl -d Ubuntu などで WSL 2 内の dockerd を起動していた場合、Docker for Windows を起動すると Docker Desktop が管理するデーモンに切り替わる
    • これにより、ローカルの Docker デーモンが停止 する可能性がある。
  2. デフォルトのデータストアが変更
    • Docker for Windows を起動すると、デフォルトの docker データストアの場所が C:\ProgramData\DockerDesktop\ に変更されることがある。
    • それまで ~/.docker/var/lib/docker に保存されていたイメージやコンテナが正しく認識されなくなる場合がある。

3. ネットワークやストレージの影響

Docker Desktop は Windows 側のネットワーク設定やストレージマウントを変更するため、WSL 側の Docker コンテナに影響を与えることがあります。

  • ネットワークの影響
    • docker0 ブリッジの再設定や、NAT の適用によって WSL 内の Docker コンテナの通信方法が変わることがある。
    • WSL の IP アドレスが変化し、WSL 側で設定していたネットワーク設定が無効になる可能性がある。
  • ボリュームマウントの影響
    • WSL で /mnt/c のようにマウントしていたボリュームが、Docker Desktop の管理下で //wsl$/Ubuntu 経由でマウントされることがある。
    • これにより、Docker 内で期待していたファイルパスが変わる可能性がある。

4. WSL 2 のデフォルト設定が変更される

Docker for Windows の SettingsResourcesWSL Integration「Enable integration with my default WSL distro」 を有効にすると、
Docker のデフォルトデーモンが WSL 2 の docker-desktop ディストリビューションを経由 するように変更されます。

これにより、Docker Desktop を起動すると、docker images の一覧が変わることがあります。


5. 解決策

もし WSL 内の Docker 環境を変えたくない 場合は、次の方法を試してください。

  1. Docker Desktop を無効化
    • wsl --set-version Ubuntu 1 にして、WSL 2 ではなく WSL 1 を使う(WSL 1 では Docker Desktop 連携がない)。
    • Docker Desktop の WSL Integration 設定を無効化する。
  2. WSL 内で独立した Docker 環境を使う
    • Docker Desktop を使わず、WSL 内で dockerd を手動で起動し、独立した環境を維持する。
    • sudo service docker start で WSL 内で Docker デーモンを起動。
  3. Docker の context を使い分ける
    • docker context コマンドを使用し、Docker Desktop のデーモンと WSL 内のデーモンを使い分ける。
    docker context create wsl-docker --docker "host=unix:///var/run/docker.sock"
    docker context use wsl-docker

結論

Docker for Windows を起動すると、WSL で動作している Docker の デーモン・ネットワーク・ストレージ設定 などが変更され、docker images の結果が変わる可能性がある
WSL 内で独立した Docker 環境を維持したい場合は、Docker Desktop の WSL 統合を無効化するか、docker context を適切に設定すると良い。

ただ、これだと、Docker for Windowsをアンインストールできないんだよなぁ。

さらに検討.....

結局のところ、WSLのDockerから、Docker for Windowsで作ったディレクトリから、docker-compose down して、docker-compose up -d して作り直すのが一番てっとり早かった、というオチでした(私の場合)。

2025,江端さんの技術メモ

WindowsにGnuplotをインストールする手順を以下に説明します。


1. Gnuplotのインストールファイルをダウンロード

  1. 公式サイトにアクセス
    Gnuplotの公式サイト http://www.gnuplot.info/ にアクセスします。
  2. ダウンロードページを開く
    ページ内の「Download」セクションを見つけ、Windows用のインストーラを探します。
  3. Windows版のインストーラをダウンロード
    推奨されるダウンロードリンク(例: SourceForgeのWindows用バイナリ)から最新の安定版を選択し、インストールファイル(例: gnuplot-x.x.x-win64.exe)をダウンロードします。

2. Gnuplotのインストール

  1. インストーラを実行
    ダウンロードした .exe ファイルをダブルクリックして実行します。
  2. セットアップウィザード
    セットアップウィザードが開いたら、以下の手順で進めます:

    • 「Next」をクリック。
    • ライセンス条項を確認して「I Agree」をクリック。
    • インストール先フォルダを指定(デフォルトのままで問題ありません)。
    • 必要なコンポーネントを選択(デフォルト設定でOK)。
    • 「Install」をクリックしてインストールを開始。
  3. インストール完了
    インストールが完了したら「Finish」をクリックします。

2.1. PATH環境変数の設定(オプション)

コマンドプロンプトやPowerShellで簡単にGnuplotを実行するには、PATH環境変数にGnuplotのインストールディレクトリを追加します。

  1. 環境変数の設定を開く
    • 「スタート」メニューで「環境変数」と検索し、「システム環境変数の編集」を選択。
    • 「環境変数」をクリック。
  2. PATH変数を編集
    • 「システム環境変数」または「ユーザー環境変数」の Path を選択し、「編集」をクリック。
    • Gnuplotをインストールしたディレクトリ(例: C:\Program Files\gnuplot\bin)を追加。
  3. 保存して閉じる
    「OK」をクリックして変更を保存します。

2.2. インストール確認

  1. コマンドプロンプトを開く
    Win + R を押して「cmd」と入力し、Enterキーを押します。
  2. Gnuplotを起動
    以下のコマンドを入力して、Gnuplotが起動するか確認します。

    gnuplot

  3. バージョン確認
    Gnuplotのプロンプト(gnuplot>)が表示されるので、以下を入力してバージョンを確認します。
show version

 

2.3. 動作確認

インストールが成功している場合、以下のコマンドで簡単なプロットが表示されます。

plot sin(x)

これでGnuplotのインストールは完了です。

3. PTファイル(73.csv)の表示方法

以下の手順で Gnuplot スクリプトを保存し、73.csvを表示する方法を説明します(73.csvはファイルの一つにすぎません)


3.1. スクリプトをファイルに保存する

  1. 任意のテキストエディタを使用して、以下の内容をファイルにコピーします。
  2. ファイル名を plot_73.gnu など、わかりやすい名前で保存してください。

3.1.1. スクリプト内容 (plot_73.gnu)`)

# Gnuplot Script for 3D Plot# X, Y, Z 軸の範囲を設定
set xrange [130.3296537290101:130.56028128619576]
set yrange [33.49812295428995:33.67972606282988]
set zrange [0:1440]
# 軸ラベル
set xlabel "Longitude"
set ylabel "Latitude"
set zlabel "Time (Minutes)"

# タイトル set title "3D Plot of GPS Data"

# CSVのヘッダー行をスキップする設定
set datafile separator "," # カンマ区切りを指定
set key autotitle columnhead # ヘッダーをタイトルに使用(必要に応じて)

# データの3Dプロット
splot "73.csv" every ::1 using 9:8:($6*60+$7) with points pointtype 7 pointsize 1 lc rgb "blue" title "GPS Points"

 

3.2. スクリプトの実行方法

  1. スクリプトファイルの保存場所
    保存した plot_73.gnu ファイルと 73.csv ファイルを同じディレクトリに配置してください。
  2. Gnuplot の起動
    ターミナルを開き、Gnuplot を起動します。

    gnuplot

     

  3. スクリプトの実行
    Gnuplot のプロンプト (gnuplot>) 上で以下のコマンドを実行します。

    load 'plot_73.gnu'

     

  4. スクリプトが読み込まれ、プロットが表示されます。

3.3. 実行の自動化 (オプション)

ターミナルから直接スクリプトを実行できるようにするには、以下のコマンドを使用します。

gnuplot plot_73.gnu

これにより、Gnuplot を起動せずにスクリプトを実行できます。


3.4. 注意点

  • スクリプトで指定したファイル名 (73.csv) が正しいことを確認してください。
  • CSV ファイルの形式がスクリプトと一致している必要があります。
  • 必要に応じて 73.csv のパスをフルパスで指定することで、スクリプトと CSV が別のディレクトリにある場合でも動作します。

例:

splot "/path/to/73.csv" every ::1 using 9:8:($6*60+$7) ...

3.5. "73.csv"のサンプル

dailyid,year,month,day,dayofweek,hour,minute,latitude,longitude,gender,age
73,2023,4,9,7,8,40,33.307463,130.511456,,
73,2023,4,9,7,8,41,33.307477,130.512114,,
73,2023,4,9,7,8,41,33.305819,130.514793,,
73,2023,4,9,7,8,41,33.307467,130.511813,,
73,2023,4,9,7,8,45,33.306084,130.515009,,
73,2023,4,9,7,8,45,33.306151,130.515051,,
73,2023,4,9,7,8,54,33.309299,130.518183,,
73,2023,4,9,7,8,54,33.308469,130.517488,,

江端さんの忘備録,江端さんの技術メモ

私が、今大学で取り組んでいる研究についての論理付けをするため、心理学の既往研究を調べています。

I am researching previous psychological studies to provide a rationale for my research at university.

その一つが、「単純接触効果」です。

One of these is the “Mere Exposure Effect”.

単純接触効果

恋愛、結婚にいたるケースで結構な比率を占めるのが、半径2メートル程度以内に自分と相手の席があったケース―― というのは、誰もが聞いた話だと思います。

I think everyone has heard the story that a significant proportion of cases that lead to romance and marriage involve the couple sitting within a radius of about 2 meters of each other.

同じクラスに所属する人同士の方が、異なるクラスに所属する人同士よりも親近感を抱きやすいというのは事実のようです。「クラス対抗リレー」のようなイベントで、全く知らない他人同士が同じクラスに所属しているという理由だけで応援し合うのは、単純接触効果の一例です。

It seems true that people who belong to the same class tend to feel closer to each other than those who belong to different classes. In events like the “class relay race”, where people who don't know each other at all support each other just because they belong to the same class, this is an example of “Mere Exposure Effect”.

-----

上記のページの単純接触効果の実験で、思わず私が笑ってしまった内容が、2枚目の図の1つめの実験です。

The first experiment in the second diagram in the above page's “Mere Exposure Effect” experiment made me laugh.

要するに、「大学の講義にキチンと出席している女子学生」に対して、男子学生は「魅力」と「シンパシー」を感じやすい、という実験結果です。

In short, the experiment showed that male students are likelier to feel “attraction” and “sympathy” towards female students who regularly attend university lectures.

この実験では、単に『男は単純でバカである』と言ってもいいのかもしれませんが、これが人間の特性であるなら、それを無視するのは得策ではありません。

In this experiment, it may be okay to say that “men are simple and stupid simply,” but if this is a characteristic of human beings, it would not be a good idea to ignore it.

この実験では、4人の女性は、講義に出席する頻度を変えているだけですが、たったそれだけのことで「魅力」と「シンパシー」を向上させる効果が発生した、というのは、貴重な知見です。

In this experiment, the four women only varied the frequency with which they attended lectures. Still, the fact that this simple change increased their 'attractiveness' and 'sympathy' is a valuable finding.

これは、恋愛や結婚において、「出逢いの日常化」が、強力な戦略になりえる、と私は考えました。

I thought “making dating a daily routine” could be a powerful strategy in relationships and marriage.

-----

で、ふと思ったのですが、「単純接触効果」をもっとも発揮させるもっとも有効な方法とは ―― 結婚してしまうことですね。強制的な毎日の「単純接触効果」が発生することになりますから。

Then, I suddenly thought that getting married would be the most effective way to maximize the “Mere Exposure Effect.” This would create a compulsory daily “Mere Exposure Effect.”

まあ、この話では、「タマゴとニワトリ」の話になってしまいますので、結婚や同棲の前段階としては、とりあえず「通学/通勤時間(登校、出社、下校、退社)を調整する」とか、「一日一回はその人に声をかけてみる」とか、そういう、ベタですけど、単純な手法を「意味がないと切り捨てない方がいい」とは言えそうです。

Well, this story is about “eggs and chickens,” so as a preliminary step before marriage or cohabitation, it seems that it's better not to dismiss simple methods that may seem a bit corny, such as “adjusting your commuting time (going to school, going to work, leaving school, leaving work)” or “talking to that person at least once a day.”

私の場合、独身時代に、特段これといった用事もないけど、1週間に1回は電話するというノルマを自分に課して、今の嫁さんに「単純接触」戦略を数年間続けていました。

When I was single, I set a quota of calling my now-wife at least once a week, even if I didn't have anything to discuss. I continued this “Mere Exposure Effect” strategy for several years.

あれは、意外に効果があったのかもしれません ―― と、何十年後の自分の研究で、自分の振舞いをレビューすることになるとは、思いませんでしたが。

I didn't think I would be reviewing my own behavior in my research decades later, but that may have had an unexpected effect.

-----

私、この「単純接触効果」を発生させる社会システムについて考えています。今、このネタで、論文一本上げる為に、今、必死に調査と執筆を頑張っています。

I am considering the social systems that generate this “Mere Exposure Effect.” I am working hard on research and writing to publish a paper on this topic.

2025,江端さんの技術メモ

$ go run . > NUL 2>NUL

でも"NUL"というファイルができてしまうました。

で、今、以下を試しています。

cmd ではなく PowerShell で実行する場合、$null を使用できます。

go run . *> $null