それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

raspberryPiでpythonコマンドがすごく遅い時があるのでなんとかする

python コマンドがすごく遅い

コマンドによるのですが、python で出来たコマンドがすごく遅い

調べてみたら、zip 化 されたバイナリ(eggをまとめたもの)になってるので、実行時に展開が走るので遅い。本当に遅いんです。

もとのソースコードを用意したほうが速い

pyc のファイルを作ればだいぶ速いらしい。

というわけでヤってみた

とりあえず、python でくっそ遅いパッケージを何とかすることにしてみる。

git clone git://github.com/rg3/youtube-dl
sudo ln -s ~/youtube-dl/youtube_dl/__main__.py /usr/local/bin/youtube-dl
chmod +x /usr/local/bin/youtube-dl

実行速度比較

git から取ってきた圧縮されたバイナリを実行した場合

takuya@raspberrypi:~ $ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl-bin
takuya@raspberrypi:~ $ time youtube-dl-bin -h
real    0m12.439s
user    0m11.730s
sys     0m0.570s

ソースコードからをそのまま使う場合 中間コードにコンパイルしたものといえ、すごく速い。

takuya@raspberrypi:~ $ time youtube-dl -h
real    0m3.843s
user    0m3.400s
sys     0m0.320s

は、速い。。。。速度3倍か。この差は歴然だ。raspi のARMのCPUだとココまで変わるのか。なんでだろうな

3倍速い赤いヤツのようだ。Intel x86だとココまでの差はつかなかったと思うんですけど。

結論

python はソースもって来たほうが速い・・・なんでだ

参考資料

Raspberry Pi • View topic - Speeding up youtube-dl

gz圧縮されたログファイルから該当データを探したい

gzip 圧縮された ログファイル達

たくさんのログファイルがあるけれど、まさか、イチイチ展開して中身を見るわけにもいきません

takuya@:apache2$ ll
合計 10716
-rw-r----- 1 root adm    11948 2016-11-05 18:56 access.log
-rw-r----- 1 root adm   371968 2016-11-05 01:53 access.log.1
-rw-r----- 1 root adm    11146 2016-10-27 07:30 access.log.10.gz
-rw-r----- 1 root adm    15063 2016-10-26 03:20 access.log.11.gz
-rw-r----- 1 root adm    10311 2016-10-25 04:13 access.log.12.gz
-rw-r----- 1 root adm    42785 2016-10-24 05:32 access.log.13.gz
-rw-r----- 1 root adm    68351 2016-10-23 05:46 access.log.14.gz
-rw-r----- 1 root adm    24360 2016-11-04 06:59 access.log.2.gz
-rw-r----- 1 root adm    24936 2016-11-03 19:05 access.log.3.gz
-rw-r----- 1 root adm    47891 2016-11-02 06:15 access.log.4.gz
-rw-r----- 1 root adm    21231 2016-11-01 01:57 access.log.5.gz
-rw-r----- 1 root adm    69771 2016-10-31 03:41 access.log.6.gz
-rw-r----- 1 root adm     4056 2016-10-30 07:03 access.log.7.gz
-rw-r----- 1 root adm    33669 2016-10-29 03:02 access.log.8.gz
-rw-r----- 1 root adm    26796 2016-10-28 07:24 access.log.9.gz

まとめてgrep 検索したいとき

zgrep POST *.gz

また zcat で中身を見れる

zcat access.log.10.gz | grep -v GET

また less などのビューアを通すとみられる

less access.log.11.gz

TPO に応じて使い分けで便利

zgrep が一番良く使うかなぁ

参考資料

http://d.hatena.ne.jp/kanonji/20110816/1313476218

ディスクのパーティションテーブル一覧が更新されない

更新されない・・・

最近USBの抜き差しとgdisk してると困る、ディスクの一覧やパーティションの一覧が更新されない。

現象

lsblk
gdisk /dev/sdc ## パーティションテーブル変更
mount /dev/sdc5 /mnt # not found !なんでや!
lsblk #  sdc6 ない。
gdisk /dev/sdc # sdc6 ある。

なぜかパーティションテーブル変更が、即座にOSに反映されない。しかも使えない。再起動コース?

再起動はめんどくさくてちょっと調べてた。

調べたらあった。

rescan という、名前からして効果がありそうなものだった。

sudo su 
echo 1 > /sys/block/sdd/device/rescan
echo 1 >   /sys/block/sda/device/rescan
echo 1 >   /sys/block/sdb/device/rescan
echo 1 >   /sys/block/sdc/device/rescan

その他の選択肢。

でもうまくいかないときがある。

それでもダメなときは、parted の partprobe を試してみた

sudo partprobe

インストールはapt で一発

sudo su 
apt install parted
sudo partprobe

2017-02-01 試してたら次のようになった。

takuya@:~$ sudo partprobe
Error: Partition(s) 1 on /dev/sdc have been written, but we have been
 unable to inform the kernel of the change, probably because it/they are in use.
  As a result, the old partition(s) will remain in use.  
You should reboot now before making further changes.

たぶん、systemd がわるい。サービス化されてそれぞれの実行タイミングが不明になったもんな。 systemd になってからこういうことが多発する。systemd のせいで時間が余計にかかることが多くて困りますね。

lvm でdm(device mapping) されてると駄目っぽいのか

2020/09/14 追加

やっぱり再起動しないとだめなようで、理由がわからない。 lvm や cryptsetup ( dm-crypt )が挟まってるからだろうか。USBドライブですら再起動しないとだめになるのは辛い。

もし、パーティションを全削除していて、それが反映されないのであれば wipefs するというのも手段の一つだともう。

sudo wipefs -a /deb/sde

参考資料

HowTo: Reload (re-read) Partition Table In Ubuntu Linux - nixCraft

http://www.cyberciti.biz/tips/re-read-the-partition-table-without-rebooting-linux-system.html

GNU parallel でコマンドを並列実行する

コマンドを並列実行したい時があります。

たとえば、たくさんの画像を変換したり、動画を変化したりなどジョブを大量に起動することをしたいとき

コマンド実行中もマルチコアのCPUが余っててもったいなーって思います。i7などは4コア2スレッドの8CPU有りますからね。

またruby などはGIL ( global interpreter lock )で上限ストップがかかってたり。

普段は xargs

並列実行は xargs を使ってます。

find | xargs -P0

GNU parallel というものを見つけた

GNU Parallel を使うと並列実行が可能になるということを知りました。

早速インストール

brew install parallel
sudo apt install parallel

prallel の特徴

  • 並列実行したいコマンドと並列実行したいファイルを引数を指定する。
  • パイプライン処理に埋め込む
  • sshlogin で複数マシンに流せる。

などのようです。

早速使ってみる

parallel echo {}::: a b c

100回実行してみる。

parallel echo $1 ::: {001..100}

基本コマンドはカンタン

paralell 実行したいコマンド {} ::: @{コマンドに渡したい引数一覧}

では画像処理をする場合

jpeg to png をぱぱっと並列処理で

parallel convert {} {.}png ::: *.jpg

なるほど楽ですね。でもコレって速いのかな。

同じマシン上ならまず効果がないことわかった。

ナニも指定してないとき

takuya@test$ time find -name '*jpg'  -exec convert {} {}.png \;

real    0m3.493s
user    0m2.751s
sys 0m0.565s

parallel実行時

takuya@test$ time parallel -j 8 convert {} {}.png ::: *.jpg

real    0m1.866s
user    0m4.303s
sys 0m1.467s

xargs の並列実行オプション

takuya@test$ time find -name '*jpg'  | xargs -I@ -P0 convert  @ @.png

real    0m1.415s
user    0m3.702s
sys 0m0.939s

あんまり早くない。

予想だけど、parallel がシェルを起動してその後にコマンドを実行するためにオーバーヘッドがたぶん大きいのだと思う。

ということは 通常処理なら xargs が最速。

parallel の使い道はあるの?

ある。

ssh 経由での実行

ssh 経由で実行できる。

ssh 経由の実行先にもparallel をインストールを入れる必要がある。

takuya@:~$ parallel  -S 10.0.2.127 echo {} ::: a b c
a
b
c

ssh で複数のサーバーに分散させれば、このコマンドは便利だと思う。

ただ、ssh のコネクションの開始に時間がかかるので、1ジョブが数分以上かかるなら特に効果が見込めるんじゃないかな。

参考資料

https://www.gnu.org/software/parallel/

コマンドを並列に実行するGNU parallelがとても便利 - りんごがでている

swapをRAID0の用にストライプしながら分散させる。

Swap ファイル・デバイスについて知見を得ました。

Swap ファイルや、デバイスは複数使えて、しかもその優先順位を決めることが出来て しかも、その優先順位同じにするとRAID0的に使ってくれるそうです。

複数個ためしに設定しました。

まずは、ファイルから。 -p 0で優先度0にしている

sudo dd if=/dev/zero of=/var/swap bs=1M count=100
sudo mkswap /var/swap
sudo swapon -p 0 /var/swap

次に、スワップバイス、こちらも-p 0で優先度0にしている

sudo mkswap /dev/sda3
sudo swapon -p 0 /dev/sda3

swap をマウントした状態。

このようにしておくとSwapを負荷分散しながら使ってくれるそうだ。

takuya@raspberrypi:~ $ swapon -s
Filename                                Type            Size    Used    Priority
/var/swap                               file            102396  0       0
/dev/sda3                               partition       102396  0       0

空いているI/Oデバイスを使うようにSwapを設定しておくとちょっと嬉しいと思う。

複数個設定しておくと、並列にSWAPを使ってくれるとのこと。

raspberry pi の SDカードはWriteがどうしても遅いし、Swapファイルだからオーバーヘッドが気になるので、 USBディスク側にSWAPを作ってそっちと並列に使うことにしてみる。

参考資料

fstabでswapのプライオリティが設定できます。この数が多ければ多いほど優先される仕組みになっています。 一方で同じ優先順位であれば均等に使われます。 複数のハードディスク上にswapパーティションを取り、それを同じ優先順位で設定すると、 スワップの際に並列に使われるのでraid0のような効果をもたらすように出来ています。 https://uc2.h2np.net/index.php/Linux%E3%81%AEswap%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E7%A7%81%E3%81%8C%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E4%BA%8C%E3%80%81%E4%B8%89%E3%81%AE%E4%BA%8B%E6%9F%84

2017-01-09

fix typo

物理ディスクやUSBメモリをVirtualBoxの仮想マシンとして起動する

USB-HDD に入ったOSを起動したい

VMWare Fusion を持ってたんですが。ライセンスどっか行った。仕方ないのでVirtualBoxで出来ないか調べてみた。

調べたらできることがわかったFusionいらんやん。

USBメモリのDeibanの起動を試す。

コマンドから、仮想マシンを作ればいける。と分かった。

まずは、ディスクの確認

殆どの場合 /dev/disk0 がCoreStorage で SSD /dev/disk1 がCoreStorage経由で見えるドライブのようですね。

なので、USBドライブを使うとdisk2からになるのでしょうか。

takuya@~$ diskutil list
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *15.4 GB    disk2
   1:        Bios Boot Partition                         1.0 MB     disk2s1
   2:                        EFI NO NAME                 209.7 MB   disk2s2
   3:           Linux Filesystem                         536.9 MB   disk2s3
   4:                 Linux Swap                         536.9 MB   disk2s4
   5:           Linux Filesystem                         14.1 GB    disk2s5

コマンドから仮想マシンのディスクの作成。

ディスクの確認が出来たら、仮想ディスク作成

$ VBoxManage internalcommands createrawvmdk -filename ~/VirtualBox\ VMs/usbdrive.vmdk -rawdisk /dev/disk2
RAW host disk access VMDK file /Users/takuya/VirtualBox VMs/usbdrive.vmdk created successfully.

コマンドがややこしいので一つ一つ見ておくことにする。

VBoxManage \ 
 internalcommands createrawvmdk \ #新規VM作成サブコマンド
 -filename ~/VirtualBox\ VMs/usbdrive.vmdk \ # 新規VMのディスク・ファイル
 -rawdisk /dev/disk2  # 接続するドライブ(ディスク)

これで、UBSストレージに直結したVirtualBoxドライブが作成された。

注意点。

仮想ドライブが直結したUSBドライブを利用するユーザーが、一般ユーザーの場合に、権限エラーで堕ちるので、Permissionには注意する必要があった。

Permissionに注意する

takuya@VirtualBox VMs$ ls /dev/disk2 -l
brw-r----- 1 root operator 1, 5 2016-10-25 17:47 /dev/disk2
takuya@VirtualBox VMs$ sudo chmod 770 /dev/disk2
takuya@VirtualBox VMs$ ls /dev/disk2 -l
brwxrwx--- 1 root operator 1, 5 2016-10-25 17:47 /dev/disk2

適当な権限設計だけど権限を付けておいたら上手く行った

最後に仮想マシン作成

ここまで準備できたら、最後にこの仮想ディスクを接続した仮想マシンを作成する。

新規仮想マシンの画面で、USBドライブ接続設定したvmdk を選んで新規作成し、あとは起動

動作確認

Ubuntu LTS 16.04で正しく起動することを確認した。

個人的感想ですが、VmWare Fusionに比べてパフォーマンスはイマイチだよねVirtualbox

/dev/disk に直結するので

/dev に直結することを考えれば、なんでも起動できるんじゃないかな。

ソコから想像するにBootCampのWindowsなども起動できるんじゃないかな。

ただしBootCampのwindowsは、起動するのにEFIで起動するため、EFIパーティションも必要になるとおもう。EFIパーティションを用意したりするのは、ちょっと設定は面倒かもしれない。

LinuxVirtualBoxでやるなら、/dev/sdX に繋げばいいか。WindowsVirtualBoxだとどうやるんだろうか。

参考資料

http://www.sysprobs.com/mac-os-x-host-boot-virtual-machine-from-usb-in-virtualbox

UNIXパイプの思想。MacのAutomatorのアイコンがもってるのはパイプ。

パイプについて調べてた

UNIXのパイプをもっと上手に使いたくて、パイプライン処理について調べてた。

パイプ (コンピュータ) - Wikipedia

Wikipedia に以下のような記述が

アップルのAutomatorのアイコンはパイプを持ったロボットだが、これもパイプラインの概念を応用したソフトウェアである。

えっマジ?と思ってみてみたら、

え?パイプ持ってる。

f:id:takuya_1st:20161028002655p:plain:w200

ホントだパイプ持ってる。

f:id:takuya_1st:20161028002651p:plain

パイプライン思想に基づいたAutomator

だれでも手軽にパイプラインをGUIで実行する思想を具現化してるんだ。

こういう思想が見え隠れするのはMac OSXの良いところですね。

パイプライン便利。

Unixパイプでアレコレするのは本当に便利で、無印良品ダイエーなどで使われたってドコかで読んだ気がする。

gdisk でfat32 やNTFS のCodeは何になるのか

gdisk でGUIDパーティションが日常になってきた

LinuxでGPTを使うことが多いのですが、FAT32・NTFSの領域を作ろうと思って、考え込んだ

windowsのコードはどれだ・・・

Linuxなら 8300 です。 Linux Swap なら 8200 でした。LVMなら 8e00 です。

では、NTFSは?FAT32は?

USBメモリぶっ刺して確認してみました。

gdisk で、新品のUSBメモリ(フォーマット済み)を見てみました。

Number  Start (sector)    End (sector)  Size       Code  Name
   1              32        30031249   14.3 GiB    0700  Microsoft basic data

window用には 0700

Linux ( btrfs , ext3 , ext4 ) などが 8300 で全て同じフラグですから、WindowsFAT16/FAT32/NTFSも全て同じで良いんじゃないかな。

まぁどのフォーマットになっていることが大事でCODEフラグはあまり関係はずだし。

linuxで一時的なパス名を作る、mktemp コマンド の使い方

一時ファイルを作るには mktemp が使える

Temporaryなファイルがほしいときは、mktemp で一発解決

$ mktemp 

だけど一時的なディレクトリを作るにはどうする?

mktemp すると、ファイル作成されちゃう。消すのも面倒くさい。 

そこで --dry-run なオプションを使うと解決

$ mktemp -u
$ mktemp --dry-run  # または

この、名前だけ取得する -u と組み合わせて戦う

$ mkdir $( mktemp -u )

ディレクトリを作るに、まぁ、mktemp -d すればイイんですが。私はパイプも作れる汎用的なのを求めてたので。

同じようにして、一時的な名前付きパイプも

名前付きパイプも同じですね

$ mkfifo $( mktemp -u )

一時ファイルを作るよりパイプで渡すほうがblockingなI/O が効くので便利なことも多いし、容量期にしなくてイイのも強い。lseek 出来ないけど。

何に使ってるかわからなくなるので、ファイル名のメモを残す

ファイル名のテンプレートを残せる。

オプション -t を使えば、tmp ファイルがなんのために作られたかよく分かる。

$ mktemp -u -t sample.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.jpg
/tmp/sample.3P6NasUvF857yfZHNaz8Xr9wj5yMz1t2.jpg
$ mktemp -u -t my-app-dir-XXXX
/tmp/my-app-dir-02tP

Xは最低3文字アレばいいみたい

/tmp なら再起動時に消えるから安心

/tmp は再起動時に消えるから安心。

最近だと、systemd のジョブに登録されてますね。

systemd-tmpfiles-clean.service

シェル・スクリプトの場合はtrapすればイイ

temp_name=$( mktemp -u)
trap 'rm -rf "$temp_name"' EXIT INT TERM HUP

ruby なども trap ですね。

参考資料

http://unix.stackexchange.com/questions/29851/shell-script-mktemp-whats-the-best-method-to-create-temporary-named-pipe

raspberry pi の omxplayer を標準入力でパイプして使う。

raspi の omxplayer が超便利。

便利なんだけど、パイプを受け付けてくれないので困る。なぜパイプを受け付けないのか?

omxplayer はキーボードから操作できるから。

キーボードから各種操作が出来るため、キーボードをSTDINに割り振っている。

そのため、標準入力から動画をインプットすることが出来ない。

ということは、キーボード入力を無効化するオプションが有るはず。

–no-keys オプション

マニュアルを見ると、見つかった。

--no-keys               Disable keyboard input (prevents hangs for certain TTYs)

キーボードを入力しないオプションを使えば、動画をパイプ経由で渡すことが可能だ。nokey ってのはキーボード

標準入力に動画を渡す

cat my-sample.mp4 | omxplayer --no-keys  pipe:0

pipe:0 が標準入力だからいけますね―。コレで勝てる

みたいだけなら、コレで行ける。

操作できないじゃん。

そうなんですよ。パイプで渡せても、キーボード入力を取れないので操作ができません。

仕方ない名前付きパイプだ。

mkfifo ./pipe0001
cat my.mp4 > ./pipe0001 &
omxplayer ./pipe0001

コレくらいしか解決方法はなさそう

シーク問題。

でもパイプを使うと、Seekが出来ないから不便だよ?

パイプで渡すと。シークできない。

そうなんですよ~、スキップ操作できないんですよね。コレは不便だよね。 パイプはその特性上後戻りができないファイルなのです・・・

なのでせっかくキーボードが使えるパイプで渡せても、巻き戻しなどが一切できない。とても不便です。

なのでomxplayer を使うときは、パイプよりHTTP経由にしましょう

debian系linuxでDesktopをGnome/lxde/kde/xfce を切り替える

gnome3 をたまに使いたくなる時があります。

もうずっとxfce なのですが、ubuntuなどを見てると、Gnome-desktopもたまにはイイかなぁなど思う時があります。

だったら、ちょっと切り替えて使おうかって思うと、Desktopを切り替えるのはどうするんだと

気になって調べたのでも

Desktopの環境の代表例

切り替えできる代表例は次の通り

など

Xwindowマネージャとセッションマネージャー

Xwindowマネージャーは、マルチウインドウを扱うためのライブラリ一式で、Desktop環境はセッションマネージャーの方にある。

デスクトップ環境のインストール

debian の場合は、デフォルトのインストールパックが用意されていて、それが task-XXX から始まる、パッケージ名になる。

gnome のインストール

sudo apt install task-gnome-desktop

日本語環境もいるなら

sudo apt install task-gnome-desktop task-japanese-gnome-desktop

KDE のインストール

sudo apt install task-kde-desktop

日本語環境もいるなら

sudo apt install task-kde-desktop

環境の切替はどこでやるの?

起動時のデフォルトなデスクトップを切り替えて、違うデスクトップマネージャーを使うにはどうするのか。

そういう場合には、debian では update-alternativesを使うようです。

sudo update-alternatives --config x-session-manager

ログイン画面の選択

ログイン画面は gdm3 で選択する

sudo dpkg-reconfigure gdm3
  • gdm
  • lightgdm
  • kde

ログイン画面が変わると気分も変わる。

とりあえず試したいとき

ログイン画面から、ログインするときに、デスクトップ・マネージャーを選ぶことが出来る。

f:id:takuya_1st:20161021153959j:plain:w300

もっと単純にとりあえず試したいとき

複数のデスクトップマネージャーをtty を切り替えて使うことが出来る。

キーボードを使ってtty を切り替えることが出来る。

Ctrl + Alt + F1 
Ctrl + Alt + F2
Ctrl + Alt + F3 
Ctrl + Alt + F4 
Ctrl + Alt + F5
... 

F1 が tty1 F2 がtty2 というように、ログインするtty を切り替えて使うことが出来る。

テキストログインした後に

startx /usr/bin/startlxde
startx /usr/bin/startkde
startx /usr/bin/gnome-session

などとすることで、startx を直接叩くという古えからの手法でX環境を作ることが出来る

たまには KDEGnomeも新鮮で楽しい

デスクトップのWindowが一新されるだけで、気分も変わって楽しい。

追記

gdm3 を別の tty であげたら、リブート不要で試せるかと思ったけど。

http://aplawrence.com/Unixart/xtty.html

なんかめんどくさそうだった。開発者はデバッグ用に複数起動してると思うんだけどなぁ

MacOSでext4やext2,3にフォーマットする(mkfsのインストール)

macOSでも ext4 のメディアやファイルを扱いたい

仮想ゲストのファイルをイメージで持ってたり、USBメモリをフォーマットしたりするのに、やっぱりMacは不便じゃん?ext4くらい扱えたらイイのにと思って調べました。

ext4 を扱うには e2fsprogs

e2fsprogs を使うと、ext4 を扱うに足るコマンドが導入されることがわかった。

brew install e2fsprogs

ただし、これはリンクされないbrew だったので、存在を忘れがち。

使い方

$(brew --prefix e2fsprogs)/sbin/mkfs.ext4

/usr/local/opt/e2fsprogs に作られるのだけど brew の格納先はいつも同じとは限らないので --prefixを使ったほうが無難かも。

コマンド群は次の通り

takuya@Desktop$ ls /usr/local/opt/e2fsprogs/sbin/
badblocks   e2fsck    findfs     fsck.ext4dev  mkfs.ext4     uuidd
blkid       e2image   fsck       logsave       mkfs.ext4dev
debugfs     e2label   fsck.ext2  mke2fs        mklost+found
dumpe2fs    e2undo    fsck.ext3  mkfs.ext2     resize2fs
e2freefrag  filefrag  fsck.ext4  mkfs.ext3     tune2fs

tutne2fs や resize2fs があるのは本当に助かります!

fsck.ext4 とかあるので、EXT4のりサイズや、ディスクのチェックも行える。

これでMacUbuntu入れようかと思ってた気分はふっとんだかもしれない。

参考資料

http://apple.stackexchange.com/questions/171506/formatting-usb-disk-as-ext3-on-mac

find コマンドでよく使うものをalias 代わりに関数にした

find を頻繁に使います。

find コマンドは気づけば打ち込んでいます。大変良くお世話になっています。

でもオプションを毎回入れるのが面倒

頻繁に使うオプションが有るんです。それを毎回入れるのが面倒になってきてる。

  • git のファイルの無視だとか
  • カレント・ディレクトリの無視

alias したいけど出来ない

alias したいけど、find はパス引数を1番目に入れないと動かない仕様。

find パス フィルタ1 フィルタ2・・・

パスが最初に来るので不便。

関数にした

curl -LJO https://gist.githubusercontent.com/takuya/43f4d395ab9513102e19c4689922cec7/raw/find >  ~/.bashrc.d/find

gist.github.com

今回は、ちゃんと引数の中身を見たり、存在確認をしたりしておいた。また少し便利になった。

find のデフォルト無視条件を/etcに書くとか環境変数に入れておくことは出来ないのだろうか。

find 以外のコマンドで find 的なことが出来るものないのだろうか。。。

関数が邪魔なときは unset

unset find 

bash で定義済み関数を削除するには unset なので 、関数がじゃまになったらunset で消せばイイ

env や which を使うという手もある。

env find 
$(which find)

エイリアスなら バックスラッシュだけで行けるんだけど、関数については出来ないので。

関連記事

http://takuya-1st.hatenablog.jp/entry/2017/07/28/060000

更新

  • 2018-01-16 書き直した
  • 2018-03-01 gist にした、バックスラッシュ記述を追加

exiftoolで画像の写真の向きやメタデータを修正する

exiftool を使えば、orientation を修正できる。

exiftool -Orientation=4 -n  IMG_2684.jpg

上記の例だと、Orieantationを4に設定することが出来る。

Orieantaionは表示に使われる。

画像データを反転させるのではなく、EXIFデータだけを反転させていることが重要。

フォトビューア系のアプリケーション( macOSX preview.app など )であれば、Orieantaionの指定に従って、「表示」するときに修正して表示してくれる。

以前は、rubyphpで修正したけど、exiftoolだけで出来たんですね。。。

WEBでやるなら、この数値を元にCSS transform に突っ込めばいいです。

orientaion 一覧

Orientation                     : Horizontal (normal)
Orientation                     : 1
Orientation                     : Mirror horizontal
Orientation                     : 2
Orientation                     : Rotate 180
Orientation                     : 3
Orientation                     : Mirror vertical
Orientation                     : 4
Orientation                     : Mirror horizontal and rotate 270 CW
Orientation                     : 5
Orientation                     : Rotate 90 CW
Orientation                     : 6
Orientation                     : Mirror horizontal and rotate 90 CW
Orientation                     : 7
Orientation                     : Rotate 270 CW
Orientation                     : 8

関連資料

http://takuya-1st.hatenablog.jp/entry/2013/03/20/215429

デジカメ写真の向きをCSSの回転に置き換える。exif orientation を transform へ - それマグで!

画像の写真の向きを修正する@PHP - それマグで!

identify 画像のexif情報を見る - それマグで!

m4a のタグ情報を表示する

mp4tags に含まれる、mp4info でファイル情報を表示する

takuya@Desktop$ mp4info ~/Music/iTunes/iTunes\ Media/Music/いきものがかり/いきものばかり\ ~メンバーズBESTセレクション~\ \[Disc\ 1\]/1-03\ 青春ライン.m4a
mp4info version 2.0.0
/Users/takuya/Music/iTunes/iTunes Media/Music/いきものがかり/いきものばかり ~メンバーズBESTセレクション~ [Disc 1]/1-03 青春ライン.m4a:
Track   Type    Info
1   audio   MPEG-4 AAC LC, 238.236 secs, 256 kbps, 44100 Hz
 Name: 青春ライン
 Artist: いきものがかり
 Composer: 水野良樹
 Encoded with: iTunes 10.7.0.21
 Release Date: 2010
 Album: いきものばかり ~メンバーズBESTセレクション~ [Disc 1]
 Track: 3 of 15
 Disk: 1 of 2
 Genre: Pop
 BPM: 0
 Part of Compilation: no
 Part of Gapless Album: no
 Lyrics:
つなぐ 想いを 夢の先まで春ラインを 僕らは今 走り出すよすよう戻らない

使い方

mp4info m4a_file

mp4info がない場合、ffmpeg で見れる。

ffmpeg もしくは ffprobe を使うことでファイルの情報を見れますね。

インストール方法

brew install mp4v2

関連資料

mp4tags で、動画のアーティスト情報を書換えて、iTunesのミュージックビデオの仕分けをちゃんとする - それマグで!