2015年7月29日水曜日

ちょー便利なライフログアプリ:Google Mapアプリにタイムライン表示機能が追加

こんばんはー。おひさしぶりです。
毎日暑いですねー。

今日はAndroidアプリのお話。

最近、Android版のGoogle Mapアプリが更新されましたね。
知らない場所へお出かけするときには、必ずお世話になるこのGoogle Map。
このGoogle Mapに、前回のアップデートでタイムライン表示機能が追加されました。

まあこんな感じ。すげー。


自分が訪れた場所と道のりが、地図と時系列で確認できちゃいます。
Androidの設定でロケーション履歴を有効にしていることが条件だと思うのですが、びっくりしたのは、その場所で撮った写真も、タイムラインに表示されるってこと。

自分は行動記録をメモする代わりに、移動した先でちょいちょい写真を撮るようにしています。
仕事で訪れた場所や、ポストに投函した手紙、銀行での振り込み、エトセトラエトセトラ。
それらの写真は、あとで「あの手紙、いつ出したっけな」とか、自分の行動を振り返るのに使っています。
位置情報もつけているので、写真を撮った場所も地図で表示できますしね。

だから、別に驚くことでもないかもしれないんですが・・・。

なんかこう、今回のGoogle Mapのタイムラインのように、こうやってタイムラインという形でまとめてくれちゃうと、・・・なんかすっごく便利ですね。

ちょっと前から「Moves」というアプリを使っていて、行動記録代わりにしていたのですが。歩数とか計算してくれるし、便利ではあったけど、撮った写真を見せてくれるところまではいかない。

もう、ちょっとしたライフログアプリじゃないですか、これ。

位置情報付きの写真だとか、ロケーション履歴だとか、もうずっと以前からあった技術ではあるんですが、それらを上手く組み合わせて便利なものを作ってしまう。

こういうのが、本当の創造性だと思うのですよね。

一応、IT技術者のはしくれではあることですし、「あ、いいなコレ」って思ってもらえるアプリを作れるように、また明日から頑張りたいと思います。

でもせめてクーラーの効いた場所で仕事したい。扇風機だけだと脳みそ溶ける。










2015年7月10日金曜日

日本語でおk!?:iOSでEXIFのUserCommentに日本語を設定しようとすると、途中で切れる

こんにちは。ぷんぷん。怒っています。

今日は朝からXcodeくんと戯れていました。
カメラアプリです。
撮影した写真に、メタ情報を埋め込もうとしていたのです。ええ、EXIFのUserCommentですね。

AndroidではCommons Imagingを使って、さくっと行きましたので、まあiOSでも問題ないだろうと。
こんな感じで。
UserComment = @"そんなこといったって、だめだもんはだめだで、しゃーがないべさ。ほだら。だば、あきらめてしごとしてくんろ。ほりほり。わーったか?ほーり。";
[EXIFDictionary setObject:UserComment forKey:(__bridge NSString *) kCGImagePropertyExifUserComment];

で、ビルドして、実機でテスト。
アプリで撮った写真をMacに転送し、コマンドラインからexiftoolを実行して、UserCommentを確認しましたら・・・。
User Comment: そんなこといったって、だめだもんはだめだで、しゃーがないべさ。ほだ
途中できれとるがな
なんでやねん。
EXIFのUserCommentに文字数制限なんかあったか?・・・まああるかもしらへんけど、そんな長い文字列とは思えへんしー。
ネットで検索したら、日本語と英語が混じってる時は、途中で切れることもあるとか書いてあるけど、・・・今回、全部日本語やしー。
ううう。

ちなみに、全部英語だったら、長い文字列でもいいのかなー?
というわけで、以下の文章でテスト。

NSString *UserComment = @"Can I set Exif UserComment String in such a way? I cannot understand why apple doesn't pass Japanese Characters. Are they jerous about Japanese Food? Sushi? Tenpura!?";
・・・きれてなーい。きれてないよー?

もうね、これ、日本語があかん、というやつなのかなー・・・。
まあ引き続き調査はしますが、あまりに腹がたったので記事にしました。ぷんすか。

(オチなし)

2015年7月9日木曜日

たかが一行、されど一行:ClamAV + Amavis-new + Postfixでウイルス対策

はー。死ぬかと思った。こんばんわ。
今日はメールサーバーのお話です。ていうか懺悔。

実は先日、一年ほど前に立てたメールサーバーでちょっとやらかしちゃいまして。
bad_headerが理由で、メールが配信されずに削除されちゃって、ユーザーさんにご迷惑をおかけしてしまいました。
せっかくだから、もう一度サーバの設定を見直そうと思ったわけです。


例によってグーグルせんせーに教えを請いまして。
メールヘッダがぶっ壊れてるメールへの対処は「/etc/amavisd/amavisd.conf」の、$final_bad_header_destinyですればいいんだな、ふんふん、なるほど。
「$final_bad_header_destiny = D_PASS;」ってやっとけばヘッダが壊れてようが華麗にスルーか、なるほどなるほど、ああ現代人にはスルー力が足りないよな、とか、のん気に構えていました(まだこの時点では)。

$final_virus_destiny・・・へー・・・これ、ウイルスメールを華麗にスルーするかどうかって設定か・・・。
ほんとうはウイルスはがっちりサーバーで削除するのがいいんだけど・・・。
誤検出とかあったら、またこっぴどく怒られるしな・・・
いやいやでもでも、ウイルスメールをユーザーに華麗にスルーそのまま配信するってどうなの・・・?やっぱり削除しといて、隔離するべきじゃない?
どうしようかな・・・。

ま、結局「$final_virus_destiny = D_DISCARD;」にして、削除+隔離することにしました。
あとは隔離する先のディレクトリを設定。
$QUARANTINEDIR = "/var/virusmails";」、これでよし。
amavisdと念のためpostfixも再起動して。
まあ念のためにテスト用ウイルスメールで、隔離動作を確認しときましょうか。

テスト用ウイルスはここからダウンロードできるみたいですね。
でも、もっと簡単な方法が。
この記事「必ずスパムと判定されるメールと、ウィルスの作り方」を参考にさせていただきました。
以下の文字列を貼るだけ。わー便利!ちょーかんたん!
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
ほくほくほく。やっぱ簡単なのがいいよねー。
別のパソコンからメーラー起動してー。メール本文にさっきのウイルス文字列(w)コピペしてー。宛先を自分にしてー。送信ッ!ひゃっはー。
そそくさと「tail -f /var/log/maillog」を実行して、ログを監視。
でっきるっかな でっきるっかな♪

Jul  8 12:46:34 myserver amavis[25298]: (25298-01) Passed CLEAN {RelayedInbound}, [xxx.xx.xx.xx]:35856 [xxx.xx.xx.xx] <admin@mydomain.com> -> <user@mydomain.com>, Message-ID: ...

・・・。え?ぱす?クリーン?きれい?
ウイルスにひっかかったら「Blocked INFECTED (Eicar-Test-Signature)」ってでるんじゃないの?えええええ!?
あわてて、ウイルスメールの隔離先として設定した「/var/virusmails」を確認・・・予想通り、なーんもない。からっぽ。

さてここから苦悩の時間がはじまりました。
なになになに?えっウイルスとして認識されてないってこと?ウイルス定義が古いのか?いやいや毎日更新するスクリプト作ったし!もしかしてLocalSocketあたりが違う?あばばばそもそもこのテスト用ウイルスって信用できるのー?いやいやそれじゃテストの意味ないしそもそもこういうの信用しないと本当にウイルスメールなんか用意できるわけないしおあおうぇいとぉえwそいいえちwsっを!!!

・・・。
ま、結論からいうと、
/etc/amavisd/amavisd.conf」の「@bypass_virus_checks_maps = (1); 」がコメントアウトされてました・・・。
そっかー・・・そもそもウイルスチェック自体を華麗にスルーしてたのか俺は・・・。
「まさかそんな」って思い込みのせいで発見が遅れました・・・

で、この行をコメントして、amavisd再起動して・・・テストのウイルスメール送信したら・・・
さくっと・・・
Blocked INFECTED (Eicar-Test-Signature) {DiscardedInbound,Quarantined}
はい、ちゃーんと隔離もされてました・・・あわててGoogleで事例調べまくって振り回されたりせずに、設定ファイルを一つずつ冷静に吟味してたら、もっと早く復旧できたよなー・・・
反省。自戒の意味をこめて、今日はこのブログを書きました。

ま、そのあと「(!)ClamAV-clamd av-scanner FAILED: 」なんてエラーがでて、もうひと慌てしたんですが。
これは「/etc/clamd.conf」に、/var/配下をスキャンの除外フォルダとして指定してたためでした。
さすがにこれはすぐわかった。といっても一通りGoogleで検索して、わちゃわちゃしましたが(笑)
#ExcludePath ^/var/
ま、なんにせよ、日付が変わる前に致命的なところは解決してよかった。めでたしめでたし。