前回の記事からの更新です。

今回は、AAC関係のものをビルドに含めているので再配布不可なビルドです。
ffmpegを2.1系にした事で、VP9, H265/HEVC が使えるようになっています。

前回からの変更点

  • ビルドに以下を追加
    • gmerlin (frei0rの依存)
    • frei0r
    • libaacplus
    • mp4v2
    • libfaac
    • fdk-aac
  • ffmpeg-2.0.1からffmpeg-2.1.1にバージョンアップ
  • libblurayを0.3から0.5にバージョンアップ
  • vid.stabのバージョンを 9ed9836e10567f76decfa7fac178bb70a7bb9452 に固定
    • trunkや0.98はvsLocalmotions2TransformsSimpleが消えていてffmpegのビルドでエラーになるため
    • またこのバージョンにした事でCMakeファイルの場所がsrcから直下に変更された
  • libvpxを1.2.0から1.3.0にバージョンアップ
    • vp9のため

 

Fluentd Casual Talks #3 へ参加しました

Fluentd Casual Talks #3 に参加してきました。

各発表の内容は資料を見るなり、誰かがまとめていたりするので、そちらを見れば良いと思います。今回参加した理由は、Windows版のFluentdについての発表があったからです。というわけで、発表者の方と休憩時間に話した内容をまとめます。

  • NTFS限定、かつネットワークドライブは挙動を保証しない事をドキュメントに書いた方が良いと思う
  • 監視対象がローテーションしていて、かつ別ボリュームへ移動している場合は保証外である事を明示した方が良いと思う
  • NTカーネルのバージョンをどこからサポートするか明示した方が良いと思う
    • 特にXPのバージョン(Windows Server 2003の1つ前のカーネル)まで遡ると、NTFSの挙動が違います
  • GetFileInformationByHandleで判断する時は、FileIndexの他にdwVolumeSerialNumberも合わせて比較しないとダメです
  • Win32Fileの実装がどこかで見たことあるコードのような。あのコードはPOSIXのインターフェースに合わせるように設計されているが、WinならWin32File, そうでないならKernel(or File)のインスタンスを使うというようなコードではなく、所謂ifdef win32ならWin32Fileを直接使うような記述をしているので、忠実にPOSIXのインターフェースに準拠する必要はないのでは。むしろデッドコードが多すぎてよろしくない気がします。
  • FileBufferが動かないのはFile操作がPOSIX準拠のままなので、そっちもWin32APIを使えば動くはずです(同一ボリュームであればMoveしてもOpenしているファイルハンドルは追従してくれます)
  • File操作に古いAPIを使っていて64ビット値の扱いが煩雑になっている。Ex系のAPIを使った方がスマートに書けます
  • 本体とin_tail, out_forwawrdがだいたい動くようになったら、次はパフォーマンスカウンタとWindowsのイベントログを吸い上げたいって要求は出てくるよね

このあたりを話した気がします。

1つ忘れた事として以下があります。何か意図があるならごめんなさい、スルーしてください。

  • Win32API.new() を各メソッド中で行うのではなく、initialize中で行った方がよいのでは?

※読み返したら、なんか書き方がDisっぽいけど、箇条書きの関係でそんな風に見えるだけです(;´x`) そんなつもりは全然ないですよ!

 

あと、以下の事も話しました。

  • そもそもログを吸い上げるところではCPUバウンドな処理はあまりしたくないし、それはつまり、ログを吸い上げてフィルタ処理などは他所のノードで行うことになる。
  • どうせ中間ノード(アグリゲーション)や最終的な出力先(MongoとかDBとかHadoopとか)はWindowsじゃないんでしょ
  • という事はWinで動くagent-liteのようなものだけで十分なのでは

パスワードの先頭4,5文字を公開してしまった某社CTO様から。

  • 世の中には全部Windowsのお客さんとかいるんやで
  • Azureとかもあるんやで

世の中は厳しい。

 

それはそれとして、TDにMonitorに機能が追加されるそうです(無料は嬉しいね!)。でもでも最終的にアラートがあげられないと厳しそう。(後々アラートも対応するそうです)。
Cloudera Managerって何かおかしな事があるとヒントをくれるんですが、TDもそういうの出してくれると嬉しいかもですね。例えば、あるログを検知したら「バッファが溢れておるぞ! このあたりの設定を見直すのじゃ!」みたいな。

 

というわけで、楽しかったでざる。
主催者、および発表者、会場提供のDeNAさんに感謝!

用事があったので参加できなかったけど、飲み会行きたかった(´・ω・)

Windows OSに関する覚え書きと訂正

以前、こちらの記事で以下の事を書いたのですが、これは間違いでした。ごめんなさい(´・ω・`)。

2. GetFileInformationByHandleで取得するBY_HANDLE_FILE_INFORMATIONのnFileIndexHigh, nFileINdexLowを参照する。こちらは再起動、ボリュームのマウントしなおしで値が変わります。

Windows2008R2で再起動、再マウントでファイルシステムがNTFSの場合、変わらないことを確認しました。ではどういう時に変わるのかというと、ファイルシステムがFAT系(FAT, FAT32)の時にRenameをし、そのRenameによって名前が長くなったり、ディレクトリ内の順番が変わったりするような場合に変わりました。
(NTFSでも別ボリュームへ移動した場合は変わります(※1))

また、同一性の判定については、nFileIndexHighとnFileINdexLowだけでは不十分で、dwVolumeSerialNumber も合わせて比較する必要があります。まぁ別ボリュームでnFileIndexHighとnFileINdexLowが一致するって事はレアケースだとは思いますが、完全ではないので。

MSDNのRemarkのところに記述があります。

なので、ローテーションされているログをTAILで追跡するような場合、以下の前提が必要になります。

  • NTFSファイルシステムであること
  • ローテーション先が同一ボリュームであること

※1について
NTFSで別ボリュームに移動した場合でも追跡したい場合はDeviceIOCtrlを使う必要があります。

確認したOS

確認したOSはWindows2008R2です。

2008R2はNTカーネル6.1なのでWindows7と同等のカーネルです。一応主要OSのNTバージョンを表にしておきます。

NT Version OS
NT 5.1 Windows XP
NT 5.2 Windows Server 2003
NT 5.2 Windows XP (64bit)
NT 6.0 Windows Vista
NT 6.0 Windows Server 2008
NT 6.1 Windows 7
NT 6.1 Windows Server 2008 R2
NT 6.2 Windows 8
NT 6.2 Windows Server 2012
NT 6.3 Windows 8.1
NT 6.3 Windows Server 2012 R2

手元で確認できるのは、XPとVistaとWin7、EC2上でWindowsServer2008, 2012があるのでもうちょっと別のOSで確認してみます。(-_- )ウーン・・
2003はEC2に無いので無理です。

※追記(2013/12/19 11:00) EC2にWindows Server 2003ありました。QuickStartに出てこないだけで普通にありました。ごめんなさい。

また何かわかったら書きます。

いや、全然違うよ!正しくはこうだよって指摘がありましたらツッコミよろしくお願いします。

RubyのsequelというORMライブラリがあります。

細かい使い方はQiitaにいくつか記事があるのでそちらを参照するとして、今回はMySQLで以下のような列にcharacter setが指定してあるDDLを発行させる方法のメモ書きです。

確認したバージョンは sequel 4.2.0, adapterにmysql2 0.3.13です。 

create table example1(
  id bigint not null,
  url varchar(255) character set ascii not null,
  constraint pk primary key (id)
) engine=InnoDB, default character set='utf8mb4';

先にMySQLにテーブルを作ってdumpをしても、認識してくれません(´・ω・`)

bundle exec sequel -e development ./config/database.yml -d
Sequel.migration do
  change do
    create_table(:example1) do
      primary_key :id, :type=>Bignum
      String :url, :size=>255, :null=>false
    end
  end
end
bundle exec sequel -e development ./config/database.yml -D
Sequel.migration do
  change do
    create_table(:example1) do
      primary_key :id, :type=>"bigint(20)"
      column :url, "varchar(255)", :null=>false
    end
  end
end

これを実行しても、列に指定してあるcharacter setがおちてしまいます。あと create table のオプションに InnoDB, utf8が出ています。utf8mb4 を指定したのに・・。このへんは Sequel::MySQL.default_engine Sequel::MySQL.default_charset Sequel::MySQL.default_collate あたりで設定するみたいです。今回はcreate_tableの時に指定してみます。

mysql> show create table example1 \G;
*************************** 1. row ***************************
       Table: example1
Create Table: CREATE TABLE `example1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `url` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR:
No query specified

というわけで、以下のように修正してみました。まず、create_table する時に明示的に engine と charset を指定しました。 また列定義で明示的に character set asciiを追加しました。オマケでchangeからup/downに変更しています。

Sequel.migration do
  up do
    create_table(:example1, :engine => 'InnoDB', :charset=>'utf8mb4') do
      primary_key :id, :type=>"bigint(20)"
      column :url, "varchar(255) character set ascii", :null=>false
    end
  end
  down do
    drop_table(:example1)
  end
end

↑を実行すると、↓のような結果にできました。

mysql> show create table example1 \G;
*************************** 1. row ***************************
       Table: example1
Create Table: CREATE TABLE `example1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `url` varchar(255) CHARACTER SET ascii NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)

ERROR:
No query specified

ただし、この方法だとRDB間の差異は吸収できません。String :url, :size=>255, :charset=>'ascii'と書けると嬉しいんですけどね・・。知ってる人いたら教えてください。

 

角川グループ9社の合併記念として、カドカワの電子書籍が半額になるオールカドカワフェアが本日(10月1日)限定で開催中です。BOOKWALKERだけではなく、Kindleでも同様に半額セールをしています。

対象商品の一覧はこちらから参照できます。

私もいくつか本を購入しましたが、半額セールになっている本から個人的に面白かったものを紹介します。シリーズものは1巻のみの紹介です。あくまでも私が面白かったと思ったものなので、そこのところはご了承ください。書籍レビューではないので紹介は結構適当です。

あと、アフィリエイトリンクになっているので、アフィが嫌いな人はタイトルでググってページを探してください。

煩悩寺

5年付き合った彼氏と別れたばかりの女子が、自分の部屋に帰るまでトイレを我慢できずに、下の方の階の人にトイレを借りるというところから始まる恋愛ものの話です。なんか、子供の頃の居心地の良い秘密基地的な部屋とか、そこにほのぼのとした恋愛要素が入って面白かったです。全3巻です。

煩悩寺 1 (コミックフラッパー)
煩悩寺 1 (コミックフラッパー)

ヒナまつり

ヤクザな人が超能力少女を拾って一緒に生活するギャグ漫画です。

ヒナまつり 1 (ビームコミックス(ハルタ))
ヒナまつり 1 (ビームコミックス(ハルタ))

デンキ街の本屋さん

日本のとある電気街(まぁ秋葉ですよね)にある本屋さんを舞台に、店員さんたちの日常を描いた青春ラブコメ系の漫画です。趣味が同じような人たちで和気藹々と働く職場って楽しそう&幸せそう。

デンキ街の本屋さん 1 (コミックフラッパー)
デンキ街の本屋さん 1 (コミックフラッパー)

デッドマン・ワンダーランド

スプラッターな表現が苦手な人は読まない方が良いです。
主人公の中学生は普通の平凡な生活を送っていましたが、ある日中学校に赤い男が現れ、クラスメイトを目の前で虐殺されます。唯一生き残った主人公は何故かその殺人犯に仕立て上げられ、無実の罪で死刑判決を受けます。
収容先の刑務所は民間運営されているデッドマンワンダーランドという場所で、そこで罪の枝と呼ばれる特殊能力を持つ人たち(デッドマン)と会い、自分もデッドマンになっていた事を知り、色んな陰謀に巻き込まれていく話です。

私は紙媒体で購入していましたが、最終巻が出て完結しています。全13巻です。 

デッドマン・ワンダーランド(1) (角川コミックス・エース)
デッドマン・ワンダーランド(1) (角川コミックス・エース)

少年メイド

一応言っておくとBL系ではないです。コメディ系の漫画です。
主人公は母を亡くして天涯孤独の身となった家事全般を完璧にこなす小学生。まぁメイド服着てますが、内容としては普通に良い話が多いです。 

少年メイド1 (B's-LOGコミックス)
少年メイド1 (B's-LOGコミックス)

万能鑑定士Qの事件簿

人が死なないミステリー小説です。コミックも出ています。久しぶりに活字を読んで面白いなと思った作品です。(たぶん最後に読んだ活字ってシドニィシェルダンの作品かもしれない・・)
1巻と2巻で1つの話になっているので、同時に購入する事をオススメします。1巻が前座で2巻が本番みたいなものです。
難癖を付けるなら、1巻ではヒロインがいかに現在に至るかの過去描画のために過去の話がぽんぽんと挟まるのでそこだけテンポが悪い感じに思えるくらいです。それ以外はテンポが良いのでサクサク読めました。
万能鑑定士シリーズは大量に出ているので、とりあえずまずは2巻まで試しに読んでみるのが良いと思います。

万能鑑定士Qの事件簿 I: 1 (角川文庫) 万能鑑定士Qの事件簿 II: 2 (角川文庫)
万能鑑定士Qの事件簿 I: 1 (角川文庫)
万能鑑定士Qの事件簿 II: 2 (角川文庫)

番外編(カドカワの本以外のもの)

せっかくなので、今回のセール以外のものも2冊紹介しておきます。SonyのTablet(Xperia Z)を購入してからというもの、電子書籍のセールもちょくちょくやってるのでクッキーほどではないですが、ポチポチとしてしまうわけです。

東京喰種(トウキョウ グール)

世界観としては、人間世界に人を喰らう怪人グールが蔓延る東京を舞台にしています。主人公の青年(人間)はグールに襲われ瀕死のケガを追い病院に搬送、そこでグールの臓器を移植されたことで半グールとなってしまう。
トーカちゃん(2巻の表紙の女の子)が可愛いです。グールだけど。

Kindleで購入していったのですが、最新刊はKindleでは読めません。今月の18日に紙媒体の9巻が発売され、同日に8巻がKindle配信されます。

東京喰種トーキョーグール リマスター版 1 (ヤングジャンプコミックスDIGITAL) 東京喰種トーキョーグール リマスター版 2 (ヤングジャンプコミックスDIGITAL)
東京喰種トーキョーグール リマスター版 1 (ヤングジャンプコミックスDIGITAL)

極黒のブリュンヒルデ

SF・・なのかな・・。ファンタジーなのかな・・。
NASAの研究員を目指す高校生が主人公で、子供の頃に事故で死なせてしまった幼なじみの少女の事が忘れられない。ある日、主人公の目の前に死んだはずの幼なじみとそっくりな子が転校生として現れる。彼女はとある研究所から逃げてきた魔法使いであったという話。魔法使い=人体改造をされた上での特殊能力です。
6巻まで出てて、全部Kindleで読めます。

極黒のブリュンヒルデ 1 (ヤングジャンプコミックスDIGITAL)

極黒のブリュンヒルデ 1 (ヤングジャンプコミックスDIGITAL)

先日からGoogle Chromeを起動するとOS(Windows 7 64bit)がフリーズするという現象に遭遇しました。
発生率は100%です。ブルースクリーン(BSoD)ではなく、キーボードもマウスも受け付けなくなり、画面の描画もとまり、そのままフリーズ状態になります。

もしかしてWindowsUpdateが原因なのかと思いましたが、WindowsUpdateをしていない他のPCでも発生したので関係ないようです。

どうもその頃ChromeのUpdateがあったようなので、それが引き金かなと思います。検索すると、同様の症状の人がそれなりにいるようです。
(追記:ChromeのUpdateは関係なく、下記のEvernote Web ClipperがUpdateされていたようで、それが原因だと思います。)

 

解決策として、拡張機能の「Evernote Web Clipper」を停止したら発生しなくなりました。これを有効にするとまた再現します。

他にFlashを無効にするとか、色々と試しましたが、このアドオンが原因のようです。

 

少なくとも私の環境ではこれで直りました。
他の人の環境でも直るかはわかりませんが、参考になれば。

追記 2013/10/04 20:00

Web Clipperのバージョンが6.0.2になっていました。
こちらのバージョンでは有効にしてもフリーズする事はなくなりました。

一度無効にしている人は、 Chrome -> 設定 -> 拡張機能 のページから、いきなり有効にするのでは無く「拡張機能を今すぐ更新」を押して6.0.2のバージョンにしてから有効にすると良いです。

 

libaacplusをビルドしていて気がつきました。

親ディレクトリか親の親ディレクトリにinstall.sh が存在すると、libtoolize -cltmain.sh がコピーされません。
以下確認した履歴です。

なお、環境はCentOS6.4でlibtoolizeのバージョンはlibtoolize (GNU libtool) 2.2.6bです。

libaacplusの場合、./autogen.shを実行するだけで良いのですが、今回はlibtoolizeに原因があることを確認するために手順を変更しています。

正常な場合

mkdir -p /a/b/c/d/e
cd /a/b/c/d/e
wget http://217.20.164.161/~tipok/aacplus/libaacplus-2.0.2.tar.gz
tar zxvf libaacplus-2.0.2.tar.gz
cd libaacplus-2.0.2

libtoolize -c
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'

駄目な場合(親にinstall.shがある場合)

mkdir -p /a/b/c/d
cd /a/b/c/d
touch /a/b/c/d/install.sh
wget http://217.20.164.161/~tipok/aacplus/libaacplus-2.0.2.tar.gz
tar zxvf libaacplus-2.0.2.tar.gz
cd libaacplus-2.0.2

libtoolize -c
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'

ltmain.shがコピーされませんでした。

親2階層分まで見るようなので、以下の構造の場合は c/install.sh, d/install.sh が存在すると駄目でした。

/a/b/c/d/libaacplus-2.0.2

こ、こんなん分かるわけないよ(;´Д`)
これにハマってかなり時間を取られたので忘れても大丈夫なようにメモメモ。

 

CentOSでは仮想環境としてKVM+qemuの環境が使えるのですが、スナップショットの使い方がいまいちわからない。

例えば、VMを普通に作り、Diskをqcow2で作ったとします。で、スナップショットの機能を使うわけですが、どうも思った通りの動作にならないのです。

スナップショットを作っていくと、以下のように木構造で作られていきます。以下はインストール直後の状態を installed という名前でスナップショットを取り、さらにその後 yum update した状態を yum-updated というスナップショット名で取りました。

んで、こういう感じでやっていくと木構造になっていくわけですが、木構造のrootとなるスナップショットの取り方がわかりません。以下を見ると、installed と test5 が根っこになっていますが、どうしてこうなったのか分からないのです・・・。なんか色々やっていたら作れたのですが、再現ができず(´・ω・`)

誰か知っていたら教えてください・・ orz
ホスト環境のOSはCentOS6.3でvirshは0.9.10です。

# virsh snapshot-list tamsvr43-video --tree
installed
 |
  +- yum-updated
      |
      +- test1
      +- test2
      +- test3
          |
          +- test4

test5
 |
  +- test6
      |
      +- test7
          |
          +- test8
              |
              +- test9
                  |
                  +- 1378473386
                  |   |
                  |   +- 1378473474
                  |
                  +- test12
                      |
                      +- test30

 

 

ffmpegをCentOS6.3でビルドした時のメモを残しておきます。

なお、指定したオプションは再配布可能な範囲での指定なので、自分でビルドする場合はもっとフルにオプション指定した方が良いと思います。例えば、--enable-nonfreeとか--enable-libfdk-aacとか。

※この記事は後のビルドのためのベースとなるもので、最終的にはsharedリンクを完全に無くし、指定できるオプションは可能な限り付けることを目標としています。