文書の過去の版を表示しています。
目次
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
- 一括リネームやコピーなど 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
~/bash_profile: ログイン時実行~/bashrc: bash起動時実行~/.tmux.conf: tmux起動時の実行
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.pdf が fuga-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
bootstrap
大きさで表示されるものを切り替える
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 のときだけ表示、それ以上で非表示になる。
