萌えキャラとは何だったのか

ギークにも絵描きにもなれない者の末路

Markdownブログ

Markdownでブログが書きたかった。githubのページ公開機能なら何でも良かった。今は反省している。

https://github.com/mix3/mix3.github.io

使い方

  1. resource以下に.mdでMarkdownの文書を作成する。
  2. script/generate.plを実行する
  3. githubにコミットする
  4. こんな感じになる

ちなみに

pixivブログでjsを使ってごにょごにょしようとしてみたがムリっぽい。HTMLの中にMarkdownを埋め込んだり別サーバに置いてみたり色々してみたがどうにも上手く行かず。

  • 別ドメインにならざるを得ずセキュリティ制限が掛かる
  • JSONPだとヒアドキュメントが使えないのでキモイ
  • 2重エスケープなどで上手く表示出来ない

などなど。

ということでpixivブログで割と満足している現状全く使いどころが無いMarkdownブログだけどまあいっか。

MobaSiFは機能がミニマムなので、コントローラに相当すると思われる部分にて以下の記述をします。

  • アプリケーションロジックを記述
  • レスポンスの値を生成&セット

具体的に書くと以下のような感じ。

conf/pages.conf

our %PAGE = (
    'test' => [0,0,0, 'Page::Sample', 'pageMain'],
);

pm/Page/Sample.pm

package Page::Sample;
sub pageMain {
    my $func = shift;
    # レスポンスの生成
    my $html = HTMLTemplate::insert('sample/index', $rhData);
    # レスポンスヘッダに値をセット
    Response::output(¥$html);
}

template/_system/sample/index.html

<html>
<head><title>$CON:title$</title></head>
<body>
    test
</body>
</html>

普段触るフレームワークだと「レスポンスの生成」も「レスポンスヘッダへの値のセット」も自分ですることはまず無くて。テンプレートに渡す値をハッシュで用意して、テンプレート自体はクエリパスなどから自動で判断するかもしくは明示的に指定するかする場合が多い。

ということでこの辺り結構違和感が大きいのでちょっとそれっぽくなるように手を入れてみた。

pm/Context.pm

pm/Page/Main.pm

conf/pages.conf

our %PAGE = (
        .
        .
        .
    'test'  => [0,0,0, 'Page::Sample', 'test'],
    'test1' => [0,0,0, 'Page::Sample', 'test1'],
    'test2' => [0,0,0, 'Page::Sample', 'test2'],
);

pm/Page/Sample.pm

template/_system/sample/test.html

次回はDB周りを触ってみる

commit,transactionなどをラップしているものの、サンプルコードではSQL直叩きなのでこれもDBICなどでゴリゴリモデルに落とし込むなどして使った方が良いかもしれない。

インストール

環境はCentOS5.6で極力yumで対処してみた。

  • CentOS 5.6
  • Apache 2.2.3 (yum install)
  • fastcgi 2.4.0 (yum install)
  • mod_fastcgi 2.4.2 (source install)
  • mysql 5.1.57 (rpm install)
  • perl 5.8.8 (yum install)

ちなみにMobaSiFのdocsに記載されている対応環境の内容は以下の通り

           要求       確認環境
CentOS     4.x / 5.x  4.5 (i386)
Apache     1.3.x      1.3.41
MySQL      5.0.x      5.0.51a
perl       5.8.x      5.8.0
fastcgi    2.4.x      2.4.6

詰まった所、注意点

  • MobaSiF
    • mod_fastcgiとmod_fcgidがあるがMobaSiFはmod_fastcgi
    • yumで入れたApacheのバージョンが2.2だったが、mod_fastcgiは2.0までしか対応していない。
    • パッチを当てれば2.2にmod_fastcgiを入れるられる⇒'Apache2.2+fastcgiで Ruby on Rails'
  • perl
    • FastCGIがシステム標準のperlを使うのでperlbrewを使うと混乱する。
    • 素直にシステム標準のperlを使うのが楽
  • Apache
    • MobaSiFとは全然関係ないがバーチャルホストでDocumentRootの設定に変な癖がある⇒VirtualHost環境化でのPermission Denied

MobaSiFのミニマムサ

ンプル

MobaSiFでのページとURLの対応は以下のようになる

  • ルート
    • http://[domain]/
  • 各ページ(アンダースコア+ページ名)
    • http://[domain]/[_ページ名前]

ページを追加してみる

conf/pages.conf

our %PAGE = {
        .
        .
        .
    'sample' => [0,    package Page::Sample;

use strict;
use HTMLTemplate;
use Response;

sub pageMain {
    my $func = shift;
    my $rhData = {};

    my $html = HTMLTemplate::insert("sample/top", $rhData);
    Response::output(\$html);
}

1;0,0, 'Page::Sample', 'pageMain'],
    # http://[domain]/_sample にアクセスすると Page::SampleモジュールのpageMainの処理が走る
};

pm/Page/Sample.pm

package Page::Sample;

use strict;
use HTMLTemplate;
use Response;

sub pageMain {
    my $func = shift;
    my $rhData = {};

    my $html = HTMLTemplate::insert("sample/top", $rhData);
    Response::output(\$html);
}

1;

テンプレートのコンパイル

MobaSiFでは速度を出すためにアプリで機種毎に出し分けなどの処理をしないよう最初からテンプレートを機種別に生成したりするようです。(変なバイナリデータをテンプレートに埋め込んでいたり他にも色々やってそうな感じ)

$ perl script/tool/compile_template

conf/pages.confの数字の意味

'ページ名' => [ UID_ST, USER_ST, SERV_ST, モジュール, サブルーチン ]
  • UID_ST
    • 0:情報なし
    • 2:serial/uid あり
  • USER_ST
    • 0:非会員でもOK
    • 1:会員(メアド未登録でもOK)
    • 2:会員(メアド登録済)
  • SERV_ST (以下を足したもの)
    • 1:自主退会だと不能
    • 2:運用退会だと不能
    • 4:PENALTYだと不能
    • 8:メール不達だと不能

まとめ

  • 機能は非常にミニマム
    • 文字コードはテンプレートやコード等でsjis,utf8,eucが入り交じる
    • テンプレートの中に絵文字のバイナリを直接書く
    • ロジックの所でレスポンスにテンプレートと引数を合成したものの返り値を渡す処理を自分で書く。

⇒多分拡張して使われる事が前提と思ってよい。

  • 古いのでPlackに対応していないため、動作確認までの環境構築が非常に面倒。
    • 開発段階でわざわざApacheとFastCGIを入れないといけない

⇒今時Plack対応して欲しいかも。開発段階でFastCGIがどうのとかあんまり考えたく無い。

以下で説明されている通りモダンじゃないのは確かかもしれませんね。

第42回PHP勉強会 MobaSiF 発表資料

最近自分の進むべき道の事について考えたり考えなかったりしているmix3です。

GoogleDocsも良いけれど

社内の勉強会でとある『未完』に終わったお話したのですが、そのときパワポに何を使おうか考えて普段はGoogleDocsを使ってるのですが、こんなパワポを見てHTML形式も良いなと思い、HTMLベースのパワポツールを探してみたところ以下のものが自分の琴線に触れました。 琴線に触れたもの

  • jquery-presentation - jQuery based presentation framework. [DEMO]
  • HTML をプレゼン形式に表示する jQuery プラグインを作ってみた [DEMO]
  • 「イカワイパー」なHTMLベースのプレゼンツール「SliDegeso」を作ってみたでゲソ [DEMO]
  • slippy [DEMO]

イカに凄く惹かれたのですが上手くワイパーの動作をしてくれず見送り。一番シンプルそうなjquery-presentationを今回は使ってみました。slippyも結構良い感じっぽいので次回はそれを使ってみたいと思います。

jquery-presentationはちょっとシンプル過ぎる

jquery-presentationは実はページ送り(戻り)しか出来ない超絶シンプルなツールです。デフォルトのページ送りのエフェクトや、センター表示、ページ番号管理表示などはありますがそれだけです。「一部表示を隠して順に表示する」といったパワポの基本的な事が出来なかったりします。なのでその程度のことぐらいは出来てほしいなと思い少し手を入れました。こんな感じです。

デモはこちら

表示する順序や、visibility:hidden/display:noneの使い分けまでやりたいなと思いつつ片手間に弄ったので隠して表示が出来る程度にしています。やりすぎると「他のツール使え」ということになりますしね。

ということで発表自体は非常に残念なことになったので精進して行きたいです。 ちなみに

HTMLベースのパワポの弱点としてスライドシェアに上げにくい(PDFにしにくい)というものがあります。スライドシェアに上げる前提の場合はHTMLベースは避けた方が良いでしょう。

  • SCPやrsyncやらで各アプリケーションサーバから回収
    • 自由が利く
  • 各アプリケーションサーバから解析サーバへ投げてもらう
    • HDFSなどHadoopが扱うファイルシステムに直接入れる事が可能
    • ※ただし、各アプリケーションサーバがそのファイルシステムを扱えるように色々セットアップが必要

後者のアプリから投げてもらう方だと各サーバでファイルシステムを扱えるようセットアップが必要になるので、そこまでアプリ側に負担を掛けられないかなということで今考えているのは前者の方法となります。

コード

Hadoopが扱うファイルシステムはHDFSという前提で前回構築した環境でサンプルを作ってみました。

シェルスクリプトで並列回収

まず最初にシェルスクリプトで書いてみました。「これだと回収先のアプリが100万個ある場合は100万個同時にダウンロードしちゃうってことだよね?」というもっともな指摘で没になりました。まったくもってその通りだと思います。

Qudoで並列回収

  • ジョブ/キューを使いたい
    • なんとなくジョブは消えてほしく無い
    • 失敗したらリトライしてほしい
  • 回収は並列
    • でも同時実行数は上限あり

以上の要件で最初はTheSchwartz&Parallel::Preforkで考えていましたが何やらGearmanでもDBを使って動作させられるという話があったりQudoを見つけてみたりで、でもやりたいことって別にそんなに複雑な事でもないので結局何使っても良いかなと思ってQudoを選びました。後々機能を増やしたい時にフックポイントが色々用意されているので悪くないかなと。

どうでも良いですがnekokakさん曰くQudoは「駆動」らしいですが「弓道」の方が良いと思います^^