macでファイルの重複を調べてみた

問題

iPhone7にしたらイヤホンジャックが消えたのでSONYウォークマンを買った。

で、元々iTunesにいろいろ入れてたのでそのフォルダをカカッとウォークマンに入れたんだけども、

同じ名前のmp3とかm4aとかaacとかがたくさんあって、同じ曲がたくさん流れるようになった。

取り込み方が悪かったのか、iTunesが重複をよしなにしてくれてたのか分からないけども、できればユニークに持ちたい。

候補

色々あるらしいけど、Geminiが980円で使えるらしい。

Gemini – MacOS Xのための最高の重複ファイルの検索と消去アプリケーション | CleanMyMac – マックをクリーンにしよう

・・・と思ったら2があるらしいので、そっちの体験版を使ってみることにした。

macpaw.com

実行

ウォークマンの中を選択して実行してみる。

f:id:izugch73:20161111170707p:plain

思ったより早い。

32GBのウォークマンに16GBほどのMUSICが入っているが、1〜2分ほど。

f:id:izugch73:20161111170825p:plain

結果、2.5GBほどの重複ファイルが見つかった。マジ?

f:id:izugch73:20161111170917p:plain

詳細

スキャンが終わると以下のような画面が開く。

f:id:izugch73:20161111171909p:plain

フォルダごと被っていたらフォルダにまとめて表示してくれる。

重複かどうかの判断は無償版では細かく選択できないようだ? 「類似ファイルのスキャン」という項目のチェックしかなかった。

まぁ今回は拡張子も違うし、ファイル名も違う可能性もあるし、物によってはmp3かm4aかも知れないし、あれそもそもこれ重複って言えるんかな

ともかく、2.5GBの内容を確認してみる。

完全な重複項目

からっぽカプセル

PENKI(アルバム)とシングルが拾われた。

確かにねぇ・・・。みなさんどうしてるのかしら。

とりあえずこういうのは残すことにする。

f:id:izugch73:20161111173218p:plain

Wonderful Rush

Wonderful Rushが2曲見つかった。

ベストの曲だが、なんとちょっとアルバム名が切れたディレクトリが別に作られていたらしい。

なんでやねん。転送ミスかしら?

正常に送られているやつもあるのになぁ。削除。

f:id:izugch73:20161111172752p:plain

晴レ晴レファンファーレ

よく見ると、ファイル名の一番最後のカッコが抜けている。

f:id:izugch73:20161111173558p:plain

ミライスター (The LASTTRAK Happy Hard Soca Remix)

これもファイル名の末尾が抜け落ちている。

f:id:izugch73:20161111173946p:plain

Toyful Basketの中に2曲あった。10/20に変なのが増えている。

曲を追加してsyncした時にこういうことが起こるんかな?それだったらやばやつやん。

f:id:izugch73:20161111174045p:plain

類似ファイル

Fantastic Funfair

あー、これこれ。これです。

mp3とm4aが被ってるんです。こんなんが1.5GBも食っているんです。

f:id:izugch73:20161111174825p:plain

ディレクトリに降りてみると、全部2つずつありますね〜。これを見つけたかったのです。

なんでこうなってしまうんでしょう。。。やっぱりiTunes取り込み関係かな。

f:id:izugch73:20161111174944p:plain

削除

m4aを残すことにした。

日付がちょっとずれてた(mp3のほうが古かった)ので、「類似ファイルを選択」から「最も古い」ものを選択し、削除する。

f:id:izugch73:20161111180435p:plain

あれ!?無料版、500MBしか削除できないのか!

f:id:izugch73:20161111180622p:plain

パスは分かるので、手で頑張りました。

その後

キラセンだけ残っていた。

今重複確認しても類似として出ないな。

f:id:izugch73:20161111183606p:plain

でもまぁ、ファイル名が同じで拡張子とバイナリが全然違うものを一緒として取り扱うかどうかで言えば、普通は異なるものとして出すべきという気もしてきた。

(おわり)

SourceTreeでサブモジュールの作成に失敗する

やりたい

SourceTree(v2.3.1)でサブモジュールを作りたい。

できない

以下のようなエラーが出る。

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule add -f https://username@github.com/organization/repo.git hoge/fuga 
Cloning into 'hoge/fuga'...
warning: templates not found /usr/local/git/share/git-core/templates
fatal: could not read Password for 'https://username@github.com': Device not configured
fatal: clone of 'https://username@github.com/organization/repo.git' into submodule path 'hoge/fuga' failed
Completed with errors, see above

しらべる

SourceTreeのバグっぽい。

Submodule with different user fails to clone/push with Sourcetree - Atlassian Answers

自分の持ち物じゃないリポジトリをSourceTreeでサブモジュールにしようとするとエラーを吐くようだ。

確かに会社での作業だったので、
- (会社のOrganizationが持つ)Aリポジトリ に、
- (会社のOrganizationが持つ)Bリポジトリ を、
- 自分のユーザ
サブモジュールとして追加しようとしていたから、この現象だと思う。

かいけつ

SourceTreeのバグなので、コマンドで実行する。

git submodule add https://github.com/organization/repo.git hoge/fuga

できた。

追加さえできれば、SourceTreeのサブモジュールの欄に出てくるし、サブモジュールのコミット履歴ウィンドウも開ける。

Raspberry PiとNode.jsでWebからGPIO操作

Control your Raspberry PI GPIO in Real Time via the Browser using NodeJS, Socket.IO and pi-gpio – Grosan Flaviu Gheorghe

jsからRaspiのGPIOを操作する

jsGPIO を使う。

github.com

READMEにある通り準備をする。

Node.jsのインストール

よしなに。

quick2wire-gpio-admin のインストール

github.com

これもREADME通りに入れればいいが、少し説明が古いので追記。

make
sudo make install

gpioグループを追加する。
サンプルではsudo adduser $USER gpioとなっているが動かなかったので、usermodで。

sudo usermod -aG gpio $USER

debian系であるraspbianならadduser使えるはずなんですけどね。
Linuxでユーザーをグループに追加する - Qiita

次に22pinを例に以下のような操作があるものの、Permission Deniedばかりで全然うまくいかない。

% gpio-admin export 22
% cat /sys/devices/virtual/gpio/gpio22/value
0
% echo out > /sys/devices/virtual/gpio/gpio22/direction
% echo 1 > /sys/devices/virtual/gpio/gpio22/value

gpioのパスが変わってるんだそうな。 プルリクは飛んでるのにマージされてないらしい。

github.com

ということでプルリクの通りに src/gpio-admin.cを直す。28行目くらい。

static void allow_access_by_user(unsigned int pin, const char *filename) {
  struct stat info;
  char *sys_path = "/sys/class/gpio/gpio%u/%s";
  if (stat("/sys/class/gpio", &info) != 0)
    sys_path = "/sys/devices/virtual/gpio/gpio%u/%s";

  char path[PATH_MAX];
  int size = snprintf(path, PATH_MAX, sys_path, pin, filename);

これで % gpio-admin export 22 が叩けるようになる。


あとは

npm start

なり、

nodejs example-server.js

なりを実行。localhost:8000で動作を確認。

忘備録

テストしまくってたらポートが被ってnode.jsが起動しなかった qiita.com