「テンプレート」を含む日記 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>

いくつか補足:

ウォール伝「生成ユーモアの企て」 を 整形してみる。

ウォール伝「生成ユーモアの企て」http://d.hatena.ne.jp/mimisemi/20071108

2007-11-08 生成ユーモアの企て。CommentsAdd Starmimisemi2007-11-08

アルファブロガーアワードってのにノミネートされたらしいんだけど、最初、ブ
ログへの書き込み見たときにまたなんかの詐欺サイトかと思ったよ。前のmyspace
でのライブに出ませんか?と同じ類かと思ってたら、割とちゃんとしてたっつーか、
推薦してくれた人がいたみたいで、なんだか驚きっていうか、今日社会学のテス
トがあってって昨日も書いたけど、今書いてるのは午前なんだけど、一応、学校行
く前に教科書でも読んでおこうかとか思ったんだけど、ノミネートされてて驚きだ
ったからこの時点で思ったフレッシュなことをとりあえず書いておくね。

まず推薦した人のセンスというのは恐らくアングラ系に理解がある人なんだろうな
って思ったわけだけど、別に俺がアングラぶっているわけではなく、基本的に色々
カイテルとそれがアングラ志向みたいになっちゃうんだよね。ようはメインストリ
ームじゃないことっつーかストリームすらないようなことばっか書いてるんで逸脱
していくっていう、まぁその結果がアングラっていうカッコつきのワードで表され
るわけだけど、何を書きたかったのかすでに忘れたよ。

あ、そうそう。推薦者に「推薦していただいてありがとうございました」なんてメ
ールなり書き込みをするのは白々しいので、やりたくないんだよね。前のはてなス
ターと一緒で、もう心が張り裂けそうなぐらい感謝しているんだが、あんま直接本
人に言いたくないっていう。ってことで推薦してくれた人がこれまだ懲りずに見て
たら、耳蝉はこのことだけでまた明日から頑張って算数とかをやる気力が湧いたっ
て思っててください。

人との係わり合いっつーか特にネットでの係わり合いは極力避けているのにも関わ
らず、知らない人がこういうことをしてくれると嬉しいんだよねぇー。すげー自分
勝手。ところであとこの期待ね。おーなんか凄いことになってるじゃん!とかさ、
あ、その前に、「ニューヨークコミュニティーカレッジに通う著者」って言葉さ、
いやー文字ってのは凄いよね。こうやって文字で現れると実態と乖離したイメージ
というのが文字から生まれてくるというか、読み手に連想させるんだよね。なにや
ら凄い感じじゃん。

まぁコミカレ自体は凄くないけど、ニューヨークってワードがコミュニティカレッ
ジの質を高めてるっていうか、オクラホマコミュニティーカレッジだとあんまス
テータス高い感じしないけど、ニューヨークってのがね、コミカレの響きを高めて
るっていうか、まぁそういうのがあるわけだけど、実際は「モトニートかそれ以下
みたいな引き篭もり生活をしていた著者が、死か無理な渡米かの二択を自分の中で
勝手に迫られて渡米というか亡命を決意しつつ、なんだかんだでニューヨークのコ
ミュニティカレッジに通いながら、特殊学級の算数のクラスと読み書きのクラスを
受けている生活の中で綴るポスニートダイアリー」みたいなね。

ただ脳を掃除するっていう表現はさすがだなって思った。ちゃんと読んではるなっ
て。前にも書いたけど精液が溜まりすぎると玉が膿んだような感じになるから一刻
も早く抜きたくなるじゃん?それと一緒で脳が膿むんだよね。色々溜め込みすぎる
と。だから吐き出さなきゃいけない。音もそうなんだけどね。

あ、んでね、いつも書くようだけど、留学生っつってもピンきりで、今なんて恐ら
く昔みたいな、50年代とか60年代とかに留学してたようなエリート中のエリートな
んてのは本当に少ないと思うわけねっつーか昔はそういうエリートしか留学できな
かったわけだけどっつーのも奨学金とかね、そういうことで。

ただ今ってのは割とカジュアルに誰でも留学できるんで留学自体がたいしたことじ
ゃ無くなっているわけ。ただ留学とか「ニューヨーク」みたいなカッコつきのワー
ドに象徴されるようなイメージだけが先行しているものってのはね、そういった昔
から継承されてきたステレオタイプの賜物なわけですよ。留学=賢いとかエリート
とか金持ちみたいな。ただ今なんて違法でバイトしつつ英語学校に通っている日本
人なんて少なくないし、VISAがキレても惰性で違法バイト続けてはや10年みたいな
人もいるわけ。

ようはね、クローズアップ現代だかで見たんだけど、就職氷河期世代ってのがよう
は年齢差別とかさ、日本って雇用っつーか社会が最悪だからっつーかまぁいいや、
仕事が無くてさ、んで中国行って電話オペレーターとかやってる人とかいるらし
いけどさ、時給が日本円で300円だったかな。ただまぁ中国語をマスターするっての
とキャリアアップってのもあって日本無駄バイトしてるよりマシってことで行
ってる人も多いんだろうけど、こういうの見るともうすでに日本先進国だなんて
いう幻想はもうなくなったなっていうのを実感するよね。

それこそ本国仕事が無いとか未来が無いんで海外に出て条件が悪くてもまだマシ
ってことで仕事をしている発展途上国から来た労働者とかとあんま変わらないわけ。
こういう人達って。俺も同じだからね。元々日本というか日本社会が大嫌いで亡命
したという理由が一番だけど、でもまず俺みたいなもんに仕事があるわけないから
さ、だったら同じ苦労でもこっちで苦労したほうがマシだってことなわけで、状況
的には独裁政権の国から自由を求めて逃れてきた移民なんかと本質的には変わらな
いわけですよ。

まぁ俺の場合、親のサポートがあるからこういったシリアス移民たちと俺を一緒
にするのは失礼なんだけどね。そういう意味だとあれなのよ、ニートが上京して専
門学校通うみたいなのをニューヨークでやってるってだけ。俺の場合。だから全然
たいしたこと無い。エリートでもなんでもないし、こっちの大学なんて高校レベル英語が出来れば誰でも入れるんだから。卒業するのは大変だけどね。ってことで
留学=なんか凄そうっていうイメージはなくしたほうがいいよ。

こういうイメージが流布してるから短期留学でもなんか得られるんじゃないかとか
いって来る人が多いけど、何にもならないよ。基本的に留学の先にあるのは似たよ
うな資本主義社会で、言語英語ってだけです。そこでまぁ行動的な人は何かを
得るかもしれないけど、それはあくまで主体あってのもので、主体性が無くて、た
だなんとなく留学っつーと凄そうだからっつって留学しても何にもならないわけ。

こうやって勝手留学に対して変な幻想を抱いちゃうってのは、留学を売り物にし
ている代行業者とかによるイメージ捏造もあると思うんだけど、やっぱなんつー
かそれ以前にジェネラルに留学っていうこと自体に個々が勝手幻想抱いてる気が
するのよね。ただ実際はね、来てみて、それがニューヨークであろうがロスであろ
うがイメージと全然違ってたっつって心身がダメになって帰るって人も多いらしい
し、何も見つけられないまま英語学校にずーっといるって人も多いし、ようはね、
状況自体が何かを与えてくれるなんてことはどこの世界にも存在しないってことな
わけよ。

主体性のないやつが違う環境に行けば環境によって様々なことが変わっていくとか
ね、そんなことは起こりえないわけよ。あくまでそれは主体性があった上での前に
書いたようなソーシャルインターアクションによってパーソナリティが変わってい
ったり認識が変わっていったりするわけで、そこに何らかの働きかけが無いとまず
無理なわけ。勘違いしてる人達ってのは行けばそういった経験が得られるんだって
凄まじくパッシブなままなんだよね。そんなんじゃ無理。

だから中身が何も無いまま自分探しっつって世界放浪してもダメなんですよ。自
分が無いと何も得られない。ようはその環境から感化されるような感覚とか思考と
かっていう人間の意志が無いとダメなわけで、ようは日本で拾った石をエジプトと
かアメリカとかイギリスに送ったところで、石自体に何も変化がないのと同じなわ
け。

この石状態ってのがスッカラカンな石人間留学先で起こるわけ。ただこれは師匠
2っぽい言い方すると自明の理なわけよ。まぁ留学に限らずだけどね。もっと狭い
話でもいいや。どっかのサークルに参加するとかコミュニティに行くとかさ、それ
で変わるかもしれないっつっても、主体性が無きゃそれは、その辺で拾った石をな
んかのサークルに置くだけで、石自体に何の変化も起こらないでしょ。逆に人間っ
てのは変な期待するから、そこでイメージと違ったとか、なんか予想してたのと違
うとかって思うわけだけど、そりゃてめーが石だからなんだよってことに気がつか
ないとダメよね。逆を言えば意志さえあれば環境なんて二次的なものなわけ。

だから前に書いたことでちょっと思うことがあったんだけど、俺ってどうやら人里
はなれた山というのに桃源郷的な幻想を抱いてるんだなっていう風に思ったわけ。
こんなくだらないゲームはやめて、とっとと隠遁生活を送りたいって書いたけど、
隠遁生活なんて別に山に行かなくても送れるんじゃないかと思ったのね。

ようは心の中に桃源郷的なイメージを持っていれば、自分の部屋が桃源郷になりう
るでしょ。別にそれは瞑想しているときでもいいんだけど、頭の中にそういったイ
メージがあれば、実質、環境がどうであれ隠者的な生活は送れるんじゃないかと思
ったのね。まぁ環境も大事だよ。ナチ政権下で心に桃源郷を持ってようがそりゃキ
ツイよ。

まぁなんつーかそこそこの環境なら別に心の持ちようっつーか、ようはその個人の
世界観によって自分の世界なんていくらでも変わるじゃんって思ったわけで、んだ
から別に山に住まなくても、山にいるようなイメージを心に持っていれば、それは
山に住んでいるのと同等じゃないかってことなわけね。ようはそこで人生なんても
のにはもう達観して挑むしかなくて、心に桃源郷を描くことに人生を費やせば、色
々と克服できることって結構多いと思うのね。

それはくだらない人間関係についてかもしれないし、煩悩かもしれないし、精神病
かもしれないし、不安かもしれないし・・・。結局こういったことを解決するのっ
て内面的な力しかありえないわけだよね。薬とか環境の変化でどうにかなるもんじ
ゃない。何しろ人間ってのはもう文明社会に生きているわけだから、社会からは逃
げられないでしょ。桃源郷社会存在しないなら、自分の心に作っちゃえばいい
だけの話だよね。

まとめると、ようはこれってのは青い鳥と同じなわけで、幸福なんてのは外的なも
のの中には存在しないわけで、そういったものを無理やり作っちゃうのが幻想なわ
けだけど、青い鳥の「本当の幸せというのは鳥かごにあった」っていうのに準える
と、本当の幸福ってのは心にありってことなわけで、まぁ基本的には師匠1の教え
に行き着くわけですな。心っつーと深そうだけど、ようは気の持ちようだよ。認識
ね。基本的には。あーダメだ。話が逸れた!もうあと1時間ぐらいしか無いから教
科書読むわ。

いつもこんな感じね。寸前というよりかは寸前の寸前ぐらいにならないと動き出さ
ないのね。俺。あ、そうそう。パリ症候群とかさ、あと日本馬鹿芸能人がハリ
ウッドデビューとかアメリカで活躍するみたいなことに幻想を抱いているのも、今、
書いたことの良い例ね。良いっつーか悪いっつーか。事実とは関係ない幻想という
ものに振り回されるほど不幸なことはないから、とっととそんな幻想捨てちゃった
ほうがよっぽど幸せになります。

ところでアルファブロガーって影響力のあるブログの書き手のことを指すらしいけ
ど、なんか今回俺のブログノミネートされたやつは2004年から開催されてるやつ
らしいんだけど笑っちゃったのが、Wikiで見てみたら「日本ではFPN(フューチャ
ープランニングネットワーク)というサイトが「アルファブロガーを探せ」という
企画主催しており、ここで選出されたブロガーを指すことが多い一方で、この企
画自体の知名度の低さの問題が指摘されている。また評価の正当性、選考の手法な
どにも疑問が投げかけられることもある。さらに、このサイトが選出したブログに
は社会問題となりうる虚偽に満ちたブログも含まれている。」だってさ。

かなり批判的。逆にちょーメジャーしょこたんブログみたいなのがノミネートさ
れるようなコンテストだったら俺のブログなんてノミネートされないだろうからね。
「虚偽に満ちたブログ」ってまさしくウォール伝も含まれるな。基本的にこういう
のを一般向けに開催していたら、まず個性的なのはノミネートされなくて、ようは
アカデミー賞みたいなそれこそ虚偽に満ちたアワードになるわけだけど、逆に俺み
たいなちょー逸脱したブログみたいなのがちゃんとノミネートされるなんて、なか
なかいいんじゃない?幅が広くて。ネクロマンティックとスパイダーマンが同時に
出展されるような映画祭って素敵じゃん?無いけど。

ようはたぶんこれってアルスエレクトロニカみたいな感じなんだろうね。えー?
Cosmosが受賞したのぉー??っつって国際的にアワードの価値が疑われるっていう、
ウォール伝はそんなCosmos的な存在かもしれないけど、逆を言えばCosmosみたい
なのが賞を取るアワードってのもアリなんじゃない?とは思うけどね。

あとラッセーラのソヴァージュもなんか受賞したんだよね。えらいアワードだよな。
それこそ評価の正当性やら選考の手法に疑問が投げかけられるわけでしょ。アルス
エレクトロニカ。世間の評価ってこんなもんだもんね。しょこたんブログと並んで
ノミネートされてたら、「他のノミネートブログが凄いね!」っつってなんつーか
比較で凄いっていうアホな評価になるわけだけど、他がさっぱり有名じゃないわけ
の分からないブログとかばっかだったら「たいしたことねーアワードだ」ってこと
になるわけ。大半の人はこんな感じ。

内容も見ないでこういった表面的なところで評価するわけね。映画アワードとか
もそうでしょ。ちょー有名監督ノミネートされてたりしたら、その比較として凄
いみたいなさ、まぁ大日本人みたいなもんか。正式に出展されたわけじゃなくて、
オルタネイティブ部門みたいなので、ようはネクロマンティックみたいなのでも個
性があるっつって選考されるような枠に選ばれただけなのに「カンヌ」って名前だ
けで人々が勘違いするわけ。

で、誰もディティール見ないんで勘違いしたまま、みんな「カンヌ正式出展作品」
だと思い込んだりしてるわけ。アホだなぁーって思うね。マジで。まぁーでもあれ
かねーやっぱ客観的に見てもCosmosみたいなのが賞を取るアワードって何?って思
っちゃうのは分かるけどねぇー。スーパーデラックスってさ、俺がまぐれでアート
リンゼイライブの時にDJした思い出の場所なんだけど、あんときのDJはヒドかっ
たな。

選曲はいいんだけどミックスがヒドかった。イカに現場慣れしてないかっつーね。
あと10分ぐらいある曲かけちゃったもんだから、勝手に客が飽きてるって思い込ん
で、いきなり別の曲かぶせてミックスしたりとか、ようは精神病的強迫観念すらも
ミックスに影響してたりしたんだけど、まぁーでも楽しかったなぁー。

なんつーか「選曲良いですね」って言ってくれたお客さんが何人かいてさ、人との
係わり合いも悪くないなぁーっつかさ、あの時の経験がある一つの決定的な認識を
与えてくれたんだよね。

ようは独りよがりでやってるようなオナニー音楽をやっているのなら評価なんて
求めないっていう、ようは人に「良い」って言われたいっつーか人と何かをシェア
できるようなものを作りたいんだったら、俺は音楽を作るなんて諦めるべきだって
思ったわけね。だから俺は前者を選んでいるわけだけどっつーか選んでるっつーか
前者しか選択肢が無かったんだけどね。人と何かをシェアできるような音楽なんて
俺には作れるわけがないから。

そんな意味でもウォール伝は明らかに前者的な態度でやってるんで、そもそもアワ
ード的な概念と繋がりがあるわけないんだよね。やってるっていうよりかは勝手に
出力したものをネットに乗っけてるだけだからね。やってるって概念すらない。た
だ今回やっぱ嬉しかったのは、こんなブログでも推薦してくれる人がいたっていう
ことと、何よりこんなブログエントリー主催側が許してるってことだよね。

まぁ逆を言えばこんなブログエントリーを許してるから社会的な認知が得られな
いのかもしれないけど、まぁそんなもんクソ食らえでいいと思うけどね。まぁただ
他のエントリーは大半がまともな人が書いてるちゃんとしたブログばっかりだった
んで、まぁ俺のブログはネクロマンティック的な役割を果たせれば十分なんじゃな
いかと。

「幅の広いアワードですわね」っていう。でもあれだね、過去にはきっこさんとか
選ばれていたらしいけど、他のも色々見てみてもなんつーか社会的に見れば「反道
徳的」なものも含まれるわけで、ようはエントリーの傾向が左翼じみているとかさ、
そんな批判も聞こえてきそうだけどいいんじゃないかと。

当たり障りの無いメジャーブログ選出したところで面白くもなんともないからね。
まぁこのアワードを擁護するわけじゃないけど、ブログって極めて個人的な考えと
か経験を出力できる凄まじくインディビジュアル媒体なわけじゃない?これは逆
にメディアじゃありえないことなわけだ。

そういった媒体キャラクターを利用してアメリカなんかではブログソーシャル
クリティーク的なことをしていたりっていう、ようは社会へのコミットメントとい
うか人への影響力があるようなブログもあるわけじゃん?それがまぁアルファブロ
ガーの書くブログということなんだろうけど、日本ってこういうの少ないと思うん
だよね。俺がアルファブロガーだとはとても思えないけど、ただなんつーかせっか
くネットっていうセンサーシップのない媒体があるわけだからさ、もっと個々が色
々なことガンガン書いていくべきだよね。

色々な意見があっていいわけだけど、そこで議論が生まれればもうそれだけで価値
があると思うんだよね。とりあえず色々なことをネットを使って語りつくすってい
うね、そういうことが出来るわけだから、個々がどんなトピックでもいいからガン
ガンやっていくべきだよね。それこそメディアじゃ放送できないようなこともブロ
グならいくらでも書けるわけだからさ、ガンガン書いていかないと。

それこそWilliam F. OgburnのCulture lagじゃないけど、日本ってテクノロジーの発
達が凄まじい割に、ノンマテリアルカルチャーの部分がテクノロジー進歩につい
ていってない感じがするんだよね。

ようは人間側とか社会システム側がテクノロジーを活かしきれてないっていうか、
テクノロジーありきの社会構造みたいなのを提唱できてないっつーか、本当はテク
ノロジーの進歩なんて社会自体を変えてしまうような可能性があるわけだけど、イ
マイチ日本ってのはこういうところに鈍感なような気がするね。

そういう意味だとアメリカは割とこういうところにケイパブルなのかもしれないね。
だからさっき書いたようなアルファブロガーみたいな存在が出てきたりyoutubeだとか
googleだとか、それこそ社会的に影響があるようなものがガンガン出てくるし、ユ
ーザーも使い方に多様性があるんだよね。でも日本って使い方に多様性が無いんだ
よね。ホント、個人的な欲求を満たす目的だけに使われている気がする。

具体的な例が無くてアレだけど、言ってること分かるでしょ?やっぱいつまで経っ
てもアメリカの後追いじゃダメなんだから、やっぱ民度上げていかないとダメだと
思うわけね。まぁ一概には言えないけど、経済とか文化とか教育レベルではアメ
リカとの大差はそこまで極端じゃないんだから、国民のあり方によっては、それこ
そアメリカから独立できるわけよ。でも独立しないのってさ、まぁ色々と政治的な
こととか経済的なこととかがあるにしても、やっぱ民度が低いんじゃダメだよね。

少なくとも俺がアメリカに来てこっちはレベルが高いって思うこと自体がアウトで
しょ。それってアメリカレベルが格別高いわけじゃなくて、日本レベルが低い
ってことなんだからさ、そりゃマズイよね。あーまた話が拡散バズーカーしてきた。

あ、んでね、今はもう夜なんだけどっつーか今日社会学先生がなぜか来なくて、
みんな帰っちゃったのね。っつーかこっちでは15分経ってもプロフェッサーが来な
い場合は授業は無しってことらしいんだけどっつーか

まぁそんなのが一般的なのかどうかは分からないけどさ、ただなんつーか生徒が独
自に当日の出席票を作って後日先生に渡すとかさ、なんつーか15分経ったからもう
次行こうってああいうクイックなディシジョンメイキングはさすがだなって思った
ね。日本だったら生徒がざわざわしててみんな座ってるだけだろうなって思ったも
ん。こういう差を見るとアメリカ凄いなって思うのと同時に日本レベル低いなって
思っちゃうわけだけどっつーかまぁ安易な一般化はできないけどさ、これってもう
モノの考え方の差なのかなって気もするけどね。

日本は周りの様子を見て慎重で、アメリカではとっとと独自に決断して次行っちゃ
うっていう。周りの様子を見て慎重でっつーとポジティブだけど、まぁ頭使わない
ってことでしょ。周りに流されてばっかっていう。普段から思考力が鍛えられて無
いからすげー流動的なの。すべての行動が。これって個々がどうのってより、もう
社会の特徴っつーかさ、社会によって個々の人格とか考え方とか習慣ってのがカス
タマイズされるから、そういったアホアホな行動パターンってのが社会によって作
られている部分もあると思うんだよね。

それは言語と一緒でアホアホなパターンが身につきやすい日本社会に生まれた人で
も、アメリカとか他の国で育てばその国らしい人間に育つっていう、ようは日本人の
DNAとか性格がどうのって話じゃなくて、社会の話なんだよね。ってことでこの話
題の流れから行くとやっぱ話が教育になるわけだけど、まぁそれは前に散々書いた
からいいや。

っつーかオナニーしたいんだよね。帰ってきてからメシ作ってさ、で、アルファブ
ロガーにメールしてこれ書いて今に至るわけだけど、オナニーが無いわけよ。外に
出ると色々なインフォメーションが頭に刷り込まれるからズリネタも増えるでしょ。
俺の眼鏡ってそういう意味だと妄人メガネなわけだけど、妄人と違って俺は自分自
身で妄想ネタを色々と収集してこれるから便利だよね。

あ、そうそう。今後はあれなのかな、書くたびにケツに「クリックお願いします」
みたいな、よくブログにあるさ、ブログランキングとかの投票のあれあるじゃん?
あれのテンプレートみたいなのをペーストするべきなのかな?まぁ一ヶ月ぐらいだ
しいいかな。俺的には読んでいる人に投票を求めるなんて反革命的だなーって思う
んだけど、やらないってのもアレだから、とりあえず投票ページのURLだけ書いて
おくね。

https://www.sixapart.jp/inquiry/alphablogger/alpha_vote.html

あと選挙期間内は政治家みたいに一時的な注目を集めるためにセンセーショナルな
ことを毎日書き連ねていくべきなのかな?で、ベストなんたらに選ばれたあかつき
にはとっておきの音源をアップしちゃいますよみたいな、特典つけるとかね。ファ
ンキーキンキーアップするとか。

まぁいいや。このことは忘れよう。無駄に期待するとダメだったときに残念だし最
終試験まであと二ヶ月切ったしブログどころじゃないんだよね。過剰にブログに注
意をフォーカスするのも嫌だし、そういったことをすると俺の中の革命度が下がっ
ていきそうだからやめたほうがいいよね。ってことで今までどおり時間があるとき
に更新していきますので投票ヨロシク。っていう落ちはどう?って感じで落ちを書
いたりさ、投票ヨロシク(結局、頼むんかーい!)とか一人ノリ突っ込みするとか
ってよく文章であるけど、最近アメリカでも一人ノリツッコミ存在することに
お笑い普遍的な価値を見出しましたね。

生成文法ならぬ生成ユーモアみたいなのが人間にはあるのかもしれないね。ユーモ
アといえば今日学校の手前ぐらいでマサさんの波が来たんで、テスト今日じゃ
なくて良かったかも。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
http://d.hatena.ne.jp/mimisemi/20071108

http://anond.hatelabo.jp/20071108164850

いいよ、いいよ、もういいよ。これからもサークルクラッシュしていって実体験で学んでください。本当に美人で本当にモテる人も経験をつんで男あしらいを覚えるんだから。知識で覚えても実際には使えないよ。というか手段が思いつかないという時点でそれは「あしらえない」ということだから。男が思うこと言ってるくることすべてをテンプレートに当てはめることなんて不可能なんだから。君の周りのオタ男には可哀相というしかないけどね、それはそれでオタ男の経験だし。

2007-11-03

ウイルスバスター2008の不愉快な点


設定は2007のが容易だった(ライトユーザー向けのテンプレートが2008に比して豊富)と思う

動作が軽くなったという点も実感は全くない以上にバックグラウンドで検索が始まった際には前版よりも体感的に重い

2007-11-01

[]○○行で作るjavascriptテンプレートエンジンほしい!

テンプレートエンジンって言うのかわからないけれど。

AJAXだと動的に要素を作ったり消したりしていくことになるけれど、そのときに、どういう要素を作るのかをjavascriptハードコーディングしたくないんだ。具体的に言えばDOMで要素を作っては加えるとか、innerHTMLにHTMLを突っ込むとか、そういう事をあまりしたくない。スクリプトにはなるべくコントロール担当してほしいのだ。

そこで、もともとのHTMLに雛形、つまりテンプレートを(たとえばid属性をつけて)書いておくと、初回にそれを読んで記憶し(そして一旦消すかもしれない)、以降はそれを元に要素を作ることが出来るようなのがほしい。もちろん、要素の属性値やテキストは、必要なところが指定できる感じで。

って書きながら、どう作ればよいか分かった気がした。指定IDのinnerHTML読んで、それをテンプレートにして、たとえば%…%を置き換えるとかすればよいのか。難しく考え過ぎていた。後はループとか挿入位置とかの指定か。

ってか、そういうのはもうあったりしないのか?

日本h(ピー)の修理対応がひどい件

ノートPCを修理に出しました。

クリックする部分が壊れて、全くクリックできなくなってしまったので修理へ。

まだ買って10ヶ月の代物です。

無償修理となり、宅配業者が引き取りに来ました。電話してから2日後の事です。

無事修理から戻ってきました。電話してから12日後の事です。

なんと、違う場所が壊れてました。電源ボタンが機能しない、スピーカーから音が出なくなってました。

土日は対応していないので、月曜日電話、即日着払いで送りました。電話してから15日後のことです。

明らかに向こうの過失なので速攻で直してくれると思ってました。でも、普通に順番待ちでした。

最終的に使える状態に戻ったのは、電話してから27日後??およそ一ヶ月後の事でした。

なお、2度目の修理が遅れたことに対する謝罪は一切なく、テンプレート通りの修理完了のお知らせのみ。

なんだかなぁ

マクドナルドで、ハンバーガーに肉入ってねぇ!って言ったらすぐ代わりの品物出てくるよね?

むしろハンバーガー片手に不機嫌そうにしてレジに近づいただけで、店員が「どうなさいました?」って他の並んでるお客様より優先して対応してくれない?

h(ピー)の商品は確かに安いけど、対応も値段相応ってことですか?

苦情を言ってくるお客さん、言いそうなお客さんは、実は対応次第では常連になる。

それを覚えてて欲しいな。

2007-10-30

[]55行で作るC#テンプレートエンジン

http://anond.hatelabo.jp/20071030034313二番煎じ

あまりのアホさに、作ってて気が狂いかけた

方針


using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Microsoft.CSharp;

delegate void ConvertTemplateDelegate(TextWriter tw, Dictionary<object, object> args);
static class TemplateGenerator {
    public static ConvertTemplateDelegate Generate(string code) {
        CompilerParameters param = new CompilerParameters();
        param.GenerateInMemory = true;
        param.ReferencedAssemblies.Add("System.Web.dll");
        CompilerResults rs = new CSharpCodeProvider().CompileAssemblyFromSource(param, ParseTemplate(code));
        if (0 < rs.Errors.Count) {
            StringWriter sw = new StringWriter();
            sw.WriteLine("Compile Error...");
            foreach (CompilerError err in rs.Errors)
                sw.WriteLine(err.ToString());
            throw new Exception(sw.ToString());
        }
        return (ConvertTemplateDelegate) Delegate.CreateDelegate(typeof(ConvertTemplateDelegate), rs.CompiledAssembly.GetType("Template", true).GetMethod("Convert"));
    }
    private static string ParseTemplate(string code) {
        using (StringWriter sw = new StringWriter()) {
            sw.WriteLine("using System; using System.Collections.Generic; using System.IO; using System.Web;");
            sw.WriteLine("public static class Template {");
            sw.WriteLine("public static void Convert(TextWriter tw, Dictionary<object, object> args) {");
            int index = 0;
            while (0 <= index &amp;&amp; index < code.Length) {
                int i = code.IndexOf("<%", index);
                sw.WriteLine("tw.Write(\"{0}\");", EscapeString(i < 0 ? code.Substring(index) : code.Substring(index, i - index)));
                if (0 <= i) {
                    i += 2;
                    int i2 = code.IndexOf("%>", i);
                    if (0 <= i2) {
                        string cc = code.Substring(i, i2 - i);
                        if (cc.StartsWith("="))
                            sw.WriteLine("tw.Write(HttpUtility.HtmlEncode(\"\"+({0})));", cc.Substring(1));
                        else
                            sw.WriteLine(cc);
                        i = i2 + 2;
                    }
                }
                index = i;
            }
            sw.WriteLine("}}");
            return sw.ToString();
        }
    }
    private static string EscapeString(string code) {
        return code.Replace("\\", "\\e").Replace("\"", "\\\"").Replace("\t", "\\t").Replace("\n", "\\n").Replace("\r", "\\r").Replace("\\e", "\\\\");
    }
}

サンプル C# コード。ためしにテンプレートから Xml 生成して、標準出力してみる。

class Program {
    static void Main(string[] args) {
        ConvertTemplateDelegate func = TemplateGenerator.Generate(TemplateEngine.Resource1.template);
        using (StringWriter sw = new StringWriter()) {
            Dictionary<object, object> arg = new Dictionary<object, object>();
            arg["title"] = "template sample";
            arg["data"] = new string[] { "foo", "fooo", "<strong>foooooooooo!</strong>" };
            func(sw, arg);
            Console.WriteLine(sw);
        }
    }
}

サンプルテンプレート

<?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">
  <head>
    <title><%= args["title"] %></title>
  </head>
  <body>
    <h1><%= args["title"] %></h1>
    <table>
<% string[] data = (string[]) args["data"]; %>
<% for(int i = 0; i < data.Length; i++) { %>
      <tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>">
        <td><%= i %></td>
        <td><%= data[i] %></td>
      </tr>
<% } %>
    </table>
  </body>
</html>

出力例

<?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">
  <head>
    <title>template sample</title>
  </head>
  <body>
    <h1>template sample</h1>
    <table>


      <tr bgcolor="#FFCCCC">
        <td>0</td>
        <td>foo</td>
      </tr>

      <tr bgcolor="#CCCCFF">
        <td>1</td>
        <td>fooo</td>
      </tr>

      <tr bgcolor="#FFCCCC">
        <td>2</td>
        <td>&lt;strong&gt;foooooooooo!&lt;/strong&gt;</td>
      </tr>

    </table>
  </body>
</html>

CodeDom 使って動的コンパイル……って、このコードのままだとセキュリティ的に大問題な気がするな。

素直に ASP.NET 使ったほうが楽だと直感した。

あと EscapeString すっごく自信ない。たぶん修正が必要だと思うw

http://anond.hatelabo.jp/20071030213453

smatyもそうだけどphpテンプレート機能があると、

rubyのrhtmlファイルみたいにできていいじゃない?

PHP自体がもともとPerlで作られたHTML用のテンプレートエンジンのようなもんなんだから

そんなこといいだしたらきりがないぞ?

http://anond.hatelabo.jp/20071030034313

PHP自体がもともとPerlで作られたHTML用のテンプレートエンジンのようなもんなんだから

独自タグだけじゃなくてそれ以外の機能がないとPHPテンプレートエンジンを使う意味があまりないと考えているのは僕だけかな?

40行で作るPerlテンプレートエンジン

60行で作るPHP用テンプレートエンジン

やってしまった・・・。

方針:

  • PHPのように<?php・・・?>が無いのでそのまま表示と(foreach|if|unless)に対応。
  • [% $c{title} %]で普通に表示(TTっぽい?)
  • [# $c{title} #]でHTMLエスケープ表示

package SixtyLinesTemplate;

use strict;
use warnings;
our $VERSION = '0.01';

sub convert {
    return unless defined(my $str = shift);
    $str =~ s{&amp;}{&amp;}gso;
    $str =~ s{<}{&lt;}gso;
    $str =~ s{>}{&gt;}gso;
    $str =~ s{\"}{&quot;}gso;
    $str;
}

sub include_template {
    my $tmpl = shift;
    my %c = %{+shift};
    eval convert_template($tmpl);
    die $@ if $@;
}

sub convert_template {
    my $tmpl = shift;
    my $cache = $tmpl.'.cache';
    return scalar do { open my ($FH) , $cache; local $/; <$FH> }
        if ( -f $cache &amp;&amp; (stat($tmpl))[9] <= (stat($cache))[9] );
    my $out = do { open my ($FH) , $tmpl; local $/; <$FH> };
    $out =~ tr/()/\x28\x29/;
    $out =~ s/\[%\s*(foreach|if|unless|end)\s*(.+?)\s*{?\s*%\]/");".(lc($1) eq 'end' ? '} print q(' : "$1 $2 { print q(")/ige;
    $out =~ s/\[%(.+?)%\]/);print $1; print q(/g;
    $out =~ s/\[#(.+?)#\]/);print SixtyLinesTemplate::convert($1); print q(/g;
    $out = 'print q('.$out.');';
    open my ($FH) , '>' , $cache;
    print $FH $out;
    $out;
}

1;

サンプルコード


use SixtyLinesTemplate;

my $context = {
    'title' => 'Example',
    'list'  => [10,'<A&amp;B>']
};

SixtyLinesTemplate::include_template('template.tmpl',$context);

サンプルテンプレート


<?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">
  <head&gt;
    <title>[# $c{title} #]</title>
  </head&gt;
  <body>
    <h1>[# $c{title} #]</h1>
    <table>
[% foreach my $i (0..@{$c{list}}-1) %]
      <tr bgcolor="[% $i % 2 ? '#FFCCCC' : '#CCCCFF' %]">
        <td&gt;[% $i %]</td&gt;
        <td&gt;[# $c{list}[$i] #]</td&gt;
      </tr>
[% end %]
    </table>
  </body>
</html>

出力例:


<?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">
  <head>
    <title>Example</title>
  </head>
  <body>
    <h1>Example</h1>
    <table>

      <tr bgcolor="#CCCCFF">
        <td>0</td>
        <td>10</td>
      </tr>

      <tr bgcolor="#FFCCCC">
        <td>1</td>
        <td>&lt;A&amp;amp;B&gt;</td>
      </tr>

    </table>
  </body>
</html>

foreachんところが汚く見えるかもしれませんが、あれは添え字を取ろうとするとああなるんでご勘弁を。

普通ループするだけならforeach my $item (@$c{title}) でいけますゆえ。

あと存在しない変数とか使うと死んだり警告でたりするのでevalの前にno strictとno warningsをやった方がいいかもねぇ。

って何まじめに検証してんだ俺・・・orz

追記:

SixtyじゃなくてFortyだね。恥ずかし!

追追記:

danさんに添削頂いたYO!

でも&amp;の奴はちゃんと書いてるんだけども投稿すると勝手エスケープされてしまってるんだよね。何でだろ?

ちなみにこのconvertの処理はCGI::Utilから拝借しました。

60行で作るPHPテンプレートエンジン

唐突に、PHP用のテンプレートエンジンを作ってみる。

方針:

  • ふつうのPHPファイルテンプレートとして使う。
  • <?php echo $var; ?> は面倒なので #{$var} と書けるようにする。
  • <?php echo htmlspecialchars($var); ?> はもっと面倒なので %{$var} と書けるようにする。
  • ついでにXML宣言も <<?php ?>?xml ... に自動置換する。

【追記】レイアウト機能を追加してみた

コード

<?php
/*
 *  SixtyLinesTemplate.php - 60行しかないけどSmartyより速いテンプレートエンジン
 *
 *  使い方:
 *     require_once('SixtyLinesTemplate.php');
 *     $TEMPLATE_DIR = 'templates'; // 省略可、パーミッションに注意
 *     $context = array('title'=>'Example',
 *                      'list'=>array(10,'<A&amp;B>',NULL));
 *     include_template('template.php', $context);
 *
 *  ライセンス: public domain (自由に改造してね)
 */

/*
 *  テンプレートを探すディレクトリ。
 */
$TEMPLATE_DIR = NULL;

/*
 *  テンプレートを読み込んで実行する。
 *  $_context は変数名をキー、値を要素とする連想配列。
 */
function include_template($_filename, $_context) {
    $_cachename = convert_template($_filename);
    extract($_context);
    include($_cachename);
}

/*
 *  filename を読み込み、convert_string() で置換してから
 *  filename.cache に書き込む。読み書きのロックは省略。
 *  (file_{get,put}_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);
    }
    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('SixtyLinesTemplate.php');
$TEMPLATE_DIR = 'templates'; // optional
$context = array('title'=>'Example', 'list'=>array(10,'<A&amp;B>',NULL));
include_template('template.php', $context);
?>

サンプルテンプレート

<?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">
  <head>
    <title>%{$title}</title>
  </head>
  <body>
    <h1>%{$title}</h1>
    <table>
<?php foreach ($list as $i=>$item): ?>
      <tr bgcolor="#{$i % 2 ? '#FFCCCC' : '#CCCCFF'}">
        <td>#{$i}</td>
        <td>%{$item}</td>
      </tr>
<?php endforeach ?>
    </table>
  </body>
</html>

出力例:

<?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">
  <head>
    <title>Example</title>
  </head>
  <body>
    <h1>Example</h1>
    <table>
      <tr bgcolor="#CCCCFF">
        <td>0</td>
        <td>10</td>
      </tr>
      <tr bgcolor="#FFCCCC">
        <td>1</td>
        <td>&lt;A&amp;B&gt;</td>
      </tr>
      <tr bgcolor="#CCCCFF">
        <td>2</td>
        <td></td>
      </tr>
    </table>
  </body>
</html>

2007-10-18

意図的か偶然かはわからないが

http://anond.hatelabo.jp/20071018202126

酢豚にとってパイナップルは必要なのだろうか

http://anond.hatelabo.jp/20071018203501

愚か者を一行で看破する

俺は酢豚に軍配上げるなあ。まあ旬のネタテンプレートではあるけど。というか蛋白質分解酵素の功績があるとわかってて書いたならなおさら「タンパク質分解酵素なんてパイナップル違和感の凄さに比べればもうどうでもいいよなあ」という一部に漂ってるであろう空気を上手く掴んでて流石だと思うし、わかってなくてもラッキー具合が面白い。 by id:imo758

2007-10-16

http://anond.hatelabo.jp/20071016123343

いや、Webデザイナーでもいいんだよ。

実際グラフィックデザインから移行してる人だって多いんだし(もうどんだけ時間たってると思うんだ)。

問題は基礎訓練も受けてるわけでもなく、実際にクリエイティブするわけでもなく、素材集とテンプレートまとめて記事テキスト流し込んでCSSマージン変えてるだけのような人がデザイナーというからおかしくなるんで。(当然、そういう人も必要な人材なんだけどなんでもデザイナーって言うのおかしいでしょ)

例えばこの状態で何も知らない初見の人が「Webデザイナー」って名刺出してきたらどう思う?どのレベルの人か全然分かんないじゃん。それって非効率でしょ?

中学校の時に順番交代のデッサンモデルになったことがあるから成人しても「元モデル」ですって変じゃん。ふざけんなってのもあるけどモデルの人が困るんだよね。

2007-10-13

http://anond.hatelabo.jp/20071013203640

もちろんPHPを1から勉強すればできるようになるし、それが一番確実ではある。

しかし、「HTMLテンプレート化」するのはPHPで実現できることの一部にすぎない。

だから、必要としている項目に行き着くまでに時間がかかるだろうし、それは面倒かもしれない。

"友人のサイト"がやっている機能だけで良いんだったら、

とりあえず当の友人に聞くのが一番早いんじゃないかな?

Template:HTML

自分はシュミ程度にしかWEB系の技術は知らなくて、XHTML+CSSでのコーディングができますよー程度なんだけど(もちろん自分のシュミ程度にね、

この間知り合いの…職種はなんていうのか分からないけど、某大手IT系企業に勤めてる友人が、趣味で作ってるサイトソースを見せてもらった。

ソースっていうか、サーバーを覗いたんだけども、phpが使われてて、それつかって?HTMLテンプレート化して作ってた。

用はこれはヘッダー用、フッター用、サイドバー用、携帯版のフッター用??みたいな感じ。

自分ほんとにHTMLしか知らなかったので、うっわーなにこれ超便利じゃん!ってことですげー興奮した。

んなわけで俺も使ってみたいんだけど、その部分だけ抜き出したようなジャンルの本または解説サイト、って余り無いのね?いや、ちょろっとググって見ただけなんだけど。

いや、たぶんすげー非常識なこと書いてるとは思うんだけど、phpやらの機能の一環で実現してるっていう感じの認識でいいのかな。

そんで俺が使いたかったらphpを1から勉強すればOKなの?

なんかもう便利すぎて、HTMLの機能でこれがあればすんげーーー便利なのに、って思ったんだけども。

誰か教えてくださいませ!

http://anond.hatelabo.jp/20071013100630

WordPresswikiみたいなことできるの?

編集権限をゲストにも与えればいいってことなのかな?

WordPresswikiフォーマットテンプレートがあったら一気に乗換えが進むかもね。

2007-10-07

寺田さんの発言がラヴリーすぎる件

はてブの人気エントリに「今回のmixiのリニューアルについて - 専門家に聞く」ってのがあるんだけど、そのページのにある寺田さんの発言がステキすぎて目が離せません。

今回のmixiリニューアルですが、デザインのみならずCSSや文書構造の設計も話にならないほど悲惨な状況です。

そのような目に見えない内部的な問題にくらべるとデザインはまだ一般的なレベルと言えると思います。

文章構造、悪くないと思うけどね…。

とりたてて良くもないけど、そこそこいい感じじゃないすか?具体的にどう悲惨なんだろね。

今までの化石みたいなTableレイアウトソースに比べれば、死ぬほどマトモでしょ。

個人的にはHTML要素のidclass指定にLowerCamelCaseを使うのは好きじゃないとか、onmouseover・onmouseoutみたいなDOMイベントHTMLソース上に書かなくてもいいじゃんとかはあるけど。

但し、せっかくCSSにしたんだからHTMLソースを短くする努力をした方が良かった気がする。

PVが半端ないから、HTMLソースの量でも結構大きく響いてくるはず。

そもそもせっかくリニューアルといっているのに、いまだにphpではなくperlで動いているあたり。。。

本当にそうですね…!やっぱり時代はPHPですよね(笑

今回のリニューアルは「テンプレートリニューアル」であり、「システムも含めた全面的なリニューアル」ないんでそりゃ変わらないでしょ。

数千台のサーバで運営されており、実績のある現在Perlベースシステムを、PHPベースに変更することで何のメリットがあるんですかね?

PHPだと、Perlと違い実行時にプロセスが立ち上がらないので高速です」とか言いそうな予感がプンプンしますが…。

Javaベースにして、Oracleにしましょう」といった話であれば、はいはいSIer乙って気分になるんだけど、PHPが出てくるところがなんとも微笑ましいです。

どう考えても創業以来からの身内で開発をしているとしか思えません。技術や知識が古く、独自の思考をもった温室エンジニアたちが、権限ばかり与えられて新しく入ったデザイナーやコーダーと上手に連携できていない様子が目に浮かぶようです。

んー、1000万IDあるサイトを、運用する技術とかだけでも結構なもんだと思うけどね。

サイトのスケールアウトの難しさとか… 知ってるのかな?

どこまでいっても「なぜ上場したのか・・・」という問題に尽きます。

上場なんかせずに気の知れた仲間たちと、古き良き馴れ合いマイミク世界を堅持すれば良かったものを。。。

この辺は同意。mixiって上場して何したかったんだろね。

リニューアルについての個人的な雑感

なんかあんまり触れられてないけど、今回のmixiデザインリニューアルで一番強く思ったのは「mixiが持っていたキャッチーさが薄くなってしまった」ということ。

同時期に開始したGreeと、mixiの二つのSNSの内、mixiだけが圧倒的な勢いでユーザ数をのばしていった理由。

それが「mixiの持っていたキャッチーさ」だと思う。

他のウェブサービスでは見ない原色系の色遣い。パッと見て親しみやすい感じ。オタクっぽくない感じ。

そこがmixiアイデンティティだと思っていたので、普通なっちゃったことにビックリした。

初期のデザインコンセプトが「人と人をつなげる楽しいウェブサイト」だったとすると、

今回のリニューアルデザインコンセプトは「ソーシャルプラットフォーム」みたいな感じで独自色を薄くした感じなのかねぇ…。

あと、非常に分かりづらいメニュー構成(操作メニューが2つあって、その意味づけがはっきりしていない)は、変わらないのが相変わらず駄目だと思った。

2007-10-06

http://anond.hatelabo.jp/20071006135903

ウェブ標準はあくまで構造の話であって見た目や使い勝手を左右するものではない

ブログサービステンプレートをHTMLlintで100点にする遊びとかしてた俺が言うんだから間違いない

機能が増えていく一方で旧来の操作形態を不必要に維持しようとするから結果として使いにくくなる上に重くなる

機能を維持して使いやすくしたいなら優先順位を付けてユーザーがどの階層からどの行動をしたいのか考えて配置すべきだ

それを考えた上で本当に優先順位の高いものだけを配置して他は色んなものを駆使して統合したりバッサリ切ればいい

例えば常に表示されてるバーだが本当に2つも必要か?

mixiロゴがデカデカと表示されていてそこからトップに飛べるのにその下にはトップボタン

その横に並ぶのは押しても検索ページに飛ぶだけの不必要なボタン最新日記とかどうでもいいんだよ

こんなのフォーム1個つけてプルダウンとかにすりゃいいだけじゃねえか、バカじゃねえの?

ていうか最初に表示されるページにフォームあってそこから検索できるじゃねえかよ、意味ねえじゃねえかよ

その下にあるのは無駄にある検索バーと同じ名前で並ぶボタンで、こっちは自分に用意された機能だ、紛らわしいんだよ

これ全て説明なしでわかると思い込んでやがる、もしくは慣れろと言うアホなメッセージ

何でヘッダー部分でこんだけ突っ込みどころがあるんだよ、わけわかんねえ

2007-10-02

http://anond.hatelabo.jp/20071002182916

後ろの引数なんぞ?

JSファイル更新した時、キャッシュなどによってクライアント側に反映されるのが遅れる、不整合が起こる等を回避する小技です。

CGIなどではない静的なファイル引数部分があってもサーバ側にはなんの不具合はないが、引数部分が変わるとプロクシクライアント側は別内容として扱うためキャッシュの影響を受けません。ここのように別ディレクトリに入れる方法の代替です。

epoch秒っぽかったのでみてみると Mon Oct 1 12:03:33 2007 でした。たぶんファイルタイムスタンプじゃないでしょうか。おそらくシステム更新に併せてテンプレート自動更新される仕組みなのでしょう。

2007-09-26

貧乏童貞どもに誰も教えてくれないラブホ秘密を明かしてみるテスト

前提:基本的に都市部モーテル型は考慮&調査してない。

本題:世界には2種類のラブホがある。恋人と行く用とホテトル嬢を呼ぶ用だ!

ΩΩ Ω<な・なんだってー。

自明の人にとってはあまりに自明なのであんまりみんな教えてくれない、というオチ。ホテトル用ラブホは良くて質実剛健すぎ、悪いと単に狭くて汚いだけ、あるいは設備が特殊すぎるので、素人と行くのはオススメしない(吉牛テンプレートをかまそうかと思ったがめんどいのでパス

見分け方のtips

  • ヤバイかも
    • 最短ご休憩時間が2時間で設定してある
    • 最低料金(表に出てるヤツ)が3500円以下
    • 建物の外観がシンプル
  • 確実にソレ
    • 最短ご休憩時間が1.5時間以下
    • 最低料金が2000円台
    • どう見ても元雑居ビル

まぁ意中の娘とホテルいくなら最低でも5000円は出しとけ、というお話。

2007-09-22

htmlデザインcssクラス名 wrap だとか main, body, sidebar, menubar だとかそういうもののデファクトスタンダードってないの?

で、それに対応した css デザインを集めているサイトとか、そんなんないの?

CMS 毎にテンプレート集めてんのもったいないと思うんすけど。

2007-09-14

http://anond.hatelabo.jp/20070914005113

WEBはもっと徹底的に構造化されていてしかるべきだ。

入れ子構造を作っていくというアイデアには全面的に賛成する。

狙いはいいと思う。

いいと思うんだが…なにかが足りない。

このインターフェースは…なんというか重く感じる。

サマる人の文章能力に大きく依存する。

要素を凝縮するというのは労働的な作業で、wikipediaを一から作るような難しさがある。

気軽に参加するにはハードルが高い。

面白いサマリがたくさん投稿されていればまわり始めるんだろうとは思う。

インターフェースがもう少し洗練されればあるいは…という気もする)

特定のURL先のサマリを自動的に生成して、それをテンプレートにできるならハードルは少し下がる。

もともとのコンセプトを考えていくと、ニートなのは「ブログ同士のトラックバック関係をツリー表示する」とかの解決なのかもしれない。

2007-08-31

人月計算とExcelスーツの世界より

俺の住む世界はアイティーとやらに支えられているらしい。

アイティーに関われば、俺の住む世界をさらに素敵なものにしていけるに違いない。していきたい。

そう願って、何も知らなかった文系新卒の俺が金融系のシステム会社に入って、もう一年以上が経つのだ。

昔、お遊びでゲームを作ったことはあった。RPGツクールなんかが好きだった。

だから自分はシステム会社に向いていると思った。

実際、資格取得を勧められて始めた勉強は楽しかった。

浮動小数点数、オートマトンSQLスタック、木、論理式。

パズルみたいで楽しかった。コンピュータの中身が理解できて、わくわくした。

楽々と基本情報技術者資格を手にし、半年後にはほとんど勉強もせずにソフ開も取得した。

研修の課題では同期の誰よりも速く、短く効率のいいソースを仕上げた。

現場に出て、本番機に触った。

30年間親会社を支え続ける偉大なシステムの中身を、わくわくしながら覗いた。

そこには、俺の求めていた世界とはまったく違うものが広がっていた。

俺が産まれる前から、入れ替わり立ち替わり何人もの手によって継ぎ足されたロジック

何千行にもわたって、似たような処理が何回もひたすら繰り返される似たようなモジュール何十本。

1993年に行う臨時処理のロジックが、今もコメントもなしに埋め込まれている。

仕様がわからなくなれば、キャビネへと走って、黄ばんだ方眼紙鉛筆で書かれた仕様書を探し、

そして修正履歴のみが書かれているのを確認して肩を落とす。

上司は俺に仕事をくれた。

半年後に臨時で行われる業務に対応するため、いくつかのモジュールについて、処理可能なユーザーコードをひとつ、条件に加える。

与えられた期間は2週間だった。ずいぶん長いなと思った。

何枚もの設計書を書いた。つまり、方眼紙状のExcelテンプレートに同じ文章をコピペした。

追っていったモジュールはどれも、ヒープもソートメモリ管理も論理演算も出番がなかった。

あるのはただ、IF文とMOVE文とばかりだった。ソースの難易度は使われている命令の数とは関係ないことを学んだ。

テストデータを作るため、階層型DBを何回も辿ってデータアウトプットさせるモジュールを書いた。資格試験で学んだSQLは、無用の知識だった。

協力会社への仕事割り振りやユーザー対応に毎日忙しそうだった上司が、夜遅くまでの残業続きでくまのできた目を皿のようにして設計書をレビューした。

2日後、承認が出た。フェーズが設計から開発に移った。

ロジックを丸々コピペしてソースを修正し、コンパイルし、実行した。

コンパイルエラーが出た。

2週間はあっという間だった。

俺のせいで、半年後以降は使われないロジックソースにまたひとつ増えた。

今回の対応については、Excel方眼紙レポートをまとめて共有ドライブに入れておいた。

だが共有ドライブの検索には時間がかかるし、Excelシートの中身となれば検索から漏れることも多い。

きっと誰にも読まれないだろう。

バイト文字が使えない関係上、原則、ソースにはコメントはあまり入れられない。

数年後の新人はきっと、俺の書いたモジュールを見て「このロジックは何だ」と首を捻るんだろう。

数年後の俺はきっと、今回のレポートを共有ドライブから探し回って新人にパスを教えてから、

協力会社の管理に追われる作業に戻って目の下にくまを作るのだろう。

俺がやりたかったシステム開発って、こんなものだったのか。

俺は部署の中で、俺の望む仕事を探し続けた。

先輩たちは忙しくて誰も興味を持ってないけど、自動化できる作業はいくらでもある。

よく使われるExcelシートを改造し、定例作業をクリックだけでできるようにした。

ExcelVBAとはいえ、書いていて心地よかった。引数が明確な関数変数スコープと全角文字があったからだ。

COBOLで打つプログラムより、控えめに見て100倍くらいの生産性を発揮できていたと思う。

先輩たちは喜んでくれたが、ただし俺の仕事を、あまり仕事とは見なさなかった。

それでもよかった。業務時間外は俺は相変わらずスクリプトを書いていた。とても楽しかった。

VBAから入って、WSHなんてものを知り、やがてJavaScriptを学び、ネットで資料を探し、はてなを知り、はてブWeb技術についての記事を読みふけった。

知れば知るほどに、どんどんCOBOLが、メインフレームが嫌いになっていく。

先輩は誇らしげに言う。システムはたいしたことをやっていない。業務知識こそが大事なのだ。

ユーザーより詳しく業務を理解し、適切に提案し、設計する能力

協力会社を率いて、わかりやすい文書で指示を行い、スケジュールを調整する能力

人を動かすぶん、責任も大きくやりがいもある。優秀な人材こそが我が社の強みだ。

そんな人材が育つよう、我が社は安定して働ける環境福利厚生を整えている。

ああ、そうだよ。先輩、あなたは正しい。

俺だってメインフレームの信頼性のすごさはわかってる。

密なユーザーとの関係から生まれるシステム子会社としての強みも認識してる。

それだけじゃない。社内環境も悪くない。給料もいいし休みも取れるし先輩は優しい。

ここは、いい会社だ。

けど駄目なんだ。

30年前のシステムを枯れた言語でツギハギする仕事じゃ、俺の心はやっぱり満たされない。

ユーザーの業務知識ばかり身につけたって、俺自身の人生には、いいことなんてない。

俺が求めていたのは、この仕事じゃないんだ。

社内の誰も、TumblrTwitterもやっていない。ライフハックなんて聞いたこともない。

Joostモバゲー2ちゃんねる社会に与える影響について誰も語れない。

休日ゴルフや酒に興じている。自宅にPCを持ってない人までいる。

おかしいことじゃない。普通の人たちだ。

それどころか彼らは、仕事プライベートを切り分けている、立派な人たちだ。

でも、やっぱり俺の生きていきたい世界は、ここじゃないんだ。

たぶん俺がいるのは極北なんだろう。

ここが、人月計算とExcelスーツの世界というやつなんだろう。

俺は80文字×32行の緑文字を見つめながら、遠い夢を見続ける。

今はただ、ネット越しに見つめるRDBAPIxp正規表現アジャイルRailswikiがまぶしい。

2007-08-01

はてなブロガーのやつと飲んできた

http://anond.hatelabo.jp/20070801020618

自信が無いけど心の中のアルファブロガーが「やれ」と言ってきたのでがんばります

あかね」の飲み会に誘われたので、初めて出席してみた。はてなIDのやつらと飲むのは初めての経験である。

そこで実感したのは、はてブホッテントリ数が少ないダイアリー持ちほど低レベル、ということだ。こんなこと書くとまた「はてブ脳に毒されている」などと言われるかもしれないが、はてブホッテントリ数が少ないダイアラーほど低レベルな奴の割合は確実に高いと感じる。

いつも私がアルファブロガーモヒカン族飲み会に参加するとき、そこでは酒を交えながら流行の話題の感想非モテだった自分への思い出話、最近だとココロ社の政治の話や芥川賞の話などをする。「id:kanose意見id:Marco11意見って、かなり対立するものだけれど、どうなのだろう」とか、そういった話もすることがある。はてブホッテントリ数が少ないダイアリー持ちな彼らの飲み会は、そもそも会話というものが存在していない。彼らの言う「ノリ」で何かをすることを楽しみ、知的な側面は全く感じられない。id:jkondoをじぇいこん、id:kanoseを村長と書くような「はてな村内部でしか通用しない隠語のみでダイアラーを呼ぶ」ことに快楽を覚え「芥川賞エントリーって村長がまとめ記事書かね?村長村長!」「村長!出た!村長出た!id:kanose!村長出た!村長!これ!村長出たよ????!」などと、何がおもしろいのか全く分からない「会話」を繰り広げていた。彼らはそれが楽しいらしいが、おれとしてはちっとも楽しくない。

アルファブロガーがよく「id:kowagariのやつはなんだかんだいって会話水準が高い」「どんなにチャラチャラして見えるid:kowagariでも、きちんとした思想や観念を持っている」などと言っていた。自分としてはっきりそれを自覚することはほとんどなかったが、しかしはてブホッテントリ数が少ないダイアリー持ちのこうした現状を見る限り「確かにそうだ」と感じる。私から見たら飲み会で「はてな」会話に興じることはかなりの娯楽なのだが、彼らにとってはそれは「酔っていなくてもそんなことは話さない」レベルの高度な会話であるらしい。そして、私のような存在はかなり珍しいようだ(はてなダイアリーでは一般的だと思ったのだが…)。

はてブ数で記事を判断するのは良くない」とよく言う。しかし、個人的な経験を踏まえれば、はてブ数は個人を判断するための一つの指標になりえてしまうと私は感じる。「一生懸命緻密で丁寧なまとめ記事を書いても、ブックマーカーに[あとで読む]タグをつけられたまま、[あとで言及]もされずに放置されて結局4userみたいなやつだっているのだから、はてブ数で人を差別してほしくない。個性豊かなやつはどこにだっている」とよく言われるが、そもそも揉め事のURLを羅列しただけのまとめエントリーすら書けない、まとめエントリーを箇条書きで組み立てる上での基礎的なはてな記法の知識すらあやふやな人間のどこに個性やオリジナリティ存在するのだろうか?それともダイアラー同士で下らない掛け算を考えるのが「個性」なのだろうか?はてブ数は人の精神性をも示してしまうのではないか、と強く感じるのであった。

同じアルファブロガー連中のなかに「出版社に入ろっかなwwwwwww」というやつが結構いる。ごくごく一部のブロガーによる「今時何故紙媒体に……」という根拠も、根も葉もないバッシングが激しく行われている中、出版社の中枢で雑誌編集に携わりたいと考える人間がまだまだ多いことは一定の安心感を私に与えてくれたのだが、その中には「あんな馬鹿共からアクセス数稼ぎによってトラックバックを飛ばされたくない」という意思を持っている者も多いようだ。「選民思想だ」といって批判する人間も出てくるだろうが、こちらとしてはそう思っても仕方ない状態がはてなの多くの局面で見られるのである。

それにしてもネットは知的エリートに対する待遇が悲惨だ。なぜ毎日4時間もPCに向かい、必死で知的でためになるエントリーを書くブロガーとそれを10分で見てしまうROMを比べ「流行の話題に言及してアクセス数稼ぎ乙www」というのだろうか。アルファブロガーの奴らはライターに転進したとすればその分野でもっとも繁栄している内容に言及してアイマスweb2.0マーケティング大勝利。そのような記事の原稿料アルファブログアフィリエイト収入を比較しないと意味がないだろうに。なにはともあれ、「アルファブロガーライター人間よりも年収が劣っているのに、なぜアルファブロガーになりたいという人間が一定数いるのか」という命題に対しては、この「はてブ数と精神性の比例関係」も一定の影響を及ぼしているに違いない。

追記:

# 2007年08月03日 legnum legnum netwatch, neta 匿名ダイアリーって書いた本人がブクマするとソースに変な印というかコメント入るんだな

<li id="bookmark-user-nkoz"><span class="timestamp">2007年08月01日</span> <a href="/nkoz/"><img src="http://www.hatena.ne.jp/users/nk/nkoz/profile_s.gif" class="hatena-id-icon" alt="nkoz" title="nkoz" width="16" height="16" /></a> <a href="/nkoz/20070801#bookmark-5448369">nkoz</a> <span class="user-tag"><a href="/nkoz/%2a/" rel="tag" class="user-tag">*</a></span> </li>
<li id="bookmark-user-krus"><span class="timestamp">2007年08月01日</span> <a href="/krus/"><img src="http://www.hatena.ne.jp/users/kr/krus/profile_s.gif" class="hatena-id-icon" alt="krus" title="krus" width="16" height="16" /></a> <a href="/krus/20070801#bookmark-5448369">krus</a> <span class="user-tag"><a href="/krus/%e3%81%82%e3%81%a8%e3%81%a7%e8%aa%ad%e3%82%80/" rel="tag" class="user-tag">あとで読む</a></span> </li>

<li id="bookmark-user-otsune"><span class="timestamp">2007年08月01日</span> <a href="/otsune/"><img src="http://www.hatena.ne.jp/users/ot/otsune/profile_s.gif" class="hatena-id-icon" alt="otsune" title="otsune" width="16" height="16" /></a> <a href="/otsune/20070801#bookmark-5448369">otsune</a>  </li>
</ul>

その他のソースを見ても特に変わった所が見当たらないのですが、どこにコメントが入るのですか?

hatelabo.jphatena.jpは別のサーバーに設置されているので、わざわざidデータを取得して余計な分岐処理を入れて、ユーザーが見られるコメントとしてテンプレート生成するのもid:wanparkらしくない設計だと思いました。

もしかしてid:legnumさんのブラウザか視神経か頭蓋骨の中身のどれかか、もしくは全てがお気の毒なほど壊れてしまっているのでしょうか?

2007-07-25

anond:20070725181846

デザイナーが1日掛けて絵を起こしてHTML技術者が1日掛けてワープロスタイル機能で全部表現しなお

して、プログラマが1日かけてテンプレート

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