他のことを何ひとつやらずに作業して完成させたという表現が正確かも。
おかげでこの1ヶ月ほどアニメをほとんど見てません……
見てないのでコメントも書きようがないし。当然ながら書く時間もない。
コミックなんか読む以前に買ってすらいません。出かけてないから(爆)。
読んでないのに通販で買っても積み上がるだけだし。買う金もないし。
にしても、それぞれの画質のチェックやサービスの使い勝手から始めて、
タイトル一覧をリストするサイトまで作るとか何を頑張ってるんだか。
確かに(自分には)便利だけど、手間かけた分のわりに合うのだろうかと。
損得勘定で計るなら明らかにバカバカしいことだとわかってはいるけど。
それでもやらずにいられないあたりがなんと言うか……
話は動画配信サービスナビに戻して。
完成と簡単に言ってるけどそこに至るまでの道のりは遠かったです。
タイトルを取得すること自体はそんなに大変ではなかったけど。
それもページ要素をツリー化するモジュールを自作したのが大きいかも。
今はなるべく手を抜いて既存のものを使う方針でやってはいるんだけど、
どうにも機能的に使えなかったりサーバー的に使えなかったりだし、
ある定番のモジュールなんかページを読み込むとクラッシュするし……
(人気ランキングで試すと大丈夫なのでページ内容によるみたい)
だったら自分で書いてしまえとJavaScriptのDOM仕様に似せて作ってみた。
思ったより簡単にできたので俺様天才かも!とか寝言をほざいたり(爆)。
構造の壊れたページの処理は超手抜きだったりしますが(汗)。
前回の更新時点で既にタイトルリストが取得できてたってことは、
ページを解析するモジュールは「ほぼ完成」をしてたってことです。
しかしこのモジュールは後でとんでもない問題を引き起こすのでした。
タイトルリストが取れてからの方が作業量はずっと多かった。
特にサービス毎にタイトルの表記がずれてるのをすりあわせる作業と
タイトルがちゃんと50音順に並ぶように読みをいれるのが一苦労。
実はサービスからタイトルリストを取得するのに1分以上かかるのです。
バンダイチャンネルみたいに1ページで全タイトル取れるのはいいけど
数十ページ取得しないとリストが作れないサービスがあるので。
最初は補正データや読みデータを更新するたびタイトルを取り直してて
チェック作業が非常にかったるいことになってたのでした……
そんな経験もあって今回はキャッシュ処理を最大限に最適化してみたり。
サービス毎のリストと表示してるリストは別々に持ってたりするのです。
補正データや読みデータの更新って今後も継続してやる必要があるから。
「放送中アニメの人気ランキング」を継続して更新してきた経験から
データの更新に関わる管理機能を最初からしっかり作りこんであります。
人気ランキングはとりあえずランキングが出せる状態で公開したけど。
非同期の更新はなくアイテム追加をサポートする機能も無かったのです。
(しばらくはページにほとんど訪れてる人はいなかったけどね)
よーするに、とにかくアイデアを実装しました、というレベルだった。
そこに運用しながら足りない機能を追加し続けて今に至るわけです。
でも今回は運用に必要な機能は最初から思いつく限り入れたのでした。
実は「新着タイトルリスト」なんか当初は管理機能として考えてたよ。
追加されたのがわかれば読みを入れる作業も楽だろうという発想で。
よく考えてみたら利用者にも便利だなと表のメニューに入れたのです。
(管理用のメニューは別に存在するのです、人気ランキングの方も)
増えたタイトがあるなら消えた(配信終了)タイトルもあったりします。
そんな消えたタイトルを表示する機能も実は管理用として存在します。
全タイトルを(違う体裁で)一覧する機能なんてのもあったりします。
このへんは利用者向けとしてはいらんだろうと表には出てませんが。
表の機能だけでも全タイトルを表示する裏技?みたいのはあるけど。
※「|」で検索すればたぶん全部出てくる
運用を補助する管理機能を充実したのは継続性を重視したからです。
あまりに手作業が必要だと継続して更新するのが困難になるので。
かといって完全な自動処理にすると情報の質が伴わなくなってしまう。
人気ランキングだってノイズを排除するための細工をしてるわけで。
情報の質を維持しながらいかに省力化するかが継続のために重要です。
管理機能を充実すると最初が大変になるけどそこは仕方ないかなと。
サイトデザインも今回はちょっと工夫をしてみました。
ブログの体裁をコピーしたデザインのなにが工夫かって感じですが(爆)。
とりあえず今一番マシなのがブログのデザインなので真似は必然です。
という話ではなく、トップページにダイジェストを持ってきたところ。
人気ランキングはトップに説明が入ってるけどアレはどうかなと……
BGM全曲リストの体裁をベースにしてるからああなっているんだけど。
本来は入り口にも何らかのランキングを載せるべきではないかなと。
ランキングの仕組みや説明はヘルプとして用意すればいいわけだし。
(BGM全曲リストは今のままでいいと思う)
そんな考えで今回はトップにリストのダイジェストを載せたわけです。
タイトルリストのダイジェストを乱数で表示するのを決めてて。
でも全タイトルの中から乱数で選んで表示するのは面白くないしと。
やっぱ見る人が興味あるタイトルが並んでた方が効果があるだろうと。
トップだし絵とか入れて大きく表示したほうが見栄えもいいかなと。
絵はamazonのジャケ絵を使うとして、でも全てに対応すると死ぬるし。
そこで新番組とオススメ(ここの注目タイトル)だけ対応することに。
ついでにその分だけブログ(ここ)の記事や公式へもリンクしてみたり。
そのへんも含めてリストで表示してみたらなんかいい感じになった!
新番組リストと注目タイトルリストは実はそれの副産物だったりして。
トップでランダム表示するタイトルを全部表示してるだけなので。
新番組の配信リストなんか結構便利で副産物としては大当たりかも。
そしてトップ以外のリストにもジャケ絵他を表示するようにしたら
新番組やオススメ作品が他より目立つようになって凄くいい感じに。
自分で作っておいてなんだけど予想外の表示効果にビックリしたよ。
実はトップ以外のリストでも大きく表示することは原理的に可能です。
他とのバランスを考えてあえて小さく表示してるだけで。
管理用に新番組とオススメ全部を大きく表示する機能はあったりする。
※ムービーの生存チェック用で
すぐ上に書いてあるけどトップだとムービーを表示することがあります。
バンダイチャネルが提供する無料映像で埋め込み可能なのがあるので、
せっかくだから小さいサイズでサービスナビにも埋め込んでみたのです。
こっちの方がジャケ絵より作品の雰囲気がわかりやすくていいかなと。
「R.O.D」とか「かみちゅ!」とか「あさっての方向。」とかのPVは
短い中に作品のエッセンスが詰め込んであって見本としてはいい感じ。
もっと幅広い作品のPVが埋め込み対応ならいいのにとか思ったよ。
てゆーかPVなんて宣伝目的なんだからもっと積極的に対応してくれよ。
efなんかブログの横に貼ったやつを埋め込みさせてくれればいいのに。
かと思えば1話まるごと埋め込み対応してる作品もあったりするわけで。
(1話よりもよくできたPVの方が見本としてはいいけどね)
契約の問題かメディアファクトリー関係は一つも埋め込めないので
メディアファクトリーのはYoutubeの公式チャンネルのを使いました。
こっちはバンダイチャンネルと比べて縛りがないのでチェックが楽です。
(B-chは埋め込みURLをチェックするのでローカルだと見えない)
ゆるゆるなせいか動的に表示をON/OFFしても不具合は特に出なかったし。
実はB-chのムービーは動的に表示を制御すると表示が出ない場合がある。
フラッシュが古いとメッセージを出す余計な……親切な仕様もあるし。
だったらジャケ絵に戻そうと動的に切り替えてて凄くハマりました。
あれこれ試行錯誤した結果あまり美しくない今の方式に落ち着きました。
ちなみにどちらのムービーも音量の右のボタンで全画面表示が可能です。
話は前後するけどある程度体裁がついたところでサーバーに上げました。
定期更新が正常に動くかどうかをしばらく様子をみたかったので。
もちろん更新処理自体は手元の環境で動くことは確認済みでしたが。
と言うわけでサーバーに上げて表の処理は特に問題なく動くのを確認。
しかし試しに更新処理を走らせてみたらサーバーエラーが出てしまう。
(管理用の)エラーが見えるモードで動かしても真っ白で何もでないし。
このままではどうにもならないので個々の処理を動かしてみることに。
管理用で更新処理を処理内容毎に実行することもできるので。
そうしたらアニメワンのタイトルを取得するとこで終わっちゃう模様。
この後は終わってしまう原因がつかめずいろいろ試行錯誤するのです。
文字コードのせい?とか処理時間が長いから?とか迷走を続けて。
止まるタイミングが一定じゃないのも事態の混迷を深めたのでした。
エラー原因を教えてくれればこんな苦労は無かったのに!と後で思った。
ちなみにサーバーエラーと言うのは500 Internal Server Errorのこと。
通常はプログラムや設定の間違いで表示不能な時に出るものだけど、
実行の途中で出る場合は途中でプログラムが止まってるということ。
後で気付いたけどシステム側に強制的に止められてたってことです。
タイトルリストの取得処理はページデザインの変更を想定してるので
エラーが発生したときはログを残して中断するようにしてあるのです。
にも関わらず処理のログが全く残ってないので途方にくれてたよ。
さくらは負荷が高すぎると500になる(止められる)という話があって、
もしかして更新処理は100円のコースでは荷が重いのか?とか思って。
ある意味では負荷が高すぎで荷が重かったわけだけど……
人気ランキングのほうは全く問題が出ないのに変だなとも思ったけど。
このままでは埒があかないので試しに一つ上のコースで試してみたり。
しかし一月500円のコースでもやっぱり途中で止まってしまう。
処理がずいぶん速くなってエラーで落ちる時間まで早くなった(爆)。
もうどうしていいかわからなかったよ。
仕方ないのでタイトルリストを取得する部分だけ取り出して
サーバー側のコンソールで実行するプログラムを作ってみたり。
※一月100円のコースにはサーバーのコンソールが開放されてない
それでやっと気付いたんだけどやっぱり途中でシステムが止めてる。
最初は時間かなんかで止まってると思ったけど時間に関係なく止まる。
アニメワンの取得の途中で止まるのにそれだけにしたら止まらないし。
どれだけやっても原因に近づいてる気がしなかったよ。
そんな感じでソースを書き換え何度も試していた時あるメッセージが。
いつもは無言で止めてたシステムから(?)初めて意味のある文字が。
「おんどれメモリーを使い過ぎで足りないんじゃゴルァ」(意訳)と。
横に数値が出てたので桁を数えたら500Mとか信じがたい数字だった。
(念のためにtimeを使ってメモリー消費を確認したら同じだった)
そんなバカなと思いつつ手元で同じスクリプトを動かしてみたのです。
Process Explorerでメモリーの使用量を監視しつつ。
そうしたら凄い勢いでメモリーを食いつぶして800Mにまで到達した(爆)。
そりゃあ800Mもメモリーを使おうとしたら途中で止められるがな!
2Gメモリーをつんでると800Mじゃビクともしないので気付かなかった。
にしても何でそんなにメモリーをバカ食いしてるんだろうと。
雰囲気としてはパース処理で使ってるメモリーが蓄積してる感じだし。
ページのパース処理は同じ内容をページ分だけループしてるだけで、
大半の変数やオブジェクトはパース処理内で完結してるはずなのに。
Perlのメモリー管理はいったいどうなってんねん!とか思った。
意図的に変数を空にしたり破棄を呼んでもメモリー浪費の状況は変わらず。
Perlのメモリー管理について情報を収集してやっとヒントを発見する。
Perlの管理のやり方だと循環参照でメモリーリークをするという話を。
ようするに互いに参照しあってるとプログラムから参照がなくなっても
使われてると判断してメモリーが解放されないという話。
この説明でやっと今回のエラーの原因に思い当たりました。
ページをパースするモジュールがまさにその構造だと言うことに。
ページパースのモジュールはタグ構造のツリーを作っていくのです。
そして内部で要素(タグなど)の親子が互いに参照し合ってるのです。
そうするとツリー構築やページ解析の処理が凄く楽だっだから。
やっぱり解析したページの数だけ全部メモリーに残ってたわけか!
(1ページ毎にツリーを破棄するようにしたら消費が20M程度に減った)
アニメワンはページ構造が複雑でサイズが大きいので顕在化したのです。
これむしろ問題が発覚しなかった方がえらい迷惑をかけてただろうね。
メモリー消費の問題が解決して500円コースで更新処理も正常に動いて、
(今の)100円コースではどうかなと試したらこっちも問題なく終了。
もう無理だと思ってた100円コースでも何の問題も無かったという。
てゆーか100円コースでは荷が重くなる日なんて来るのでしょうか?
アクセスが今より二桁ぐらい多くなれば上に移れとか言われるかも?
なんだか取らぬ狸の狸鍋を思い描いてるみたいな気がしてきたよ。
と言うわけで500円コースの試用は終了してキャンセルをしました。
アクセスが増えすぎたので引っ越しました、とか言ってみたいね!
以上のようにえらい手間をかけたアニメ動画配信サービスナビ。
今までの経験を結集した自信作なので良かったら見てやってください。
※リンクはブログや本家の索引のサイドメニューにもあります
違法アップ動画が花盛りなこのご時世にニーズはあるのか?だけど。
ちなみに動画配信サービスナビを作った当人の感想としては
知らなかったけど結構いろんな作品を公式に配信してるんだ、かな。
オンラインDVDレンタルとはまだ品揃えが天と地ほども違いますが。
それでもやっとサービスとして立ち上がったというか感じかも。
新番組中の配信タイトルの比率が特に今期なんか結構大きくなったし。
今から5年ぐらい経てばレンタルと同じ土俵に立てるかもしれない。
スポンサーサイト