「ベンチマーク」を含む日記 RSS

はてなキーワード: ベンチマークとは

2007-11-08

60行テンプレートエンジンがパワーアップしてレイアウト機能に対応

前の60行テンプレートエンジンを改良して、レイアウトテンプレート機能を追加してみた(それでも全部で90行)。

レイアウトテンプレート機能とは、例えば個別のテンプレートが<table>...</table>を出力して、それをレイアウトテンプレートが<html><body>...</body></html>で囲って出力するとかそんなの。

詳しくは終わりの方のサンプルをみてくれ。

これは Ruby on Rails(とその仲間たち)にある便利機能のひとつ。

ついでにいうとSmartyにはない機能のひとつ。

今まで知らなかった人はぜひ試してくれ。チョー便利だから。

前回はたくさんのブックマークありがと。

コメントで「男前テンプレート」と名前がついてたので、勝手採用

名前がキモいっていわれるよ?でもそんなのカンケイネー

あと、これ以上の機能追加はしないので、各自勝手に改造して使ってくれ(そのためにコメントをつけてるから)。何でも人任せにするな。

コード

<?php
/*
 *  OtokomaeTemplate.php -- レイアウトテンプレートに対応した90行のテンプレートエンジン
 *
 *  - レイアウトテンプレート中で echo $_content; とすると中身が表示される。
 *  - テンプレート中で設定した変数レイアウトテンプレートで使うことが可能。
 *  - レイアウトテンプレート名をテンプレート側で指定することも可能。
 *  - 使い方:
 *      require_once('OtokomaeTemplate.php');
 *      $TEMPLATE_DIR    = 'templates';  // 省略可、パーミッションに注意
 *      $LAYOUT_TEMPLATE = 'layout.php'; // 省略可
 *      $context = array('title'=>'Example',
 *                       'list'=>array(10,'<A&amp;B>',NULL));
 *      include_template('template.php', $context);
 *  - 要 PHP 5.1 or later
 *  - ライセンス: public domain (自由に改造してね)
 */

/*
 *  設定用のグローバル変数
 */
$TEMPLATE_DIR    = NULL;   /* テンプレートを探すディレクトリ */
$LAYOUT_TEMPLATE = NULL;   /* レイアウトテンプレートファイル名 */

/*
 *  テンプレートを読み込んで実行する。
 *  $_context は変数名をキー、値を要素とする連想配列。
 *  $_layout はレイアウトテンプレートファイル名。
 *  - NULL または省略した場合は $LAYOUT_TEMPLATE を使う。
 *  - FALSE ならレイアウトテンプレートを使わない。
 *  - $_context['_layout'] = '...'; とすればテンプレート側でも指定可能。
 */
function include_template($_filename, $_context, $_layout=NULL) {
    global $LAYOUT_TEMPLATE;
    $_content = render_template($_filename, $_context);
    if (@$_context['_layout'] !== NULL)   // テンプレート側で指定された場合は
        $_layout = $_context['_layout'];  // それを使う。
    elseif ($_layout === NULL)            // 引数で指定されなかった場合は
        $_layout = $LAYOUT_TEMPLATE;      // デフォルトファイル名を使う。
    if ($_layout) {
        $_context['_content'] = $_content;  // レイアウトテンプレート中で使う変数
        $_content = render_template($_layout, $_context);
    }
    echo $_content;   // or return $_content;
}

/*
 *  テンプレートを読み込んで実行し、その結果を文字列で返す。
 *  include_template() の実体。
 */
function render_template($_filename, &amp;$_context) {
    $_cachename = convert_template($_filename);
    extract($_context);     // 連想配列ローカル変数に展開
    ob_start();
    include($_cachename);   // テンプレートを読み込んで実行
    return ob_get_clean();
}

/*
 *  テンプレートファイルを読み込み、convert_string() で置換してから
 *  キャッシュファイルに書き込む。読み込み時のロックは省略。
 *  (file_get_contents() もファイルロックできるようにしてほしいなあ。)
 */
function convert_template($filename) {
    global $TEMPLATE_DIR;
    if (! file_exists($filename) &amp;&amp; $TEMPLATE_DIR)
        $filename = "$TEMPLATE_DIR/$filename";
    $cachename = $filename . '.cache';
    if (! file_exists($cachename) || filemtime($cachename) < filemtime($filename)) {
        $s = file_get_contents($filename);
        $s = convert_string($s);
        file_put_contents($cachename, $s, LOCK_EX); // LOCK_EX サポートは 5.1.0 から
    }
    return $cachename;
}

/*
 *  テンプレートの中身を置換する。
 *  - '#{...}' を 'echo ...;' に置換
 *  - '%{...}' を 'echo htmlspecialchars(...);' に置換
 *  - ついでにXML宣言も置換
 */
function convert_string($s) {
    $s = preg_replace('/^<\?xml/', '<<?php ?>?xml', $s);
    $s = preg_replace('/#\{(.*?)\}/', '<?php echo $1; ?>', $s);
    $s = preg_replace('/%\{(.*?)\}/', '<?php echo htmlspecialchars($1); ?>', $s);
    return $s;
}
?>

サンプルPHPコード:

<?php
require_once('OtokomaeTemplate.php');
$TEMPLATE_DIR    = 'templates';
$LAYOUT_TEMPLATE = 'layout.php';
$context = array('list'=>array(10,'<A&amp;B>',NULL));
include_template('template.php', $context);
?>

レイアウトテンプレート(layout.php):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <body>
    <h1>%{$title}</h1>
    <div id="maincontent">
<!-- テンプレートの内容 -->
<?php echo $_content; ?>
<!-- /テンプレートの内容 -->
    </div>
  </body>
</html>

テンプレート(template.php):

<?php // レイアウトテンプレート名をテンプレート中で指定する場合 ?>
<?php //$_context['_layout'] = 'mylayout.php'; ?>
<?php // レイアウトで使用する変数テンプレート中で指定する場合 ?>
<?php $_context['title'] = 'レイアウトのサンプル'; ?>
<table>
<?php foreach ($list as $i=>$item): ?>
  <tr bgcolor="#{$i % 2 ? '#FFCCCC' : '#CCCCFF'}">
    <td&gt;#{$i}</td&gt;
    <td&gt;%{$item}</td&gt;
  </tr>
<?php endforeach ?>
</table>

出力例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <body>
    <h1>レイアウトのサンプル</h1>
    <div id="maincontent">
<!-- テンプレートの内容 -->
<table>
  <tr bgcolor="#CCCCFF">
    <td&gt;0</td&gt;
    <td&gt;10</td&gt;
  </tr>
  <tr bgcolor="#FFCCCC">
    <td&gt;1</td&gt;
    <td&gt;&lt;A&amp;B&gt;</td&gt;
  </tr>
  <tr bgcolor="#CCCCFF">
    <td&gt;2</td&gt;
    <td&gt;</td&gt;
  </tr>
</table>
<!-- /テンプレートの内容 -->
    </div>
  </body>
</html>

いくつか補足:

2007-10-24

Googleアルゴリズムを公開してもユーザーにはメリットはない

週間少年ジャンプアンケートだけで漫画の掲載を決めていると公言するのと同じ。

作家がファンと組んで組織票を投じて保身が容易になるだけ。SEO屋がユーザーにとってスパムでしかない広告で溢れ返させる。

単純にいくつかのキーワードで検索ベンチマークをして精度や適切さを評価すればいい。それがユーザーメリットを単純かつ適切に計測できてGoogleに対してもユーザーとしてフィードバックできる最善の方法だ。

予言するとLiveSearchのヘボさにがっかりすると思う。特に日本ローカルなもので。)

こんなことPCでよくやってるだろ?Intelアルゴリズムについて講釈垂れて「公開すべきだ」なんてPCオタクだってやらない。無意味だからだ。猿のようにベンチマーク取る方がそれでもまだずっとマシだしよりよくできる手段なわけだ。

おい、GIGAZINE、今なら画像検索ベンチに一番乗りできるぞ。リーマンITmediaは掲載に時間がかかるからな。

2007-08-12

実装屋の憂鬱

新しいCPUが発売されるたびに速攻でPCショップに出向いて型番を指定して購入しベンチマークを取ったりするくせに、仕事Core 2 Duoリールカセットを交換をする時や、チップのコプラナリティ検査の時、外面検査器に基盤を延々と手乗せする時には何の感動も無くただ数をこなすだけ。

最近の憂鬱は、担当ラインでチップ立ちが見つかるとラインのメンバー全員にビールを振舞わねばならない「夏のマンハッタン祭り」が開催されており、検査担当が嬉しそうに「マン・ハッ・タン!マン・ハッ・タン!」と歌いながら報告してくる事だ。全く異常なく実装されているのをリフロー前で検査器と目視で確認しているにも関わらず摩天楼建設ラッシュが続いている事も憂鬱を加速させている要因となっている。

2007-07-13

今の趣味自転車

http://anond.hatelabo.jp/20070713095032

趣味はあるかね?仕事のことも恋人のことも忘れちゃうような没頭できる趣味はあるかね?

自転車、面白いよ。最近自転車ブームに乗っかってオイラも遊んでいるけど、凄くいい。

体にいい

体重高校時代の体重…10年以上前に戻った。15kg減量成功。

皮下脂肪が減ったので、腹筋が割れて見える。もちろん自転車に乗る以外の運動はしていない。

足も細くなった。

機器が面白い

ちょっとまえのPCみたいにパーツ単位で組み替えられる。

しかも、それが数千円からという安さ。そして自分の体でベンチマークできる。楽しい

パーツ替えていったら、もう一台組みたてられるというパターンもある。

ストレス解消

川縁など、自転車道をぼーっと走っていると気分爽快。

空が広い!日差しが気持ちいい。

暑いか?…と思ったけど、バイクと一緒で走っている間は十分快適。

数字が楽しい

速度や距離以外に心拍数クランク回転数、パーツ重量に車体重量。標高に斜度。

数字がいっぱいで理系増田にとって興奮モノです。

Excel大活躍。

鬱で悩んでいた時代がウソのようです。

元気になったよ。

2007-06-20

Re: [ruby][rails]ベンチマークの件

Rails触ったことない俺がすげー適当に答えるけど

順番に

  1. 演算量orCPU内のキャッシュアクセス
  2. メモリアクセス
  3. HDDアクセス

律速になってるとかどうよ。

2007-05-08

パフォーマンスとは

ネタへのマジレスマジレスしてみる。

Guthrie氏「われわれのベンチマークでは、Webブラウザにおいてネイティブ環境JavaScript300〜1000倍の高速動作を確認している」ってことだから、パフォーマンスの種類によって300〜1000倍かと思ったけど、この結果を見るとパフォーマンスというのはイベント処理とか描画処理とかを含む総合的なものらしい。そんなわけで総合的に300〜1000倍だと。

ただJavaScriptSilverlightは性質の異なるものだし、どう総合的に判断したのか分かりかねる。最近流行Lightboxばりのアニメーションとか? 比較するならFlash & ASと比較してほしい>Microsoft中の人

速度面以外でFlashとSolverlightを比較してみると……

というわけでFlashが有利かなーと素人が思っている訳ですが、みなさんどうですか?

2007-05-07

SilverlightはJavaScriptの300倍以上の速度?

http://journal.mycom.co.jp/articles/2007/05/07/mix02/001.html

とのことなのでちょっと実験してみました。

まず、用意するのは以下の円周率を求めるルーチンベンチマーク用にループ回数を固定してあります。JavaScriptでは若干変更があります。

double pi()
{
        double pi, ppi;
        int k = 0;
        float ek = 0.0;

        while (k < 1000000) {
                ppi = pi;
                ek = 8.0*k;
                pi += (4/(ek+1) - 2/(ek+4) - 1/(ek+5) - 1/(ek+6)) / pow(16.0, k);
                k++;
        }
        return pi;
}

そんでもって次の環境で処理時間を計ります。

結果は以下の通り。

ブラウザとか平均処理時間 [秒]Cと比べて何倍かかったか
C0.28(1.0)
Safari8.3930
Camino6.4523
Firefox10.3437
Opera3.3111.8
WebKit3.1811.4

あれぇー? てことはSilverlightってCより8倍以上速いじゃん!!

ktkr!!!!

wktkして待ちましょー

2007-05-03

SDHC

デジカメ更新してSDHC対応になったので、思い切って4GB(CLASS4)のメモリを一緒に買ってきた(CLASS6は割高なのでやめた)。

今まで使ってた1GB(BUFFALOの)の方がベンチマークでは圧倒的に早いけれど、連写速度の変化が殆ど無かったので問題ないみたいだ。容量を削って2GB(CLASS6)にしようかとも考えたが(こっちなら約半額でかつ早い)、メモリ交換面倒だしなくしたらイヤだしで、容量をとった。

今まで使っていたリーダーが使えなくなるのは痛いが、まあ仕方ない。

ログイン ユーザー登録
ようこそ ゲスト さん