目次
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
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を作る。ワイルドカードで指定しても良い。
convert page1.jpg page2.jpg page3.jpg hoge.pdf
PDF を画像に変換
pdftoppm -png hoge.pdf fuga
こうすると hoge.pdf が fuga-1.png, fuga-2.png みたいな感じで全ページ PNG になる。
パスワード解除済みPDFを作成
qpdf -password=<your-password> -decrypt /path/to/secured.pdf out.pdf
(補足) OpenCV で jpg圧縮
cv2.imwrite('hoge.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 75])
論文用作業
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 するのが楽そう.
最近は、 yt-dlp の方が良いらしい。
ダウンロード
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でやるみたいなことをしなくて良い。)
通信速度の計測
アップロード
dd if=/dev/zero bs=1M count=100 | ssh username@123.456.789 'dd of=/dev/null'
ダウンロード
ssh username@123.456.789 'dd if=/dev/zero bs=1M count=100' | dd of=/dev/null
scp での帯域制限
scp をすると send disconnect で落ちることがある。転送速度の速さが制限されている可能性があるため、帯域制限をする必要がある。 以下は 20Mbit/sec 制限。
scp -l 20000 hoge.zip my_server:/path/to/dir/
overleaf
オンプレミス
docker run -it --rm sharelatex/sharelatex:2.5.0
メール
docker-mailserver でやっていく。
- Gmail で転送をやろうとすると受け手側で OK しないといけない
- エイリアス設定するのが簡単か
postfix の部分直接いじればメーリングリストっぽく設定もできる
http://www.postfix.org/VIRTUAL_README.html#forwarding
zip
- deterministic な zip ファイルを作る https://zenn.dev/amane/articles/fc454d5e471ffc
コマンドオプション
zip -r new_file.zip want_to_freeze_dir/
大きなファイルの分割
exiftool を使った写真ファイルタイムスタンプ変更
撮った写真をカメラから手元に転送してきたときに、 ファイルのタイムスタンプが撮影時刻ではなく転送時刻になってしまうことがある。 Linux で開いて変更してやるのが良い。
sudo exiftool "-FileModifyDate<DateTimeOriginal" *.JPG
mp4 に関しては
sudo exiftool "-FileModifyDate<MediaCreateDate" video.mp4
タイムスタンプの足し算
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
android のマウント
andoroid スマホをLinuxに直接マウントして操作する場合は https://fishrimper.blogspot.com/2018/01/mtp.html
何があるか見る
jmtpfs -l
jmtpfs -device=1,22 test/
exfat のマウント
sudo apt install exfat-fuse exfat-utils sudo mount -t exfat-fuse /dev/sdc1 /mnt/sdc1
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 | 非表示
