2016年2月アーカイブ

アルファサードでは社内イントラで Xtalk を利用して情報共有を図っています。ま、これは YammerChatter みたいなもんと思ってもらえればいいです。

で、PowerCMSの導入が決まったとか、クライアントのサイトがローンチしたとか大口案件の検収が終ったとか新サービスリリースしたとかのニュースを #goodnews ハッシュタグを付けて投げているのですが、どうもここのところそれが中々定着しない。ただ、これがすごく大切なんだと私は思うのですね。少しその理由を書いてみたいと思います。

会社の空気が悪いニュースに支配されがちな理由

トラブルや問題発生ってのは共有されやすいものです。もちろん組織によるところも多いと思いますが、表立つ、立たないに関わらず「あの件が大変みたいやで」って情報は広がっていきやすい。悪いニュースに頭の中が支配されていると会社の空気がしんどくなるんですね。

良いニュースは共有されにくい

自己矛盾になりますが、ウチのような中小企業の場合、社員に危機感を持たせたり慢心を防ぐ意味から、あまり順調で好業績だよってしょっちゅういわなくなるんですね。どっちかと言えば「まだ目標に到達できていない」「計画までまだ上乗せが必要」というポーズをとることが多くなる。もちろん相当な好業績のときは別ですが、計画到達・未達かどうかはまだ蓋を開けるまでわかんないよ、ってときはそうなりがちです。

#goodnewsは意図的に、少し大げさなくらいに共有したほうがいい

なので、些細なことでも良いニュースは意図的、大げさなくらいに共有、拡散していくといいです。個人でも会社でもそうですけど、良いニュースを積極的に共有しているときは会社の雰囲気っていいんですね。ウチの会社では PowerCMSが軌道に乗り始めた頃は、1導入決まるたびに(その頃は #goodnews ではなく「ワショーイ」発言だったw)共有されてました。ただ、慣れてきちゃうんですね。 なので、そういうの、心がけた方が仕事楽しいよ、っていう話しでした。

この記事は、「やはりお前らのMTMLは間違っている」シリーズ連載第n回目の連載です。

12303936_1018612871539819_7627081906549621209_o

MTタグが数千、下記の例では7500個書いてあるテンプレートの話しです。

    <mt:SetVar name="master_table" key="12000" value="JR山手線">
    <mt:SetVar name="master_table" key="19200" value="東京メトロ千代田線">
    ....同じような記述が7500個くらい記述が続く

DB接続するようなMTタグが一切無いにも関わらず、再構築に数十秒かかります(手元環境では30秒から45秒)。MTSpeenMeterタグを使うとビルドにかかっているのはたかだか3〜4秒。

であれば、ビルドに入る前段階で時間を食っていると考えるのが自然。

時間がかかっているのは MT::Builder の sub compile{}です。要するに正規表現でMTタグをパースする処理。MTタグが多ければ多いほどここに時間がかかります。

要するに、PHPでも以下紹介した事象がスタティックでも発生するということです。しかもPerl、スタティックのパース結果はキャッシュされない(同一リクエスト内ではキャッシュされる模様)。

対策は、MTSetVars、MTSetHashVarsを使うか、素直にデータベースを使う

MTタグの数が少なければパース時間は短くなるため、MTSetVars、MTSetHashVarsを使って纏めて記載する。

でも、この手のデータだったらカスタムオブジェクトでも何でも良いけど素直にデータベース管理が良いと思います。

こんなページができていて、いい傾向じゃないの(上から目線w)、と思ってまして。

ツッコミと言うわけではないですが、僕も最近色々思ってたことが触れられてたので。

ま、同じことなんですけど、何でこういうエントリを書いてるかというと、PerlでMTMLやHTMLを突っ込むのについついPerlのヒアドキュメントを使っちゃうことがあるからなのです。ひとつのファイルで完結するからどうしても手を抜いてそういう実装をしがちなのですが。

僕なら、テンプレートを tmpl/include に置いた上でこう書きます。

sub template_param_edit_entry {
    my ( $cb, $app, $param, $tmpl ) = @_;
    $app->{ plugin_template_path } =
        File::Spec->catfile( MT->component( 'AwesomePlugin' )->path, 'tmpl' );

    my ( $node, $attr, $include );

    $node = $tmpl->getElementById( 'header_include' );
    $attr = { name => 'include/edit_entry_header.tmpl' };
    $include = $tmpl->createElement( 'include', $attr );
    $tmpl->insertBefore( $include, $node );

    $node = $tmpl->getElementById( 'title' );
    $attr = { name => 'include/edit_entry_title.tmpl' };
    $include = $tmpl->createElement( 'include', $attr );
    $tmpl->insertBefore( $include, $node );
}

DOMに慣れている方なら直感的かと思うし。どっちがいいということではなくて、自分が理解しやすい方法で書けばいいと思います、ええ。

※どっちかと言えば各MTタグにidが振られてないとかそういうのが問題かと思う(一回バージョンアップでidが変わったことあるぜ!!)

追記:天野さんから指摘あり。

plugintemplatepath を使う方法は、複数のプラグインで同じことをしようとした時に片方が効かなくなる。

さらに追記

    $app->{ plugin_template_path } =
        File::Spec->catfile( MT->component( 'AwesomePlugin' )->path, 'tmpl' );

    # の代わりに

    $attr = { name => 'include/edit_entry_header.tmpl',
              component => 'AwesomePlugin' };

とする。

sort_by sort_order 指定してみたんだけど、効かない。

  • MT::Template::Tags::Blog::_hdlr_blogs

ハードコーディングされてるんだから。。。

$args{'sort'} = 'name';
$args{direction} = 'ascend';
my @blogs = MT::Blog->load( \%terms, \%args );

こういうところを何とかして欲しいものです。

<mt:Websites>
<mt:WebsiteId setvar="website_id">
<mt:SetHashVars name="website_data">
    name=<mt:WebsiteName>
    url=<mt:WebsiteURL>
</mt:SetHashVars>
<mt:SetHashVar name="websites">
    <mt:SetVar name="$website_id" value="$website_data">
</mt:SetHashVar>
</mt:Websites>
<mt:Loop name="websites" sort_by="key" >
    blog_id : <mt:Var name="__key__">
    blog_name : <mt:Var name="__value__" key="name">
    blog_url : <mt:Var name="__value__" key="url">
</mt:Loop>

追記 : blog_id が10超えるときは 別途並び順用の変数にキーのみ入れて MTLoop sort_by="value numeric" というツッコミが入りました。誰か修正版やっといて。。

追記: GetHashVarプラグインを使うか ObjectLoop プラグインを使えば素直に解決できる

<mt:LoopWithSort name="websites" kind="num" scope="key" order="ascend">
</mt:LoopWithSort>

<mt:ObjectLoop model="website" sort_by="id" sort_order="ascend">
</mt:ObjectLoop>

リッチテキストエディタの是非は別にして、リセットしたいなら局所化しとけよと思ったんだけど、これ普通なんか?エンジニアに必要なのは「想像力」でなはいだろうか?ウェブアクセシビリティ然り。自分の書いたコードがどんな使い方をされるのかを想像できない人はこの仕事向いてないと思うんだが。普通なのかこれ?

html, body, div, span, object, iframe /*略*/ {
  margin: 0;
  padding: 0;
  border: 0;
  outline: 0;
  font-size: 100%;
  vertical-align: baseline;
  background: transparent;
}

リセットされたスタイル。構造が視覚的に把握できない

Facebook

Twitter

このアーカイブについて

このページには、2016年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2016年1月です。

次のアーカイブは2016年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6