散らかった写真を整理したい方へ
数年前に家族が撮影した未整理の写真データが出てきた。 変更した日は出ているが、写真名からはいつのものか判断できない。さらにはよく見ると同じ写真がファイル名が違うものであったりと、かなり状態としては悲惨だった。 それをサクッと整理したお話です。
以下、finderで表示した場合、こんな感じだった。
整理するためにやるべきこと
用件としては二つ
- 重複したデータは取り除く
- それぞれの写真の日付が一目でわかるようにする
やったこと
重複データを取り除く。
お金を出せば有料のアプリで一気にできるのだが、どちらもコマンドを使って解決した。
まず、重複データを取り除く。
fdupes
というコマンドを利用した。mac標準では入っていないので、brew
を使ってインストールする。
brew install fdupes
※ なお、brew
が何ものかについては MacにHomebrewをインストールする あたりを参照のこと。
これでfdupes
が使える状態になった。
# fdupes -r フォルダ名
これで、重複しているファイルリストが出てくる。
# fdupes -r backup/ | head backup/SH3E0154.jpg backup/SH3E0154_0001.jpg backup/SH3E0090.jpg backup/SH3E0090_0001.jpg backup/PAP_0222.JPG backup/PAP_0223.JPG backup/PAP_0224.JPG backup/PAP_0225.JPG
fdupesに重複ファイルを消すオプションがついているけれど、消してしまったら元に戻せないので、一度対象のファイル名をテキストに出力する。
fdupes -rf backup/ | sort | uniq | grep -v '^$' > duplicate.list
中身を確認し、問題なければ削除する。
while read file; do rm "$file"; done < duplicate.list
この時、rmだとこれまた問答無用で消えてしまうので、それでも怖い方はrmtrashなどを利用する。 そうすると、重複ファイルは、ゴミ箱に入る。確認が終わったらゴミ箱を空にすればOK!
ファイルがいつに撮影されたものか一目でわかるように。
ファイル名が日付になれば、一目でわかる。
jhead
コマンドを利用する。
brewで一発で入る。
brew install jhead
ファイル名を変換するには以下のとおり。
jhead -nf%Y-%m-%d-%H%M%S [ファイル名]
正規表現が使えるので、
jhead -nf%Y-%m-%d-%H%M%S *.jpg
あとは、年月日のディレクトリごとに整理するなりしたらスッキリ。
smtpの負荷試験
postfixサーバでの負荷試験をするために、smtp-source(postfixに内包されている) を用いた。 メールを配送したくないのであれば、smtp-sinkを使うと良い(ここでは割愛)
例:
smtp-source -s100 -m10000 -l 4194304 -f info@example.com -t info@hogehoge.com -M "example.com" -S "test mail" smtp.example.com
オプション
オプション 説明 -s SMTPセッションの並列数 -m 送信数 -l 送信サイズ -f 送信元メールアドレス -t 送信先メールアドレス -M HELOコマンドのホスト名 -S 件名
送信元サーバが非力だと思った性能が出せないので、気をつける。
変数宣言されているが使われていない。
変数宣言しているが使われていないってエラーが出る。 golang厳しい。
# go run main.go # command-line-arguments ./main.go:14: a declared and not used
Go Lunch はじめました。
社内でGoの機運が高まってきたので、GoLangをもくもくとやる、GoLunchを毎週金曜日のランチタイムに集まってやることにしました。
第1回目は、9名の参加。 以下の書籍をみんなで買って、それぞれが好きなスピードで進めていくようにしてます。かなりゆるいです。
- 作者: 松尾愛賀
- 出版社/メーカー: 翔泳社
- 発売日: 2016/05/11
- メディア: Kindle版
- この商品を含むブログを見る
mac book airで環境構築。 Goのインストールから。バージョン変わった時にさくっと変えたいので、anyenvから、goenvをインストールしたのち、
# goenv install 1.6 # goenv global 1.6 # goenv rehash # go version go version go1.6 darwin/amd64
無事入りました。 anyenvのインストール方法や使い方は以下のリンクで。
頭のなかでgo buildができると豪語している @pyama 氏がvim-goが便利だという情報を聞きつけ、以下を参考にいれてみました。
加えて、.vimrc
に goimports
を自動でやってくれるように設定します。
$ vi ~/.vimrc let g:go_fmt_command = "goimports"
以下のようなコードを書いてみます。fmtがインポートされてないので、当然エラーになります。
package main func main() { fmt.Println("Hello Golang") }
が、vim-go入っていると、以下の通りファイルを保存する際に、自動で足りないパッケージをimportしてくれます!
すごい!
スターティングGO言語本までいきつかずに本日はここまで。
アトミックとは
ある操作に対して、他者が割り込めないこと。
アトミックにするには、ロック操作が必要であるが、OSの機能によってはアトミックが保障されておりロック操作不要なものもある。
C言語: NULLポイント
ポインタ変数は宣言直後はでたらめな値が格納されているので、このまま利用するのはバグとなり危険。
これを防ぐために、アドレスを代入したかどうかを区別する必要がある。
NULL
をポインタ変数に代入しておくことで、区別をつけることができる。
- 書き方
int *p = NULL;
- サンプル
1 #include <stdio.h> 2 3 int main(void) 4 { 5 int *p = NULL; 6 if (! p) { 7 printf("p = Null\n"); 8 } 9 int i; 10 p = &i; 11 if (p) { 12 printf("p = Not null\n"); 13 printf("p = %p\n", p); 14 } 15 return 0; 16 }
- 実行結果
# ./a.out p = Null p = Not null &i = 0x7fff5690b83c
C言語: ポインタ、事はじめ
ポインタ型
アドレスを記憶する変数の型。 他の型と合体して型を生成する。
ポインタ値
変数のアドレスの値のこと。
ポインタ変数の宣言
int *p; int* p;
どちらも同じ。
int* p1, p2;
と書いた場合、p2
はint型になる。そのため、変数の前に*
をつけて明示してあげたほうが良さそう。
アドレスを代入
#include <stdio.h> int main(void) { int *p, i; p = &i; printf("p = %p\n", p); printf("&i = %p\n", &i); return 0; }
上記をコンパイルして実行すると以下の通りとなる。
# ./a.out p = 0x7fff535df83c &i = 0x7fff535df83c