イースター島

ポリネシア人もにっこり

Wizardryっぽいもんを作れなかった

僕はWizardryが好きだ。人のプレイを見るのも好きだ。テレポーターで未踏エリアに飛ばされて進退窮まったり、急に*いしのなかにいる*したり、救出パーティが二次遭難したりして途方に暮れてる姿が好きだ。

ある時ふいに、「暇な時にwebでWizardry出来たら最高じゃね?」と考えた。これならいつだって始められるし、いつだって投げ出せる。

なので、とりあえず作ってみようと思った。

ダンジョン描画

Canvasを使って描画する。要はfillRect()しまくる。3D計算は一切せず擬似3Dでそれらしく見せる。奥を暗くすることでダンジョンっぽさを演出してみる。扉?知らんな

f:id:wmoai:20150807155258p:plain

ダンジョンの生成

ダンジョンを自動生成してみようとググった結果、壁のばし法というアルゴリズムに行き当たった。処理を切り上げることで大部屋が残るよう調整している。

f:id:wmoai:20150807160956p:plain

できなかったこと

唐突ではあるが、上記以外のことは何もできていない。特に

  • キャラ、アイテム、戦闘、フラグ管理などRPGたりうる全ての要素
  • サーバとクライアントの責務の線引

この辺りが皆目見当がつかず、お葬式状態だった。本当に申し訳ない。

結果

あれもこれもと考えた結果何もできなくなるのは僕の悪癖であり、全ての火が消える前にとりあえず作った部分だけでも形にしようと考えた。

その結果誕生したのが「モアイ迷宮」だ。

http://wmoai.github.io/maze/

大した目的も無く迷路を彷徨うゲームであり、まるで僕の心を投影したかのようだ。全てはフロントjavascriptで動いており、そこにはサーバ側の処理は一切存在しない。ドメインが死ぬまでは公開中で、一応スマホ対応済み。

反省

いつだってWizardryをやりたいという思いは少しも陰っていない。足りないのは僕の覚悟と技術力だった。特にこういったゲームのデータや状態管理などの知識は皆無に近いので、この結果は必然であり、僕は自分の無知を再認識することが出来てよかったと感じた。

いずれ勉強して出直したい

自鯖録画システム「もあれこ」のアプリケーション部分

要件

  • ブラウザで操作
  • 番組表が見れる
  • 番組が検索できる
  • 録画予約できる
  • 録画したものを視聴できる

構成

  • webアプリケーション
    • nodejs + express + MongoDB
      使ってみたかったというだけの理由でこの構成。番組表・録画リストなどのUIを提供し、録画予約はmongoに記録。録画視聴はvideoタグで実現。 実験的に番組表表示にReact.jsを使ってみたりもした。残念ながらリアルタイム視聴は今のところできない。
  • バックエンド
    • nodejs + node-cron
      録画予約データを元に録画を行い、ffmpegでmp4にエンコードする。また、番組表の定期更新を行う。

番組タイトル問題

基本的に録画予約した番組は勝手に毎週録画されて欲しい。しかし見たところシリーズに対するユニークIDなどは存在しないようだ。

そこで毎週変わらないであろうタイトル部分を抽出し、新たに番組表に追加されたタイミングで自動的に録画予約する。例えば

【新】ハロー!!きんいろモザイク

であれば、【新】の部分を除外して「ハロー!!きんいろモザイク」を記録しておけば、あとはこの文字列をタイトルに含む番組を全て録画すればいい。

しかし、ここで度々失敗した。いくつか例を挙げると

月刊少女野崎くん「第5号『恋を「思い」「描く」男子。』」

サブタイは括弧で括られることが多く、“「”から“」”までの範囲をサブタイトルとみなして正規表現で除外していた。しかし野崎くんは括弧が多かったため除外に失敗し

月刊少女野崎くん男子。』」

となっていた。僕のなんちゃって正規表現は見事に打ち砕かれた。更に、逆のケースも存在する。

【新】TVアニメ「Fate/stay night[UBW]」

僕は諦めた。

別のパターン

【新】ローリング★ガールズ

が急に録画できなくなっていた。確認したところ

ローリング☆ガールズ

2話から星の色が変わっていた。あのさぁ・・・

できた

3ヶ月ほどバシバシコード書いてたらなんとか動くようになった。ブラウザのまま視聴可能(もちろん非公開) f:id:wmoai:20150805180412p:plain f:id:wmoai:20150805180425p:plain 手探り感あふれるソース github.com

実際自鯖で録画ってどうなのか

僕の場合、ハードウェアへの投資が約10万となってしまい、費用対効果は大敗北だろう。何でもかんでも詰め込み過ぎたのが敗因と言える。電気代は思っていたほど爆上げではなかった。

録画ミスはtorneの頃より体感少ないし、HDDは4T積んだので容量を気にすることはほぼ無く、どこでも見れるとかいう細々とした利点はあるが、今日日市販のレコーダーでもそれくらいできるのだろう。

結局のところ勢いが重要なので、好き勝手いじれて僕は満足だし、録画システムが欲しい人は大人しく市販の物を買うことをオススメします。

自鯖録画システム「もあれこ」のハードウェア部分

もあれことは

PT3を用いたお手製の録画システムである

https://github.com/wmoai/moareco

現状、本人が二度と構築出来ないレベルなのでログを漁りながら手順をまとめる

Hardware

カードリーダドライバ

ICカードリーダのドライバは、特定バージョンで固定する必要があるらしい。 なので個別に落としてきて入れる

$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/p/pcsc-perl/libpcsc-perl_1.4.12-1build2_amd64.deb
$ sudo dpkg -i libpcsc-perl_1.4.12-1build2_amd64.deb
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/p/pcsc-tools/pcsc-tools_1.4.16-1_amd64.deb
$ sudo dpkg -i pcsc-tools_1.4.16-1_amd64.deb
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/main/p/pcsc-lite/libpcsclite1_1.5.3-1ubuntu4.2_amd64.deb
$ sudo dpkg -i libpcsclite1_1.5.3-1ubuntu4.2_amd64.deb
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/c/ccid/libccid_1.3.11-1_amd64.deb
$ sudo dpkg -i libccid_1.3.11-1_amd64.deb
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/p/pcsc-lite/pcscd_1.5.3-1ubuntu4.2_amd64.deb
$ sudo dpkg -i pcscd_1.5.3-1ubuntu4.2_amd64.deb
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/main/p/pcsc-lite/libpcsclite-dev_1.5.3-1ubuntu4.2_amd64.deb
$ sudo dpkg -i libpcsclite-dev_1.5.3-1ubuntu4.2_amd64.deb
$ sudo dpkg --list | grep "pcscd\|libpcsclite1\|libccid\|pcsc-tools"

なんか余計なのがある気がするが一応入れとく。

バージョンを固定

$ sudo aptitude install wajig
$ sudo wajig hold pcscd
$ sudo wajig hold libpcsclite1
$ sudo wajig hold libccid
$ sudo wajig hold pcsc-tools

B-CASカードをさした状態で動作確認

$ sudo pcsc_scan

成功していれば、JapaneseとかB-CASとか出力される

PT3ドライバ

$ git clone https://github.com/m-tsudo/pt3.git
$ cd pt3
$ make
$ sudo make install
$ sudo reboot

サーバ再起動

$ ls /dev | grep pt3

成功していれば、pt3video~みたいなのがある

録画コマンド系

recpt1

PT3の録画制御を行う

$ git clone https://github.com/stz2012/recpt1
$ cd ./recpt1/recpt1/
$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install

録画可能になる

$ recpt1 --b25 --strip 27 30 test.ts

27は物理チャンネル、30は録画時間(秒) 物理チャンネルは地域によって異なる

epgdump

TSファイルからEPG(電子番組ガイド)情報を抜く

$ git clone https://github.com/Piro77/epgdump
$ cd ./epgdump
$ ./autogen.sh
$ ./configure
$ make
$ make install

さっきのtest.tsからEPGを取得

$ epgdump json test.ts testEpg.json

JSONでドバーッと出力される

これで録画の下地は整ったので、アプリケーション編に続く