プロローグ

ちまたではファイナルファンタジーは3だの5だのが流行っているが、
俺は新品を買う財政が無いので今更ながらGBA版のFF2をプレイ中。


今回のプレーは別に特別な縛りは無しでやっている。
パーティアタックもあり、即死系魔法もあり、神経衰弱は・・考え中。
王道なプレーでとりあえずクリアして、隠しモードであるソウルオブリバースまでやり切る。


FF2においてはあまり攻略法が一般的に知られていないようなので、基本戦略を書くと、

  1. 回避率が一番重要である
  2. 回避率が下がるから防具はつけない。常に裸。
  3. パーティアタックでHPをあげるのはあまり意味が無い。HPの%でダメージを与える敵が多いから。
  4. 最強の魔法はトードやテレポといった即死系。ボスも瞬殺。しかも確率高い。
  5. それでもやっぱり最強の魔法はアルテマ
  6. アルテマはレベルを上げてもあまり意味が無い。他の熟練度が全て16だと9000オーバーで安定。クリティカルだと18000。


さて、そんな感じでプレー開始。
ただし、俺は一日1時間もプレーしないので進行は遅い。

はてなブックマーク+リンク集

今日の改造ははてなブックマークへの追加ショートカットとリンク集の作成。


以前から「このエントリを含むはてなブックマーク」へのショートカットは作っていたが、ブックマークにするにはワンクリックではできなかった。(ツールバー等は除く)
そこではてなブックマークへの追加ショートカットを作りたかったのだがここには一つ問題があった。


ブックマークへの追加は、

http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title=「タイトル」&url=「URL」

と言うような書式なのだが、ここでタイトルとURLはエンコードされている必要がある。


普通にブログツールにある出力機能を使うと、エンコードされたURLとタイトルが表示できないのでこれが中々利用できなかった。
そこで、javascriptを使って、エンコードをするようにした。
javscriptだとescape()で一発変換。楽勝だね。


あとはサムネイル付のリンク集を作成した。
これはひたすら単純にTABLEを作成することになる。
単純作業=コンピュータに任せる=プログラミング化というのが俺の定説。


そこで最初はこれもJavaScriptで実装したのだが、
JavaScriptには決定的な欠点がある。


1つ目はJavaScriptをOffにすると動かない点。当たり前。
はてなブックマークへの追加ショートカットぐらいならいいが、
メインコンテンツであるリンク集が真っ白になるのはいただけない。


2つ目はサーチエンジン対策、SEOだ。
JavaScriptによるソースはロボットが解析してくれるかどうか怪しい。
折角リンク集をつくるなら、きちんとロボット収集できる形の方がいいに決まっている。


ということで、Perlでプログラムを組み、CGIを解して、URLリストから自動的にTABLEを作成するものを作成。
これで今後追加があっても楽に追加できるな。


さて、Yahoo!のサーファはいつくるかな・・・。
でもやつらトップ見ただけで深くまで見てくれないんだよな・・。

メニューその他変更

なんだかんだいって、表サイトはちょくちょく弄っている。
今日はメニューを今までの8項目から9項目へと1つ増やした。


増やした項目は「Radio」。
今夜もうさちゃんピースの書き起こしをメインコンテンツの一つにしようと言う試み。


普段の記事は、全てhttp://www.usachanpeace.com/sayumipeace/の下においてあるのだが、
書き起こしの記事だけはhttp://www.usachanpeace.com/hypernight/の下に作っていた。
それは今回のコンテンツへの下準備。

hypernightにはきちんとindex.htmlも生成されるようにして、
メニューからはそこにリンクされるように修正。

そして、いつものようにFireFoxでも確認しようとしたら・・・
あれ、メニュー機能してねぇじゃんwww
どうやら、今までFireFoxの人はメニュー全く動かなかったぽいな。


これはTABLEの中で、TDの外側にAタグを貼っていたのが問題で
この使い方だとMozillaだとリンク無効みたいだ。
しかし、普通にテキストとやるとテキスト部分しかリンク有効にならない。


これはスタイルシートでaタグの属性をdisplay : block;の指定をしてあげると解決できる。
ので、修正完了っと。


で、これをコンテンツの一つとして作ったのにはもう一つ理由があって、
またYahoo!登録へ申請をしたかったわけですね。
過去2度申請しているけど通って無いので、コンテンツを増やした。
自分的にはそれなりに頑張っているんだけどねぇ。


Google検索の結果もまだまだ復活しないので、早く10位以内に復活して欲しい所です。

携帯電話とデスクトップのURL振り分け

まだ地道に移転作業を続けていたりする。
昨日は携帯電話でのアクセスに対応するべく、.htaccessの編集を行う。
.htaccessディレクトリ単位で様々な設定をすることが出来る優れもの。
ただし、レンタルサーバによってサポートしているところと居ないところがある。


SereneBachには携帯電話での閲覧モードが用意されている。
ここでRewrite(URLの書き換え)の機能を使って、デスクトップと携帯電話で同じURLで閲覧が出来るように改造をする。
Rewriteを利用するためにはまず、

RewriteEngine On

と宣言をする必要がある。
Rewite機能がインストールされていないサーバでは動かないので注意が必要。


通常のデスクトップ用のURLは
http://www.usachanpeace.com/
携帯用のURLは
http://www.usachanpaace.com/mb.cgi
だ。


ちなみに、
http://www.usachanpeace.com/sb.cgi
だと、携帯とデスクトップを自動で判別して振り分けてくれる。
だから、トップページをmb.cgiにすればいいのだが、それは流石に不便だろう。


携帯電話かどうかの判断はUser-Agentを調べれば分かる。
そこで、.htaccess

RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteRule ^$ /mb.cgi [R]

RewriteCond %{HTTP_USER_AGENT} J-PHONE
RewriteRule ^$ /mb.cgi [R]

RewriteCond %{HTTP_USER_AGENT} Vodafone
RewriteRule ^$ /mb.cgi [R]


RewriteCond %{HTTP_USER_AGENT} UP.Browser
RewriteRule ^$ /mb.cgi [R]

を追加する。
RewriteCondとは書き換えをする条件を指定する箇所。
ここだと、「HTTP_USER_AGENT」に「DoCoMo」という文字列を含んでいる時という意味となる。
判定文には正規表現で指定する。正規表現に関してはWebに関わっていると必ず出現するものなので、勉強しておいて損はない。


RewriteCondで指定できる項目は

  • HTTP_USER_AGENT
  • HTTP_REFERER
  • HTTP_COOKIE
  • HTTP_FORWARDED
  • HTTP_HOST
  • HTTP_PROXY_CONNECTION
  • HTTP_ACCEPT
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_USER
  • REMOTE_IDENT
  • REQUEST_METHOD
  • SCRIPT_FILENAME
  • PATH_INFO
  • QUERY_STRING
  • AUTH_TYPE
  • DOCUMENT_ROOT
  • SERVER_ADMIN
  • SERVER_NAME
  • SERVER_ADDR
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_SOFTWARE
  • TIME_YEAR
  • TIME_MON
  • TIME_DAY
  • TIME_HOUR
  • TIME_MIN
  • TIME_SEC
  • TIME_WDAY
  • TIME
  • API_VERSION
  • THE_REQUEST
  • REQUEST_URI
  • REQUEST_FILENAME
  • IS_SUBREQ
  • HTTPS

といった項目があるようだ。
それぞれの内容に関してはgoogle検索すればわかるだろう。


RewriteCondの条件にマッチするとRewriteRuleで書き換えを行う。
ここも正規表現で指定する。
「^$」は^=文頭、$=文末を表すので、つまり空を表す。
ホスト名を除いたアクセス先が空というは、つまり
http://www.usachanpeace.com/」のことをさす。
(ホスト名がhttp://www.usachanpeace.com/


その空の部分を「/mb.cgi」に置換をすると指定している。
つまり、http://www.usachanpeace.com/
http://www.usachanpeace.com/mb.cgiに置換することになる。
([R]はこの置換が転送である事を示す。HTTPで返すコードが302にかわる。)


まとめると、

RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteRule ^$ /mb.cgi [R]

は、
環境変数HTTP_USER_AGENTにDoCoMoが含まれていたら、
空行を「/mb.cgi」に置換せよ、という事になる。
他の携帯電話に対しても同様の処理を行う。


これで携帯電話からのアクセスは全てmb.cgiに飛ばされる。


次に必要なのは各記事への対応だ。
すべてのエントリは
http://www.usachanpeace.com/sayumipeace/eidXXX.html
という形でHTMLとして保存されている。
それぞれのエントリを携帯電話でみるためには
http://www.usachanpeace.com/mb.cgi?eid=XXX
と指定すればいい。(XXXは記事ID)


コレを実現するには

RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteCond %{REQUEST_FILENAME} sayumipeace/eid
RewriteRule sayumipeace/eid([0-9]+)\.html$ /mb.cgi?eid=$1 [R]

と指定する。
RewriteCondは条件を重ねて指定することが出来る。
特に指定しなければそれぞれの条件分はANDとなる。
ORを指定したければ、[or]を行末に加える。

RewriteCond %{REQUEST_FILENAME} sayumipeace/eid

はリクエストしたファイルの名前にsayumipeace/eidが含まれていたら、
という条件となる。

RewriteRule sayumipeace/eid([0-9]+)\.html$ /mb.cgi?eid=$1 [R]

これは、リクエストURLのうち、「sayumipeace/eid([0-9]+)\.html」でマッチする箇所を
「/mb.cgi?eid=$1」で置換しろということだ。


eid([0-9]+)の箇所は、0から9までの数字の繰り返しで構成されている事を示し、
()で括った箇所は置換のときに$1として参照が出来る。
「\.」は拡張子を表す区切りの「.」は正規表現での予約語なので、
直前に\を加える事で「.」は文字ですよ、と教えてあげる。


例えば、「sayumipeace/eid581.html」は581の部分が0から9までの数字の繰り返しなのでマッチして、\1=581となる。
従って、
http://www.usachanpeace.com/sayumipeace/eid581.html」は
http://www.usachanpeace.com/mb/cgi?eid=581」に置換される。
「sayumipeace/eid581abc.html」等はマッチしない。


以上のことをまとめて.htaccessを作成すると、

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteCond %{REQUEST_FILENAME} sayumipeace/eid
RewriteRule sayumipeace/eid([0-9]+)\.html$ /mb.cgi?eid=$1 [R]

RewriteCond %{HTTP_USER_AGENT} J-PHONE
RewriteCond %{REQUEST_FILENAME} sayumipeace/eid
RewriteRule sayumipeace/eid([0-9]+)\.html$ /mb.cgi?eid=$1 [R]

RewriteCond %{HTTP_USER_AGENT} Vodafone
RewriteCond %{REQUEST_FILENAME} sayumipeace/eid
RewriteRule sayumipeace/eid([0-9]+)\.html$ /mb.cgi?eid=$1 [R]

RewriteCond %{HTTP_USER_AGENT} UP.Browser
RewriteCond %{REQUEST_FILENAME} sayumipeace/eid
RewriteRule sayumipeace/eid([0-9]+)\.html$ /mb.cgi?eid=$1 [R]

RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteRule ^$ /mb.cgi [R]

RewriteCond %{HTTP_USER_AGENT} J-PHONE
RewriteRule ^$ /mb.cgi [R]

RewriteCond %{HTTP_USER_AGENT} Vodafone
RewriteRule ^$ /mb.cgi [R]


RewriteCond %{HTTP_USER_AGENT} UP.Browser
RewriteRule ^$ /mb.cgi [R]

となる。


とまぁ、いかにも知ったかぶりで書いたけど、
これらの事は今回の移転で調べて行った事だからそれほど詳しいわけではない。
これは自分への備忘録だな。

移転顛末

長い間移転したいと思っていた表サイトを遂に移転させた。
iswebライトからsakura。


まず、なんで移転したかったか。
iswebでは出来ない事が多すぎたし、それ以前にスペースがなくなったからだ。

  1. 外部PINGが打てない
    1. SereneBachの持つ、amazonのオススメ機能が使えない。これは外部ツールである程度補える(g-tool)。
    2. 更新時、PINGによる更新通知ができない。これも外部ツールで補える(ぶろぐぴんぴん
    3. トラックバックが打てない。これも外部ツールでおぎなえる(同上)
    4. はてなアンテナ等、外部RSSの表示が出来ない(jsRSSやfeed2jsが使えない)。外部サーバにモジュールを置いて呼び出すことで補える。
  2. CGIの使いにくさ
    1. PHPが動かないため、Wikiや一部のCGIが配置できない。外部サーバに配置して呼び出す。
    2. Image::MagickやSendMailが使えない。外部サーバに配置して呼び出す。
    3. cgi-bin配下におく必要があるため、トップページへのクッキー保持ができない。サブドメインで発行したクッキーはトップドメインでは使えないため。
    4. 実行パワーが貧弱のため、Out of Memoryでエラー終了してしまう。RSSが作られなかったり、再構築ができなかったり、最大の致命傷。
  3. 広告・・・これはたいしてきにならないかな。
  4. .htaccessが置けない・・・これも運営している間ではそれほど問題はない。が、移転する時にはかなり痛い問題。

以上のような不満があったため、移転はずっとしたかった。
しかし、移転する事でURLが変わることでアクセスが減るのが怖くて中々できなかった。


iswebライトからベーシックにすることで何点かは解決できるが、ベーシックにするにしてもURLがかわってしまう。
どうせURLが変わるならきちんとしたホスティングサービスに申し込むべきだ。


それ以前に、今後の事を考えたらまず独自ドメインを取得するべきだろう。
独自ドメインをとっておけば、今後サーバを移転する際もURLが変わらずに済む。
今は年間1000円程度で取れるからさっくりと契約をする。


ホスティングサービスは結構値段差が大きい。月1万以上かかるものから、年間5000円程度のものまで様々ある。
俺の場合は法人でやるわけではないので、年間5000円クラスのを狙うのが妥当だろう。
そうなるとさくら、xreaロリポップあたりが有力な候補となる。


最初はxreaを考えていたのだが、PHPがセーフモードでしか動かないのでやめた。
sakuraはPHPCGIとして動かすので、実行パフォーマンスは悪いが、
セーフモードでは難しいファイル作成等ができるのがありがたい。


俺は写真館のコンテンツがあるが、わざわざフォトアルバムをHTMLで作る手間はかけたくない。
そこで、ディレクトリ構造を自動的に取得し、アルバムを作ってくれるモジュールを利用した。
ここで、大事なのは、ファイル数、ディレクトリ数、写真のサイズが任意でいいことが条件。


PHP版としては、NiconicoPHPが該当。
このソフトはかなり優秀で、デザインはテンプレートを弄る事で自在にカスタマイズが可能。
サムネイル自動生成、フォルダ階層分類可、サイズや数に制限がないという優れもの。


FLASH版としては、NAVIEW-ALBUM Autoを採用。
フォルダ階層分類ができないこと、フォルダとファイルのソートが今一なのを除けば優秀。


移転を機に細かなところで改造を施す。アクセス解析ツールにはよくみかける忍者を試してみた。
別にこれがいいのかもよくわからないけどお試しで。
ついでにカウンターも忍者に。前は自分でCGI置いていたけど若干動作が不安定で、たまにカウントが0になってしまうという致命的な問題があったから、しばらくは忍者を使ってみる。


メルフォに関しては前回のエントリでも書いたように、スパム対策を施す。
まぁスパム以外のメールなんてメルフォから来たことほとんどないのだがw


さらにコンテンツとして、ポケットモーニングQ&Aをデビューしてから全てのデータを乗っける。
さゆみんのプロフィールも作ってみる。
これらは、SBのユーザプロフィール機能を利用して作成。今後デザインを変更した場合も容易に対応するためだ。


あとはリンクを貼っていただいているサイト様に、移転のお知らせをおくって、
はてなリングへの登録をしなおして一通り移転作業は終了。
ただ、連絡先がわからずにリンク張替えのお願いができないところは放置。


まだ若干移転作業は残っているけれども、ひとまずこんなところかな。
SereneBach自体の他サーバへの移転は以前sbからのアップデート時に苦労したので今回は問題なし。
記事のエクスポートなんてiswebでは無理だからな。その辺は臨機応変で対応。


さて、移転してアクセスがどのぐらい増減するかが気になるところだが、
思ったよりアクセス数は減っていないんだよね。って話は明日あたりにMixiで書く予定。
ここは技術的な話がメインなのだ。(全然技術というレベルじゃないけど)

MPEG22AVI(仮)作成日記 1

たまにはこっちも書くか。


さて、俺は普段、CanopusのMTVシリーズを使って、TV番組を録画している。
そして、録画した番組を圧縮して保存をしているのだが、この作業はかなり煩わしい。
では具体的にどういう作業を行っているのかと言うと、

  1. CMカッターでCM部分をカットする
  2. DVD2AVIで音声と映像を分離し、プロジェクト形式で保存する。
  3. 音ずれを補正し、正規化する(音整)
  4. 音声を圧縮する(LIFE等)
  5. AVSファイルを編集し、フィルタを設定する。
  6. VirtualDubModで圧縮。


これを図に表すと

こんなかんじの流れ。


ここで、実際はCMカット以外の作業は全部機械的な作業になる。
人が判断してあげないといけないのはCM部分の選出だけだ。
となると、ソフトを使って簡略化したいと考えるわけだ。


そこで長らくは、マクロソフトである、UWSCを使ってマクロ操作をしていた。
このUWSCというソフトはかなり優秀なマクロソフトで、
単純なキー、マウス操作を記録して再生するような使い方のほかにも
スクリプト形式で書くことにより複雑な操作も可能になる。
ファイル操作や、アプリケーション操作等、かなり多彩。
これを使いこなせれば相当色々な事が出来る。


実際のところ用途としてはこれで十分なのだが、
あとは俺のソフト作成欲が沸いてきて、
実際に自分でネイティブなアプリケーションを作りたくなったわけだ。


という事で色々苦労しながらもプロトタイプは完成。

こんな感じのGUI。実装はDelphi6 personal。


これを作る上で新たに学んだ知識としては、
アプリケーションからのリソース抽出や
ウィンドウハンドラ操作だな。


他のアプリケーションを操作する時に、
キーボードコマンドを与えてもいいのだが、
その場合キーフォーカスの問題がでてきたりする。
(例えば保存するためにCTRL+Sを送る)


それよりもリソースを覗いて、コマンドに対応する命令コードを直接送ってあげた方が安定する。
この作業を経て、外国ソフトの日本語化は技術的には簡単なんだな、という事が理解できた。
もちろん、リソースが読めないソフトはどうするのかとか、それ以前の英語力の問題はあるけどね。
やる気になれば、ソフトのコマンドを全部ヲタ仕様にする事も容易だな。
「ファイルを保存する」を「ファイルを保存するの」とか「ファイルを保存するべさ」とかにするのは余裕だ。


話がそれたが、上の操作は一通り出来るようになった。
元々UWSCでのマクロスクリプトは完成していたから、その処理を移植するだけだからな。
ただ、当然ここから更に機能の向上を目指している。


今は、VirtualDubModに一々全部コマンドを送っている。
具体的に書くと、

  1. 「AVSを開く」
  2. 「Streamを開く」
  3. 「コーデックを選択する」
  4. 「フレームレートをあわせる」
  5. 「保存する」

という作業を行う。

これは実はjobを設定しているファイルを直接編集するか、
新規に作ってVDMで読み取らせれば余計な操作をせずに済むのではないか、
と考えたわけだ。


ちなみに俺がやっている事に近い機能を持ったソフトは既に存在している。
DivX/XviD 60fps(120fps)化計画のページのReena! というソフトだ。
AVISYNTHのフロントエンドCMカットとはっきり行って目的はほとんど同じ。
ソフトのつくりも所詮素人の俺よりはいい感じに作っている。
でも、更新をしていない事、自分で作りたい事から作成をしているという事。




あとはソフト名が決まってないので何かいい名前を考えたいな。
大募集中です。

HTMLサイトのはてなリング登録方法

11月7日から「はてなリングサービス」が始まった。
一時期流行したウェブリングはてなバージョンだ。

主旨に関しては以下の引用を参照

■ 新サービスはてなリングリリース 18:27
本日、新サービスのはてなリングをリリースしました。

http://ring.hatena.ne.jp/

はてなリングはブログをつなげる新しいコミュニケーションツール。懐かしくでも新しい、Web 2.0 時代の「ウェブリング」です。

RSSフィードソーシャルブックマークをベースにコミュニティを築きます。
友達のブログをつなげて、みんなの新着記事をまとめてチェックしたり、メンバーみんなで掲示板でコミュニケーションしたりすることができます。
アンテナ、注目のエントリー、タグ、掲示板などの機能を活用しましょう。
リングのロゴをブログに貼って、みんなでブログの輪を作りましょう。
詳しくはヘルプをご覧ください


ここで一つ曲者がある。
RSSフィードだ。
RSSフィードが用意できていないHTMLベースのサイト*1では参加が出来ない。


今回はHTMLベースのHPの人がはてなリングに参加したいけどできない、
という問題を解消する方法を提案してみる。


ここで「なんでもRSS」を利用する方法を紹介する。
例として「みょだの国から」を(勝手に)使う。


まず、「http://blogwatcher.pi.titech.ac.jp/nandemorss/」 にアクセスする



1.自分のHPのURLを入力して「なんでもRSS!」を押す


2.いくつかのタブから正しいものを選ぶ
この段階で正しく解析されてRSSが表示されればOK。
うまく解析されない場合は残念ながら諦めるしかない。
たまに「200OK」と表示されて特に何も起こらないときがあるのでその時は再度実行すると上手くいったりする。


3.RSS(またはAtom)の画像を押す



4.リンク先のURLをコピーする
ここでもよくエラーがでるので根気よく正常な結果が出るまで頑張ろう。


5.自分のHPのHTMLソースを編集し、Head要素内に以下のタグを追加する。


6.これでOK。あなたのサイトはRSSを配信します。


この手順での一番の難関は2だ。
ここで正しく解析されないと諦めるしかない。
いくつかのサイトを試したところ・・・上手くいくほうが少なかった。
上手くいったとしても、なんでもRSSのサイト自体がかなり不安定なので、RSSがうまくとれたり取れなかったりする。
これで解決したらラッキー程度には思っておこう。


追記
サイトを更新したらあと、RSSフィードはてなに通知する場合は、
http://r.hatena.ne.jp/rpc
PINGを打つと手動で更新できます。
もっとも、なんでもRSS自体が30分に1回しか更新しない(キャッシュする)みたいだけどね。


PINGを手動でうつのにはぶろっぐぴんぴんというフリーソフトを使うといいです。
ダウンロードは「BlogPeople」へ会員登録(無料)したあと、ツールのダウンロードから出来ます。
トラックバックを手動で打つ時にも使う。
iswebからはトラックバック通知できないので、これを使って手動で通知している。

*1:RSSフィードを配信していないサイト。ブログツールを用いて更新しているサイトに対しての対語として勝手に使う