<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/hideologie/">
    <title>hideologie @ ウィキ</title>
    <link>http://w.atwiki.jp/hideologie/</link>
    <atom:link href="https://w.atwiki.jp/hideologie/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>hideologie @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2007-05-30T03:18:44+09:00</dc:date>
    <utime>1180462724</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/hideologie/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hideologie/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hideologie/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hideologie/pages/3.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/hideologie/pages/5.html">
    <title>SCM/CVS</title>
    <link>https://w.atwiki.jp/hideologie/pages/5.html</link>
    <description>
      歴史的には、unixの黎明期から、簡易なバージョン管理ツールは幾つか存在していた。
*RCS

-ファイルベースのバージョン管理
-管理対象について、同じディレクトリの、似たファイル名で、バージョン管理ファイルを置く
-編集するファイルは、予め「編集予定である」というマークを付けなければならない。これはロックとして働く。
--同じファイルを他の作業者が別の修正を加えたい場合はどうするのか？
---というか無理。ロックしたまま退社すると最悪。知らないけど。

*CVS
RCSでの反省を踏まえて、RCSから技術的にあまり逸脱せずに、
複数人数での開発を可能にしたのがCVSであると言える。

-ファイルベースのバージョン管理
-バージョン管理ファイルは、一箇所のCVSサーバに、集中管理する
--リポジトリと呼ぶ
-特にファイルをロックしなくても、編集を登録できる

これらのお蔭で、CVSによる中規模以上の開発が可能になると、新たなる問題が浮き彫りになる。

-複数の人間が同じファイルに別系統の修正をした場合の対処
--CVSはファイルベースであるため、編集を先に登録してしまうと、次の人はまずその変更を取り出して、自分がする筈だった編集と、手動で併合しなければならない。    </description>
    <dc:date>2007-05-30T03:18:44+09:00</dc:date>
    <utime>1180462724</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hideologie/pages/4.html">
    <title>PHP/tinybutstrong</title>
    <link>https://w.atwiki.jp/hideologie/pages/4.html</link>
    <description>
      日本語の情報が少ないお蔭で、tinybutstrongでgoogleと、
このページが一番上に出てきてしまう。のでもう少し真剣に書いてみる。

*PHPでテンプレートエンジン
PHPは、HTMLタグの間に書くタイプのスクリプト言語で、そのお手軽さが売りの筈であったが、
中規模以上の開発になってくると、結局色々な点を鑑みて(何より読みにくい)、HTML部とプログラムは分離せざるを得なくなる。

*テンプレートエンジン一般論
PHPの、に限らず、筆者がテンプレートエンジンで最も重要視しているのは
-「ループの書きやすさ」、
-そして「CHECKBOX,RADIO,SELECTの書きやすさ」

である。

-「検索一覧」を出すには大抵TABLEタグでレイアウトする。
--&lt;TR&gt;タグの範囲でループすることになるだろう。
-「編集画面」で前のパラメタを引き継ぐには、INPUT(CHECKBOX,RADIO)タグのどれかにSELECTEDをつけなければならない。SELECTのOPTIONSに付けるのも地味に面倒である。

結論として、前述の様な点に困ってないのであれば、他のテンプレートエンジンを使った方が良いだろう。Smartyは日本語ドキュメントも豊富だし。

*簡単だが強力

TinyButStrong http://www.tinybutstrong.com/ を推したい次第である。
このテンプレートエンジンは、前述2点について、画期的とも思える解決方法を示している。

PHP変数$customer_idの値に応じて、該当するradioボタンのinputタグにcheckedを付ける場合を考えてみる。

 [var.customer_id;selected=id]
 [cust_radios;block=begin]
 &lt;input name=&quot;id&quot; value=&quot;[cust_radios.val]&quot; type=&quot;radio&quot;&gt;
 [cust_radios;block=end]

肝は、
-「radioのinputタグのココに、この状態の時にcheckedを挿入する」という記述を人間が指定する訳ではなく、
-「同じvalueのinputタグを探してcheckedを挿入しておいてね」という定義になっているところ

鈎括弧による記述は独特ながら、全体的な見通しは悪くないと思うのだが、どうだろうか。

そんなに長い記述ではないので、意味は想像が付くかと思う。

-まず、tinybutstrongの変数展開は、鈎括弧で囲む。
--各種の属性も、セミコロンで区切って、鈎括弧の中に並べる
-cust_radiosがradioボタンの選択肢で、
--block=begin〜block=endまでがその繰り返し範囲だ。
-選択肢の内容は、連想配列で与えるので、cust_radios.valとは、連想配列の「値」を使う、の意味だ。同じように cust_radios.key で連想配列のキー値を埋め込む。
-varで始まる変数は、tinybutstrongが自動(というより暗黙的に)展開する。
--customer_idなるグローバル変数の値を勝手に使う訳だが
---selected=idの指定があるので、同名のinputタグを探して、checkedを付けてくれる。


tinybutstrongは、「データをHTMLにマージする」という考え方で、
特定のメソッドを呼ぶ度に、内部で保持している(出力予定の)HTMLを
書換えてしまう。この点は、Smarty等のオーソドックスなテンプレートエンジンと発想がことなるところだ。

上の場合も、radioボタンの展開と、selected属性の付加は、別の手順で処理する。
まずは、radioボタンの展開

 $array = array( 〜 );
 $TBS = new clstinybutstrong

 $TBS-&gt;mergeblock(&quot;cust_radios&quot;, $array );

この時点で、$TBSが保持しているHTMLは、radioボタンの展開が終っていて、block=begin/block=endの記述も完全に置き換わっている。始めからその通りのHTMLが静的に書いてあったと同じことになる。

ちなみにこのお蔭で、mergeblockで展開した選択肢と、人間がHTMLに書き込んだ静的な選択肢とは混在して良い。これが地味に助かる時がままある。
例えば、selectの初期optionには「選択してください」と書いておきたいが、これをoptions選択肢展開のデータに入れるのは微妙。

肝心の$customer_idに応じてcheckedを挿入する処理が残っているが、
これはvarによる暗黙展開を使っているので、そのまま「出力」に進んでも良い。

 $TBS-&gt;show()

メソッド名は、見た通りオーソドックスなものだが、
tinybustrongでは内部でそのままexit()してしまう。
まあ、HTMLの出力は、一般的には最後の最後の筈なので、悪くはないが、
忘れた頃に面食らいそうなところではある。
----    </description>
    <dc:date>2007-05-28T09:25:56+09:00</dc:date>
    <utime>1180311956</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hideologie/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/hideologie/pages/1.html</link>
    <description>
      ＊＊@wikiへようこそ
-ウィキはみんなで気軽にホームページ編集できるツールです。
-このページは自由に編集することができます。
-メールで送られてきたパスワードを用いてログインすることで、各種変更（サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等）することができます


＊＊まずはこちらをご覧ください。
-[[@wikiの基本操作&gt;http://atwiki.jp/guide/category2.html]]
-[[用途別のオススメ機能紹介&gt;http://atwiki.jp/guide/category22.html]]
-[[@wikiの設定/管理&gt;http://atwiki.jp/guide/category6.html]]

＊＊おすすめ機能
-[[気になるニュースをチェック&gt;http://atwiki.jp/guide/17_174_ja.html]]
-[[関連するブログ一覧を表示&gt;http://atwiki.jp/guide/17_161_ja.html]]

＊＊その他にもいろいろな機能満載！！
-[[@wikiプラグイン&gt;http://atwiki.jp/guide/category17.html]]
-[[@wiki便利ツール&gt;http://atwiki.jp/guide/category32.html]]
-[[@wiki構文&gt;http://atwiki.jp/guide/category16.html]]

＊＊バグ・不具合を見つけたら？
お手数ですが、こちらからご連絡宜しくお願いいたします。
⇒http://atwiki.jp/guide/contact.html


＊＊分からないことは？
-[[@wiki ご利用ガイド&gt;http://atwiki.jp/guide/]]
-[[よくある質問&gt;http://atwiki.jp/guide/category1.html]]
-[[@wikiへお問い合わせ&gt;http://atwiki.jp/guide/contact.html]]
等をご活用ください


    </description>
    <dc:date>2007-02-28T03:45:23+09:00</dc:date>
    <utime>1172601923</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hideologie/pages/3.html">
    <title>メニュー2</title>
    <link>https://w.atwiki.jp/hideologie/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)
    </description>
    <dc:date>2007-02-28T03:45:23+09:00</dc:date>
    <utime>1172601923</utime>
  </item>
  </rdf:RDF>
