yuuho.wiki

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

ユーザ用ツール

サイト用ツール


tips:start

文書の過去の版を表示しています。


tips

Illustrator

~/ライブラリ/Application Support/Adobe/Adobe Illustrator 23/ja_JP/

ファイル検索・ディレクトリ検索

名前で検索

やり方は2通りあるっぽい?

  • 名前一覧を出してから該当のものを抽出 find ~ | xargs grep ~
  • 該当する名前自体を検索 find ~ -name ~

特徴

  • findで指定するnameは正規表現ではない (bash的)
  • findは基本的に下位ディレクトリすべてを検索する
  • findでは隠しファイルもデフォルトで見える
基本
find <場所>
findオプション一覧
-name ファイル名・ディレクトリ名
-exec 該当ファイル・ディレクトリに対して処理
-type ファイルかディレクトリかに絞る
やり方一覧
再帰的にディレクトリをカレントディレクトリ以下から検索 find . -name 'site-packages' -type d

内容で検索(テキストファイル)

grep -rl hoge .

リポジトリ内コードの検索

現在いるディレクトリ配下の全ファイルを再起探索して checkpoint という文字列のある行を列挙する.

find . -type f -name "*.py" -print | xargs grep 'checkpoint'

yaml

空の辞書

次のようにして空の辞書を作成できる.
hoge: {}

アンカー・エイリアスを使ったコピペ

pyyamlでもanchorとaliasがサポートされていて以下のようにして使える.

loader:
    name: poseloader2
    params: &batch_setting
        batch_size: 4
        shuffle: True
        num_workers: 6
        pin_memory: True

loss:
    generator:
        name: poseGANgen
        params:
            <<: *batch_setting
            adversarial_loss: 1
            nn_l1_vgg_loss: 0.01

loss.generatorは {'name': 'poseGANgen', 'params': {'batch_size': 4, 'shuffle': True, 'num_workers': 6, 'pin_memory': True, 'adversarial_loss': 1, 'nn_l1_vgg_loss': 0.01}} となる

extend(上書き)なども容易 参考

変数一個だけコピペしたいときは以下のように

logger:
    -   name: end_train
        params:
            scale: iter
            freq: &endi 250
    -   name: vis_val_data
        params:
            freq: 10
            num_img: 10
            end_iter: *endi

バックアップの管理

    • 指定した日数以前のファイルを削除するようなコマンドがある
    • 毎日バックアップ + 数十日経ったファイルの削除 がベスト?

CSS

セレクタ

表すもの prefix
タグ名 何もなし
id #
クラス .
子孫 空白一つ開ける
タグ名.クラス
タグ名#ID
並列 セレクタ, セレクタ
~ これより後のやつに適用
例) .sectionedit2 .row8 ~ tr row8クラスのtrタグより後のtrタグに適用

FLOCSSという考え方でCSSを作成するべき.CSSの基礎的な考え方https://qiita.com/sueshin/items/c80151181d06649e2ff6

その他

  • visiblity:hiddenは要素の場所だけ確保して空白に.display:noneは要素が存在しないかのようにレンダリング.

Windows

スクリーンショット

snipping toolというプログラムを起動してやると便利.

Makefile

何もしない

hoge:
	@:

cmake

CMakeLists.txt の書き方.

VSCode

バイナリエディタ

code --install-extension slevesque.vscode-hexdump

Docker

docker run -it
  • イメージ名,タグの変更
    • docker tag old_name:tag new_name:tag

      元のイメージは消去されない.

イメージ 書き出し/読み込み

docker save hoge/fuga:piyo > hoge_fuga_piyo.tar
docker load < hoge_fuga_piyo.tar

無名 volume の確認

docker volume ls
DRIVER    VOLUME NAME
local     63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0
local     676245ef8581ad1a2b3481628f6e097d7371ed076b47d02d8d9d70d8bc6a8994

ボリュームの詳細な情報を知ることができる。

docker volume inspect 63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0

どのコンテナから参照されている volume なのかは各コンテナの詳細情報から調べるしか無い。 以下のようにすればどこにマウントされていたかわかる

docker inspect コンテナID | grep 63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0

何からも参照されていないもの

docker volume ls -f dangling=true

削除

docker volume rm 63a68bdc4cd34a2d378502716f9e3582bc3cc2432581470c8077a67773b778b0

Dockerfile で sudo 可能ユーザーを作る

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}

稼働中コンテナに入る

docker exec -it CONTAINER_ID /bin/bash

podman

podman は docker(moby) みたいにコンテナ動かすやつ。dockerコマンドを単純に podman に置き換えるだけで使えるようにしているっぽい。 docker よりも優れた点がいくつかある。 rootless docker を使う上で問題となる bind マウントのユーザーの所有権問題などがうまく解決されている?

インストール

管理者権限で podman をインストールすると、全ユーザーが使えるようになる。
基本的には普通に使うと rootless モードで実行される。docker みたいに裏で daemon が走っていたりはしない。

リポジトリ追加

ubuntu18.04, 20.04 はデフォルトではリポジトリがない(公式にはサポート対象外)。

. /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 -

インストール

sudo apt update
sudo apt install podman

ubuntu 18.04, 20.04 では少し古いバージョンがインストールされる。 20.04 だとミラーサーバーが壊れてて .deb ファイルがうまくダウンロードされないことがある。

GPUを使用する場合

ランタイムをインストールして設定ファイルを一部変更する。

sudo apt install nvidia-container-runtime

/etc/nvidia-container-runtime/config.toml を一行だけ修正。

sudo vim /etc/nvidia-container-runtime/config.toml
no-cgroups = true

ubuntuのみ追加でやらないといけないこと
nvidia-container-runtime をインストールしたときには /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json が自動生成されるはずだが、 Ubuntu 環境ではうまくいっていないみたい。( 参考 ) なので以下のように自分で作成する。

sudo mkdir -p /usr/share/containers/oci/hooks.d/
sudo vim /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json
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"]
}

使用

基本的には docker コマンドを単純に podman に置き換えるだけ。
デフォルトでは rootless モードで起動される。

GPUを使用する場合

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

–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 オプションを二回入れないといけないところが重要。

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

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 の代わりに使えるようにする。

systemctl --user enable --now podman.socket
export DOCKER_HOST=unix:///run/user/1705/podman//podman.sock

VSCode Devcontainer を podman で利用する

devcontainer.json で userns 設定をするっぽい。 もしかしたら nvidia と一緒にはできないかも。

Vagrant

以下のコマンドを実行してインストール.virtualbox のインストール時はTUIが開く.

sudo apt install virtualbox virtualbox-ext-pack
sudo apt install vagrant

GPUドライバの確認

通常のUbuntu(Desktop)なら ubuntu-drivers コマンドがプリインストールされていてドライバの確認が簡単.

推奨されているドライバの確認

ubuntu-drivers devices

Linux GUI の基礎

ディスプレイマネージャはLinuxに共通なX Window Systemというシステムの上で動いてGUIを提供する. Ubuntu18では16のLightDMではなくGDM(GNOME Display Maneger)なのでservice gdm stopで止める(?).

Ubuntu18.04ではCtrl + Alt + F3でCUIになるようである.

apt-cache madison hogehogeでどこからインストールされるものかがわかる. これを使ってドライバがGraphics Drivers Teamであることを確認する.

pkill XorgでX Window Systemを落とす.

メモ

ubuntu20.04サーバーから graphics-drivers-team のドライバを入れるのが難しくなった? ubuntu公式にも nvidia-driver が配布されていてそっちが優先されていそう. しかも入れたら Xorg まで付いてくるクソ.

apt-cache depends gdm3  : gdm3 が必要としている依存パッケージ一覧
apt-cache rdepends gdm3 : gdm3 を必要としている依存パッケージ一覧

bash

if文で使えるファイル演算子

    • -s-f などのファイル判定について

tmux

  • 各paneの高さを同じにする
    tmux select-layout even-vertical
  • 別の端末から入ったときにサイズが合わないのを何とかする。
    tmux a -d -t hoge

PDF操作

PDF関係の処理に便利そうなソフトがいくつかある.

ソフト インストール メモ
ImageMagick sudo apt install imagemagick ubuntu GUI版は初期設定で入っているっぽい
Inkscape
pdftk
pdfinfo

jpg画像をpdf形式に (ImageMagick)

ImageMagickのconvertコマンドを使う. ただし初期設定ではできないので /etc/ImageMagick-6/policy.xml を編集する必要がある.

/etc/ImageMagick-6/policy.yml
...
<policy domain="coder" rights="none" pattern="PDF" />
...

/etc/ImageMagick-6/policy.yml
...
<policy domain="coder" rights="read|write" pattern="PDF" />
...

に書き換える.

convert hoge.jpg hoge.pdf

で変換できるようになる.

複数のjpgを複数ページpdfに変換 (ImageMagick)

メモリエラーとなることが多い. キャッシュファイルの設定を変えるのが良い.

/etc/ImageMagick-6/policy.ymlの以下の部分を

/etc/ImageMagick-6/policy.yml
...
<policy domain="resource" name="memory" value="256MiB"/>
<policy domain="resource" name="disk" value="1GiB"/>
...

以下のように変える.

/etc/ImageMagick-6/policy.yml
...
<policy domain="resource" name="memory" value="3GiB"/>
<policy domain="resource" name="disk" value="2GiB"/>
...

PDF を画像に変換

pdftoppm -png hoge.pdf fuga

こうすると hoge.pdffuga-1.png, fuga-2.png みたいな感じで全ページ PNG になる。

論文用作業

PDFのクロップ (Acrobat)

  • 第二ツールバーの「PDFを編集」→「ページをトリミング」
  • ドラッグで範囲を選択、選択範囲内をダブルクリックで保存ウィンドウを開く
  • ページ「すべて」を選択したら全部クロップできる

PDFテキストアウトライン化 (Acrobat)

  • 第二ツールバー「印刷工程」→「プリフライト」→「フォントをアウトラインに変換」を選択
  • 「解析してフィックスアップ」で保存

PDFの最適化

  • 第二ツールバー「PDFを最適化」

ffmpeg

インストール

ffmpegのインストールは面倒なので Docker を使うと良い.

docker run -v $PWD:/tmp/workdir jrottenberg/ffmpeg \
    -i /tmp/workdir/hoge.mkv -vcodec libx264 -acodec aac /tmp/workdir/hoge.mp4

注意点としては現在のディレクトリを/tmpとして渡すためinput/outputも/tmp/付きの絶対パスで指定するということである.

音声選択

-map 0:a:1 入力の1番目の音声ソースを0番目の音声ソースにマップする.
つまり -map 出力インデックス:a:入力インデックス

(ビデオの方も設定する必要がある?)
-map 0:v とすると0番目が0番目にマッピングされる.

コーデック

オーディオ -acodec aac

concat

ffmpeg -i audio.webm -i video.webm -c:v copy -c:a copy -map 0:a:0 -map 1:v:0 -strict -2 output.mp4

mac で再生したい場合

quicktime player が yuv420p しか受け付けてくれない?ので

-pix_fmt yuv420p

をつける. or -vf format=yuv420p

字幕が入っている場合は -sn したほうが良い?

-map_chapters -1 も必要?

youtube-dl

インストール

conda 環境下で pip install youtube-dl するのが楽そう.

ダウンロード

YouTube で動画URLの v=hogehoge の部分を見る.

以下のようにダウンロード.

youtube-dl -f bestvideo+bestaudio ID

映像部分と音声部分がバラバラにダウンロードされる.

音声がwebm になっていたら(opusコーデックだと思うので)再生するのが面倒.なので aac に変換.変換しなくていい場合は aac の部分を copy とすれば良い.

docker run --rm -v $PWD:/tmp/workdir jrottenberg/ffmpeg \
-i audio.webm -i video.mp4 -c:v copy -c:a aac -map 0:a:0 -map 1:v:0 -strict -2 output.mp4

2023/05/30) vp8 コーデックが無いみたいなエラーが出たので、 -c:v copy-c:v libx264 にしてみると動いた。

ffmpegのある環境では以下で一気に動画にできる.

youtube-dl -f bestvideo+bestaudio --merge-output-format mp4 ID

リモートワーク

ssh

複数ポートフォワーディング

以下のように -L のオプションを複数個書けば複数のポートを同時に送れる。

ssh -L 9000:localhost:9000 -L 9001:localhost:9001 hoge

autossh フリーズ対策

autossh でポートフォワーディングをしているといつの間にかフリーズして すべての ssh ができなくなることがある. この場合は ssh-agent を再起動する必要がある. eval “$(ssh-agent -s)” して kill -9 PID するのが必要.

リモートマシンのネットワークでブラウザを使う

例として shiki という Host に ssh できて、 39393 というポートでネットワークを迂回するとする。

ssh -D 39393 shiki

使用中ポートでなければエラー無く動くはず。

手元のマシンの firefox で 設定 > 一般 > ネットワーク > 接続設定 > 手動でプロキシーを設定する

SOCKSホスト : localhost ポート : 39393

とすると firefox でリモートのネットワーク内にある web サイトなどにアクセスできる。(X転送したfirefoxでやるみたいなことをしなくて良い。)

overleaf

オンプレミス

docker run -it --rm sharelatex/sharelatex:2.5.0

メール

docker-mailserver でやっていく。

  • Gmail で転送をやろうとすると受け手側で OK しないといけない
  • エイリアス設定するのが簡単か

postfix の部分直接いじればメーリングリストっぽく設定もできる
http://www.postfix.org/VIRTUAL_README.html#forwarding

zip

bootstrap5

texparalleltranslate リポジトリ参考

大きさで表示されるものを切り替える

xs のときに縦、xl のときに横に表示するようなUIを作成したとき、 周辺部分の表示内容を変えたいときがある。 たとえば、縦のときは「↓」、横のときは「→」をUIに表示するときにこれが必要。 CSS を設定しておくだけで変えられて便利。

Bootstrap5 表示オプション
   d-block : 基本状態が表示
   d-none  : 基本状態が非表示
   d-XX-block : XX 以上で表示
   d-XX-none  : XX 以上で非表示

                   | xs | sm | md | lg | xl | xxl |
---------------------------------------------------
d-block            |  o |  o |  o |  o |  o |  o  |
d-block, d-md-none |  o |  o |  x |  x |  x |  x  |  (visible Less Than MD)
---------------------------------------------------
d-none             |  x |  x |  x |  x |  x |  x  |
d-none, d-md-block |  x |  x |  o |  o |  o |  o  |  (visible Greater Equal MD)

d-block や d-none は display を設定するもの。 d-block じゃなくて d-flex とかもありかも

つまり、 d-block だけのときは常に非表示だけど、d-blockとd-md-none を両方設定しておくと、サイズがxs,sm のときだけ表示、それ以上で非表示になる。

パネル切り替え

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        | 非表示
tips/start.1690865114.txt.gz · 最終更新: 2023/08/01 04:45 by yuuho