yuuho.wiki

カオスの欠片を集めて知恵の泉を作る

ユーザ用ツール

サイト用ツール


tips:start

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
tips:start [2023/08/01 04:43] – [bootstrap] yuuhotips:start [2025/09/01 06:05] (現在) – [exiftool を使った写真ファイルタイムスタンプ変更] yuuho
行 146: 行 146:
 code --install-extension slevesque.vscode-hexdump code --install-extension slevesque.vscode-hexdump
 </code> </code>
-===== Docker ===== 
-| ''docker run'' | ''-it'' |  | 
  
-  * イメージ名,タグの変更 
-    * <code bash>docker tag old_name:tag new_name:tag</code> 元のイメージは消去されない. 
- 
-=== イメージ 書き出し/読み込み === 
-<code bash>docker save hoge/fuga:piyo > hoge_fuga_piyo.tar</code> 
-<code bash>docker load < hoge_fuga_piyo.tar</code> 
- 
-=== 無名 volume の確認 === 
- 
-<code bash>docker volume ls</code> 
- 
-<code> 
-DRIVER    VOLUME NAME 
-local     63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0 
-local     676245ef8581ad1a2b3481628f6e097d7371ed076b47d02d8d9d70d8bc6a8994 
-</code> 
- 
-ボリュームの詳細な情報を知ることができる。 
-<code> 
-docker volume inspect 63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0 
-</code> 
- 
-どのコンテナから参照されている volume なのかは各コンテナの詳細情報から調べるしか無い。 
-以下のようにすればどこにマウントされていたかわかる 
-<code> 
-docker inspect コンテナID | grep 63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0 
-</code> 
- 
- 
-何からも参照されていないもの 
-<code> 
-docker volume ls -f dangling=true 
-</code> 
-削除 
-<code> 
-docker volume rm 63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0 
-</code> 
- 
-=== Dockerfile で sudo 可能ユーザーを作る === 
- 
-<code> 
-ARG GID=1111 
-ARG UID=1111 
-ARG CONTAINER_USERNAME=sdwebui 
-ARG PASSWORD=sdwebui 
-RUN groupadd -g ${GID} ${CONTAINER_USERNAME} \ 
-    && useradd -m -s /bin/bash -u ${UID} -g ${GID} -G sudo ${CONTAINER_USERNAME} \ 
-    && echo "${PASSWORD}\n${PASSWORD}\n" | passwd ${CONTAINER_USERNAME} \ 
-    && echo "Defaults visiblepw" >> /etc/sudoers \ 
-    && echo "${CONTAINER_USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 
-USER ${UID}:${GID} 
-</code> 
- 
-=== 稼働中コンテナに入る === 
-<code bash> 
-docker exec -it CONTAINER_ID /bin/bash 
-</code> 
-===== podman ===== 
-podman は docker(moby) みたいにコンテナ動かすやつ。dockerコマンドを単純に podman に置き換えるだけで使えるようにしているっぽい。 
-docker よりも優れた点がいくつかある。 
-rootless docker を使う上で問題となる bind マウントのユーザーの所有権問題などがうまく解決されている? 
- 
-==== インストール ==== 
-管理者権限で podman をインストールすると、全ユーザーが使えるようになる。\\ 
-基本的には普通に使うと rootless モードで実行される。docker みたいに裏で daemon が走っていたりはしない。 
- 
-=== リポジトリ追加 === 
-ubuntu18.04, 20.04 はデフォルトではリポジトリがない(公式にはサポート対象外)。 
-<code bash> 
-. /etc/os-release 
-echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" \ 
-    | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list 
-curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key \ 
-    | sudo apt-key add - 
-</code> 
- 
-=== インストール === 
-<code bash> 
-sudo apt update 
-sudo apt install podman 
-</code> 
-ubuntu 18.04, 20.04 では少し古いバージョンがインストールされる。 
-20.04 だとミラーサーバーが壊れてて .deb ファイルがうまくダウンロードされないことがある。 
- 
-=== GPUを使用する場合 === 
-ランタイムをインストールして設定ファイルを一部変更する。 
-<code bash> 
-sudo apt install nvidia-container-runtime 
-</code> 
-''/etc/nvidia-container-runtime/config.toml'' を一行だけ修正。 
-<code bash>sudo vim /etc/nvidia-container-runtime/config.toml</code> 
-<code toml> 
-no-cgroups = true 
-</code> 
- 
- 
-**ubuntuのみ追加でやらないといけないこと** \\ 
-''nvidia-container-runtime'' をインストールしたときには 
-''/usr/share/containers/oci/hooks.d/oci-nvidia-hook.json'' が自動生成されるはずだが、 
-Ubuntu 環境ではうまくいっていないみたい。( [[https://github.com/NVIDIA/nvidia-container-toolkit/issues/17|参考]] ) 
-なので以下のように自分で作成する。 
-<code bash> 
-sudo mkdir -p /usr/share/containers/oci/hooks.d/ 
-sudo vim /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json 
-</code> 
- 
- 
-<code javascript oci-nvidia-hook.json> 
-{ 
-    "version": "1.0.0", 
-    "hook": { 
-        "path": "/usr/bin/nvidia-container-toolkit", 
-        "args": ["nvidia-container-toolkit", "prestart"], 
-        "env": [ 
-            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 
-        ] 
-    }, 
-    "when": { 
-        "always": true, 
-        "commands": [".*"] 
-    }, 
-    "stages": ["prestart"] 
-} 
-</code> 
- 
- 
-==== 使用 ==== 
-基本的には docker コマンドを単純に podman に置き換えるだけ。\\ 
-デフォルトでは rootless モードで起動される。 
- 
-=== GPUを使用する場合 === 
-<code bash> 
-podman run -it --rm --security-opt=label=disable \ 
-    --hooks-dir=/usr/share/containers/oci/hooks.d/ \ 
-    -v /home/horiuchi/work/tmp:/workdir \ 
-    -w /workdir nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 /bin/bash 
-</code> 
- 
-''--security-opt=label=disable'' と ''--hooks-dir=/usr/share/containers/oci/hooks.d/'' が必要無さそう? 
-nvidia イメージを使うと自動的に hooks を見てくれるっぽい。 
- 
- 
-=== rootlessモードでコンテナ内の特定のユーザーになる === 
-例えば外で ''UID=3333'' 、コンテナ内で ''UID=4444'' になりたい場合、 
-uidmap の設定をちゃんとしないと bind マウントした volume がコンテナ内で root の所有となるため、 
-コンテナ内の ''4444'' ユーザーからアクセスできない。 
- 
-以下のように起動する。''%%-%%-uidmap'' オプションを二回入れないといけないところが重要。 
-<code bash> 
-podman run -it --rm --uidmap 0:1:4444 --uidmap 4444:0:1 \ 
-        -v /home/horiuchi/tmp:/workdir \ 
-        -w /workdir docker.io/library/ubuntu:20.04 /bin/bash 
-</code> 
- 
-nvidia のランタイムでは uidmap が効かずに落ちる...(2022/12/06) 
- 
-本来的には ''/etc/subuid'' を参考にもうひとつ ''%%-%%-uidmap'' をする必要がある。 
-例 ''%%-%%-uidmap 4445:4445:61092'' (4444+1, 4444+1, 65536-4444, 65536は''/etc/subuid''の3番目の項目) 
-==== podman で docker-compose を使う ==== 
- 
-podman のデーモンの起動が必要。これでソケットを作って docker の代わりに使えるようにする。 
- 
-<code bash> 
-systemctl --user enable --now podman.socket 
-export DOCKER_HOST=unix:///run/user/1705/podman//podman.sock 
-</code> 
-==== VSCode Devcontainer を podman で利用する ==== 
- 
-''devcontainer.json'' で userns 設定をするっぽい。 
-もしかしたら nvidia と一緒にはできないかも。 
 ===== Vagrant ===== ===== Vagrant =====
  
行 420: 行 248:
 <policy domain="resource" name="disk" value="2GiB"/> <policy domain="resource" name="disk" value="2GiB"/>
 ... ...
 +</code>
 +
 +以下のように使う画像をすべて書いてPDFを作る。ワイルドカードで指定しても良い。
 +<code bash>
 +convert page1.jpg page2.jpg page3.jpg hoge.pdf
 </code> </code>
  
行 427: 行 260:
 こうすると ''hoge.pdf'' が ''fuga-1.png'', ''fuga-2.png'' みたいな感じで全ページ PNG になる。 こうすると ''hoge.pdf'' が ''fuga-1.png'', ''fuga-2.png'' みたいな感じで全ページ PNG になる。
  
 +=== パスワード解除済みPDFを作成 ===
  
 +<code>qpdf -password=<your-password> -decrypt /path/to/secured.pdf out.pdf</code>
 +
 +=== (補足) OpenCV で jpg圧縮 ===
 +<code python>
 +cv2.imwrite('hoge.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 75])
 +</code>
 ==== 論文用作業 ==== ==== 論文用作業 ====
  
行 484: 行 324:
  
 conda 環境下で ''pip install youtube-dl'' するのが楽そう. conda 環境下で ''pip install youtube-dl'' するのが楽そう.
 +最近は、 ''yt-dlp'' の方が良いらしい。
  
 === ダウンロード === === ダウンロード ===
行 530: 行 371:
 > SOCKSホスト : localhost ポート : 39393\\ > SOCKSホスト : localhost ポート : 39393\\
 とすると firefox でリモートのネットワーク内にある web サイトなどにアクセスできる。(X転送したfirefoxでやるみたいなことをしなくて良い。) とすると firefox でリモートのネットワーク内にある web サイトなどにアクセスできる。(X転送したfirefoxでやるみたいなことをしなくて良い。)
 +
 +=== 通信速度の計測 ===
 +アップロード
 +<code bash>
 +dd if=/dev/zero bs=1M count=100 | ssh username@123.456.789 'dd of=/dev/null'
 +</code>
 +
 +ダウンロード
 +<code bash>
 +ssh username@123.456.789 'dd if=/dev/zero bs=1M count=100' | dd of=/dev/null
 +</code>
 +
 +=== scp での帯域制限 ===
 +scp をすると send disconnect で落ちることがある。転送速度の速さが制限されている可能性があるため、帯域制限をする必要がある。
 +以下は 20Mbit/sec 制限。
 +<code bash>scp -l 20000 hoge.zip my_server:/path/to/dir/</code>
 +
 ===== overleaf ===== ===== overleaf =====
  
行 546: 行 404:
  
 ===== zip ===== ===== zip =====
-https://zenn.dev/amane/articles/fc454d5e471ffc 
  
 +  * deterministic な zip ファイルを作る [[https://zenn.dev/amane/articles/fc454d5e471ffc]]
  
 +=== コマンドオプション ===
  
-===== bootstrap =====+<code bash> 
 +zip -r new_file.zip want_to_freeze_dir/ 
 +</code> 
 +===== 大きなファイルの分割 ===== 
 + 
 + 
 +===== exiftool を使った写真ファイルタイムスタンプ変更 ===== 
 + 
 +撮った写真をカメラから手元に転送してきたときに、 
 +ファイルのタイムスタンプが撮影時刻ではなく転送時刻になってしまうことがある。 
 +Linux で開いて変更してやるのが良い。 
 +<code bash>sudo exiftool "-FileModifyDate<DateTimeOriginal" *.JPG</code> 
 + 
 +mp4 に関しては 
 +<code bash>sudo exiftool "-FileModifyDate<MediaCreateDate" video.mp4</code> 
 + 
 +=== タイムスタンプの足し算 === 
 +<code bash> 
 +for f in *.MP4; do 
 +    DATE=$(exiftool -s3 -MediaCreateDate "$f"
 +    FORMATTED=$(echo "$DATE" | sed 's/:/-/1; s/:/-/1'
 +    echo "origin : $FORMATTED" 
 +    if [ -n "$DATE" ]; then 
 +        NEWDATE=$(date -d "$FORMATTED +1 month +1 day" +"%Y:%m:%d %H:%M:%S"
 +        echo "Setting $f timestamp to $NEWDATE" 
 +        exiftool "-FileModifyDate=$NEWDATE" "$f" 
 +    else 
 +        echo "Skipping $f: no MediaCreateDate found" 
 +    fi 
 +done 
 +</code> 
 + 
 +=== android のマウント === 
 +andoroid スマホをLinuxに直接マウントして操作する場合は 
 +https://fishrimper.blogspot.com/2018/01/mtp.html 
 + 
 +何があるか見る 
 +<code> 
 +jmtpfs -l 
 +</code> 
 + 
 +<code> 
 +jmtpfs -device=1,22 test/ 
 +</code> 
 + 
 +=== exfat のマウント === 
 + 
 +<code> 
 +sudo apt install exfat-fuse exfat-utils 
 +sudo mount -t exfat-fuse /dev/sdc1 /mnt/sdc1 
 +</code> 
 + 
 + 
 +===== bootstrap5 ===== 
 + 
 +texparalleltranslate リポジトリ参考
  
 === 大きさで表示されるものを切り替える === === 大きさで表示されるものを切り替える ===
行 577: 行 491:
  
 つまり、 d-block だけのときは常に非表示だけど、d-blockとd-md-none を両方設定しておくと、サイズがxs,sm のときだけ表示、それ以上で非表示になる。 つまり、 d-block だけのときは常に非表示だけど、d-blockとd-md-none を両方設定しておくと、サイズがxs,sm のときだけ表示、それ以上で非表示になる。
 +
 +
 +=== パネル切り替え ===
 +
 +<code>
 +Bootstrap5 パネル切り替え
 +               | 役割                          | クラス         | 初期表示                       | 依存                                | ID
 +----------------------------------------------------------------------------------------------------------------------------------------------------
 +   - ul/       | (role=tablist)                | .nav.nav-pills |                                |                                                 |
 +       - li/   | (role=presentation)           | .nav-item      |                                |                                                 |
 +           - a | (role=tab,data-gs-toggle=tab) | .nav-link      | (aria-selected="true") .active | (href="#HOGE" aria-controls="HOGE") | HOGE-switch | 表示
 +       - li/   | (role=presentation)           | .nav-item      |                                |                                                 |
 +           - a | (role=tab,data-gs-toggle=tab) | .nav-link      | (aria-selected="false"       | (href="#FUGA" aria-controls="FUGA") | FUGA-switch | 非表示
 +   - parent/                                 | .tab-content                                  |                                                 |
 +       - child | (role=tabpanel)               | .tab-pane.fade | .show .active                  | (aria-labelledby="HOGE-switch"    | HOGE        | 表示
 +       - child | (role=tabpanel)               | .tab-pane.fade |                                | (aria-labelledby="FUGA-switch"    | FUGA        | 非表示
 +</code>
 +
  
tips/start.1690865012.txt.gz · 最終更新: 2023/08/01 04:43 by yuuho