20代最後の1年のはじまり

朝からよろしくない知らせで目を覚まし、昼間は知らされていない裏ルールに翻弄されDNS調べたりログ眺めたりレスポンスコード見てたり、夜はリリース見守って気がついたら誕生日が終わってました。
20代最後の1年はお酒に飲まれないことと何かしら新しいことに挑戦することです。よろしくお願いします。

Facebook でハッシュタグつきのデータを取得したい (けど出来ない)

※ 2013/10/15 現在です

ちょっと前に 'Facebook for Developers' のFacebook開発者ブログでも公開されたようにFacebookでもハッシュタグが使えるようになりました。
# マイナビニュースさんとかでも取り上げられてた気がする

API経由で取れないかなーと思って調べると既に調べている人を発見!
http://attrip.jp/102919/

ヤター!と思い自分でも実際に確認してみるため、Facebook developers の Graph API Explorer を開いて試してみる。

/search?q=%23test&type=post を入力して「送信」!

.
..
...
投稿本文に "test" の文字列が含まれているものがヒットしているだけで、ハッシュタグ(#test)での検索が成功しているようではありませんでした。
# 検索クエリやオブジェクトタイプを変えてみても結果は変わらずでした (2013/10/15現在)

Facebook の中の人、API経由でハッシュタグ検索できるように頑張ってください!
※先人様のエントリをdisっている訳では無いです。念のため書いておきます。

ついでに

グラフAPIの利用 - ドキュメンテーション - 開発者向けFacebook
上記のAPIのページを見て初めて知ったけど type=post では limit/offset 指定のページングがサポートされてないって記載されているけど、Graph API を叩いた結果の JSON には paging のオブジェクトがちゃんと存在しているし呼べているっぽい。
# 値をちゃんと見て検証した訳じゃないけど
公式にサポートしてないよ!て言うくらいなんだから使わない方が良いんだろうけど、ついでに。

WordPress でチューニング + α (予約投稿)

前提

WordPress が運営しているサイト(システム?)が重くなってきたので Apache2 から nginx へ乗り換えを検討。
ちなみに元環境は以下。

OS
CentOS 6.3 Final (64bit)
メモリ
1GB
httpd
Apache/2.2.15 (Unix), eAccelerator は導入済み
MySQL
Ver 14.14 Distrib 5.5.30, for Linux (x86_64) using readline 5.1

参考にしたサイト

ab でベンチマーク比較して nginx >>>>>(超えられない壁)>> Apache2 な結果になったのでめでたしめでたし。

...で終わらなかった orz

問題(?)発生

WordPressの機能で投稿日時を指定して投稿できる「予約投稿」的な機能がある。
参考にさせていただいたサイトにもあるように、アクセスがあるとキーに一致するキャッシュがあればそのデータを使用してページを表示する。
指定した投稿日時を迎えていざページを見てみると...トップページに表示されていない。
時間をおくと表示されるので、投稿前の状態のデータがキャッシュされているのが原因だと気づいた。
# WordPressにログイン中だったり、運良くキャッシュの有効期間が切れていたりすると、投稿した記事が見えていると思う。

対応

予約投稿の日時を迎えたら強制的にキャッシュをクリアすれば最新の状態が表示されると思い、その線で色々調べた。
WordPress の予約投稿は時間が来ると wp-cron.php が何かしらをトリガーにして呼び出されるらしい。
# 諸々調べたログが消えた...涙

ので [WordPressをインストールしたディレクトリ]/wp-cron.php の良しなな部分にキャッシュを消すスクリプトを追加する。
※これを参考にしてファイルを修正する場合は自己責任でお願いします!
 WordPressが動かない!等の苦情は対応出来ません。

※自己責任でも試してみようかなと言う人はバックアップを取得しておくことをオススメします。

// Clear cache
system( "/bin/rm -rf /var/cache/nginx/cache1/*" );

うまくいったー。めでたい。

MPEG-2 の動画ファイルを cat で結合して FFmpeg で調整して MPEG-4 (H.264) にしたら緑色の帯が入ってしまって困ったけど、頑張って解決できた

件名通りです。
動画フォーマットについて知識がなさすぎたことが原因でこんなことになってしまった...

環境

OS
Mac OS X 10.7.X
FFmpeg
ver. 1.0.git

やりたいこと

  • いくつかの動画を結合して1つの動画にしたい

やったこと

前段

いくつかの動画を結合するのに、MPEG-1 だか MPEG-2 にエンコードして cat で1つに結合できるっぽい。
# あちらのサイト様こちらのサイト様で紹介されているとおりです
で、cat で結合した動画ファイルをいつぞやの記事で書いたように "-dts_delta_threshold 1" のパラメータをついけて実行。

$ ffmpeg -i cat.mpeg -dts_delta_threshold 1 out.mp4

結果、緑色の帯が入ってました\(^o^)/

調べた

ggrks てことで調べる。
こちらの'Appleサポートコミュニティ'のディスカッション に!な内容が書かれてた。

カットごとで素材のcodecが変わったり、カットとカットの間に何もない状態(黒で埋めてない)になると、たまに緑のラインが出る時があります。

だけど、結合前の動画ファイルのフォーマットはMPEG-2で同じはず...だけどコーデック違うのかなと思って確認する。

  • 動画その1
$ ffmpeg -i movie01.mpeg
ffmpeg version 1.0.git (ry
Input #0, mpeg, from 'movie01.mpg':
  Duration: 00:**:**.**, start: 1.000000, bitrate: **** kb/s
    Stream #0:0[0x1e0]: Video: mpeg2video (4:2:2), yuv422p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
  • 動画その2
$ ffmpeg -i movie02.mpeg
ffmpeg version 1.0.git (ry
Input #0, mpeg, from 'movie02.mpg':
  Duration: 00:**:**.**, start: 1.000000, bitrate: **** kb/s
    Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc

yuvってのがなんか違う!

yuv てなんだろう

さらーっとこちらのサイト様の内容 を読ませていただいた。
これもフォーマットに関係してくるんですかそうですか、とわかったフリをして次へ。

FFmpeg でどちらかの方にあわせてやれば良いと思いggったらこちらに辿り着く。

xvid, libx264 は yuv420p 入力が基本なので、入力が yuv422p 等でエラーが出る場合は -pix_fmt yuv420p を追加する。

やり直し

動画その1を yuv420p にしてみる

$ ffmpeg -i movie01.mpg -vcodec mpeg2video -pix_fmt yuv420p movie01_yuv420p.mpg
(ry

$ ffmpeg -i movie01_yuv420p.mpg 
ffmpeg version 1.0.git (ry
[mpeg @ 0x7f8969012e00] max_analyze_duration 5000000 reached at 5005000
Input #0, mpeg, from 'movie01_yuv420p.mpg':
  Duration: 00:00:05.77, start: 1.000000, bitrate: 2540 kb/s
    Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
At least one output file must be specified

yuv420p てのになった!

結果

したら cat で結合した後、"-dts_delta_threshold 1" オプションを付けて変換してあげれば緑色の帯がなくなって良い感じになった。
めでたしめでたし。

monitでApache2, MySQLを監視

サーバの監視が必要になって某先輩にmonitが良いと勧められ使ってみることにした。

参考にしたサイトはこちら > Linux: Monit導入 | Bamboo lath 日々の記録

Vagrant でローカルに CentOS 6.3 を起動して、上記サイトのように設定した。
Vagrant についてはまた今度まとめたいなー


Apache2 の方は問題無く監視できているっぽいがMySQLの方がうまく行かない。
監視のメールもこんなのが来る。

title: monit alert -- Connection failed mysql
body:
Connection failed Service mysql

        Date:        Tue, 16 Apr 2013 12:11:24 +0000
        Action:      restart
        Host:        localhost.localdomain
        Description: 'mysql' failed protocol test [MYSQL] at INET[localhost:3306] via TCP
title: monit alert -- Timeout mysql
body:
Timeout Service mysql

        Date:        Tue, 16 Apr 2013 12:13:27 +0000
        Action:      unmonitor
        Host:        localhost.localdomain
        Description: 'mysql' service timed out and will not be checked anymore

ググってたどり着いた > Re: [monit] MySQL: connection failed


/etc/monit.d/mysqld を編集する

check process mysql with pidfile /var/run/mysqld/mysqld.pid
   start program = "/etc/init.d/mysqld start"
   stop program = "/etc/init.d/mysqld stop"
   if failed unixsocket /var/lib/mysql/mysql.sock then restart
   if 5 restarts within 5 cycles then timeout

monitを再起動して、mysqlを停止して試してみる

$  sudo service monit restart
Shutting down monit:                                       [  OK  ]
Starting monit:                                            [  OK  ]

$ ps aux | grep mysqld 
 # mysqld が起動してるのを確認

$ sudo service mysqld stop 
Stopping mysqld:                                           [  OK  ]

$ ps aux | grep mysqld 
 # mysqld がいないことを確認
 # monit の監視間隔分待ってみる

$ ps aux | grep mysqld 
 # →mysqld がいる!


monit と少し仲良くなれた気がした。